diff --git a/.gdlintrc b/.gdlintrc
index 5a8fe03908c..d0a139df2e1 100644
--- a/.gdlintrc
+++ b/.gdlintrc
@@ -1,5 +1,7 @@
disable:
- no-elif-return
- no-else-return
+ - max-returns
+ - private-method-call
max-file-lines: 2000
diff --git a/.github/workflows/dev-desktop-builds.yml b/.github/workflows/dev-desktop-builds.yml
index c033d86004c..0efb22bd790 100644
--- a/.github/workflows/dev-desktop-builds.yml
+++ b/.github/workflows/dev-desktop-builds.yml
@@ -10,15 +10,12 @@ on:
- "installer/*.pot"
- "installer/po/*"
-
concurrency:
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-devdesktop
cancel-in-progress: true
env:
- GODOT_VERSION: 3.5.2
- GODOT_VERSION_MAC: 3.5.2
- RASPBERRY_PI_BUILDS_VERSION: 1.15.0
+ GODOT_VERSION: 4.1.1
EXPORT_NAME: Pixelorama
jobs:
@@ -26,7 +23,7 @@ jobs:
name: Windows Export ๐
runs-on: ubuntu-latest
container:
- image: docker://barichello/godot-ci:3.5.2
+ image: docker://barichello/godot-ci:4.1.1
steps:
- name: Setup WINE and rcedit ๐ท
run: |
@@ -35,19 +32,19 @@ jobs:
wget https://github.com/electron/rcedit/releases/download/v1.1.1/rcedit-x64.exe
mkdir -v -p ~/.local/share/rcedit
mv rcedit-x64.exe ~/.local/share/rcedit
- godot -q
- echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-3.tres
- echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-3.tres
+ godot --headless --quit
+ echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-4.tres
+ echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres
- name: Checkout ๐๏ธ
uses: actions/checkout@v3
with:
submodules: true
- name: Setup ๐ป
run: |
- mkdir -v -p build/windows-64bit ~/.local/share/godot/templates
- mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable
+ mkdir -v -p build/windows-64bit ~/.local/share/godot/export_templates
+ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Windows Build ๐ง
- run: godot -v --export "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe
+ run: godot --headless -v --export-release "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe
- name: Copy pixelorama_data folder ๐
run: |
cp -R ./pixelorama_data ./build/windows-64bit
@@ -63,7 +60,7 @@ jobs:
name: Linux Export ๐ง
runs-on: ubuntu-latest
container:
- image: docker://barichello/godot-ci:3.5.2
+ image: docker://barichello/godot-ci:4.1.1
steps:
- name: Checkout ๐๏ธ
uses: actions/checkout@v3
@@ -71,42 +68,28 @@ jobs:
submodules: true
- name: Setup ๐ป
run: |
- mkdir -v -p build/linux-64bit build/linux-rpi4 ~/.local/share/godot/templates
- mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable
- - name: Download Unofficial Godot Raspberry Pi 4 Builds ๐
- run: |
- wget https://github.com/hiulit/Unofficial-Godot-Engine-Raspberry-Pi/releases/download/v${RASPBERRY_PI_BUILDS_VERSION}/godot_${GODOT_VERSION}-stable_rpi4.zip
- unzip -a godot_${GODOT_VERSION}-stable_rpi4.zip
+ mkdir -v -p build/linux-64bit ~/.local/share/godot/export_templates
+ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Linux Build ๐ง
run: |
- godot -v --export "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64
- godot -v --export "Raspberry Pi 4" ./build/linux-rpi4/$EXPORT_NAME.rpi4
+ godot --headless -v --export-release "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64
- name: Give execute permission โ๏ธ
run: |
chmod +x ./build/linux-64bit/$EXPORT_NAME.x86_64
- chmod +x ./build/linux-rpi4/$EXPORT_NAME.rpi4
- name: Copy pixelorama_data folder ๐
run: |
rm ./pixelorama_data/.gdignore
cp -R ./pixelorama_data ./build/linux-64bit
- cp -R ./pixelorama_data ./build/linux-rpi4
- name: Create tar.gz archive ๐๏ธ
run: |
cd build
tar zcvf linux-64bit.tar.gz linux-64bit
- tar zcvf linux-rpi4.tar.gz linux-rpi4
- name: Upload Artifact ๐
uses: actions/upload-artifact@v3
with:
name: Linux-64bit
path: ./build/linux-64bit.tar.gz
retention-days: 14
- - name: Upload Raspberry Pi 4 Artifact ๐
- uses: actions/upload-artifact@v3
- with:
- name: Linux-rpi4
- path: ./build/linux-rpi4.tar.gz
- retention-days: 14
export-mac:
name: Mac Export ๐
@@ -118,25 +101,25 @@ jobs:
submodules: true
- name: Setup environment ๐ง
run: |
- export GODOT_VERSION=${GODOT_VERSION_MAC}
+ export GODOT_VERSION=${GODOT_VERSION}
export EXPORT_NAME=Pixelorama
- name: Download and extract export templates ๐พ
run: |
- mkdir -v -p ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable
- curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION_MAC}/Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz
- unzip -a Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz
- mv ./templates/* ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable
+ mkdir -v -p "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable"
+ curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION}/Godot_v${GODOT_VERSION}-stable_export_templates.tpz
+ unzip -a Godot_v${GODOT_VERSION}-stable_export_templates.tpz
+ mv ./templates/* "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable"
- name: Download Godot headless binary ๐ค
run: |
- wget https://github.com/huskeee/godot-headless-mac/releases/download/${GODOT_VERSION_MAC}-stable/Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip
- unzip -a Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip
+ wget https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_macos.universal.zip
+ unzip -a Godot_v${GODOT_VERSION}-stable_macos.universal.zip
- name: Setup ๐ป
run: mkdir -v -p ./build/mac
- name: Mac Build ๐ง
run: |
- chown runner ./bin/Godot
- chmod +x ./bin/Godot
- ./bin/Godot -v --export "Mac OSX" ./build/mac/Pixelorama.zip
+ chown runner ./Godot.app/Contents/MacOS/Godot
+ chmod +x ./Godot.app/Contents/MacOS/Godot
+ ./Godot.app/Contents/MacOS/Godot --headless -v --export-release "macOS" ./build/mac/Pixelorama.zip
- name: Make application executable ๐ง
run: |
unzip -a ./build/mac/Pixelorama.zip -d ./build/mac
diff --git a/.github/workflows/dev-web.yml b/.github/workflows/dev-web.yml
index 5240803ebec..66d6ecd0488 100644
--- a/.github/workflows/dev-web.yml
+++ b/.github/workflows/dev-web.yml
@@ -9,7 +9,7 @@ concurrency:
cancel-in-progress: true
env:
- GODOT_VERSION: 3.5.2
+ GODOT_VERSION: 4.1.1
EXPORT_NAME: Pixelorama
jobs:
@@ -17,7 +17,7 @@ jobs:
name: Web Export ๐
runs-on: ubuntu-latest
container:
- image: docker://barichello/godot-ci:3.5.2
+ image: docker://barichello/godot-ci:4.1.1
steps:
- name: Checkout ๐๏ธ
uses: actions/checkout@v3
@@ -25,10 +25,10 @@ jobs:
submodules: true
- name: Setup ๐ป
run: |
- mkdir -v -p build/web ~/.local/share/godot/templates
- mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable
+ mkdir -v -p build/web ~/.local/share/godot/export_templates
+ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Web Build ๐ง
- run: godot -v --export "HTML5" ./build/web/index.html
+ run: godot --headless -v --export-release "Web" ./build/web/index.html
- name: Install rsync ๐
run: |
apt-get update && apt-get install -y rsync
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7fb2626d8ae..7966f77ae51 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -5,11 +5,9 @@ on:
branches: [ release ]
env:
- GODOT_VERSION: 3.5.2
- GODOT_VERSION_MAC: 3.5.2
- RASPBERRY_PI_BUILDS_VERSION: 1.15.0
+ GODOT_VERSION: 4.1.1
EXPORT_NAME: Pixelorama
- TAG: v0.11.2
+ TAG: v1.0
BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
jobs:
@@ -17,7 +15,7 @@ jobs:
name: Windows Export ๐
runs-on: ubuntu-latest
container:
- image: docker://barichello/godot-ci:3.5.2
+ image: docker://barichello/godot-ci:4.1.1
steps:
- name: Setup WINE, rcedit and NSIS ๐ท
run: |
@@ -26,21 +24,21 @@ jobs:
wget https://github.com/electron/rcedit/releases/download/v1.1.1/rcedit-x64.exe
mkdir -v -p ~/.local/share/rcedit
mv rcedit-x64.exe ~/.local/share/rcedit
- godot -q
- echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-3.tres
- echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-3.tres
+ godot --headless --quit
+ echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-4.tres
+ echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres
- name: Checkout ๐๏ธ
uses: actions/checkout@v3
with:
submodules: true
- name: Setup ๐ป
run: |
- mkdir -v -p build/windows-64bit build/windows-32bit ~/.local/share/godot/templates
- mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable
+ mkdir -v -p build/windows-64bit build/windows-32bit ~/.local/share/godot/export_templates
+ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Windows Build ๐ง
run: |
- godot -v --export "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe
- godot -v --export "Windows Desktop 32-bit" ./build/windows-32bit/$EXPORT_NAME.exe
+ godot --headless -v --export-release "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe
+ godot --headless -v --export-release "Windows Desktop 32-bit" ./build/windows-32bit/$EXPORT_NAME.exe
- name: Copy pixelorama_data folder ๐
run: |
rm ./pixelorama_data/.gdignore
@@ -76,7 +74,7 @@ jobs:
name: Linux Export ๐ง
runs-on: ubuntu-latest
container:
- image: docker://barichello/godot-ci:3.5.2
+ image: docker://barichello/godot-ci:4.1.1
steps:
- name: Checkout ๐๏ธ
uses: actions/checkout@v3
@@ -84,39 +82,30 @@ jobs:
submodules: true
- name: Setup ๐ป
run: |
- mkdir -v -p build/linux-64bit build/linux-32bit build/linux-rpi4 ~/.local/share/godot/templates
- mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable
- - name: Download Unofficial Godot Raspberry Pi 4 Builds ๐
- run: |
- wget https://github.com/hiulit/Unofficial-Godot-Engine-Raspberry-Pi/releases/download/v${RASPBERRY_PI_BUILDS_VERSION}/godot_${GODOT_VERSION}-stable_rpi4.zip
- unzip -a godot_${GODOT_VERSION}-stable_rpi4.zip
+ mkdir -v -p build/linux-64bit build/linux-32bit ~/.local/share/godot/export_templates
+ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Linux Build ๐ง
run: |
- godot -v --export "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64
- godot -v --export "Linux/X11 32-bit" ./build/linux-32bit/$EXPORT_NAME.x86
- godot -v --export "Raspberry Pi 4" ./build/linux-rpi4/$EXPORT_NAME.rpi4
+ godot --headless -v --export-release "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64
+ godot --headless -v --export-release "Linux/X11 32-bit" ./build/linux-32bit/$EXPORT_NAME.x86
- name: Give execute permission โ๏ธ
run: |
chmod +x ./build/linux-64bit/$EXPORT_NAME.x86_64
chmod +x ./build/linux-32bit/$EXPORT_NAME.x86
- chmod +x ./build/linux-rpi4/$EXPORT_NAME.rpi4
- name: Copy pixelorama_data folder ๐
run: |
rm ./pixelorama_data/.gdignore
cp -R ./pixelorama_data ./build/linux-64bit
cp -R ./pixelorama_data ./build/linux-32bit
- cp -R ./pixelorama_data ./build/linux-rpi4
- name: Create tar.gz archive ๐๏ธ
run: |
cd build
tar zcvf Pixelorama.Linux-64bit.tar.gz linux-64bit
tar zcvf Pixelorama.Linux-32bit.tar.gz linux-32bit
- tar zcvf Pixelorama.Linux-RPI4.tar.gz linux-rpi4
- name: Upload Release Assets to itch.io ๐ฎ
run: |
butler push ./build/Pixelorama.Linux-64bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-64 --userversion ${{env.TAG}}
butler push ./build/Pixelorama.Linux-32bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-32 --userversion ${{env.TAG}}
- butler push ./build/Pixelorama.Linux-RPI4.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-rpi4 --userversion ${{env.TAG}}
- name: Upload Release Asset ๐
uses: svenstaro/upload-release-action@v2
with:
@@ -136,25 +125,25 @@ jobs:
submodules: true
- name: Setup environment ๐ง
run: |
- export GODOT_VERSION=${GODOT_VERSION_MAC}
+ export GODOT_VERSION=${GODOT_VERSION}
export EXPORT_NAME=Pixelorama
- name: Download and extract export templates ๐พ
run: |
- mkdir -v -p ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable
- curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION_MAC}/Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz
- unzip -a Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz
- mv ./templates/* ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable
+ mkdir -v -p "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable"
+ curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION}/Godot_v${GODOT_VERSION}-stable_export_templates.tpz
+ unzip -a Godot_v${GODOT_VERSION}-stable_export_templates.tpz
+ mv ./templates/* "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable"
- name: Download Godot headless binary ๐ค
run: |
- wget https://github.com/huskeee/godot-headless-mac/releases/download/${GODOT_VERSION_MAC}-stable/Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip
- unzip -a Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip
+ wget https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_macos.universal.zip
+ unzip -a Godot_v${GODOT_VERSION}-stable_macos.universal.zip
- name: Setup ๐ป
run: mkdir -v -p ./build/mac
- name: Mac Build ๐ง
run: |
- chown runner ./bin/Godot
- chmod +x ./bin/Godot
- ./bin/Godot -v --export "Mac OSX" ./build/mac/Pixelorama.zip
+ chown runner ./Godot.app/Contents/MacOS/Godot
+ chmod +x ./Godot.app/Contents/MacOS/Godot
+ ./Godot.app/Contents/MacOS/Godot --headless -v --export-release "macOS" ./build/mac/Pixelorama.zip
- name: Make application executable ๐ง
run: |
unzip -a ./build/mac/Pixelorama.zip -d ./build/mac
@@ -189,7 +178,7 @@ jobs:
name: Web Export ๐
runs-on: ubuntu-latest
container:
- image: docker://barichello/godot-ci:3.5.2
+ image: docker://barichello/godot-ci:4.1.1
steps:
- name: Checkout ๐๏ธ
uses: actions/checkout@v3
@@ -200,7 +189,7 @@ jobs:
mkdir -v -p build/web ~/.local/share/godot/templates
mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable
- name: Web Build ๐ง
- run: godot -v --export "HTML5" ./build/web/index.html
+ run: godot --headless -v --export-release "Web" ./build/web/index.html
- name: Install rsync ๐
run: |
apt-get update && apt-get install -y rsync
diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml
index 2b0bde8da65..5869284faef 100644
--- a/.github/workflows/static-checks.yml
+++ b/.github/workflows/static-checks.yml
@@ -20,7 +20,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v3
- name: Install gdtoolkit
- run: pip3 install "gdtoolkit==3.*"
+ run: pip3 install "gdtoolkit==4.*"
- name: Formatting checks
run: gdformat --diff .
- name: Linting checks
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57775ca748f..69dfb5f213e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). All the dates are in YYYY-MM-DD format.
+## [v1.0] - Unreleased
+
+Built using Godot 4.1.1
+
+### Added
+- Added some missing shortcuts for buttons. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900)
+- The brush increment/decrement shortcuts can now be changed. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900)
+- 3D layers now support torus shapes. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900)
+- Image effect animation now supports the tweening transition method of spring. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900)
+
+### Changed
+- Every shader-based image effect is automatically working without the need to change renderers, and they all work now on the Web version. This comes at the cost of less compatibility, as the desktop version now requires OpenGL 3.3 minimum instead of 2.1, and the Web version requires WebGL 2 instead of WebGL 1. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900)
+
+### Fixed
+- Performance when drawing and doing operations such as bucket area fill should be better now. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900)
+- Dividing by zero in value sliders and spinboxes no longer crashes the program.
+
## [v0.11.2] - 2023-08-31
This update has been brought to you by the contributions of:
[@Lsbt1](https://github.com/Lsbt1), Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind))
diff --git a/README.md b/README.md
index d67038fc5b4..7c9d34b6f75 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,7 @@ You can find Online Documentation for Pixelorama here: https://orama-interactive
It's still work in progress so there are some pages missing. If you want to contribute, you can do so in [Pixelorama-Docs' GitHub Repository](https://github.com/Orama-Interactive/Pixelorama-Docs).
## Cloning Instructions
-Pixelorama uses Godot 3.5, so you will need to have it in order to run the project. Older versions may not work.
+Pixelorama uses Godot 4.1, so you will need to have it in order to run the project. Older versions will not work.
As of right now, most of the code is written using GDScript, so the mono version of Godot is not required, but Pixelorama should also work with it.
## Current features:
diff --git a/Translations/Translations.pot b/Translations/Translations.pot
index ec9d38b1fe9..e9040d48fcb 100644
--- a/Translations/Translations.pot
+++ b/Translations/Translations.pot
@@ -1655,27 +1655,21 @@ msgid "Current frame as spritesheet"
msgstr ""
msgid "Jump to the first frame\n"
-"(%s)"
msgstr ""
msgid "Go to the previous frame\n"
-"(%s)"
msgstr ""
msgid "Play the animation backwards (from end to beginning)\n"
-"(%s)"
msgstr ""
msgid "Play the animation forward (from beginning to end)\n"
-"(%s)"
msgstr ""
msgid "Go to the next frame\n"
-"(%s)"
msgstr ""
msgid "Jump to the last frame\n"
-"(%s)"
msgstr ""
msgid "Onion Skinning settings"
@@ -2614,6 +2608,10 @@ msgstr ""
msgid "Backing out at ends"
msgstr ""
+#. Found under certain image effects that support properties that can be animated. A type of interpolation.
+msgid "Spring towards the end"
+msgstr ""
+
msgid "Silhouette"
msgstr ""
diff --git a/addons/README.md b/addons/README.md
index 6643f79bcdf..f73373f3988 100644
--- a/addons/README.md
+++ b/addons/README.md
@@ -3,19 +3,19 @@
## aimgio
- Upstream: https://gitlab.com/20kdc/20kdc_godot_addons
-- Version: Presently git commit b6a1411758c856ad543f4f661ca4105aa7c0ab6d
-- License: [Unlicense](https://gitlab.com/20kdc/20kdc_godot_addons/-/blob/b6a1411758c856ad543f4f661ca4105aa7c0ab6d/addons/aimg_io/COPYING.txt)
+- Version: ba00188e9da1ae229181f106788fcb72ccdd85fa
+- License: [Unlicense](https://gitlab.com/20kdc/20kdc_godot_addons/-/blob/master/godot4/addons/aimg_io/COPYING.txt)
## Keychain
- Upstream: https://github.com/Orama-Interactive/Keychain
-- Version: Based on git commit 22539c2b9b9e781c0cd54f32d92c77b6f36837e0 with slight modifications in Keychain.gd and ShortcutEdit.tscn.
+- Version: 4a08d6b380929031b2c9202811ae0a65d850a5ac
- License: [MIT](https://github.com/Orama-Interactive/Keychain/blob/main/LICENSE)
## gdgifexporter
- Upstream: https://github.com/jegor377/godot-gdgifexporter
-- Version: custom
+- Version: c368952a97bbbbcfa491358a61043be7009536a6
- License: [MIT](https://github.com/jegor377/godot-gdgifexporter/blob/master/LICENSE)
Files extracted from source:
@@ -24,13 +24,13 @@ Files extracted from source:
## godot-dockable-container
- Upstream: https://github.com/gilzoide/godot-dockable-container
-- Version: Based on git commit e5df60ed1d53246e03dba36053ff009846ba5174 with a modification on dockable_container.gd (lines 187-191).
+- Version: 9a93231d7f449aad039b28ff05bc1ef40a9956ce
- License: [CC0-1.0](https://github.com/gilzoide/godot-dockable-container/blob/main/LICENSE)
## SmartSlicer
- Upstream: https://github.com/Variable-Interactive/SmartSlicer
-- Version: Based on git commit 2804e6109f9667022c66522ce88a99a56fd67ca8 with a modification on SmartSlicePreview.gd (lines 31-32). Only the contents of addons folder are used and the script SmartSlicePreview.gd is moved to res://src/UI/Dialogs/HelperScripts/ for better organization
+- Version: Based on git commit 5d65d2ff556fed878099c96546ceb307aa3bc030 with a modification on SmartSlicePreview.gd (lines 31-32). Only the contents of addons folder are used and the script SmartSlicePreview.gd is moved to res://src/UI/Dialogs/HelperScripts/ for better organization
- License: [MIT](https://github.com/Variable-Interactive/SmartSlicer/blob/main/LICENSE)
diff --git a/addons/SmartSlicer/Classes/RegionUnpacker.gd b/addons/SmartSlicer/Classes/RegionUnpacker.gd
index 11f01f74724..26254123647 100644
--- a/addons/SmartSlicer/Classes/RegionUnpacker.gd
+++ b/addons/SmartSlicer/Classes/RegionUnpacker.gd
@@ -1,19 +1,42 @@
class_name RegionUnpacker
-extends Reference
+extends RefCounted
# THIS CLASS TAKES INSPIRATION FROM PIXELORAMA'S FLOOD FILL
# AND HAS BEEN MODIFIED FOR OPTIMIZATION
var slice_thread := Thread.new()
-var _include_boundary_threshold: int # the size of rect below which merging accounts for boundaty
-var _merge_dist: int # after crossing threshold the smaller image will merge with larger image
-# if it is within the _merge_dist
+var _include_boundary_threshold: int ## ฮคhe size of rect below which merging accounts for boundary
+## After crossing threshold the smaller image will merge with larger image
+## if it is within the _merge_dist
+var _merge_dist: int
-# working array used as buffer for segments while flooding
-var _allegro_flood_segments: Array
-# results array per image while flooding
-var _allegro_image_segments: Array
+## Working array used as buffer for segments while flooding
+var _allegro_flood_segments: Array[Segment]
+## Results array per image while flooding
+var _allegro_image_segments: Array[Segment]
+
+
+class RectData:
+ var rects: Array[Rect2i]
+ var frame_size: Vector2i
+
+ func _init(_rects: Array[Rect2i], _frame_size: Vector2i):
+ rects = _rects
+ frame_size = _frame_size
+
+
+class Segment:
+ var flooding := false
+ var todo_above := false
+ var todo_below := false
+ var left_position := -5
+ var right_position := -5
+ var y := 0
+ var next := 0
+
+ func _init(_y: int) -> void:
+ y = _y
func _init(threshold: int, merge_dist: int) -> void:
@@ -21,63 +44,58 @@ func _init(threshold: int, merge_dist: int) -> void:
_merge_dist = merge_dist
-func get_used_rects(image: Image) -> Dictionary:
- if OS.get_name() == "HTML5":
+func get_used_rects(image: Image) -> RectData:
+ if ProjectSettings.get_setting("rendering/driver/threads/thread_model") != 2:
+ # Single-threaded mode
return get_rects(image)
- else:
- # If Thread model is set to "Multi-Threaded" in project settings>threads>thread model
- if slice_thread.is_active():
+ else: # Multi-threaded mode
+ if slice_thread.is_started():
slice_thread.wait_to_finish()
- var error = slice_thread.start(self, "get_rects", image)
+ var error := slice_thread.start(get_rects.bind(image))
if error == OK:
return slice_thread.wait_to_finish()
else:
return get_rects(image)
- # If Thread model is set to "Single-Safe" in project settings>threads>thread model then
- # comment the above code and uncomment below
- #return get_rects({"image": image})
-func get_rects(image: Image) -> Dictionary:
- # make a smaller image to make the loop shorter
- var used_rect = image.get_used_rect()
- if used_rect.size == Vector2.ZERO:
+func get_rects(image: Image) -> RectData:
+ # Make a smaller image to make the loop shorter
+ var used_rect := image.get_used_rect()
+ if used_rect.size == Vector2i.ZERO:
return clean_rects([])
- var test_image = image.get_rect(used_rect)
- # prepare a bitmap to keep track of previous places
+ var test_image := image.get_region(used_rect)
+ # Prepare a bitmap to keep track of previous places
var scanned_area := BitMap.new()
scanned_area.create(test_image.get_size())
- test_image.lock()
# Scan the image
- var rects = []
- var frame_size = Vector2.ZERO
+ var rects: Array[Rect2i] = []
+ var frame_size := Vector2i.ZERO
for y in test_image.get_size().y:
for x in test_image.get_size().x:
- var position = Vector2(x, y)
+ var position := Vector2i(x, y)
if test_image.get_pixelv(position).a > 0: # used portion of image detected
- if !scanned_area.get_bit(position):
+ if !scanned_area.get_bitv(position):
var rect := _estimate_rect(test_image, position)
scanned_area.set_bit_rect(rect, true)
rect.position += used_rect.position
rects.append(rect)
- test_image.unlock()
- var rects_info = clean_rects(rects)
- rects_info["rects"].sort_custom(self, "sort_rects")
+ var rects_info := clean_rects(rects)
+ rects_info.rects.sort_custom(sort_rects)
return rects_info
-func clean_rects(rects: Array) -> Dictionary:
- var frame_size = Vector2.ZERO
+func clean_rects(rects: Array[Rect2i]) -> RectData:
+ var frame_size := Vector2i.ZERO
for i in rects.size():
- var target: Rect2 = rects.pop_front()
- var test_rect = target
+ var target: Rect2i = rects.pop_front()
+ var test_rect := target
if (
target.size.x < _include_boundary_threshold
or target.size.y < _include_boundary_threshold
):
- test_rect.size += Vector2(_merge_dist, _merge_dist)
- test_rect.position -= Vector2(_merge_dist, _merge_dist) / 2
- var merged = false
+ test_rect.size += Vector2i(_merge_dist, _merge_dist)
+ test_rect.position -= Vector2i(_merge_dist, _merge_dist) / 2
+ var merged := false
for rect_i in rects.size():
if test_rect.intersects(rects[rect_i]):
rects[rect_i] = target.merge(rects[rect_i])
@@ -91,61 +109,51 @@ func clean_rects(rects: Array) -> Dictionary:
frame_size.x = target.size.x
if target.size.y > frame_size.y:
frame_size.y = target.size.y
- return {"rects": rects, "frame_size": frame_size}
+ return RectData.new(rects, frame_size)
-func sort_rects(rect_a: Rect2, rect_b: Rect2) -> bool:
+func sort_rects(rect_a: Rect2i, rect_b: Rect2i) -> bool:
# After many failed attempts, this version works for some reason (it's best not to disturb it)
if rect_a.end.y < rect_b.position.y:
return true
if rect_a.position.x < rect_b.position.x:
# if both lie in the same row
- var start = rect_a.position
- var size = Vector2(rect_b.end.x, rect_a.end.y)
- if Rect2(start, size).intersects(rect_b):
+ var start := rect_a.position
+ var size := Vector2i(rect_b.end.x, rect_a.end.y)
+ if Rect2i(start, size).intersects(rect_b):
return true
return false
-func _estimate_rect(image: Image, position: Vector2) -> Rect2:
+func _estimate_rect(image: Image, position: Vector2) -> Rect2i:
var cel_image := Image.new()
cel_image.copy_from(image)
- cel_image.lock()
- var small_rect: Rect2 = _flood_fill(position, cel_image)
- cel_image.unlock()
+ var small_rect := _flood_fill(position, cel_image)
return small_rect
-# Add a new segment to the array
-func _add_new_segment(y: int = 0) -> void:
- var segment = {}
- segment.flooding = false
- segment.todo_above = false
- segment.todo_below = false
- segment.left_position = -5 # anything less than -1 is ok
- segment.right_position = -5
- segment.y = y
- segment.next = 0
- _allegro_flood_segments.append(segment)
+## Add a new segment to the array
+func _add_new_segment(y := 0) -> void:
+ _allegro_flood_segments.append(Segment.new(y))
-# fill an horizontal segment around the specified position, and adds it to the
-# list of segments filled. Returns the first x coordinate after the part of the
-# line that has been filled.
-func _flood_line_around_point(position: Vector2, image: Image) -> int:
- # this method is called by `_flood_fill` after the required data structures
- # have been initialized
+## Fill an horizontal segment around the specified position, and adds it to the
+## list of segments filled. Returns the first x coordinate after the part of the
+## line that has been filled.
+## this method is called by `_flood_fill` after the required data structures
+## have been initialized
+func _flood_line_around_point(position: Vector2i, image: Image) -> int:
if not image.get_pixelv(position).a > 0:
- return int(position.x) + 1
- var west: Vector2 = position
- var east: Vector2 = position
+ return position.x + 1
+ var west := position
+ var east := position
while west.x >= 0 && image.get_pixelv(west).a > 0:
- west += Vector2.LEFT
+ west += Vector2i.LEFT
while east.x < image.get_width() && image.get_pixelv(east).a > 0:
- east += Vector2.RIGHT
+ east += Vector2i.RIGHT
# Make a note of the stuff we processed
- var c = int(position.y)
- var segment = _allegro_flood_segments[c]
+ var c := position.y
+ var segment := _allegro_flood_segments[c]
# we may have already processed some segments on this y coordinate
if segment.flooding:
while segment.next > 0:
@@ -154,7 +162,7 @@ func _flood_line_around_point(position: Vector2, image: Image) -> int:
# found last current segment on this line
c = _allegro_flood_segments.size()
segment.next = c
- _add_new_segment(int(position.y))
+ _add_new_segment(position.y)
segment = _allegro_flood_segments[c]
# set the values for the current segment
segment.flooding = true
@@ -177,28 +185,28 @@ func _flood_line_around_point(position: Vector2, image: Image) -> int:
_allegro_image_segments.append(segment)
# we know the point just east of the segment is not part of a segment that should be
# processed, else it would be part of this segment
- return int(east.x) + 1
+ return east.x + 1
func _check_flooded_segment(y: int, left: int, right: int, image: Image) -> bool:
- var ret = false
- var c: int = 0
+ var ret := false
+ var c := 0
while left <= right:
c = y
while true:
- var segment = _allegro_flood_segments[c]
+ var segment := _allegro_flood_segments[c]
if left >= segment.left_position and left <= segment.right_position:
left = segment.right_position + 2
break
c = segment.next
if c == 0: # couldn't find a valid segment, so we draw a new one
- left = _flood_line_around_point(Vector2(left, y), image)
+ left = _flood_line_around_point(Vector2i(left, y), image)
ret = true
break
return ret
-func _flood_fill(position: Vector2, image: Image) -> Rect2:
+func _flood_fill(position: Vector2i, image: Image) -> Rect2i:
# implements the floodfill routine by Shawn Hargreaves
# from https://www1.udel.edu/CIS/software/dist/allegro-4.2.1/src/flood.c
# init flood data structures
@@ -208,17 +216,15 @@ func _flood_fill(position: Vector2, image: Image) -> Rect2:
# now actually color the image: since we have already checked a few things for the points
# we'll process here, we're going to skip a bunch of safety checks to speed things up.
- var final_image = Image.new()
+ var final_image := Image.new()
final_image.copy_from(image)
- final_image.fill(Color.transparent)
- final_image.lock()
+ final_image.fill(Color.TRANSPARENT)
_select_segments(final_image)
- final_image.unlock()
return final_image.get_used_rect()
-func _compute_segments_for_image(position: Vector2, image: Image) -> void:
+func _compute_segments_for_image(position: Vector2i, image: Image) -> void:
# initially allocate at least 1 segment per line of image
for j in image.get_height():
_add_new_segment(j)
@@ -228,9 +234,9 @@ func _compute_segments_for_image(position: Vector2, image: Image) -> void:
var done := false
while not done:
done = true
- var max_index = _allegro_flood_segments.size()
+ var max_index := _allegro_flood_segments.size()
for c in max_index:
- var p = _allegro_flood_segments[c]
+ var p := _allegro_flood_segments[c]
if p.todo_below: # check below the segment?
p.todo_below = false
if _check_flooded_segment(p.y + 1, p.left_position, p.right_position, image):
@@ -244,8 +250,8 @@ func _compute_segments_for_image(position: Vector2, image: Image) -> void:
func _select_segments(map: Image) -> void:
# short circuit for flat colors
for c in _allegro_image_segments.size():
- var p = _allegro_image_segments[c]
- var rect = Rect2()
- rect.position = Vector2(p.left_position, p.y)
- rect.end = Vector2(p.right_position + 1, p.y + 1)
- map.fill_rect(rect, Color.white)
+ var p := _allegro_image_segments[c]
+ var rect := Rect2i()
+ rect.position = Vector2i(p.left_position, p.y)
+ rect.end = Vector2i(p.right_position + 1, p.y + 1)
+ map.fill_rect(rect, Color.WHITE)
diff --git a/addons/aimg_io/apng_exporter.gd b/addons/aimg_io/apng_exporter.gd
index 060ee3603e8..c38348820fe 100644
--- a/addons/aimg_io/apng_exporter.gd
+++ b/addons/aimg_io/apng_exporter.gd
@@ -13,7 +13,7 @@ func export_animation(
progress_report_obj: Object,
progress_report_method,
progress_report_args
-) -> PoolByteArray:
+) -> PackedByteArray:
var frame_count := len(frames)
var result := AImgIOAPNGStream.new()
# Magic number
@@ -65,7 +65,7 @@ func export_animation(
# setup chunk interior...
var ichk := result.start_chunk()
write_padded_lines(ichk, image)
- chunk.put_data(ichk.data_array.compress(File.COMPRESSION_DEFLATE))
+ chunk.put_data(ichk.data_array.compress(FileAccess.COMPRESSION_DEFLATE))
# done with chunk interior
if i == 0:
result.write_chunk("IDAT", chunk.data_array)
@@ -74,7 +74,7 @@ func export_animation(
# Done with this frame!
progress_report_obj.callv(progress_report_method, progress_report_args)
# Final chunk.
- result.write_chunk("IEND", PoolByteArray())
+ result.write_chunk("IEND", PackedByteArray())
return result.finish()
@@ -88,7 +88,7 @@ func write_delay(sp: StreamPeer, duration: float, fps_hint: float):
# Precision is increased so we catch more complex cases.
# But you should always get perfection for integers.
var den := min(32767, max(fps_hint, 1))
- var num := max(duration, 0) * den
+ var num: float = max(duration, 0) * den
# If the FPS hint brings us out of range before we start, try some obvious integers
var fallback := 10000
while num > 32767:
@@ -123,7 +123,7 @@ func write_padded_lines(sp: StreamPeer, img: Image):
var base := 0
while y < h:
var nl := base + (w * 4)
- var line := data.subarray(base, nl - 1)
+ var line := data.slice(base, nl)
sp.put_8(0)
sp.put_data(line)
y += 1
diff --git a/addons/aimg_io/apng_import_plugin.gd b/addons/aimg_io/apng_import_plugin.gd
index e58974a82d5..33a27702eac 100644
--- a/addons/aimg_io/apng_import_plugin.gd
+++ b/addons/aimg_io/apng_import_plugin.gd
@@ -1,80 +1,60 @@
-tool
+@tool
class_name AImgIOAPNGImportPlugin
extends EditorImportPlugin
-func get_importer_name() -> String:
+func _get_importer_name() -> String:
return "aimgio.apng_animatedtexture"
-func get_visible_name() -> String:
+func _get_visible_name() -> String:
return "APNG as AnimatedTexture"
-func get_save_extension() -> String:
+func _get_save_extension() -> String:
return "res"
-func get_resource_type() -> String:
+func _get_resource_type() -> String:
return "AnimatedTexture"
-func get_recognized_extensions() -> Array:
- return ["png"]
+func _get_recognized_extensions() -> PackedStringArray:
+ return PackedStringArray(["png"])
-func get_preset_count():
+func _get_preset_count():
return 1
-func get_preset_name(_i):
+func _get_preset_name(_i):
return "Default"
-func get_import_options(_i):
- # GDLint workaround - it really does not want this string to exist due to length.
- var hint = "Mipmaps,Repeat,Filter,Anisotropic Filter,Convert To Linear,Mirrored Repeat"
- return [
- {
- "name": "image_texture_storage",
- "default_value": 2,
- "property_hint": PROPERTY_HINT_ENUM_SUGGESTION,
- "hint_string": "Raw,Lossy,Lossless"
- },
- {"name": "image_texture_lossy_quality", "default_value": 0.7},
- {
- "name": "texture_flags",
- "default_value": 7,
- "property_hint": PROPERTY_HINT_FLAGS,
- "hint_string": hint
- },
- # We don't know if Godot will change things somehow.
- {"name": "texture_flags_add", "default_value": 0}
- ]
-
-
-func get_option_visibility(_option, _options):
+func _get_import_options(_path: String, _i: int) -> Array[Dictionary]:
+ return []
+
+
+func _get_import_order():
+ return 0
+
+
+func _get_option_visibility(_path: String, _option, _options):
return true
-func import(load_path: String, save_path: String, options, _platform_variants, _gen_files):
+func _import(load_path: String, save_path: String, _options, _platform_variants, _gen_files):
var res := AImgIOAPNGImporter.load_from_file(load_path)
if res[0] != null:
push_error("AImgIOPNGImporter: " + res[0])
return ERR_FILE_UNRECOGNIZED
var frames: Array = res[1]
var root: AnimatedTexture = AnimatedTexture.new()
- var flags: int = options["texture_flags"]
- flags |= options["texture_flags_add"]
- root.flags = flags
root.frames = len(frames)
- root.fps = 1
for i in range(len(frames)):
var f: AImgIOFrame = frames[i]
- root.set_frame_delay(i, f.duration - 1.0)
+ root.set_frame_duration(i, f.duration)
var tx := ImageTexture.new()
- tx.storage = options["image_texture_storage"]
- tx.lossy_quality = options["image_texture_lossy_quality"]
- tx.create_from_image(f.content, flags)
+ tx.create_from_image(f.content)
root.set_frame_texture(i, tx)
- return ResourceSaver.save(save_path + ".res", root)
+ return ResourceSaver.save(root, save_path + ".res")
diff --git a/addons/aimg_io/apng_importer.gd b/addons/aimg_io/apng_importer.gd
index 481603e7d36..96bf301e179 100644
--- a/addons/aimg_io/apng_importer.gd
+++ b/addons/aimg_io/apng_importer.gd
@@ -1,6 +1,6 @@
-tool
+@tool
class_name AImgIOAPNGImporter
-extends Reference
+extends RefCounted
# Will NOT import regular, unanimated PNGs - use Image.load_png_from_buffer
# This is because we don't want to import the default image as a frame
# Therefore it just uses the rule:
@@ -10,7 +10,7 @@ extends Reference
# Imports an APNG PoolByteArray into an animation as an Array of frames.
# Returns [error, frames] similar to some read functions.
# However, error is a string.
-static func load_from_buffer(buffer: PoolByteArray) -> Array:
+static func load_from_buffer(buffer: PackedByteArray) -> Array:
var stream := AImgIOAPNGStream.new(buffer)
var magic_str = stream.read_magic()
if magic_str != null:
@@ -35,14 +35,14 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array:
# So to convert an APNG frame to a PNG for reading, we need to stitch:
# IHDR (modified), PLTE (if present), tRNS (if present), IDAT (from fdAT),
# and IEND (generated).
- var ihdr := PoolByteArray()
- var plte := PoolByteArray()
- var trns := PoolByteArray()
+ var ihdr := PackedByteArray()
+ var plte := PackedByteArray()
+ var trns := PackedByteArray()
# stored full width/height for buffer
var width := 0
var height := 0
# parse chunks
- var frames := []
+ var frames: Array[BFrame] = []
while stream.read_chunk() == OK:
if stream.chunk_type == "IHDR":
ihdr = stream.chunk_data
@@ -78,17 +78,16 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array:
if len(frames) > 0:
var f: BFrame = frames[len(frames) - 1]
if len(stream.chunk_data) >= 4:
- var data := stream.chunk_data.subarray(4, len(stream.chunk_data) - 1)
+ var data := stream.chunk_data.slice(4, len(stream.chunk_data))
f.add_data(data)
# theoretically we *could* store the default frame somewhere, but *why*?
# just use Image functions if you want that
if len(frames) == 0:
return ["No frames", null]
# prepare initial operating buffer
- var operating := Image.new()
- operating.create(width, height, false, Image.FORMAT_RGBA8)
+ var operating := Image.create(width, height, false, Image.FORMAT_RGBA8)
operating.fill(Color(0, 0, 0, 0))
- var finished := []
+ var finished: Array[AImgIOFrame] = []
for v in frames:
var fv: BFrame = v
# Ok, so to avoid having to deal with filters and stuff,
@@ -106,9 +105,9 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array:
var blit_target := operating
var copy_blit_target := true
# rectangles and such
- var blit_src := Rect2(Vector2.ZERO, intermediary_img.get_size())
- var blit_pos := Vector2(fv.x, fv.y)
- var blit_tgt := Rect2(blit_pos, intermediary_img.get_size())
+ var blit_src := Rect2i(Vector2i.ZERO, intermediary_img.get_size())
+ var blit_pos := Vector2i(fv.x, fv.y)
+ var blit_tgt := Rect2i(blit_pos, intermediary_img.get_size())
# early dispose ops
if fv.dispose_op == 2:
# previous
@@ -118,10 +117,11 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array:
blit_target.copy_from(operating)
copy_blit_target = false
# actually blit
- if fv.blend_op == 0:
- blit_target.blit_rect(intermediary_img, blit_src, blit_pos)
- else:
- blit_target.blend_rect(intermediary_img, blit_src, blit_pos)
+ if blit_src.size != Vector2i.ZERO:
+ if fv.blend_op == 0:
+ blit_target.blit_rect(intermediary_img, blit_src, blit_pos)
+ else:
+ blit_target.blend_rect(intermediary_img, blit_src, blit_pos)
# insert as frame
var ffin := AImgIOFrame.new()
ffin.duration = fv.duration
@@ -143,10 +143,10 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array:
# Imports an APNG file into an animation as an array of frames.
# Returns null on error.
static func load_from_file(path: String) -> Array:
- var o := File.new()
- if o.open(path, File.READ) != OK:
+ var o := FileAccess.open(path, FileAccess.READ)
+ if o == null:
return [null, "Unable to open file: " + path]
- var l = o.get_len()
+ var l = o.get_length()
var data = o.get_buffer(l)
o.close()
return load_from_buffer(data)
@@ -154,7 +154,7 @@ static func load_from_file(path: String) -> Array:
# Intermediate frame structure
class BFrame:
- extends Reference
+ extends RefCounted
var dispose_op: int
var blend_op: int
var x: int
@@ -162,9 +162,9 @@ class BFrame:
var w: int
var h: int
var duration: float
- var data: PoolByteArray
+ var data: PackedByteArray
- func setup(fctl: PoolByteArray):
+ func setup(fctl: PackedByteArray):
if len(fctl) < 26:
return ""
var sp := StreamPeerBuffer.new()
@@ -191,8 +191,8 @@ class BFrame:
# This can be loaded by Godot directly.
# This basically skips most of the APNG decoding process.
func intermediary(
- ihdr: PoolByteArray, plte: PoolByteArray, trns: PoolByteArray
- ) -> PoolByteArray:
+ ihdr: PackedByteArray, plte: PackedByteArray, trns: PackedByteArray
+ ) -> PackedByteArray:
# Might be important to note this operates on a copy of ihdr (by-value).
var sp := StreamPeerBuffer.new()
sp.data_array = ihdr
@@ -207,8 +207,8 @@ class BFrame:
if len(trns) > 0:
intermed.write_chunk("tRNS", trns)
intermed.write_chunk("IDAT", data)
- intermed.write_chunk("IEND", PoolByteArray())
+ intermed.write_chunk("IEND", PackedByteArray())
return intermed.finish()
- func add_data(d: PoolByteArray):
+ func add_data(d: PackedByteArray):
data.append_array(d)
diff --git a/addons/aimg_io/apng_stream.gd b/addons/aimg_io/apng_stream.gd
index 8035be0fecf..a34dd1c13ca 100644
--- a/addons/aimg_io/apng_stream.gd
+++ b/addons/aimg_io/apng_stream.gd
@@ -1,6 +1,6 @@
-tool
+@tool
class_name AImgIOAPNGStream
-extends Reference
+extends RefCounted
# APNG IO context. To be clear, this is still effectively magic.
# Quite critical we preload this. Preloading creates static variables.
@@ -8,7 +8,7 @@ extends Reference
var crc32: AImgIOCRC32 = preload("apng_crc32.tres")
var chunk_type: String
-var chunk_data: PoolByteArray
+var chunk_data: PackedByteArray
# The reason this must be a StreamPeerBuffer is simple:
# 1. We need to support in-memory IO for HTML5 to really work
@@ -21,7 +21,7 @@ var chunk_data: PoolByteArray
var _target: StreamPeerBuffer
-func _init(t: PoolByteArray = PoolByteArray()):
+func _init(t: PackedByteArray = PackedByteArray()):
crc32.ensure_ready()
_target = StreamPeerBuffer.new()
_target.big_endian = true
@@ -80,9 +80,9 @@ func start_chunk() -> StreamPeerBuffer:
# Writes a PNG chunk.
-func write_chunk(type: String, data: PoolByteArray):
+func write_chunk(type: String, data: PackedByteArray):
_target.put_32(len(data))
- var at := type.to_ascii()
+ var at := type.to_ascii_buffer()
_target.put_data(at)
_target.put_data(data)
var crc := crc32.update(crc32.mask, at)
@@ -91,5 +91,5 @@ func write_chunk(type: String, data: PoolByteArray):
# Returns the data_array of the stream (to be used when you're done writing the file)
-func finish() -> PoolByteArray:
+func finish() -> PackedByteArray:
return _target.data_array
diff --git a/addons/aimg_io/base_exporter.gd b/addons/aimg_io/base_exporter.gd
index dca521802be..805a60bf756 100644
--- a/addons/aimg_io/base_exporter.gd
+++ b/addons/aimg_io/base_exporter.gd
@@ -1,5 +1,5 @@
class_name AImgIOBaseExporter
-extends Reference
+extends RefCounted
# Represents a method for exporting animations.
var mime_type: String
@@ -17,5 +17,5 @@ func export_animation(
_progress_report_obj: Object,
_progress_report_method,
_progress_report_args
-) -> PoolByteArray:
- return PoolByteArray()
+) -> PackedByteArray:
+ return PackedByteArray()
diff --git a/addons/aimg_io/crc32.gd b/addons/aimg_io/crc32.gd
index 5c9a684cb91..c2818e78aab 100644
--- a/addons/aimg_io/crc32.gd
+++ b/addons/aimg_io/crc32.gd
@@ -1,4 +1,4 @@
-tool
+@tool
class_name AImgIOCRC32
extends Resource
# CRC32 implementation that uses a Resource for better caching
@@ -6,10 +6,10 @@ extends Resource
const INIT = 0xFFFFFFFF
# The reversed polynomial.
-export var reversed_polynomial: int = 0xEDB88320
+@export var reversed_polynomial: int = 0xEDB88320
# The mask (and initialization value).
-export var mask: int = 0xFFFFFFFF
+@export var mask: int = 0xFFFFFFFF
var crc32_table = []
var _table_init_mutex: Mutex = Mutex.new()
@@ -38,7 +38,7 @@ func ensure_ready():
# Performs the update step of CRC32 over some bytes.
# Note that this is not the whole story.
# The CRC must be initialized to 0xFFFFFFFF, then updated, then bitwise-inverted.
-func update(crc: int, data: PoolByteArray) -> int:
+func update(crc: int, data: PackedByteArray) -> int:
var i := 0
var l := len(data)
while i < l:
diff --git a/addons/aimg_io/editor_plugin.gd b/addons/aimg_io/editor_plugin.gd
index 0892344d045..3935f2963cb 100644
--- a/addons/aimg_io/editor_plugin.gd
+++ b/addons/aimg_io/editor_plugin.gd
@@ -1,4 +1,4 @@
-tool
+@tool
extends EditorPlugin
var apng_importer
diff --git a/addons/aimg_io/frame.gd b/addons/aimg_io/frame.gd
index 2c7fdbf33d1..e06be1b6cbd 100644
--- a/addons/aimg_io/frame.gd
+++ b/addons/aimg_io/frame.gd
@@ -1,5 +1,6 @@
+@tool
class_name AImgIOFrame
-extends Reference
+extends RefCounted
# Represents a variable-timed frame of an animation.
# Typically stuffed into an array.
diff --git a/addons/dockable_container/dockable_container.gd b/addons/dockable_container/dockable_container.gd
index 143597767b9..26f7f3b75d4 100644
--- a/addons/dockable_container/dockable_container.gd
+++ b/addons/dockable_container/dockable_container.gd
@@ -1,42 +1,69 @@
-tool
+@tool
+class_name DockableContainer
extends Container
-const SplitHandle = preload("split_handle.gd")
-const DockablePanel = preload("dockable_panel.gd")
-const ReferenceControl = preload("dockable_panel_reference_control.gd")
-const DragNDropPanel = preload("drag_n_drop_panel.gd")
-const Layout = preload("layout.gd")
-
-# gdlint: ignore=max-line-length
-export(int, "Left", "Center", "Right") var tab_align = TabContainer.ALIGN_CENTER setget set_tab_align, get_tab_align
-export(bool) var tabs_visible := true setget set_tabs_visible, get_tabs_visible
-# gdlint: ignore=max-line-length
-export(bool) var use_hidden_tabs_for_min_size: bool setget set_use_hidden_tabs_for_min_size, get_use_hidden_tabs_for_min_size
-export(int) var rearrange_group = 0
-export(Resource) var layout = Layout.new() setget set_layout, get_layout
-# If `clone_layout_on_ready` is true, `layout` will be cloned on `_ready`.
-# This is useful for leaving layout Resources untouched in case you want to
-# restore layout to its default later.
-export(bool) var clone_layout_on_ready = true
-
-var _layout = Layout.new()
-var _panel_container = Container.new()
-var _split_container = Container.new()
-var _drag_n_drop_panel = DragNDropPanel.new()
+const SplitHandle := preload("split_handle.gd")
+const DockablePanel := preload("dockable_panel.gd")
+const DragNDropPanel := preload("drag_n_drop_panel.gd")
+
+@export var tab_alignment := TabBar.ALIGNMENT_CENTER:
+ get:
+ return _tab_align
+ set(value):
+ _tab_align = value
+ for i in range(1, _panel_container.get_child_count()):
+ var panel := _panel_container.get_child(i) as DockablePanel
+ panel.tab_alignment = value
+@export var use_hidden_tabs_for_min_size := false:
+ get:
+ return _use_hidden_tabs_for_min_size
+ set(value):
+ _use_hidden_tabs_for_min_size = value
+ for i in range(1, _panel_container.get_child_count()):
+ var panel := _panel_container.get_child(i) as DockablePanel
+ panel.use_hidden_tabs_for_min_size = value
+@export var tabs_visible := true:
+ get:
+ return _tabs_visible
+ set(value):
+ _tabs_visible = value
+ for i in range(1, _panel_container.get_child_count()):
+ var panel := _panel_container.get_child(i) as DockablePanel
+ panel.tabs_visible = value
+@export var rearrange_group := 0
+@export var layout := DockableLayout.new():
+ get:
+ return _layout
+ set(value):
+ set_layout(value)
+## If `clone_layout_on_ready` is true, `layout` will be cloned checked `_ready`.
+## This is useful for leaving layout Resources untouched in case you want to
+## restore layout to its default later.
+@export var clone_layout_on_ready := true
+
+var _layout := DockableLayout.new()
+var _panel_container := Container.new()
+var _split_container := Container.new()
+var _drag_n_drop_panel := DragNDropPanel.new()
var _drag_panel: DockablePanel
-var _tab_align = TabContainer.ALIGN_CENTER
-var _tabs_visible = true
-var _use_hidden_tabs_for_min_size = false
-var _current_panel_index = 0
-var _current_split_index = 0
-var _children_names = {}
-var _layout_dirty = false
+var _tab_align := TabBar.ALIGNMENT_CENTER
+var _tabs_visible := true
+var _use_hidden_tabs_for_min_size := false
+var _current_panel_index := 0
+var _current_split_index := 0
+var _children_names := {}
+var _layout_dirty := false
+
+
+func _init() -> void:
+ child_entered_tree.connect(_child_entered_tree)
+ child_exiting_tree.connect(_child_exiting_tree)
func _ready() -> void:
set_process_input(false)
_panel_container.name = "_panel_container"
- .add_child(_panel_container)
+ add_child(_panel_container)
move_child(_panel_container, 0)
_split_container.name = "_split_container"
_split_container.mouse_filter = MOUSE_FILTER_PASS
@@ -44,13 +71,12 @@ func _ready() -> void:
_drag_n_drop_panel.name = "_drag_n_drop_panel"
_drag_n_drop_panel.mouse_filter = MOUSE_FILTER_PASS
- _drag_n_drop_panel.set_drag_forwarding(self)
_drag_n_drop_panel.visible = false
- .add_child(_drag_n_drop_panel)
+ add_child(_drag_n_drop_panel)
if not _layout:
set_layout(null)
- elif clone_layout_on_ready and not Engine.editor_hint:
+ elif clone_layout_on_ready and not Engine.is_editor_hint():
set_layout(_layout.clone())
@@ -61,7 +87,7 @@ func _notification(what: int) -> void:
what == NOTIFICATION_DRAG_BEGIN
and _can_handle_drag_data(get_viewport().gui_get_drag_data())
):
- _drag_n_drop_panel.set_enabled(true, not _layout.root.empty())
+ _drag_n_drop_panel.set_enabled(true, not _layout.root.is_empty())
set_process_input(true)
elif what == NOTIFICATION_DRAG_END:
_drag_n_drop_panel.set_enabled(false)
@@ -71,10 +97,10 @@ func _notification(what: int) -> void:
func _input(event: InputEvent) -> void:
assert(get_viewport().gui_is_dragging(), "FIXME: should only be called when dragging")
if event is InputEventMouseMotion:
- var local_position = get_local_mouse_position()
- var panel
+ var local_position := get_local_mouse_position()
+ var panel: DockablePanel
for i in range(1, _panel_container.get_child_count()):
- var p = _panel_container.get_child(i)
+ var p := _panel_container.get_child(i) as DockablePanel
if p.get_rect().has_point(local_position):
panel = p
break
@@ -84,43 +110,37 @@ func _input(event: InputEvent) -> void:
fit_child_in_rect(_drag_n_drop_panel, panel.get_child_rect())
-func add_child(node: Node, legible_unique_name: bool = false) -> void:
- .add_child(node, legible_unique_name)
- _drag_n_drop_panel.raise()
+func _child_entered_tree(node: Node) -> void:
+ if node == _panel_container or node == _drag_n_drop_panel:
+ return
+ _drag_n_drop_panel.move_to_front()
_track_and_add_node(node)
-func add_child_below_node(node: Node, child_node: Node, legible_unique_name: bool = false) -> void:
- .add_child_below_node(node, child_node, legible_unique_name)
- _drag_n_drop_panel.raise()
- _track_and_add_node(child_node)
-
-
-func remove_child(node: Node) -> void:
- .remove_child(node)
+func _child_exiting_tree(node: Node) -> void:
+ if node == _panel_container or node == _drag_n_drop_panel:
+ return
_untrack_node(node)
-func can_drop_data_fw(_position: Vector2, data, from_control) -> bool:
- return from_control == _drag_n_drop_panel and _can_handle_drag_data(data)
-
+func _can_drop_data(_position: Vector2, data) -> bool:
+ return _can_handle_drag_data(data)
-func drop_data_fw(_position: Vector2, data, from_control) -> void:
- assert(from_control == _drag_n_drop_panel, "FIXME")
- var from_node: TabContainer = get_node(data.from_path)
+func _drop_data(_position: Vector2, data) -> void:
+ var from_node := get_node(data.from_path) as DockablePanel
if from_node == _drag_panel and _drag_panel.get_child_count() == 1:
return
- var moved_tab = from_node.get_tab_control(data.tabc_element)
- if moved_tab is ReferenceControl:
+ var moved_tab := from_node.get_tab_control(data.tabc_element)
+ if moved_tab is DockableReferenceControl:
moved_tab = moved_tab.reference_to
if not _is_managed_node(moved_tab):
moved_tab.get_parent().remove_child(moved_tab)
add_child(moved_tab)
if _drag_panel != null:
- var margin = _drag_n_drop_panel.get_hover_margin()
+ var margin := _drag_n_drop_panel.get_hover_margin()
_layout.split_leaf_with_node(_drag_panel.leaf, moved_tab, margin)
_layout_dirty = true
@@ -135,66 +155,47 @@ func set_control_as_current_tab(control: Control) -> void:
if is_control_hidden(control):
push_warning("Trying to focus a hidden control")
return
- var leaf = _layout.get_leaf_for_node(control)
+ var leaf := _layout.get_leaf_for_node(control)
if not leaf:
return
- var position_in_leaf = leaf.find_node(control)
+ var position_in_leaf := leaf.find_child(control)
if position_in_leaf < 0:
return
- var panel
+ var panel: DockablePanel
for i in range(1, _panel_container.get_child_count()):
- var p = _panel_container.get_child(i)
+ var p := _panel_container.get_child(i) as DockablePanel
if p.leaf == leaf:
panel = p
break
if not panel:
return
- panel.current_tab = clamp(position_in_leaf, 0, panel.get_tab_count() - 1)
+ panel.current_tab = clampi(position_in_leaf, 0, panel.get_tab_count() - 1)
-func set_layout(value: Layout) -> void:
+func set_layout(value: DockableLayout) -> void:
if value == null:
- value = Layout.new()
+ value = DockableLayout.new()
if value == _layout:
return
- if _layout and _layout.is_connected("changed", self, "queue_sort"):
- _layout.disconnect("changed", self, "queue_sort")
+ if _layout and _layout.changed.is_connected(queue_sort):
+ _layout.changed.disconnect(queue_sort)
_layout = value
- _layout.connect("changed", self, "queue_sort")
+ _layout.changed.connect(queue_sort)
_layout_dirty = true
queue_sort()
-func get_layout() -> Layout:
- return _layout
-
-
-func set_tab_align(value: int) -> void:
+func set_tab_alignment(value: TabBar.AlignmentMode) -> void:
_tab_align = value
for i in range(1, _panel_container.get_child_count()):
var panel = _panel_container.get_child(i)
- panel.tab_align = value
+ panel.tab_alignment = value
func get_tab_align() -> int:
return _tab_align
-func set_tabs_visible(value: bool) -> void:
- _tabs_visible = value
- for i in range(1, _panel_container.get_child_count()):
- var panel = _panel_container.get_child(i)
- if panel.get_tab_count() >= 2:
- panel.tabs_visible = true
- else:
- panel.tabs_visible = value
- queue_sort()
-
-
-func get_tabs_visible() -> bool:
- return _tabs_visible
-
-
func set_use_hidden_tabs_for_min_size(value: bool) -> void:
_use_hidden_tabs_for_min_size = value
for i in range(1, _panel_container.get_child_count()):
@@ -206,35 +207,35 @@ func get_use_hidden_tabs_for_min_size() -> bool:
return _use_hidden_tabs_for_min_size
-func set_control_hidden(child: Control, hidden: bool) -> void:
- _layout.set_node_hidden(child, hidden)
+func set_control_hidden(child: Control, is_hidden: bool) -> void:
+ _layout.set_node_hidden(child, is_hidden)
func is_control_hidden(child: Control) -> bool:
return _layout.is_node_hidden(child)
-func get_tabs() -> Array:
- var tabs = []
+func get_tabs() -> Array[Control]:
+ var tabs: Array[Control] = []
for i in get_child_count():
- var child = get_child(i)
+ var child := get_child(i)
if _is_managed_node(child):
tabs.append(child)
return tabs
func get_tab_count() -> int:
- var count = 0
+ var count := 0
for i in get_child_count():
- var child = get_child(i)
+ var child := get_child(i)
if _is_managed_node(child):
count += 1
return count
-func _can_handle_drag_data(data):
+func _can_handle_drag_data(data) -> bool:
if data is Dictionary and data.get("type") == "tabc_element":
- var tabc = get_node_or_null(data.get("from_path"))
+ var tabc := get_node_or_null(data.get("from_path"))
return (
tabc
and tabc.has_method("get_tabs_rearrange_group")
@@ -249,15 +250,15 @@ func _is_managed_node(node: Node) -> bool:
and node != _panel_container
and node != _drag_n_drop_panel
and node is Control
- and not node.is_set_as_toplevel()
+ and not node.top_level
)
func _update_layout_with_children() -> void:
- var names = PoolStringArray()
+ var names := PackedStringArray()
_children_names.clear()
for i in range(1, get_child_count() - 1):
- var c = get_child(i)
+ var c := get_child(i)
if _track_node(c):
names.append(c.name)
_layout.update_nodes(names)
@@ -269,10 +270,10 @@ func _track_node(node: Node) -> bool:
return false
_children_names[node] = node.name
_children_names[node.name] = node
- if not node.is_connected("renamed", self, "_on_child_renamed"):
- node.connect("renamed", self, "_on_child_renamed", [node])
- if not node.is_connected("tree_exiting", self, "_untrack_node"):
- node.connect("tree_exiting", self, "_untrack_node", [node])
+ if not node.renamed.is_connected(_on_child_renamed):
+ node.renamed.connect(_on_child_renamed.bind(node))
+ if not node.tree_exiting.is_connected(_untrack_node):
+ node.tree_exiting.connect(_untrack_node.bind(node))
return true
@@ -288,31 +289,31 @@ func _track_and_add_node(node: Node) -> void:
func _untrack_node(node: Node) -> void:
_children_names.erase(node)
_children_names.erase(node.name)
- if node.is_connected("renamed", self, "_on_child_renamed"):
- node.disconnect("renamed", self, "_on_child_renamed")
- if node.is_connected("tree_exiting", self, "_untrack_node"):
- node.disconnect("tree_exiting", self, "_untrack_node")
+ if node.renamed.is_connected(_on_child_renamed):
+ node.renamed.disconnect(_on_child_renamed)
+ if node.tree_exiting.is_connected(_untrack_node):
+ node.tree_exiting.disconnect(_untrack_node)
_layout_dirty = true
func _resort() -> void:
assert(_panel_container, "FIXME: resorting without _panel_container")
- if _panel_container.get_position_in_parent() != 0:
+ if _panel_container.get_index() != 0:
move_child(_panel_container, 0)
- if _drag_n_drop_panel.get_position_in_parent() < get_child_count() - 1:
- _drag_n_drop_panel.raise()
+ if _drag_n_drop_panel.get_index() < get_child_count() - 1:
+ _drag_n_drop_panel.move_to_front()
if _layout_dirty:
_update_layout_with_children()
- var rect = Rect2(Vector2.ZERO, rect_size)
+ var rect := Rect2(Vector2.ZERO, size)
fit_child_in_rect(_panel_container, rect)
_panel_container.fit_child_in_rect(_split_container, rect)
_current_panel_index = 1
_current_split_index = 0
- var children_list = []
+ var children_list := []
_calculate_panel_and_split_list(children_list, _layout.root)
_fit_panel_and_split_list_to_rect(children_list, rect)
@@ -320,17 +321,17 @@ func _resort() -> void:
_untrack_children_after(_split_container, _current_split_index)
-# Calculate DockablePanel and SplitHandle minimum sizes, skipping empty
-# branches.
-#
-# Returns a DockablePanel on non-empty leaves, a SplitHandle on non-empty
-# splits, `null` if the whole branch is empty and no space should be used.
-#
-# `result` will be filled with the non-empty nodes in this post-order tree
-# traversal.
-func _calculate_panel_and_split_list(result: Array, layout_node: Layout.LayoutNode):
- if layout_node is Layout.LayoutPanel:
- var nodes = []
+## Calculate DockablePanel and SplitHandle minimum sizes, skipping empty
+## branches.
+##
+## Returns a DockablePanel checked non-empty leaves, a SplitHandle checked non-empty
+## splits, `null` if the whole branch is empty and no space should be used.
+##
+## `result` will be filled with the non-empty nodes in this post-order tree
+## traversal.
+func _calculate_panel_and_split_list(result: Array, layout_node: DockableLayoutNode):
+ if layout_node is DockableLayoutPanel:
+ var nodes: Array[Control] = []
for n in layout_node.names:
var node: Control = _children_names.get(n)
if node:
@@ -343,21 +344,21 @@ func _calculate_panel_and_split_list(result: Array, layout_node: Layout.LayoutNo
node.visible = false
else:
nodes.append(node)
- if nodes.empty():
+ if nodes.is_empty():
return null
else:
- var panel = _get_panel(_current_panel_index)
+ var panel := _get_panel(_current_panel_index)
_current_panel_index += 1
panel.track_nodes(nodes, layout_node)
result.append(panel)
return panel
- elif layout_node is Layout.LayoutSplit:
+ elif layout_node is DockableLayoutSplit:
# by processing `second` before `first`, traversing `result` from back
# to front yields a nice pre-order tree traversal
var second_result = _calculate_panel_and_split_list(result, layout_node.second)
var first_result = _calculate_panel_and_split_list(result, layout_node.first)
if first_result and second_result:
- var split = _get_split(_current_split_index)
+ var split := _get_split(_current_split_index)
_current_split_index += 1
split.layout_split = layout_node
split.first_minimum_size = first_result.get_layout_minimum_size()
@@ -372,58 +373,58 @@ func _calculate_panel_and_split_list(result: Array, layout_node: Layout.LayoutNo
push_warning("FIXME: invalid Resource, should be branch or leaf, found %s" % layout_node)
-# Traverse list from back to front fitting controls where they belong.
-#
-# Be sure to call this with the result from `_calculate_split_minimum_sizes`.
+## Traverse list from back to front fitting controls where they belong.
+##
+## Be sure to call this with the result from `_calculate_split_minimum_sizes`.
func _fit_panel_and_split_list_to_rect(panel_and_split_list: Array, rect: Rect2) -> void:
var control = panel_and_split_list.pop_back()
if control is DockablePanel:
_panel_container.fit_child_in_rect(control, rect)
elif control is SplitHandle:
var split_rects = control.get_split_rects(rect)
- _split_container.fit_child_in_rect(control, split_rects.self)
- _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects.first)
- _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects.second)
+ _split_container.fit_child_in_rect(control, split_rects["self"])
+ _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects["first"])
+ _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects["second"])
+## Get the idx'th DockablePanel, reusing an instanced one if possible
func _get_panel(idx: int) -> DockablePanel:
- """Get the idx'th DockablePanel, reusing an instanced one if possible"""
assert(_panel_container, "FIXME: creating panel without _panel_container")
if idx < _panel_container.get_child_count():
return _panel_container.get_child(idx)
- var panel = DockablePanel.new()
- panel.tab_align = _tab_align
+ var panel := DockablePanel.new()
+ panel.tab_alignment = _tab_align
panel.tabs_visible = _tabs_visible
panel.use_hidden_tabs_for_min_size = _use_hidden_tabs_for_min_size
- panel.set_tabs_rearrange_group(max(0, rearrange_group))
+ panel.set_tabs_rearrange_group(maxi(0, rearrange_group))
_panel_container.add_child(panel)
- panel.connect("tab_layout_changed", self, "_on_panel_tab_layout_changed", [panel])
+ panel.tab_layout_changed.connect(_on_panel_tab_layout_changed.bind(panel))
return panel
+## Get the idx'th SplitHandle, reusing an instanced one if possible
func _get_split(idx: int) -> SplitHandle:
- """Get the idx'th SplitHandle, reusing an instanced one if possible"""
assert(_split_container, "FIXME: creating split without _split_container")
if idx < _split_container.get_child_count():
return _split_container.get_child(idx)
- var split = SplitHandle.new()
+ var split := SplitHandle.new()
_split_container.add_child(split)
return split
-static func _untrack_children_after(node, idx: int) -> void:
- """Helper for removing and freeing all remaining children from node"""
+## Helper for removing and freeing all remaining children from node
+func _untrack_children_after(node: Control, idx: int) -> void:
for i in range(idx, node.get_child_count()):
- var child = node.get_child(idx)
+ var child := node.get_child(idx)
node.remove_child(child)
child.queue_free()
+## Handler for `DockablePanel.tab_layout_changed`, update its DockableLayoutPanel
func _on_panel_tab_layout_changed(tab: int, panel: DockablePanel) -> void:
- """Handler for `DockablePanel.tab_layout_changed`, update its LayoutPanel"""
_layout_dirty = true
- var control = panel.get_tab_control(tab)
- if control is ReferenceControl:
+ var control := panel.get_tab_control(tab)
+ if control is DockableReferenceControl:
control = control.reference_to
if not _is_managed_node(control):
control.get_parent().remove_child(control)
@@ -432,10 +433,10 @@ func _on_panel_tab_layout_changed(tab: int, panel: DockablePanel) -> void:
queue_sort()
+## Handler for `Node.renamed` signal, updates tracked name for node
func _on_child_renamed(child: Node) -> void:
- """Handler for `Node.renamed` signal, updates tracked name for node"""
- var old_name = _children_names.get(child)
- if not old_name:
+ var old_name: String = _children_names.get(child)
+ if old_name == str(child.name):
return
_children_names.erase(old_name)
_children_names[child] = child.name
diff --git a/addons/dockable_container/dockable_panel.gd b/addons/dockable_container/dockable_panel.gd
index e166863583a..bc4044da08c 100644
--- a/addons/dockable_container/dockable_panel.gd
+++ b/addons/dockable_container/dockable_panel.gd
@@ -1,14 +1,15 @@
-tool
+@tool
extends TabContainer
signal tab_layout_changed(tab)
-const ReferenceControl = preload("dockable_panel_reference_control.gd")
-const Layout = preload("layout.gd")
+var leaf: DockableLayoutPanel:
+ get:
+ return get_leaf()
+ set(value):
+ set_leaf(value)
-var leaf: Layout.LayoutPanel setget set_leaf, get_leaf
-
-var _leaf: Layout.LayoutPanel
+var _leaf: DockableLayoutPanel
func _ready() -> void:
@@ -16,49 +17,51 @@ func _ready() -> void:
func _enter_tree() -> void:
- connect("tab_selected", self, "_on_tab_selected")
- connect("tab_changed", self, "_on_tab_changed")
+ active_tab_rearranged.connect(_on_tab_changed)
+ tab_selected.connect(_on_tab_selected)
+ tab_changed.connect(_on_tab_changed)
func _exit_tree() -> void:
- disconnect("tab_selected", self, "_on_tab_selected")
- disconnect("tab_changed", self, "_on_tab_changed")
+ active_tab_rearranged.disconnect(_on_tab_changed)
+ tab_selected.disconnect(_on_tab_selected)
+ tab_changed.disconnect(_on_tab_changed)
-func track_nodes(nodes: Array, new_leaf: Layout.LayoutPanel) -> void:
+func track_nodes(nodes: Array[Control], new_leaf: DockableLayoutPanel) -> void:
_leaf = null # avoid using previous leaf in tab_changed signals
- var min_size = min(nodes.size(), get_child_count())
+ var min_size := mini(nodes.size(), get_child_count())
# remove spare children
for i in range(min_size, get_child_count()):
- var child = get_child(min_size)
+ var child := get_child(min_size) as DockableReferenceControl
child.reference_to = null
remove_child(child)
child.queue_free()
# add missing children
for i in range(min_size, nodes.size()):
- var ref_control = ReferenceControl.new()
+ var ref_control := DockableReferenceControl.new()
add_child(ref_control)
assert(nodes.size() == get_child_count(), "FIXME")
# setup children
for i in nodes.size():
- var ref_control: ReferenceControl = get_child(i)
+ var ref_control := get_child(i) as DockableReferenceControl
ref_control.reference_to = nodes[i]
set_tab_title(i, nodes[i].name)
set_leaf(new_leaf)
func get_child_rect() -> Rect2:
- var control = get_current_tab_control()
- return Rect2(rect_position + control.rect_position, control.rect_size)
+ var control := get_current_tab_control()
+ return Rect2(position + control.position, control.size)
-func set_leaf(value: Layout.LayoutPanel) -> void:
+func set_leaf(value: DockableLayoutPanel) -> void:
if get_tab_count() > 0 and value:
- current_tab = clamp(value.current_tab, 0, get_tab_count() - 1)
+ current_tab = clampi(value.current_tab, 0, get_tab_count() - 1)
_leaf = value
-func get_leaf() -> Layout.LayoutPanel:
+func get_leaf() -> DockableLayoutPanel:
return _leaf
@@ -74,10 +77,10 @@ func _on_tab_selected(tab: int) -> void:
func _on_tab_changed(tab: int) -> void:
if not _leaf:
return
- var control = get_tab_control(tab)
+ var control := get_tab_control(tab)
if not control:
return
- var tab_name = control.name
- var name_index_in_leaf = _leaf.find_name(tab_name)
+ var tab_name := control.name
+ var name_index_in_leaf := _leaf.find_name(tab_name)
if name_index_in_leaf != tab: # NOTE: this handles added tabs (index == -1)
- emit_signal("tab_layout_changed", tab)
+ tab_layout_changed.emit(tab)
diff --git a/addons/dockable_container/dockable_panel_reference_control.gd b/addons/dockable_container/dockable_panel_reference_control.gd
index 1aacc5904aa..06dc11b92f4 100644
--- a/addons/dockable_container/dockable_panel_reference_control.gd
+++ b/addons/dockable_container/dockable_panel_reference_control.gd
@@ -1,20 +1,38 @@
-tool
+@tool
+class_name DockableReferenceControl
extends Container
-# Control that mimics its own visibility and rect into another Control.
-
-var reference_to: Control setget set_reference_to, get_reference_to
+## Control that mimics its own visibility and rect into another Control.
+
+var reference_to: Control:
+ get:
+ return _reference_to
+ set(control):
+ if _reference_to != control:
+ if is_instance_valid(_reference_to):
+ _reference_to.renamed.disconnect(_on_reference_to_renamed)
+ _reference_to.minimum_size_changed.disconnect(update_minimum_size)
+ _reference_to = control
+
+ minimum_size_changed.emit()
+ if not is_instance_valid(_reference_to):
+ return
+ _reference_to.renamed.connect(_on_reference_to_renamed)
+ _reference_to.minimum_size_changed.connect(update_minimum_size)
+ _reference_to.visible = visible
+ _reposition_reference()
var _reference_to: Control = null
func _ready() -> void:
mouse_filter = MOUSE_FILTER_IGNORE
+ set_notify_transform(true)
func _notification(what: int) -> void:
if what == NOTIFICATION_VISIBILITY_CHANGED and _reference_to:
_reference_to.visible = visible
- elif what == NOTIFICATION_SORT_CHILDREN and _reference_to:
+ elif what == NOTIFICATION_TRANSFORM_CHANGED and _reference_to:
_reposition_reference()
@@ -22,27 +40,9 @@ func _get_minimum_size() -> Vector2:
return _reference_to.get_combined_minimum_size() if _reference_to else Vector2.ZERO
-func set_reference_to(control: Control) -> void:
- if _reference_to != control:
- if _reference_to:
- _reference_to.disconnect("renamed", self, "_on_reference_to_renamed")
- _reference_to.disconnect("minimum_size_changed", self, "minimum_size_changed")
- _reference_to = control
- minimum_size_changed()
- if not _reference_to:
- return
- _reference_to.connect("renamed", self, "_on_reference_to_renamed")
- _reference_to.connect("minimum_size_changed", self, "minimum_size_changed")
- _reference_to.visible = visible
-
-
-func get_reference_to() -> Control:
- return _reference_to
-
-
func _reposition_reference() -> void:
- _reference_to.rect_global_position = rect_global_position
- _reference_to.rect_size = rect_size
+ _reference_to.global_position = global_position
+ _reference_to.size = size
func _on_reference_to_renamed() -> void:
diff --git a/addons/dockable_container/drag_n_drop_panel.gd b/addons/dockable_container/drag_n_drop_panel.gd
index 726a6e6a767..7e5d7714d6d 100644
--- a/addons/dockable_container/drag_n_drop_panel.gd
+++ b/addons/dockable_container/drag_n_drop_panel.gd
@@ -1,45 +1,48 @@
-tool
+@tool
extends Control
-const DRAW_NOTHING = -1
-const DRAW_CENTERED = -2
+enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER }
-var _draw_margin = DRAW_NOTHING
-var _should_split = false
+const DRAW_NOTHING := -1
+const DRAW_CENTERED := -2
+const MARGIN_NONE := -1
+
+var _draw_margin := DRAW_NOTHING
+var _should_split := false
func _notification(what: int) -> void:
if what == NOTIFICATION_MOUSE_EXIT:
_draw_margin = DRAW_NOTHING
- update()
+ queue_redraw()
elif what == NOTIFICATION_MOUSE_ENTER and not _should_split:
_draw_margin = DRAW_CENTERED
- update()
+ queue_redraw()
func _gui_input(event: InputEvent) -> void:
if _should_split and event is InputEventMouseMotion:
_draw_margin = _find_hover_margin(event.position)
- update()
+ queue_redraw()
func _draw() -> void:
- var rect
+ var rect: Rect2
if _draw_margin == DRAW_NOTHING:
return
elif _draw_margin == DRAW_CENTERED:
- rect = Rect2(Vector2.ZERO, rect_size)
+ rect = Rect2(Vector2.ZERO, size)
elif _draw_margin == MARGIN_LEFT:
- rect = Rect2(0, 0, rect_size.x * 0.5, rect_size.y)
+ rect = Rect2(0, 0, size.x * 0.5, size.y)
elif _draw_margin == MARGIN_TOP:
- rect = Rect2(0, 0, rect_size.x, rect_size.y * 0.5)
+ rect = Rect2(0, 0, size.x, size.y * 0.5)
elif _draw_margin == MARGIN_RIGHT:
- var half_width = rect_size.x * 0.5
- rect = Rect2(half_width, 0, half_width, rect_size.y)
+ var half_width = size.x * 0.5
+ rect = Rect2(half_width, 0, half_width, size.y)
elif _draw_margin == MARGIN_BOTTOM:
- var half_height = rect_size.y * 0.5
- rect = Rect2(0, half_height, rect_size.x, half_height)
- var stylebox = get_stylebox("panel", "TooltipPanel")
+ var half_height = size.y * 0.5
+ rect = Rect2(0, half_height, size.x, half_height)
+ var stylebox := get_theme_stylebox("panel", "TooltipPanel")
draw_style_box(stylebox, rect)
@@ -48,7 +51,7 @@ func set_enabled(enabled: bool, should_split: bool = true) -> void:
_should_split = should_split
if enabled:
_draw_margin = DRAW_NOTHING
- update()
+ queue_redraw()
func get_hover_margin() -> int:
@@ -56,23 +59,23 @@ func get_hover_margin() -> int:
func _find_hover_margin(point: Vector2) -> int:
- var half_size = rect_size * 0.5
+ var half_size := size * 0.5
- var left = point.distance_squared_to(Vector2(0, half_size.y))
- var lesser = left
- var lesser_margin = MARGIN_LEFT
+ var left := point.distance_squared_to(Vector2(0, half_size.y))
+ var lesser := left
+ var lesser_margin := MARGIN_LEFT
- var top = point.distance_squared_to(Vector2(half_size.x, 0))
+ var top := point.distance_squared_to(Vector2(half_size.x, 0))
if lesser > top:
lesser = top
lesser_margin = MARGIN_TOP
- var right = point.distance_squared_to(Vector2(rect_size.x, half_size.y))
+ var right := point.distance_squared_to(Vector2(size.x, half_size.y))
if lesser > right:
lesser = right
lesser_margin = MARGIN_RIGHT
- var bottom = point.distance_squared_to(Vector2(half_size.x, rect_size.y))
+ var bottom := point.distance_squared_to(Vector2(half_size.x, size.y))
if lesser > bottom:
#lesser = bottom # unused result
lesser_margin = MARGIN_BOTTOM
diff --git a/addons/dockable_container/icon.svg b/addons/dockable_container/icon.svg
new file mode 100644
index 00000000000..d87d598df10
--- /dev/null
+++ b/addons/dockable_container/icon.svg
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/addons/dockable_container/icon.svg.import b/addons/dockable_container/icon.svg.import
new file mode 100644
index 00000000000..595e57305be
--- /dev/null
+++ b/addons/dockable_container/icon.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dy25danh2am23"
+path="res://.godot/imported/icon.svg-35635e7bbda4487d4b2942da1d987df8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/dockable_container/icon.svg"
+dest_files=["res://.godot/imported/icon.svg-35635e7bbda4487d4b2942da1d987df8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd b/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd
index c9272a9c579..73d0372b4f6 100644
--- a/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd
+++ b/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd
@@ -1,17 +1,22 @@
extends EditorInspectorPlugin
-const DockableContainer = preload("../dockable_container.gd")
-const LayoutEditorProperty = preload("layout_editor_property.gd")
+const LayoutEditorProperty := preload("layout_editor_property.gd")
-func can_handle(object: Object) -> bool:
+func _can_handle(object: Object) -> bool:
return object is DockableContainer
-func parse_property(
- _object: Object, _type: int, path: String, _hint: int, _hint_text: String, _usage: int
+func _parse_property(
+ _object: Object,
+ _type: Variant.Type,
+ name: String,
+ _hint: PropertyHint,
+ _hint_text: String,
+ _usage: int,
+ _wide: bool
) -> bool:
- if path == "layout":
- var editor_property = LayoutEditorProperty.new()
+ if name == "layout":
+ var editor_property := LayoutEditorProperty.new()
add_property_editor("layout", editor_property)
return false
diff --git a/addons/dockable_container/inspector_plugin/layout_editor_property.gd b/addons/dockable_container/inspector_plugin/layout_editor_property.gd
index 9a5e96a6247..eb00134bad0 100644
--- a/addons/dockable_container/inspector_plugin/layout_editor_property.gd
+++ b/addons/dockable_container/inspector_plugin/layout_editor_property.gd
@@ -1,71 +1,71 @@
extends EditorProperty
-const DockableContainer = preload("../dockable_container.gd")
-const Layout = preload("../layout.gd")
-
-var _container = DockableContainer.new()
-var _hidden_menu_button = MenuButton.new()
+var _container := DockableContainer.new()
+var _hidden_menu_button := MenuButton.new()
var _hidden_menu_popup: PopupMenu
-var _hidden_menu_list: PoolStringArray
+var _hidden_menu_list: PackedStringArray
func _ready() -> void:
- rect_min_size = Vector2(128, 256)
+ custom_minimum_size = Vector2(128, 256)
_hidden_menu_button.text = "Visible nodes"
add_child(_hidden_menu_button)
_hidden_menu_popup = _hidden_menu_button.get_popup()
_hidden_menu_popup.hide_on_checkable_item_selection = false
- _hidden_menu_popup.connect("about_to_show", self, "_on_hidden_menu_popup_about_to_show")
- _hidden_menu_popup.connect("id_pressed", self, "_on_hidden_menu_popup_id_pressed")
+ _hidden_menu_popup.about_to_popup.connect(_on_hidden_menu_popup_about_to_show)
+ _hidden_menu_popup.id_pressed.connect(_on_hidden_menu_popup_id_pressed)
_container.clone_layout_on_ready = false
- _container.rect_min_size = rect_min_size
+ _container.custom_minimum_size = custom_minimum_size
- var original_container: DockableContainer = get_edited_object()
- var value = original_container.get(get_edited_property())
- _container.set(get_edited_property(), value)
+ var value := _get_layout().clone() # The layout gets reset when selecting it without clone
for n in value.get_names():
- var child = _create_child_control(n)
+ var child := _create_child_control(n)
_container.add_child(child)
+ _container.set(get_edited_property(), value)
add_child(_container)
set_bottom_editor(_container)
-func update_property() -> void:
- var value = _get_layout()
+func _exit_tree() -> void: # Not sure if this is needed, but just to be sure
+ queue_free()
+
+
+func _update_property() -> void:
+ var value := _get_layout()
_container.set(get_edited_property(), value)
-func _get_layout() -> Layout:
- var original_container: DockableContainer = get_edited_object()
+func _get_layout() -> DockableLayout:
+ var original_container := get_edited_object() as DockableContainer
return original_container.get(get_edited_property())
-func _create_child_control(named: String) -> Control:
- var new_control = Label.new()
+func _create_child_control(named: String) -> Label:
+ var new_control := Label.new()
new_control.name = named
- new_control.align = Label.ALIGN_CENTER
- new_control.valign = Label.VALIGN_CENTER
+ new_control.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
+ new_control.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
new_control.clip_text = true
new_control.text = named
return new_control
func _on_hidden_menu_popup_about_to_show() -> void:
- var layout = _get_layout()
+ var layout := _get_layout().clone()
_hidden_menu_popup.clear()
_hidden_menu_list = layout.get_names()
for i in _hidden_menu_list.size():
- var tab_name = _hidden_menu_list[i]
+ var tab_name := _hidden_menu_list[i]
_hidden_menu_popup.add_check_item(tab_name, i)
_hidden_menu_popup.set_item_checked(i, not layout.is_tab_hidden(tab_name))
func _on_hidden_menu_popup_id_pressed(id: int) -> void:
- var layout = _get_layout()
- var tab_name = _hidden_menu_list[id]
- var new_hidden = not layout.is_tab_hidden(tab_name)
- layout.set_tab_hidden(tab_name, new_hidden)
+ var layout := _get_layout().clone()
+ var tab_name := _hidden_menu_list[id]
+ var new_hidden := not layout.is_tab_hidden(tab_name)
+ _get_layout().set_tab_hidden(tab_name, new_hidden)
_hidden_menu_popup.set_item_checked(id, not new_hidden)
- emit_changed(get_edited_property(), layout)
+ emit_changed(get_edited_property(), _get_layout()) # This line may not be needed
diff --git a/addons/dockable_container/layout.gd b/addons/dockable_container/layout.gd
index 4400fb6f7b3..e2a803633f3 100644
--- a/addons/dockable_container/layout.gd
+++ b/addons/dockable_container/layout.gd
@@ -1,84 +1,80 @@
-tool
+@tool
+class_name DockableLayout
extends Resource
-# Layout Resource definition, holding the root LayoutNode and hidden tabs.
-#
-# LayoutSplit are binary trees with nested LayoutSplit subtrees and LayoutPanel
-# leaves. Both of them inherit from LayoutNode to help with type annotation and
-# define common funcionality.
-#
-# Hidden tabs are marked in the `hidden_tabs` Dictionary by name.
-
-const LayoutNode = preload("layout_node.gd")
-const LayoutPanel = preload("layout_panel.gd")
-const LayoutSplit = preload("layout_split.gd")
-
-export(Resource) var root = LayoutPanel.new() setget set_root, get_root
-export(Dictionary) var hidden_tabs = {} setget set_hidden_tabs, get_hidden_tabs
-
-var _changed_signal_queued = false
-var _first_leaf: LayoutPanel
+## DockableLayout Resource definition, holding the root DockableLayoutNode and hidden tabs.
+##
+## DockableLayoutSplit are binary trees with nested DockableLayoutSplit subtrees
+## and DockableLayoutPanel leaves. Both of them inherit from DockableLayoutNode to help with
+## type annotation and define common functionality.
+##
+## Hidden tabs are marked in the `hidden_tabs` Dictionary by name.
+
+enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER }
+
+@export var root: DockableLayoutNode = DockableLayoutPanel.new():
+ get:
+ return _root
+ set(value):
+ set_root(value)
+@export var hidden_tabs := {}:
+ get:
+ return _hidden_tabs
+ set(value):
+ if value != _hidden_tabs:
+ _hidden_tabs = value
+ changed.emit()
+
+var _changed_signal_queued := false
+var _first_leaf: DockableLayoutPanel
var _hidden_tabs: Dictionary
var _leaf_by_node_name: Dictionary
-var _root: LayoutNode = LayoutPanel.new()
+var _root: DockableLayoutNode = DockableLayoutPanel.new()
func _init() -> void:
resource_name = "Layout"
-func set_root(value: LayoutNode, should_emit_changed = true) -> void:
+func set_root(value: DockableLayoutNode, should_emit_changed := true) -> void:
if not value:
- value = LayoutPanel.new()
+ value = DockableLayoutPanel.new()
if _root == value:
return
- if _root and _root.is_connected("changed", self, "_on_root_changed"):
- _root.disconnect("changed", self, "_on_root_changed")
+ if _root and _root.changed.is_connected(_on_root_changed):
+ _root.changed.disconnect(_on_root_changed)
_root = value
_root.parent = null
- _root.connect("changed", self, "_on_root_changed")
+ _root.changed.connect(_on_root_changed)
if should_emit_changed:
_on_root_changed()
-func get_root() -> LayoutNode:
+func get_root() -> DockableLayoutNode:
return _root
-func set_hidden_tabs(value: Dictionary) -> void:
- if value != _hidden_tabs:
- _hidden_tabs = value
- emit_signal("changed")
+func clone() -> DockableLayout:
+ return duplicate(true)
-func get_hidden_tabs() -> Dictionary:
- return _hidden_tabs
-
-
-func clone():
- var new_layout = get_script().new()
- new_layout.root = _root.clone()
- new_layout._hidden_tabs = _hidden_tabs.duplicate()
- return new_layout
-
-
-func get_names() -> PoolStringArray:
+func get_names() -> PackedStringArray:
return _root.get_names()
-# Add missing nodes on first leaf and remove nodes outside indices from leaves.
-#
-# _leaf_by_node_name = {
-# (string keys) = respective Leaf that holds the node name,
-# }
-func update_nodes(names: PoolStringArray) -> void:
+## Add missing nodes on first leaf and remove nodes outside indices from leaves.
+##
+## _leaf_by_node_name = {
+## (string keys) = respective Leaf that holds the node name,
+## }
+func update_nodes(names: PackedStringArray) -> void:
_leaf_by_node_name.clear()
_first_leaf = null
- var empty_leaves = []
- _ensure_names_in_node(_root, names, empty_leaves)
+ var empty_leaves: Array[DockableLayoutPanel] = []
+ _ensure_names_in_node(_root, names, empty_leaves) # Changes _leaf_by_node_name and empty_leaves
for l in empty_leaves:
_remove_leaf(l)
if not _first_leaf:
- _first_leaf = LayoutPanel.new()
+ _first_leaf = DockableLayoutPanel.new()
set_root(_first_leaf)
for n in names:
if not _leaf_by_node_name.has(n):
@@ -87,12 +83,12 @@ func update_nodes(names: PoolStringArray) -> void:
_on_root_changed()
-func move_node_to_leaf(node: Node, leaf: LayoutPanel, relative_position: int) -> void:
- var node_name = node.name
- var previous_leaf = _leaf_by_node_name.get(node_name)
+func move_node_to_leaf(node: Node, leaf: DockableLayoutPanel, relative_position: int) -> void:
+ var node_name := node.name
+ var previous_leaf: DockableLayoutPanel = _leaf_by_node_name.get(node_name)
if previous_leaf:
previous_leaf.remove_node(node)
- if previous_leaf.empty():
+ if previous_leaf.is_empty():
_remove_leaf(previous_leaf)
leaf.insert_node(relative_position, node)
@@ -100,18 +96,18 @@ func move_node_to_leaf(node: Node, leaf: LayoutPanel, relative_position: int) ->
_on_root_changed()
-func get_leaf_for_node(node: Node) -> LayoutPanel:
+func get_leaf_for_node(node: Node) -> DockableLayoutPanel:
return _leaf_by_node_name.get(node.name)
-func split_leaf_with_node(leaf, node: Node, margin: int) -> void:
- var root_branch = leaf.parent
- var new_leaf = LayoutPanel.new()
- var new_branch = LayoutSplit.new()
+func split_leaf_with_node(leaf: DockableLayoutPanel, node: Node, margin: int) -> void:
+ var root_branch := leaf.parent
+ var new_leaf := DockableLayoutPanel.new()
+ var new_branch := DockableLayoutSplit.new()
if margin == MARGIN_LEFT or margin == MARGIN_RIGHT:
- new_branch.direction = LayoutSplit.Direction.HORIZONTAL
+ new_branch.direction = DockableLayoutSplit.Direction.HORIZONTAL
else:
- new_branch.direction = LayoutSplit.Direction.VERTICAL
+ new_branch.direction = DockableLayoutSplit.Direction.VERTICAL
if margin == MARGIN_LEFT or margin == MARGIN_TOP:
new_branch.first = new_leaf
new_branch.second = leaf
@@ -130,7 +126,7 @@ func split_leaf_with_node(leaf, node: Node, margin: int) -> void:
func add_node(node: Node) -> void:
- var node_name = node.name
+ var node_name := node.name
if _leaf_by_node_name.has(node_name):
return
_first_leaf.push_name(node_name)
@@ -139,19 +135,19 @@ func add_node(node: Node) -> void:
func remove_node(node: Node) -> void:
- var node_name = node.name
- var leaf: LayoutPanel = _leaf_by_node_name.get(node_name)
+ var node_name := node.name
+ var leaf: DockableLayoutPanel = _leaf_by_node_name.get(node_name)
if not leaf:
return
leaf.remove_node(node)
_leaf_by_node_name.erase(node_name)
- if leaf.empty():
+ if leaf.is_empty():
_remove_leaf(leaf)
_on_root_changed()
func rename_node(previous_name: String, new_name: String) -> void:
- var leaf = _leaf_by_node_name.get(previous_name)
+ var leaf: DockableLayoutPanel = _leaf_by_node_name.get(previous_name)
if not leaf:
return
leaf.rename_node(previous_name, new_name)
@@ -187,35 +183,35 @@ func _on_root_changed() -> void:
return
_changed_signal_queued = true
set_deferred("_changed_signal_queued", false)
- call_deferred("emit_signal", "changed")
+ emit_changed.call_deferred()
-func _ensure_names_in_node(node: LayoutNode, names: PoolStringArray, empty_leaves: Array) -> void:
- if node is LayoutPanel:
- node.update_nodes(names, _leaf_by_node_name)
- if node.empty():
+func _ensure_names_in_node(
+ node: DockableLayoutNode, names: PackedStringArray, empty_leaves: Array[DockableLayoutPanel]
+) -> void:
+ if node is DockableLayoutPanel:
+ node.update_nodes(names, _leaf_by_node_name) # This changes _leaf_by_node_name
+ if node.is_empty():
empty_leaves.append(node)
if not _first_leaf:
_first_leaf = node
- elif node is LayoutSplit:
+ elif node is DockableLayoutSplit:
_ensure_names_in_node(node.first, names, empty_leaves)
_ensure_names_in_node(node.second, names, empty_leaves)
else:
assert(false, "Invalid Resource, should be branch or leaf, found %s" % node)
-func _remove_leaf(leaf: LayoutPanel) -> void:
- assert(leaf.empty(), "FIXME: trying to remove a leaf with nodes")
+func _remove_leaf(leaf: DockableLayoutPanel) -> void:
+ assert(leaf.is_empty(), "FIXME: trying to remove_at a leaf with nodes")
if _root == leaf:
return
- var collapsed_branch = leaf.parent
- assert(collapsed_branch is LayoutSplit, "FIXME: leaf is not a child of branch")
- var kept_branch = (
- collapsed_branch.first
- if leaf == collapsed_branch.second
- else collapsed_branch.second
+ var collapsed_branch := leaf.parent
+ assert(collapsed_branch is DockableLayoutSplit, "FIXME: leaf is not a child of branch")
+ var kept_branch: DockableLayoutNode = (
+ collapsed_branch.first if leaf == collapsed_branch.second else collapsed_branch.second
)
- var root_branch = collapsed_branch.parent
+ var root_branch := collapsed_branch.parent #HERE
if collapsed_branch == _root:
set_root(kept_branch, true)
elif root_branch:
@@ -231,10 +227,10 @@ func _print_tree() -> void:
print("")
-func _print_tree_step(tree_or_leaf, level, idx) -> void:
- if tree_or_leaf is LayoutPanel:
+func _print_tree_step(tree_or_leaf: DockableLayoutNode, level: int, idx: int) -> void:
+ if tree_or_leaf is DockableLayoutPanel:
print(" |".repeat(level), "- (%d) = " % idx, tree_or_leaf.names)
- else:
+ elif tree_or_leaf is DockableLayoutSplit:
print(
" |".repeat(level),
"-+ (%d) = " % idx,
diff --git a/addons/dockable_container/layout_node.gd b/addons/dockable_container/layout_node.gd
index 116944e0617..b4d1a283ab3 100644
--- a/addons/dockable_container/layout_node.gd
+++ b/addons/dockable_container/layout_node.gd
@@ -1,30 +1,23 @@
-tool
+@tool
+class_name DockableLayoutNode
extends Resource
-# Base class for Layout tree nodes
+## Base class for DockableLayout tree nodes
-var parent = null
+var parent: DockableLayoutSplit = null
func emit_tree_changed() -> void:
- var node = self
+ var node := self
while node:
- node.emit_signal("changed")
+ node.emit_changed()
node = node.parent
-# Returns a deep copy of the layout.
-#
-# Use this instead of `Resource.duplicate(true)` to ensure objects have the
-# right script and parenting is correctly set for each node.
-func clone():
- assert(false, "FIXME: implement on child")
-
-
-# Returns whether there are any nodes
-func empty() -> bool:
+## Returns whether there are any nodes
+func is_empty() -> bool:
return true
-# Returns all tab names in this node
-func get_names() -> PoolStringArray:
- return PoolStringArray()
+## Returns all tab names in this node
+func get_names() -> PackedStringArray:
+ return PackedStringArray()
diff --git a/addons/dockable_container/layout_panel.gd b/addons/dockable_container/layout_panel.gd
index 69ac578058d..e15201b105e 100644
--- a/addons/dockable_container/layout_panel.gd
+++ b/addons/dockable_container/layout_panel.gd
@@ -1,11 +1,23 @@
-tool
-extends "layout_node.gd"
-# Layout leaf nodes, defining tabs
-
-export(PoolStringArray) var names: PoolStringArray setget set_names, get_names
-export(int) var current_tab: int setget set_current_tab, get_current_tab
-
-var _names := PoolStringArray()
+@tool
+class_name DockableLayoutPanel
+extends DockableLayoutNode
+## DockableLayout leaf nodes, defining tabs
+
+@export var names: PackedStringArray:
+ get:
+ return get_names()
+ set(value):
+ _names = value
+ emit_tree_changed()
+@export var current_tab: int:
+ get:
+ return int(clamp(_current_tab, 0, _names.size() - 1))
+ set(value):
+ if value != _current_tab:
+ _current_tab = value
+ emit_tree_changed()
+
+var _names := PackedStringArray()
var _current_tab := 0
@@ -13,29 +25,8 @@ func _init() -> void:
resource_name = "Tabs"
-func clone():
- var new_panel = get_script().new()
- new_panel._names = _names
- new_panel._current_tab = _current_tab
- return new_panel
-
-
-func set_current_tab(value: int) -> void:
- if value != _current_tab:
- _current_tab = value
- emit_tree_changed()
-
-
-func get_current_tab() -> int:
- return int(clamp(_current_tab, 0, _names.size() - 1))
-
-
-func set_names(value: PoolStringArray) -> void:
- _names = value
- emit_tree_changed()
-
-
-func get_names() -> PoolStringArray:
+## Returns all tab names in this node
+func get_names() -> PackedStringArray:
return _names
@@ -56,21 +47,21 @@ func find_name(node_name: String) -> int:
return -1
-func find_node(node: Node):
+func find_child(node: Node) -> int:
return find_name(node.name)
func remove_node(node: Node) -> void:
- var i = find_node(node)
+ var i := find_child(node)
if i >= 0:
- _names.remove(i)
+ _names.remove_at(i)
emit_tree_changed()
else:
push_warning("Remove failed, node '%s' was not found" % node)
func rename_node(previous_name: String, new_name: String) -> void:
- var i = find_name(previous_name)
+ var i := find_name(previous_name)
if i >= 0:
_names.set(i, new_name)
emit_tree_changed()
@@ -78,17 +69,18 @@ func rename_node(previous_name: String, new_name: String) -> void:
push_warning("Rename failed, name '%s' was not found" % previous_name)
-func empty() -> bool:
- return _names.empty()
+## Returns whether there are any nodes
+func is_empty() -> bool:
+ return _names.is_empty()
-func update_nodes(node_names: PoolStringArray, data: Dictionary):
- var i = 0
- var removed_any = false
+func update_nodes(node_names: PackedStringArray, data: Dictionary) -> void:
+ var i := 0
+ var removed_any := false
while i < _names.size():
- var current = _names[i]
+ var current := _names[i]
if not current in node_names or data.has(current):
- _names.remove(i)
+ _names.remove_at(i)
removed_any = true
else:
data[current] = self
diff --git a/addons/dockable_container/layout_split.gd b/addons/dockable_container/layout_split.gd
index ac75d6539ef..5e78138124a 100644
--- a/addons/dockable_container/layout_split.gd
+++ b/addons/dockable_container/layout_split.gd
@@ -1,76 +1,77 @@
-tool
-extends "layout_node.gd"
-# Layout binary tree nodes, defining subtrees and leaf panels
-
-enum Direction {
- HORIZONTAL,
- VERTICAL,
-}
-
-const LayoutPanel = preload("layout_panel.gd")
-
-export(Direction) var direction = Direction.HORIZONTAL setget set_direction, get_direction
-export(float, 0, 1) var percent = 0.5 setget set_percent, get_percent
-export(Resource) var first = LayoutPanel.new() setget set_first, get_first
-export(Resource) var second = LayoutPanel.new() setget set_second, get_second
-
-var _direction = Direction.HORIZONTAL
-var _percent = 0.5
-var _first
-var _second
+@tool
+class_name DockableLayoutSplit
+extends DockableLayoutNode
+## DockableLayout binary tree nodes, defining subtrees and leaf panels
+
+enum Direction { HORIZONTAL, VERTICAL }
+
+@export var direction := Direction.HORIZONTAL:
+ get:
+ return get_direction()
+ set(value):
+ set_direction(value)
+@export_range(0, 1) var percent := 0.5:
+ get = get_percent,
+ set = set_percent
+@export var first: DockableLayoutNode = DockableLayoutPanel.new():
+ get:
+ return get_first()
+ set(value):
+ set_first(value)
+@export var second: DockableLayoutNode = DockableLayoutPanel.new():
+ get:
+ return get_second()
+ set(value):
+ set_second(value)
+
+var _direction := Direction.HORIZONTAL
+var _percent := 0.5
+var _first: DockableLayoutNode
+var _second: DockableLayoutNode
func _init() -> void:
resource_name = "Split"
-func clone():
- var new_split = get_script().new()
- new_split._direction = _direction
- new_split._percent = _percent
- new_split.first = _first.clone()
- new_split.second = _second.clone()
- return new_split
-
-
-func set_first(value) -> void:
+func set_first(value: DockableLayoutNode) -> void:
if value == null:
- _first = LayoutPanel.new()
+ _first = DockableLayoutPanel.new()
else:
_first = value
_first.parent = self
emit_tree_changed()
-func get_first():
+func get_first() -> DockableLayoutNode:
return _first
-func set_second(value) -> void:
+func set_second(value: DockableLayoutNode) -> void:
if value == null:
- _second = LayoutPanel.new()
+ _second = DockableLayoutPanel.new()
else:
_second = value
_second.parent = self
emit_tree_changed()
-func get_second():
+func get_second() -> DockableLayoutNode:
return _second
-func set_direction(value: int) -> void:
+func set_direction(value: Direction) -> void:
if value != _direction:
_direction = value
emit_tree_changed()
-func get_direction() -> int:
+func get_direction() -> Direction:
return _direction
func set_percent(value: float) -> void:
- var clamped_value = clamp(value, 0, 1)
+ var clamped_value := clampf(value, 0, 1)
if not is_equal_approx(_percent, clamped_value):
_percent = clamped_value
emit_tree_changed()
@@ -80,14 +81,15 @@ func get_percent() -> float:
return _percent
-func get_names() -> PoolStringArray:
- var names = _first.get_names()
+func get_names() -> PackedStringArray:
+ var names := _first.get_names()
names.append_array(_second.get_names())
return names
-func empty() -> bool:
- return _first.empty() and _second.empty()
+## Returns whether there are any nodes
+func is_empty() -> bool:
+ return _first.is_empty() and _second.is_empty()
func is_horizontal() -> bool:
diff --git a/addons/dockable_container/plugin.cfg b/addons/dockable_container/plugin.cfg
index c2558f9a39e..b35959190f1 100644
--- a/addons/dockable_container/plugin.cfg
+++ b/addons/dockable_container/plugin.cfg
@@ -9,5 +9,5 @@ Layout information is stored in Resource objects, so they can be saved/loaded fr
This plugin also offers a replica of the Container layout to be edited directly in the inspector."
author="gilzoide"
-version="1.1.1"
+version="1.1.2"
script="plugin.gd"
diff --git a/addons/dockable_container/plugin.gd b/addons/dockable_container/plugin.gd
index 9e3f49b71da..e93e0101af5 100644
--- a/addons/dockable_container/plugin.gd
+++ b/addons/dockable_container/plugin.gd
@@ -1,15 +1,15 @@
-tool
+@tool
extends EditorPlugin
-const DockableContainer = preload("dockable_container.gd")
-const LayoutInspectorPlugin = preload("inspector_plugin/editor_inspector_plugin.gd")
+const LayoutInspectorPlugin := preload("inspector_plugin/editor_inspector_plugin.gd")
+const Icon := preload("icon.svg")
-var _layout_inspector_plugin
+var _layout_inspector_plugin: LayoutInspectorPlugin
func _enter_tree() -> void:
_layout_inspector_plugin = LayoutInspectorPlugin.new()
- add_custom_type("DockableContainer", "Container", DockableContainer, null)
+ add_custom_type("DockableContainer", "Container", DockableContainer, Icon)
add_inspector_plugin(_layout_inspector_plugin)
diff --git a/addons/dockable_container/samples/TestScene.gd b/addons/dockable_container/samples/TestScene.gd
index 057274046d6..f94ac972d7c 100644
--- a/addons/dockable_container/samples/TestScene.gd
+++ b/addons/dockable_container/samples/TestScene.gd
@@ -1,10 +1,10 @@
extends VBoxContainer
-const SAVED_LAYOUT_PATH = "user://layout.tres"
+const SAVED_LAYOUT_PATH := "user://layout.tres"
-onready var _container = $DockableContainers/DockableContainer
-onready var _clone_control = $HBoxContainer/ControlPrefab
-onready var _checkbox_container = $HBoxContainer
+@onready var _container := $DockableContainers/DockableContainer as DockableContainer
+@onready var _clone_control := $HBoxContainer/ControlPrefab as ColorRect
+@onready var _checkbox_container := $HBoxContainer as HBoxContainer
func _ready() -> void:
@@ -12,33 +12,33 @@ func _ready() -> void:
$HBoxContainer/SaveLayoutButton.visible = false
$HBoxContainer/LoadLayoutButton.visible = false
- var tabs = _container.get_tabs()
+ var tabs := _container.get_tabs()
for i in tabs.size():
- var checkbox = CheckBox.new()
+ var checkbox := CheckBox.new()
checkbox.text = str(i)
- checkbox.pressed = not _container.is_control_hidden(tabs[i])
- checkbox.connect("toggled", self, "_on_CheckButton_toggled", [tabs[i]])
+ checkbox.button_pressed = not _container.is_control_hidden(tabs[i])
+ checkbox.toggled.connect(_on_CheckButton_toggled.bind(tabs[i]))
_checkbox_container.add_child(checkbox)
func _on_add_pressed() -> void:
- var control = _clone_control.duplicate()
- control.get_node("Buttons/Rename").connect(
- "pressed", self, "_on_control_rename_button_pressed", [control]
+ var control := _clone_control.duplicate()
+ control.get_node("Buttons/Rename").pressed.connect(
+ _on_control_rename_button_pressed.bind(control)
)
- control.get_node("Buttons/Remove").connect(
- "pressed", self, "_on_control_remove_button_pressed", [control]
+ control.get_node("Buttons/Remove").pressed.connect(
+ _on_control_remove_button_pressed.bind(control)
)
control.color = Color(randf(), randf(), randf())
control.name = "Control0"
_container.add_child(control, true)
- yield(_container, "sort_children")
+ await _container.sort_children
_container.set_control_as_current_tab(control)
func _on_save_pressed() -> void:
- if ResourceSaver.save(SAVED_LAYOUT_PATH, _container.get_layout()) != OK:
+ if ResourceSaver.save(_container.layout, SAVED_LAYOUT_PATH) != OK:
print("ERROR")
@@ -51,11 +51,11 @@ func _on_load_pressed() -> void:
func _on_control_rename_button_pressed(control: Control) -> void:
- control.name += " =D"
+ control.name = StringName(str(control.name) + " =D")
func _on_control_remove_button_pressed(control: Control) -> void:
- _container.remove_child(control)
+ control.get_parent().remove_child(control)
control.queue_free()
diff --git a/addons/dockable_container/samples/TestScene.tscn b/addons/dockable_container/samples/TestScene.tscn
index 855aba0c381..80ca9cc6a0e 100644
--- a/addons/dockable_container/samples/TestScene.tscn
+++ b/addons/dockable_container/samples/TestScene.tscn
@@ -1,235 +1,176 @@
-[gd_scene load_steps=16 format=2]
+[gd_scene load_steps=16 format=3 uid="uid://drlvhuchtk6if"]
-[ext_resource path="res://addons/dockable_container/dockable_container.gd" type="Script" id=1]
-[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=2]
-[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=3]
-[ext_resource path="res://addons/dockable_container/samples/TestScene.gd" type="Script" id=4]
-[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=5]
+[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="1"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="2"]
+[ext_resource type="Script" path="res://addons/dockable_container/samples/TestScene.gd" id="4"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="4_yhgfb"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="5"]
-[sub_resource type="Resource" id=5]
+[sub_resource type="Resource" id="Resource_8aoc2"]
resource_name = "Tabs"
-script = ExtResource( 5 )
-names = PoolStringArray( "Control0" )
+script = ExtResource("5")
+names = PackedStringArray("Control0")
current_tab = 0
-[sub_resource type="Resource" id=1]
+[sub_resource type="Resource" id="Resource_6kjom"]
resource_name = "Tabs"
-script = ExtResource( 5 )
-names = PoolStringArray( "Control1", "Control2" )
+script = ExtResource("5")
+names = PackedStringArray("Control1", "Control2")
current_tab = 0
-[sub_resource type="Resource" id=6]
+[sub_resource type="Resource" id="Resource_hl8y1"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("4_yhgfb")
direction = 1
percent = 0.5
-first = SubResource( 5 )
-second = SubResource( 1 )
+first = SubResource("Resource_8aoc2")
+second = SubResource("Resource_6kjom")
-[sub_resource type="Resource" id=2]
+[sub_resource type="Resource" id="Resource_ybwqe"]
resource_name = "Layout"
-script = ExtResource( 2 )
-root = SubResource( 6 )
-hidden_tabs = {
-}
+script = ExtResource("2")
+root = SubResource("Resource_hl8y1")
+hidden_tabs = {}
-[sub_resource type="Resource" id=3]
+[sub_resource type="Resource" id="Resource_ntwfj"]
resource_name = "Tabs"
-script = ExtResource( 5 )
-names = PoolStringArray( "Control3" )
+script = ExtResource("5")
+names = PackedStringArray("Control3")
current_tab = 0
-[sub_resource type="Resource" id=7]
+[sub_resource type="Resource" id="Resource_dmyvf"]
resource_name = "Tabs"
-script = ExtResource( 5 )
-names = PoolStringArray( "Control4" )
+script = ExtResource("5")
+names = PackedStringArray("Control4")
current_tab = 0
-[sub_resource type="Resource" id=8]
+[sub_resource type="Resource" id="Resource_vag66"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("4_yhgfb")
direction = 1
-percent = 0.28125
-first = SubResource( 3 )
-second = SubResource( 7 )
+percent = 0.281
+first = SubResource("Resource_ntwfj")
+second = SubResource("Resource_dmyvf")
-[sub_resource type="Resource" id=9]
+[sub_resource type="Resource" id="Resource_4q660"]
resource_name = "Tabs"
-script = ExtResource( 5 )
-names = PoolStringArray( "Control5" )
+script = ExtResource("5")
+names = PackedStringArray("Control5")
current_tab = 0
-[sub_resource type="Resource" id=10]
+[sub_resource type="Resource" id="Resource_jhibs"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("4_yhgfb")
direction = 0
percent = 0.5
-first = SubResource( 8 )
-second = SubResource( 9 )
+first = SubResource("Resource_vag66")
+second = SubResource("Resource_4q660")
-[sub_resource type="Resource" id=4]
+[sub_resource type="Resource" id="Resource_xhxpg"]
resource_name = "Layout"
-script = ExtResource( 2 )
-root = SubResource( 10 )
-hidden_tabs = {
-}
+script = ExtResource("2")
+root = SubResource("Resource_jhibs")
+hidden_tabs = {}
[node name="SampleScene" type="VBoxContainer"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-script = ExtResource( 4 )
+script = ExtResource("4")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
-margin_right = 1024.0
-margin_bottom = 20.0
-custom_constants/separation = 16
+layout_mode = 2
alignment = 1
[node name="AddControlButton" type="Button" parent="HBoxContainer"]
-margin_left = 345.0
-margin_right = 472.0
-margin_bottom = 20.0
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
text = "(+) ADD CONTROL"
[node name="SaveLayoutButton" type="Button" parent="HBoxContainer"]
-margin_left = 488.0
-margin_right = 575.0
-margin_bottom = 20.0
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
text = "Save Layout"
[node name="LoadLayoutButton" type="Button" parent="HBoxContainer"]
-margin_left = 591.0
-margin_right = 679.0
-margin_bottom = 20.0
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
text = "Load Layout"
[node name="ControlPrefab" type="ColorRect" parent="HBoxContainer"]
visible = false
-margin_left = 677.0
-margin_right = 697.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 20 )
-color = Color( 0.129412, 0.121569, 0.121569, 1 )
+layout_mode = 2
+color = Color(0.129412, 0.121569, 0.121569, 1)
[node name="Buttons" type="VBoxContainer" parent="HBoxContainer/ControlPrefab"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -65.5
-margin_top = -22.0
-margin_right = 65.5
-margin_bottom = 22.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -65.5
+offset_top = -22.0
+offset_right = 65.5
+offset_bottom = 22.0
[node name="Rename" type="Button" parent="HBoxContainer/ControlPrefab/Buttons"]
-margin_right = 131.0
-margin_bottom = 20.0
+layout_mode = 2
text = "Rename"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="Remove" type="Button" parent="HBoxContainer/ControlPrefab/Buttons"]
-margin_top = 24.0
-margin_right = 131.0
-margin_bottom = 44.0
+layout_mode = 2
text = "REMOVE"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="DockableContainers" type="HBoxContainer" parent="."]
-margin_top = 24.0
-margin_right = 1024.0
-margin_bottom = 600.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="DockableContainer" type="Container" parent="DockableContainers"]
-margin_right = 483.0
-margin_bottom = 576.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-layout = SubResource( 2 )
+script = ExtResource("1")
+layout = SubResource("Resource_ybwqe")
[node name="Control0" type="ColorRect" parent="DockableContainers/DockableContainer"]
-margin_left = 4.0
-margin_top = 32.0
-margin_right = 479.0
-margin_bottom = 278.0
-rect_min_size = Vector2( 64, 64 )
+layout_mode = 2
[node name="Control1" type="ColorRect" parent="DockableContainers/DockableContainer"]
-margin_left = 4.0
-margin_top = 326.0
-margin_right = 479.0
-margin_bottom = 572.0
-rect_min_size = Vector2( 128, 128 )
-color = Color( 0.141176, 0.0745098, 0.603922, 1 )
+layout_mode = 2
+color = Color(0.141176, 0.0745098, 0.603922, 1)
[node name="Control2" type="ColorRect" parent="DockableContainers/DockableContainer"]
visible = false
-margin_top = 294.0
-margin_right = 64.0
-margin_bottom = 358.0
-rect_min_size = Vector2( 64, 64 )
-color = Color( 0.533333, 0.380392, 0.380392, 1 )
+layout_mode = 2
+color = Color(0.533333, 0.380392, 0.380392, 1)
[node name="Separator" type="ColorRect" parent="DockableContainers"]
-margin_left = 487.0
-margin_right = 537.0
-margin_bottom = 576.0
-rect_min_size = Vector2( 50, 0 )
-color = Color( 0, 0, 0, 1 )
+custom_minimum_size = Vector2(50, 0)
+layout_mode = 2
+color = Color(0, 0, 0, 1)
[node name="DockableContainer2" type="Container" parent="DockableContainers"]
-margin_left = 541.0
-margin_right = 1024.0
-margin_bottom = 576.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-layout = SubResource( 4 )
+script = ExtResource("1")
+layout = SubResource("Resource_xhxpg")
[node name="Control3" type="ColorRect" parent="DockableContainers/DockableContainer2"]
-margin_left = 4.0
-margin_top = 32.0
-margin_right = 231.5
-margin_bottom = 152.0
-rect_min_size = Vector2( 64, 64 )
-color = Color( 0, 1, 0.905882, 1 )
+layout_mode = 2
+color = Color(0, 1, 0.905882, 1)
[node name="Control4" type="ColorRect" parent="DockableContainers/DockableContainer2"]
-margin_left = 4.0
-margin_top = 200.0
-margin_right = 231.5
-margin_bottom = 572.0
-rect_min_size = Vector2( 128, 128 )
-color = Color( 0, 0.698039, 0.0588235, 1 )
+layout_mode = 2
+color = Color(0, 0.698039, 0.0588235, 1)
[node name="Control5" type="ColorRect" parent="DockableContainers/DockableContainer2"]
-margin_left = 251.5
-margin_top = 32.0
-margin_right = 479.0
-margin_bottom = 572.0
-rect_min_size = Vector2( 64, 64 )
-color = Color( 1, 0.937255, 0, 1 )
+layout_mode = 2
+color = Color(1, 0.937255, 0, 1)
[connection signal="pressed" from="HBoxContainer/AddControlButton" to="." method="_on_add_pressed"]
[connection signal="pressed" from="HBoxContainer/SaveLayoutButton" to="." method="_on_save_pressed"]
diff --git a/addons/dockable_container/split_handle.gd b/addons/dockable_container/split_handle.gd
index 54b0aee534d..baf4b1fb5f2 100644
--- a/addons/dockable_container/split_handle.gd
+++ b/addons/dockable_container/split_handle.gd
@@ -1,53 +1,49 @@
-tool
+@tool
extends Control
-const Layout = preload("layout.gd")
-
-const SPLIT_THEME_CLASS = [
- "HSplitContainer", # SPLIT_THEME_CLASS[LayoutSplit.Direction.HORIZONTAL]
- "VSplitContainer", # SPLIT_THEME_CLASS[LayoutSplit.Direction.VERTICAL]
+const SPLIT_THEME_CLASS: PackedStringArray = [
+ "HSplitContainer", # SPLIT_THEME_CLASS[DockableLayoutSplit.Direction.HORIZONTAL]
+ "VSplitContainer", # SPLIT_THEME_CLASS[DockableLayoutSplit.Direction.VERTICAL]
]
-const SPLIT_MOUSE_CURSOR_SHAPE = [
- Control.CURSOR_HSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[LayoutSplit.Direction.HORIZONTAL]
- Control.CURSOR_VSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[LayoutSplit.Direction.VERTICAL]
+const SPLIT_MOUSE_CURSOR_SHAPE: Array[Control.CursorShape] = [
+ Control.CURSOR_HSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[DockableLayoutSplit.Direction.HORIZONTAL]
+ Control.CURSOR_VSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[DockableLayoutSplit.Direction.VERTICAL]
]
-var layout_split: Layout.LayoutSplit
+var layout_split: DockableLayoutSplit
var first_minimum_size: Vector2
var second_minimum_size: Vector2
-var _parent_rect
-var _mouse_hovering = false
-var _dragging = false
+var _parent_rect: Rect2
+var _mouse_hovering := false
+var _dragging := false
func _draw() -> void:
- var theme_class = SPLIT_THEME_CLASS[layout_split.direction]
- var icon = get_icon("grabber", theme_class)
- var autohide = bool(get_constant("autohide", theme_class))
+ var theme_class := SPLIT_THEME_CLASS[layout_split.direction]
+ var icon := get_theme_icon("grabber", theme_class)
+ var autohide := bool(get_theme_constant("autohide", theme_class))
if not icon or (autohide and not _mouse_hovering):
return
- draw_texture(icon, (rect_size - icon.get_size()) * 0.5)
+ draw_texture(icon, (size - icon.get_size()) * 0.5)
func _gui_input(event: InputEvent) -> void:
- if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
+ if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
_dragging = event.is_pressed()
- if event.doubleclick:
+ if event.double_click:
layout_split.percent = 0.5
elif _dragging and event is InputEventMouseMotion:
- var mouse_in_parent = get_parent_control().get_local_mouse_position()
+ var mouse_in_parent := get_parent_control().get_local_mouse_position()
if layout_split.is_horizontal():
layout_split.percent = (
- (mouse_in_parent.x - _parent_rect.position.x)
- / _parent_rect.size.x
+ (mouse_in_parent.x - _parent_rect.position.x) / _parent_rect.size.x
)
else:
layout_split.percent = (
- (mouse_in_parent.y - _parent_rect.position.y)
- / _parent_rect.size.y
+ (mouse_in_parent.y - _parent_rect.position.y) / _parent_rect.size.y
)
@@ -55,13 +51,13 @@ func _notification(what: int) -> void:
if what == NOTIFICATION_MOUSE_ENTER:
_mouse_hovering = true
set_split_cursor(true)
- if bool(get_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])):
- update()
+ if bool(get_theme_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])):
+ queue_redraw()
elif what == NOTIFICATION_MOUSE_EXIT:
_mouse_hovering = false
set_split_cursor(false)
- if bool(get_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])):
- update()
+ if bool(get_theme_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])):
+ queue_redraw()
elif what == NOTIFICATION_FOCUS_EXIT:
_dragging = false
@@ -69,15 +65,15 @@ func _notification(what: int) -> void:
func get_layout_minimum_size() -> Vector2:
if not layout_split:
return Vector2.ZERO
- var separation = get_constant("separation", SPLIT_THEME_CLASS[layout_split.direction])
+ var separation := get_theme_constant("separation", SPLIT_THEME_CLASS[layout_split.direction])
if layout_split.is_horizontal():
return Vector2(
first_minimum_size.x + separation + second_minimum_size.x,
- max(first_minimum_size.y, second_minimum_size.y)
+ maxf(first_minimum_size.y, second_minimum_size.y)
)
else:
return Vector2(
- max(first_minimum_size.x, second_minimum_size.x),
+ maxf(first_minimum_size.x, second_minimum_size.x),
first_minimum_size.y + separation + second_minimum_size.y
)
@@ -91,41 +87,34 @@ func set_split_cursor(value: bool) -> void:
func get_split_rects(rect: Rect2) -> Dictionary:
_parent_rect = rect
- var separation = get_constant("separation", SPLIT_THEME_CLASS[layout_split.direction])
- var origin = rect.position
- var size = rect.size
- var percent = layout_split.percent
+ var separation := get_theme_constant("separation", SPLIT_THEME_CLASS[layout_split.direction])
+ var origin := rect.position
+ var percent := layout_split.percent
if layout_split.is_horizontal():
- var first_width = max((size.x - separation) * percent, first_minimum_size.x)
- var split_offset = clamp(
- size.x * percent - separation * 0.5,
+ var split_offset := clampf(
+ rect.size.x * percent - separation * 0.5,
first_minimum_size.x,
- size.x - second_minimum_size.x - separation
+ rect.size.x - second_minimum_size.x - separation
)
- var second_width = size.x - split_offset - separation
+ var second_width := rect.size.x - split_offset - separation
return {
- "first": Rect2(origin.x, origin.y, split_offset, size.y),
- "self": Rect2(origin.x + split_offset, origin.y, separation, size.y),
- "second": Rect2(origin.x + split_offset + separation, origin.y, second_width, size.y),
+ "first": Rect2(origin.x, origin.y, split_offset, rect.size.y),
+ "self": Rect2(origin.x + split_offset, origin.y, separation, rect.size.y),
+ "second":
+ Rect2(origin.x + split_offset + separation, origin.y, second_width, rect.size.y),
}
else:
- var first_height = max((size.y - separation) * percent, first_minimum_size.y)
- var split_offset = clamp(
- size.y * percent - separation * 0.5,
+ var split_offset := clampf(
+ rect.size.y * percent - separation * 0.5,
first_minimum_size.y,
- size.y - second_minimum_size.y - separation
+ rect.size.y - second_minimum_size.y - separation
)
- var second_height = size.y - split_offset - separation
+ var second_height := rect.size.y - split_offset - separation
return {
- "first": Rect2(origin.x, origin.y, size.x, split_offset),
- "self": Rect2(origin.x, origin.y + split_offset, size.x, separation),
- "second": Rect2(origin.x, origin.y + split_offset + separation, size.x, second_height),
+ "first": Rect2(origin.x, origin.y, rect.size.x, split_offset),
+ "self": Rect2(origin.x, origin.y + split_offset, rect.size.x, separation),
+ "second":
+ Rect2(origin.x, origin.y + split_offset + separation, rect.size.x, second_height),
}
-
-
-static func get_separation_with_control(control: Control) -> Vector2:
- var hseparation = control.get_constant("separation", "HSplitContainer")
- var vseparation = control.get_constant("separation", "VSplitContainer")
- return Vector2(hseparation, vseparation)
diff --git a/addons/gdgifexporter/converter.gd b/addons/gdgifexporter/converter.gd
index 846d93cdd3d..d294297fa77 100644
--- a/addons/gdgifexporter/converter.gd
+++ b/addons/gdgifexporter/converter.gd
@@ -1,59 +1,53 @@
-extends Reference
+extends RefCounted
var _shader: Shader
-func get_indexed_datas(image: Image, colors: Array) -> PoolByteArray:
- _shader = preload("./lookup_color.shader")
+func get_indexed_datas(image: Image, colors: Array) -> PackedByteArray:
+ _shader = preload("./lookup_color.gdshader")
return _convert(image, colors)
-func get_similar_indexed_datas(image: Image, colors: Array) -> PoolByteArray:
- _shader = preload("./lookup_similar.shader")
+func get_similar_indexed_datas(image: Image, colors: Array) -> PackedByteArray:
+ _shader = preload("./lookup_similar.gdshader")
return _convert(image, colors)
-func _convert(image: Image, colors: Array) -> PoolByteArray:
- var vp = VisualServer.viewport_create()
- var canvas = VisualServer.canvas_create()
- VisualServer.viewport_attach_canvas(vp, canvas)
- VisualServer.viewport_set_size(vp, image.get_width(), image.get_height())
- VisualServer.viewport_set_disable_3d(vp, true)
- VisualServer.viewport_set_usage(vp, VisualServer.VIEWPORT_USAGE_2D)
- VisualServer.viewport_set_hdr(vp, true)
- VisualServer.viewport_set_active(vp, true)
-
- var ci_rid = VisualServer.canvas_item_create()
- VisualServer.viewport_set_canvas_transform(vp, canvas, Transform())
- VisualServer.canvas_item_set_parent(ci_rid, canvas)
- var texture = ImageTexture.new()
- texture.create_from_image(image)
- VisualServer.canvas_item_add_texture_rect(
- ci_rid, Rect2(Vector2(0, 0), image.get_size()), texture
+func _convert(image: Image, colors: Array) -> PackedByteArray:
+ var vp := RenderingServer.viewport_create()
+ var canvas := RenderingServer.canvas_create()
+ RenderingServer.viewport_attach_canvas(vp, canvas)
+ RenderingServer.viewport_set_size(vp, image.get_width(), image.get_height())
+ RenderingServer.viewport_set_disable_3d(vp, true)
+ RenderingServer.viewport_set_active(vp, true)
+
+ var ci_rid := RenderingServer.canvas_item_create()
+ RenderingServer.viewport_set_canvas_transform(vp, canvas, Transform3D())
+ RenderingServer.canvas_item_set_parent(ci_rid, canvas)
+ var texture := ImageTexture.create_from_image(image)
+ RenderingServer.canvas_item_add_texture_rect(
+ ci_rid, Rect2(Vector2.ZERO, image.get_size()), texture
)
- var mat_rid = VisualServer.material_create()
- VisualServer.material_set_shader(mat_rid, _shader.get_rid())
- var lut = Image.new()
- lut.create(256, 1, false, Image.FORMAT_RGB8)
+ var mat_rid := RenderingServer.material_create()
+ RenderingServer.material_set_shader(mat_rid, _shader.get_rid())
+ var lut := Image.create(256, 1, false, Image.FORMAT_RGB8)
lut.fill(Color8(colors[0][0], colors[0][1], colors[0][2]))
- lut.lock()
for i in colors.size():
lut.set_pixel(i, 0, Color8(colors[i][0], colors[i][1], colors[i][2]))
- var lut_tex = ImageTexture.new()
- lut_tex.create_from_image(lut)
- VisualServer.material_set_param(mat_rid, "lut", lut_tex)
- VisualServer.canvas_item_set_material(ci_rid, mat_rid)
-
- VisualServer.viewport_set_update_mode(vp, VisualServer.VIEWPORT_UPDATE_ONCE)
- VisualServer.viewport_set_vflip(vp, true)
- VisualServer.force_draw(false)
- image = VisualServer.texture_get_data(VisualServer.viewport_get_texture(vp))
-
- VisualServer.free_rid(vp)
- VisualServer.free_rid(canvas)
- VisualServer.free_rid(ci_rid)
- VisualServer.free_rid(mat_rid)
+ var lut_tex := ImageTexture.create_from_image(lut)
+ # Not sure why putting lut_tex is an array is needed, but without it, it doesn't work
+ RenderingServer.material_set_param(mat_rid, "lut", [lut_tex])
+ RenderingServer.canvas_item_set_material(ci_rid, mat_rid)
+
+ RenderingServer.viewport_set_update_mode(vp, RenderingServer.VIEWPORT_UPDATE_ONCE)
+ RenderingServer.force_draw(false)
+ image = RenderingServer.texture_2d_get(RenderingServer.viewport_get_texture(vp))
+
+ RenderingServer.free_rid(vp)
+ RenderingServer.free_rid(canvas)
+ RenderingServer.free_rid(ci_rid)
+ RenderingServer.free_rid(mat_rid)
image.convert(Image.FORMAT_R8)
return image.get_data()
diff --git a/addons/gdgifexporter/exporter.gd b/addons/gdgifexporter/exporter.gd
index a6b9f408daa..79a2aa6578e 100644
--- a/addons/gdgifexporter/exporter.gd
+++ b/addons/gdgifexporter/exporter.gd
@@ -1,16 +1,16 @@
-extends Reference
+extends RefCounted
enum Error { OK = 0, EMPTY_IMAGE = 1, BAD_IMAGE_FORMAT = 2 }
-var little_endian = preload("./little_endian.gd").new()
-var lzw = preload("./gif-lzw/lzw.gd").new()
-var converter = preload("./converter.gd")
+var little_endian := preload("./little_endian.gd").new()
+var lzw := preload("./gif-lzw/lzw.gd").new()
+var converter := preload("./converter.gd")
var last_color_table := []
var last_transparency_index := -1
# File data and Header
-var data := PoolByteArray([])
+var data := PackedByteArray([])
func _init(_width: int, _height: int):
@@ -19,12 +19,12 @@ func _init(_width: int, _height: int):
add_application_ext("NETSCAPE", "2.0", [1, 0, 0])
-func export_file_data() -> PoolByteArray:
- return data + PoolByteArray([0x3b])
+func export_file_data() -> PackedByteArray:
+ return data + PackedByteArray([0x3b])
func add_header() -> void:
- data += "GIF".to_ascii() + "89a".to_ascii()
+ data += "GIF".to_ascii_buffer() + "89a".to_ascii_buffer()
func add_logical_screen_descriptor(width: int, height: int) -> void:
@@ -53,18 +53,17 @@ func add_application_ext(app_iden: String, app_auth_code: String, _data: Array)
data.append(extension_introducer)
data.append(extension_label)
data.append(block_size)
- data += app_iden.to_ascii()
- data += app_auth_code.to_ascii()
+ data += app_iden.to_ascii_buffer()
+ data += app_auth_code.to_ascii_buffer()
data.append(_data.size())
- data += PoolByteArray(_data)
+ data += PackedByteArray(_data)
data.append(0)
# finds the image color table. Stops if the size gets larger than 256.
func find_color_table(image: Image) -> Dictionary:
- image.lock()
var result: Dictionary = {}
- var image_data: PoolByteArray = image.get_data()
+ var image_data: PackedByteArray = image.get_data()
for i in range(0, image_data.size(), 4):
var color: Array = [
@@ -77,8 +76,6 @@ func find_color_table(image: Image) -> Dictionary:
result[color] = result.size()
if result.size() > 256:
break
-
- image.unlock()
return result
@@ -89,10 +86,11 @@ func find_transparency_color_index(color_table: Dictionary) -> int:
return -1
-func colors_to_codes(img: Image, col_palette: Dictionary, transp_color_index: int) -> PoolByteArray:
- img.lock()
- var image_data: PoolByteArray = img.get_data()
- var result: PoolByteArray = PoolByteArray([])
+func colors_to_codes(
+ img: Image, col_palette: Dictionary, transp_color_index: int
+) -> PackedByteArray:
+ var image_data: PackedByteArray = img.get_data()
+ var result: PackedByteArray = PackedByteArray([])
for i in range(0, image_data.size(), 4):
var color: Array = [image_data[i], image_data[i + 1], image_data[i + 2], image_data[i + 3]]
@@ -106,7 +104,6 @@ func colors_to_codes(img: Image, col_palette: Dictionary, transp_color_index: in
result.append(0)
push_warning("colors_to_codes: color not found! [%d, %d, %d, %d]" % color)
- img.unlock()
return result
@@ -120,11 +117,11 @@ func make_proper_size(color_table: Array) -> Array:
func calc_delay_time(frame_delay: float) -> int:
- return int(ceil(frame_delay / 0.01))
+ return int(ceili(frame_delay / 0.01))
-func color_table_to_indexes(colors: Array) -> PoolByteArray:
- var result: PoolByteArray = PoolByteArray([])
+func color_table_to_indexes(colors: Array) -> PackedByteArray:
+ var result: PackedByteArray = PackedByteArray([])
for i in range(colors.size()):
result.append(i)
return result
@@ -141,13 +138,13 @@ func add_frame(image: Image, frame_delay: float, quantizator: Script) -> int:
var found_color_table: Dictionary = find_color_table(image)
- var image_converted_to_codes: PoolByteArray
+ var image_converted_to_codes: PackedByteArray
var transparency_color_index: int = -1
var color_table: Array
if found_color_table.size() <= 256: # we don't need to quantize the image.
# try to find transparency color index.
transparency_color_index = find_transparency_color_index(found_color_table)
- # if didn't found transparency color index but there is atleast one
+ # if didn't find transparency color index but there is at least one
# place for this color then add it artificially.
if transparency_color_index == -1 and found_color_table.size() <= 255:
found_color_table[[0, 0, 0, 0]] = found_color_table.size()
@@ -172,7 +169,7 @@ func add_frame(image: Image, frame_delay: float, quantizator: Script) -> int:
var compressed_image_result: Array = lzw.compress_lzw(
image_converted_to_codes, color_table_indexes
)
- var compressed_image_data: PoolByteArray = compressed_image_result[0]
+ var compressed_image_data: PackedByteArray = compressed_image_result[0]
var lzw_min_code_size: int = compressed_image_result[1]
add_graphic_constrol_ext(delay_time, transparency_color_index)
@@ -183,7 +180,7 @@ func add_frame(image: Image, frame_delay: float, quantizator: Script) -> int:
return Error.OK
-# adds frame with last color informations
+## Adds frame with last color information
func add_frame_with_lci(image: Image, frame_delay: float) -> int:
# check if image is of good format
if image.get_format() != Image.FORMAT_RGBA8:
@@ -193,7 +190,7 @@ func add_frame_with_lci(image: Image, frame_delay: float) -> int:
if image.is_empty():
return Error.EMPTY_IMAGE
- var image_converted_to_codes: PoolByteArray = converter.new().get_similar_indexed_datas(
+ var image_converted_to_codes: PackedByteArray = converter.new().get_similar_indexed_datas(
image, last_color_table
)
@@ -201,7 +198,7 @@ func add_frame_with_lci(image: Image, frame_delay: float) -> int:
var compressed_image_result: Array = lzw.compress_lzw(
image_converted_to_codes, color_table_indexes
)
- var compressed_image_data: PoolByteArray = compressed_image_result[0]
+ var compressed_image_data: PackedByteArray = compressed_image_result[0]
var lzw_min_code_size: int = compressed_image_result[1]
var delay_time := calc_delay_time(frame_delay)
@@ -258,38 +255,34 @@ func color_table_bit_size(color_table: Array) -> int:
func add_local_color_table(color_table: Array) -> void:
for color in color_table:
- data.append_array([color[0], color[1], color[2]])
+ data.append(color[0])
+ data.append(color[1])
+ data.append(color[2])
var size := color_table_bit_size(color_table)
var proper_size := int(pow(2, size + 1))
if color_table.size() != proper_size:
for i in range(proper_size - color_table.size()):
- data.append_array([0, 0, 0])
+ data += PackedByteArray([0, 0, 0])
-func add_image_data_block(lzw_min_code_size: int, frame_data: PoolByteArray) -> void:
- var max_block_size = 254
+func add_image_data_block(lzw_min_code_size: int, _data: PackedByteArray) -> void:
data.append(lzw_min_code_size)
- # the amount of blocks which will be stored
- # ceiled because the last block doesn't have to be exactly max_block_size
- var block_count = ceil(frame_data.size() / float(max_block_size))
-
- for i in range(block_count):
- var start_block_index = i * max_block_size
- var end_block_index = (i * max_block_size) + max_block_size - 1
- # final block can be smaller than max block size
- end_block_index = (
- end_block_index
- if end_block_index < frame_data.size() - 1
- else frame_data.size() - 1
- )
- var block_size = end_block_index - start_block_index + 1
- var block = frame_data.subarray(start_block_index, end_block_index)
-
- # store block size and it's data
- data.append(block_size)
- data.append_array(block)
- if not frame_data.empty():
+ var block_size_index: int = 0
+ var i: int = 0
+ var data_index: int = 0
+ while data_index < _data.size():
+ if i == 0:
+ data.append(0)
+ block_size_index = data.size() - 1
+ data.append(_data[data_index])
+ data[block_size_index] += 1
+ data_index += 1
+ i += 1
+ if i == 254:
+ i = 0
+
+ if not _data.is_empty():
data.append(0)
diff --git a/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd b/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd
index 3141d091409..d6cc3f9cffd 100644
--- a/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd
+++ b/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd
@@ -1,11 +1,11 @@
-extends Reference
+extends RefCounted
class LSBLZWBitPacker:
var bit_index: int = 0
var stream: int = 0
- var chunks: PoolByteArray = PoolByteArray([])
+ var chunks: PackedByteArray = PackedByteArray([])
func put_byte():
chunks.append(stream & 0xff)
@@ -20,7 +20,7 @@ class LSBLZWBitPacker:
while bit_index >= 8:
self.put_byte()
- func pack() -> PoolByteArray:
+ func pack() -> PackedByteArray:
if bit_index != 0:
self.put_byte()
return chunks
@@ -28,4 +28,4 @@ class LSBLZWBitPacker:
func reset() -> void:
bit_index = 0
stream = 0
- chunks = PoolByteArray([])
+ chunks = PackedByteArray([])
diff --git a/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd b/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd
index 9f8507f2db8..732c86b0aa0 100644
--- a/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd
+++ b/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd
@@ -1,13 +1,13 @@
-extends Reference
+extends RefCounted
class LSBLZWBitUnpacker:
- var chunk_stream: PoolByteArray
+ var chunk_stream: PackedByteArray
var bit_index: int = 0
var byte: int
var byte_index: int = 0
- func _init(_chunk_stream: PoolByteArray):
+ func _init(_chunk_stream: PackedByteArray):
chunk_stream = _chunk_stream
self.get_byte()
diff --git a/addons/gdgifexporter/gif-lzw/lzw.gd b/addons/gdgifexporter/gif-lzw/lzw.gd
index 8ca1a85afcf..6f90f99eb25 100644
--- a/addons/gdgifexporter/gif-lzw/lzw.gd
+++ b/addons/gdgifexporter/gif-lzw/lzw.gd
@@ -1,38 +1,84 @@
-extends Reference
+extends RefCounted
-var lsbbitpacker = preload("./lsbbitpacker.gd")
-var lsbbitunpacker = preload("./lsbbitunpacker.gd")
+var lsbbitpacker := preload("./lsbbitpacker.gd")
+var lsbbitunpacker := preload("./lsbbitunpacker.gd")
-var code_table := {}
-var entries_counter := 0
+class CodeEntry:
+ var sequence: PackedByteArray
+ var raw_array: Array
-func get_bit_length(value: int):
- # bitwise or on value does ensure that the function works with value 0
- # long number at the end is log(2.0)
- return ceil(log(value | 0x1 + 1) / 0.6931471805599453)
+ func _init(_sequence):
+ raw_array = _sequence
+ sequence = _sequence
+ func add(other: CodeEntry) -> CodeEntry:
+ return CodeEntry.new(self.raw_array + other.raw_array)
-func initialize_color_code_table(colors: PoolByteArray) -> void:
- code_table.clear()
- entries_counter = 0
+ func _to_string():
+ var result: String = ""
+ for element in self.sequence:
+ result += str(element) + ", "
+ return result.substr(0, result.length() - 2)
+
+
+class CodeTable:
+ var entries: Dictionary = {}
+ var counter: int = 0
+ var lookup: Dictionary = {}
+
+ func add(entry) -> int:
+ self.entries[self.counter] = entry
+ self.lookup[entry.raw_array] = self.counter
+ counter += 1
+ return counter
+
+ func find(entry) -> int:
+ return self.lookup.get(entry.raw_array, -1)
+
+ func has(entry) -> bool:
+ return self.find(entry) != -1
+
+ func get_entry(index: int) -> CodeEntry:
+ return self.entries.get(index, null)
+
+ func _to_string() -> String:
+ var result: String = "CodeTable:\n"
+ for id in self.entries:
+ result += str(id) + ": " + self.entries[id].to_string() + "\n"
+ result += "Counter: " + str(self.counter) + "\n"
+ return result
+
+
+func log2(value: float) -> float:
+ return log(value) / log(2.0)
+
+
+func get_bits_number_for(value: int) -> int:
+ if value == 0:
+ return 1
+ return int(ceili(log2(value + 1)))
+
+
+func initialize_color_code_table(colors: PackedByteArray) -> CodeTable:
+ var result_code_table: CodeTable = CodeTable.new()
for color_id in colors:
# warning-ignore:return_value_discarded
- code_table[PoolByteArray([color_id])] = entries_counter
- entries_counter += 1
+ result_code_table.add(CodeEntry.new([color_id]))
# move counter to the first available compression code index
var last_color_index: int = colors.size() - 1
- var clear_code_index: int = pow(2, get_bit_length(last_color_index))
- entries_counter = clear_code_index + 2
+ var clear_code_index: int = pow(2, get_bits_number_for(last_color_index))
+ result_code_table.counter = clear_code_index + 2
+ return result_code_table
# compression and decompression done with source:
# http://www.matthewflickinger.com/lab/whatsinagif/lzw_image_data.asp
-func compress_lzw(index_stream: PoolByteArray, colors: PoolByteArray) -> Array:
+func compress_lzw(image: PackedByteArray, colors: PackedByteArray) -> Array:
# Initialize code table
- initialize_color_code_table(colors)
+ var code_table: CodeTable = initialize_color_code_table(colors)
# Clear Code index is 2**
# is the amount of bits needed to write down all colors
# from color table. We use last color index because we can write
@@ -40,63 +86,127 @@ func compress_lzw(index_stream: PoolByteArray, colors: PoolByteArray) -> Array:
# Number 15 is in binary 0b1111, so we'll need 4 bits to write all
# colors down.
var last_color_index: int = colors.size() - 1
- var clear_code_index: int = pow(2, get_bit_length(last_color_index))
- var current_code_size: int = get_bit_length(clear_code_index)
- var binary_code_stream = lsbbitpacker.LSBLZWBitPacker.new()
+ var clear_code_index: int = pow(2, get_bits_number_for(last_color_index))
+ var index_stream: PackedByteArray = image
+ var current_code_size: int = get_bits_number_for(clear_code_index)
+ var binary_code_stream := lsbbitpacker.LSBLZWBitPacker.new()
# initialize with Clear Code
binary_code_stream.write_bits(clear_code_index, current_code_size)
# Read first index from index stream.
- var index_buffer := PoolByteArray([index_stream[0]])
+ var index_buffer := CodeEntry.new([index_stream[0]])
var data_index: int = 1
#
while data_index < index_stream.size():
# Get the next index from the index stream.
- var k := index_stream[data_index]
+ var k := CodeEntry.new([index_stream[data_index]])
data_index += 1
# Is index buffer + k in our code table?
- var new_index_buffer := PoolByteArray(index_buffer)
- new_index_buffer.push_back(k)
+ var new_index_buffer := index_buffer.add(k)
if code_table.has(new_index_buffer): # if YES
# Add k to the end of the index buffer
index_buffer = new_index_buffer
else: # if NO
# Add a row for index buffer + k into our code table
- binary_code_stream.write_bits(code_table.get(index_buffer, -1), current_code_size)
+ binary_code_stream.write_bits(code_table.find(index_buffer), current_code_size)
# We don't want to add new code to code table if we've exceeded 4095
# index.
- var last_entry_index: int = entries_counter - 1
+ var last_entry_index: int = code_table.counter - 1
if last_entry_index != 4095:
# Output the code for just the index buffer to our code stream
# warning-ignore:return_value_discarded
- code_table[new_index_buffer] = entries_counter
- entries_counter += 1
+ code_table.add(new_index_buffer)
else:
# if we exceeded 4095 index (code table is full), we should
# output Clear Code and reset everything.
binary_code_stream.write_bits(clear_code_index, current_code_size)
- initialize_color_code_table(colors)
+ code_table = initialize_color_code_table(colors)
# get_bits_number_for(clear_code_index) is the same as
# LZW code size + 1
- current_code_size = get_bit_length(clear_code_index)
+ current_code_size = get_bits_number_for(clear_code_index)
# Detect when you have to save new codes in bigger bits boxes
# change current code size when it happens because we want to save
# flexible code sized codes
- var new_code_size_candidate: int = get_bit_length(entries_counter - 1)
+ var new_code_size_candidate: int = get_bits_number_for(code_table.counter - 1)
if new_code_size_candidate > current_code_size:
current_code_size = new_code_size_candidate
# Index buffer is set to k
- index_buffer = PoolByteArray([k])
+ index_buffer = k
# Output code for contents of index buffer
- binary_code_stream.write_bits(code_table.get(index_buffer, -1), current_code_size)
+ binary_code_stream.write_bits(code_table.find(index_buffer), current_code_size)
# output end with End Of Information Code
binary_code_stream.write_bits(clear_code_index + 1, current_code_size)
- var min_code_size: int = get_bit_length(clear_code_index) - 1
+ var min_code_size: int = get_bits_number_for(clear_code_index) - 1
return [binary_code_stream.pack(), min_code_size]
+
+
+# gdlint: ignore=max-line-length
+func decompress_lzw(
+ code_stream_data: PackedByteArray, min_code_size: int, colors: PackedByteArray
+) -> PackedByteArray:
+ var code_table: CodeTable = initialize_color_code_table(colors)
+ var index_stream := PackedByteArray([])
+ var binary_code_stream = lsbbitunpacker.LSBLZWBitUnpacker.new(code_stream_data)
+ var current_code_size: int = min_code_size + 1
+ var clear_code_index: int = pow(2, min_code_size)
+
+ # CODE is an index of code table, {CODE} is sequence inside
+ # code table with index CODE. The same goes for PREVCODE.
+
+ # Remove first Clear Code from stream. We don't need it.
+ binary_code_stream.remove_bits(current_code_size)
+
+ # let CODE be the first code in the code stream
+ var code: int = binary_code_stream.read_bits(current_code_size)
+ # output {CODE} to index stream
+ index_stream.append_array(code_table.get_entry(code).sequence)
+ # set PREVCODE = CODE
+ var prevcode: int = code
+ #
+ while true:
+ # let CODE be the next code in the code stream
+ code = binary_code_stream.read_bits(current_code_size)
+ # Detect Clear Code. When detected reset everything and get next code.
+ if code == clear_code_index:
+ code_table = initialize_color_code_table(colors)
+ current_code_size = min_code_size + 1
+ code = binary_code_stream.read_bits(current_code_size)
+ elif code == clear_code_index + 1: # Stop when detected EOI Code.
+ break
+ # is CODE in the code table?
+ var code_entry: CodeEntry = code_table.get_entry(code)
+ if code_entry != null: # if YES
+ # output {CODE} to index stream
+ index_stream.append_array(code_entry.sequence)
+ # let k be the first index in {CODE}
+ var k: CodeEntry = CodeEntry.new([code_entry.sequence[0]])
+ # warning-ignore:return_value_discarded
+ # add {PREVCODE} + k to the code table
+ code_table.add(code_table.get_entry(prevcode).add(k))
+ # set PREVCODE = CODE
+ prevcode = code
+ else: # if NO
+ # let k be the first index of {PREVCODE}
+ var prevcode_entry: CodeEntry = code_table.get_entry(prevcode)
+ var k: CodeEntry = CodeEntry.new([prevcode_entry.sequence[0]])
+ # output {PREVCODE} + k to index stream
+ index_stream.append_array(prevcode_entry.add(k).sequence)
+ # add {PREVCODE} + k to code table
+ # warning-ignore:return_value_discarded
+ code_table.add(prevcode_entry.add(k))
+ # set PREVCODE = CODE
+ prevcode = code
+
+ # Detect when we should increase current code size and increase it.
+ var new_code_size_candidate: int = get_bits_number_for(code_table.counter)
+ if new_code_size_candidate > current_code_size:
+ current_code_size = new_code_size_candidate
+
+ return index_stream
diff --git a/addons/gdgifexporter/little_endian.gd b/addons/gdgifexporter/little_endian.gd
index cb865e1a371..7d1585f7be0 100644
--- a/addons/gdgifexporter/little_endian.gd
+++ b/addons/gdgifexporter/little_endian.gd
@@ -1,5 +1,5 @@
-extends Reference
+extends RefCounted
-func int_to_2bytes(value: int) -> PoolByteArray:
- return PoolByteArray([value & 255, (value >> 8) & 255])
+func int_to_2bytes(value: int) -> PackedByteArray:
+ return PackedByteArray([value & 255, (value >> 8) & 255])
diff --git a/addons/gdgifexporter/lookup_color.shader b/addons/gdgifexporter/lookup_color.gdshader
similarity index 100%
rename from addons/gdgifexporter/lookup_color.shader
rename to addons/gdgifexporter/lookup_color.gdshader
diff --git a/addons/gdgifexporter/lookup_similar.shader b/addons/gdgifexporter/lookup_similar.gdshader
similarity index 100%
rename from addons/gdgifexporter/lookup_similar.shader
rename to addons/gdgifexporter/lookup_similar.gdshader
diff --git a/addons/gdgifexporter/quantization/median_cut.gd b/addons/gdgifexporter/quantization/median_cut.gd
index 4610f03db47..9e79d01a0fd 100644
--- a/addons/gdgifexporter/quantization/median_cut.gd
+++ b/addons/gdgifexporter/quantization/median_cut.gd
@@ -1,20 +1,20 @@
-extends Reference
+extends RefCounted
-var converter = preload("../converter.gd").new()
+var converter := preload("../converter.gd").new()
var transparency := false
func longest_axis(colors: Array) -> int:
- var start := [255, 255, 255]
- var end := [0, 0, 0]
+ var start: PackedInt32Array = [255, 255, 255]
+ var end: PackedInt32Array = [0, 0, 0]
for color in colors:
for i in 3:
- start[i] = min(color[i], start[i])
- end[i] = max(color[i], end[i])
+ start[i] = mini(color[i], start[i])
+ end[i] = maxi(color[i], end[i])
- var max_r = end[0] - start[0]
- var max_g = end[1] - start[1]
- var max_b = end[2] - start[2]
+ var max_r := end[0] - start[0]
+ var max_g := end[1] - start[1]
+ var max_b := end[2] - start[2]
if max_r > max_g:
if max_r > max_b:
@@ -73,16 +73,14 @@ func average_colors(buckets: Array) -> Dictionary:
func pixels_to_colors(image: Image) -> Array:
- image.lock()
var result := []
- var data: PoolByteArray = image.get_data()
+ var data: PackedByteArray = image.get_data()
for i in range(0, data.size(), 4):
if data[i + 3] == 0:
transparency = true
continue
result.append([data[i], data[i + 1], data[i + 2]])
- image.unlock()
return result
@@ -93,7 +91,7 @@ func remove_smallest_bucket(buckets: Array) -> Array:
for i in range(buckets.size()):
if buckets[i].size() < buckets[i_of_smallest_bucket].size():
i_of_smallest_bucket = i
- buckets.remove(i_of_smallest_bucket)
+ buckets.remove_at(i_of_smallest_bucket)
return buckets
@@ -103,15 +101,15 @@ func remove_empty_buckets(buckets: Array) -> Array:
var i := buckets.find([])
while i != -1:
- buckets.remove(i)
+ buckets.remove_at(i)
i = buckets.find([])
return buckets
-# quantizes to gif ready codes
+## Quantizes to gif ready codes
func quantize(image: Image) -> Array:
- var pixels = pixels_to_colors(image)
+ var pixels := pixels_to_colors(image)
if pixels.size() == 0:
return pixels
@@ -158,6 +156,6 @@ func quantize(image: Image) -> Array:
if transparency:
color_array = [[0, 0, 0]] + color_array
- var data: PoolByteArray = converter.get_similar_indexed_datas(image, color_array)
+ var data: PackedByteArray = converter.get_similar_indexed_datas(image, color_array)
return [data, color_array, transparency]
diff --git a/addons/gdgifexporter/quantization/uniform.gd b/addons/gdgifexporter/quantization/uniform.gd
new file mode 100644
index 00000000000..05192fa6c8d
--- /dev/null
+++ b/addons/gdgifexporter/quantization/uniform.gd
@@ -0,0 +1,82 @@
+extends RefCounted
+
+var converter := preload("../converter.gd").new()
+var transparency := false
+
+
+func how_many_divisions(colors_count: int) -> int:
+ return int(ceili(pow(colors_count, 1.0 / 4.0)))
+
+
+func generate_colors(colors_count: int) -> Array:
+ var divisions_count: int = how_many_divisions(colors_count)
+ var colors: Array = []
+
+ for a in range(divisions_count):
+ for b in range(divisions_count):
+ for g in range(divisions_count):
+ for r in range(divisions_count):
+ colors.append(
+ [
+ Vector3(
+ (255.0 / divisions_count) * r,
+ (255.0 / divisions_count) * g,
+ (255.0 / divisions_count) * b
+ ),
+ (255.0 / divisions_count) * a
+ ]
+ )
+
+ return colors
+
+
+func find_nearest_color(palette_color: Vector3, image_data: PackedByteArray) -> Array:
+ var nearest_color = null
+ var nearest_alpha = null
+ for i in range(0, image_data.size(), 4):
+ var color := Vector3(image_data[i], image_data[i + 1], image_data[i + 2])
+ # detect transparency
+ if image_data[3] == 0:
+ transparency = true
+ if (
+ (nearest_color == null)
+ or (
+ palette_color.distance_squared_to(color)
+ < palette_color.distance_squared_to(nearest_color)
+ )
+ ):
+ nearest_color = color
+ nearest_alpha = image_data[i + 3]
+ return [nearest_color, nearest_alpha]
+
+
+## Moves every color from palette colors to the nearest found color in image
+func enhance_colors(image: Image, palette_colors: Array) -> Array:
+ var data := image.get_data()
+
+ for i in range(palette_colors.size()):
+ var nearest_color := find_nearest_color(palette_colors[i][0], data)
+ palette_colors[i] = nearest_color
+
+ return palette_colors
+
+
+func to_color_array(colors: Array) -> Array:
+ var result := []
+ for v in colors:
+ result.append([v[0].x, v[0].y, v[0].z])
+ return result
+
+
+## Quantizes to gif ready codes
+func quantize(image: Image) -> Array:
+ var colors: Array = generate_colors(256)
+ var tmp_image := Image.new()
+ tmp_image.copy_from(image)
+ tmp_image.resize(32, 32)
+ colors = enhance_colors(tmp_image, colors)
+ colors = to_color_array(colors)
+
+ var data: PackedByteArray = converter.get_similar_indexed_datas(image, colors)
+
+ return [data, colors, transparency]
diff --git a/addons/keychain/Keychain.gd b/addons/keychain/Keychain.gd
index c7e3777e99b..be39efd182b 100644
--- a/addons/keychain/Keychain.gd
+++ b/addons/keychain/Keychain.gd
@@ -1,21 +1,19 @@
extends Node
-const TRANSLATIONS_PATH := "res://addons/keychain/translations"
const PROFILES_PATH := "user://shortcut_profiles"
-# Change these settings
-var profiles := [preload("profiles/default.tres")]
-var selected_profile: ShortcutProfile = profiles[0]
+## Change these settings
+var profiles: Array[ShortcutProfile] = [preload("profiles/default.tres")]
+var selected_profile := profiles[0]
var profile_index := 0
-# Syntax: "action_name": InputAction.new("Action Display Name", "Group", true)
-# Note that "action_name" must already exist in the Project's Input Map.
+## Syntax: "action_name": InputAction.new("Action Display Name", "Group", true)
+## Note that "action_name" must already exist in the Project's Input Map.
var actions := {}
-# Syntax: "Group Name": InputGroup.new("Parent Group Name")
+## Syntax: "Group Name": InputGroup.new("Parent Group Name")
var groups := {}
var ignore_actions := []
var ignore_ui_actions := true
var changeable_types := [true, true, true, true]
-var multiple_menu_accelerators := false
var config_path := "user://cache.ini"
var config_file: ConfigFile
@@ -25,79 +23,11 @@ class InputAction:
var group := ""
var global := true
- func _init(_display_name := "", _group := "", _global := true) -> void:
+ func _init(_display_name := "", _group := "", _global := true):
display_name = _display_name
group = _group
global = _global
- func update_node(_action: String) -> void:
- pass
-
- func handle_input(_event: InputEvent, _action: String) -> bool:
- return false
-
-
-# This class is useful for the accelerators of PopupMenu items
-# It's possible for PopupMenu items to have multiple shortcuts by using
-# set_item_shortcut(), but we have no control over the accelerator text that appears.
-# Thus, we are stuck with using accelerators instead of shortcuts.
-# If Godot ever receives the ability to change the accelerator text of the items,
-# we could in theory remove this class.
-# If you don't care about PopupMenus in the same scene as ShortcutEdit
-# such as projects like Pixelorama where everything is in the same scene,
-# then you can ignore this class.
-class MenuInputAction:
- extends InputAction
- var node_path := ""
- var node: PopupMenu
- var menu_item_id := 0
- var echo := false
-
- func _init(
- _display_name := "",
- _group := "",
- _global := true,
- _node_path := "",
- _menu_item_id := 0,
- _echo := false
- ) -> void:
- ._init(_display_name, _group, _global)
- node_path = _node_path
- menu_item_id = _menu_item_id
- echo = _echo
-
- func get_node(root: Node) -> void:
- var temp_node = root.get_node(node_path)
- if temp_node is PopupMenu:
- node = node
- elif temp_node is MenuButton:
- node = temp_node.get_popup()
-
- func update_node(action: String) -> void:
- if !node:
- return
- var first_key: InputEventKey = Keychain.action_get_first_key(action)
- var accel := first_key.get_scancode_with_modifiers() if first_key else 0
- node.set_item_accelerator(menu_item_id, accel)
-
- func handle_input(event: InputEvent, action: String) -> bool:
- if not node:
- return false
- if event.is_action_pressed(action, false, true):
- if event is InputEventKey:
- var acc: int = node.get_item_accelerator(menu_item_id)
- # If the event is the same as the menu item's accelerator, skip
- if acc == event.get_scancode_with_modifiers():
- return true
- node.emit_signal("id_pressed", menu_item_id)
- return true
- if event.is_action(action, true) and echo:
- if event.is_echo():
- node.emit_signal("id_pressed", menu_item_id)
- return true
-
- return false
-
class InputGroup:
var parent_group := ""
@@ -112,21 +42,18 @@ class InputGroup:
func _ready() -> void:
if !config_file:
config_file = ConfigFile.new()
- if !config_path.empty():
+ if !config_path.is_empty():
config_file.load(config_path)
- set_process_input(multiple_menu_accelerators)
-
# Load shortcut profiles
- var profile_dir := Directory.new()
- profile_dir.make_dir(PROFILES_PATH)
- profile_dir.open(PROFILES_PATH)
+ DirAccess.make_dir_recursive_absolute(PROFILES_PATH)
+ var profile_dir := DirAccess.open(PROFILES_PATH)
profile_dir.list_dir_begin()
var file_name = profile_dir.get_next()
while file_name != "":
if !profile_dir.current_is_dir():
if file_name.get_extension() == "tres":
- var file = load(PROFILES_PATH.plus_file(file_name))
+ var file = load(PROFILES_PATH.path_join(file_name))
if file is ShortcutProfile:
profiles.append(file)
file_name = profile_dir.get_next()
@@ -135,7 +62,7 @@ func _ready() -> void:
if profiles.size() == 1:
var profile := ShortcutProfile.new()
profile.name = "Custom"
- profile.resource_path = PROFILES_PATH.plus_file("custom.tres")
+ profile.resource_path = PROFILES_PATH.path_join("custom.tres")
var saved := profile.save()
if saved:
profiles.append(profile)
@@ -143,37 +70,9 @@ func _ready() -> void:
for profile in profiles:
profile.fill_bindings()
- var l18n_dir := Directory.new()
- l18n_dir.open(TRANSLATIONS_PATH)
- l18n_dir.list_dir_begin()
- file_name = l18n_dir.get_next()
- while file_name != "":
- if !l18n_dir.current_is_dir():
- if file_name.get_extension() == "po":
- var t: Translation = load(TRANSLATIONS_PATH.plus_file(file_name))
- TranslationServer.add_translation(t)
- file_name = l18n_dir.get_next()
-
profile_index = config_file.get_value("shortcuts", "shortcuts_profile", 0)
change_profile(profile_index)
- for action in actions:
- var input_action: InputAction = actions[action]
- if input_action is MenuInputAction:
- # Below line has been modified
- input_action.get_node(Global.top_menu_container.get_node("MenuItems"))
-
-
-func _input(event: InputEvent) -> void:
- if event is InputEventMouseMotion:
- return
-
- for action in actions:
- var input_action: InputAction = actions[action]
- var done: bool = input_action.handle_input(event, action)
- if done:
- return
-
func change_profile(index: int) -> void:
if index >= profiles.size():
@@ -184,33 +83,21 @@ func change_profile(index: int) -> void:
action_erase_events(action)
for event in selected_profile.bindings[action]:
action_add_event(action, event)
- # NOTE: Following line not present in the plugin itself, be careful not to overwrite
- Global.update_hint_tooltips()
func action_add_event(action: String, event: InputEvent) -> void:
InputMap.action_add_event(action, event)
- if action in actions:
- actions[action].update_node(action)
func action_erase_event(action: String, event: InputEvent) -> void:
InputMap.action_erase_event(action, event)
- if action in actions:
- actions[action].update_node(action)
func action_erase_events(action: String) -> void:
InputMap.action_erase_events(action)
- if action in actions:
- actions[action].update_node(action)
-
-
-func action_get_first_key(action: String) -> InputEventKey:
- var first_key: InputEventKey = null
- var events := InputMap.get_action_list(action)
- for event in events:
- if event is InputEventKey:
- first_key = event
- break
- return first_key
+
+
+func load_translation(locale: String) -> void:
+ var translation = load("res://addons/keychain/translations".path_join(locale + ".po"))
+ if is_instance_valid(translation) and translation is Translation:
+ TranslationServer.add_translation(translation)
diff --git a/addons/keychain/LICENSE b/addons/keychain/LICENSE
deleted file mode 100644
index 5deb9a77d8b..00000000000
--- a/addons/keychain/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022 Orama Interactive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/addons/keychain/ShortcutEdit.gd b/addons/keychain/ShortcutEdit.gd
index 42e2a8ed497..5a1a63603c0 100644
--- a/addons/keychain/ShortcutEdit.gd
+++ b/addons/keychain/ShortcutEdit.gd
@@ -2,7 +2,7 @@ extends Control
enum { KEYBOARD, MOUSE, JOY_BUTTON, JOY_AXIS }
-const MOUSE_BUTTON_NAMES := [
+const MOUSE_BUTTON_NAMES: PackedStringArray = [
"Left Button",
"Right Button",
"Middle Button",
@@ -14,7 +14,7 @@ const MOUSE_BUTTON_NAMES := [
"X Button 2",
]
-const JOY_BUTTON_NAMES := [
+const JOY_BUTTON_NAMES: PackedStringArray = [
"DualShock Cross, Xbox A, Nintendo B",
"DualShock Circle, Xbox B, Nintendo A",
"DualShock Square, Xbox X, Nintendo Y",
@@ -40,7 +40,7 @@ const JOY_BUTTON_NAMES := [
"PS4/5 Touchpad",
]
-const JOY_AXIS_NAMES := [
+const JOY_AXIS_NAMES: PackedStringArray = [
"(Left Stick Left)",
"(Left Stick Right)",
"(Left Stick Up)",
@@ -66,29 +66,29 @@ const JOY_AXIS_NAMES := [
var currently_editing_tree_item: TreeItem
var is_editing := false
# Textures taken from Godot https://github.com/godotengine/godot/tree/master/editor/icons
-var add_tex: Texture = preload("assets/add.svg")
-var edit_tex: Texture = preload("assets/edit.svg")
-var delete_tex: Texture = preload("assets/close.svg")
-var joy_axis_tex: Texture = preload("assets/joy_axis.svg")
-var joy_button_tex: Texture = preload("assets/joy_button.svg")
-var key_tex: Texture = preload("assets/keyboard.svg")
-var key_phys_tex: Texture = preload("assets/keyboard_physical.svg")
-var mouse_tex: Texture = preload("assets/mouse.svg")
-var shortcut_tex: Texture = preload("assets/shortcut.svg")
-var folder_tex: Texture = preload("assets/folder.svg")
-
-onready var tree: Tree = $VBoxContainer/ShortcutTree
-onready var profile_option_button: OptionButton = find_node("ProfileOptionButton")
-onready var rename_profile_button: Button = find_node("RenameProfile")
-onready var delete_profile_button: Button = find_node("DeleteProfile")
-onready var shortcut_type_menu: PopupMenu = $ShortcutTypeMenu
-onready var keyboard_shortcut_selector: ConfirmationDialog = $KeyboardShortcutSelectorDialog
-onready var mouse_shortcut_selector: ConfirmationDialog = $MouseShortcutSelectorDialog
-onready var joy_key_shortcut_selector: ConfirmationDialog = $JoyKeyShortcutSelectorDialog
-onready var joy_axis_shortcut_selector: ConfirmationDialog = $JoyAxisShortcutSelectorDialog
-onready var profile_settings: ConfirmationDialog = $ProfileSettings
-onready var profile_name: LineEdit = $ProfileSettings/ProfileName
-onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation
+var add_tex: Texture2D = preload("assets/add.svg")
+var edit_tex: Texture2D = preload("assets/edit.svg")
+var delete_tex: Texture2D = preload("assets/close.svg")
+var joy_axis_tex: Texture2D = preload("assets/joy_axis.svg")
+var joy_button_tex: Texture2D = preload("assets/joy_button.svg")
+var key_tex: Texture2D = preload("assets/keyboard.svg")
+var key_phys_tex: Texture2D = preload("assets/keyboard_physical.svg")
+var mouse_tex: Texture2D = preload("assets/mouse.svg")
+var shortcut_tex: Texture2D = preload("assets/shortcut.svg")
+var folder_tex: Texture2D = preload("assets/folder.svg")
+
+@onready var tree: Tree = $VBoxContainer/ShortcutTree
+@onready var profile_option_button: OptionButton = find_child("ProfileOptionButton")
+@onready var rename_profile_button: Button = find_child("RenameProfile")
+@onready var delete_profile_button: Button = find_child("DeleteProfile")
+@onready var shortcut_type_menu: PopupMenu = $ShortcutTypeMenu
+@onready var keyboard_shortcut_selector: ConfirmationDialog = $KeyboardShortcutSelectorDialog
+@onready var mouse_shortcut_selector: ConfirmationDialog = $MouseShortcutSelectorDialog
+@onready var joy_key_shortcut_selector: ConfirmationDialog = $JoyKeyShortcutSelectorDialog
+@onready var joy_axis_shortcut_selector: ConfirmationDialog = $JoyAxisShortcutSelectorDialog
+@onready var profile_settings: ConfirmationDialog = $ProfileSettings
+@onready var profile_name: LineEdit = $ProfileSettings/ProfileName
+@onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation
func _ready() -> void:
@@ -107,7 +107,7 @@ func _ready() -> void:
profile_option_button.select(Keychain.profile_index)
_on_ProfileOptionButton_item_selected(Keychain.profile_index)
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
$VBoxContainer/HBoxContainer/OpenProfileFolder.queue_free()
@@ -121,7 +121,7 @@ func _construct_tree() -> void:
for action in InputMap.get_actions(): # Fill the tree with actions and their events
if action in Keychain.ignore_actions:
continue
- if Keychain.ignore_ui_actions and action.begins_with("ui_"):
+ if Keychain.ignore_ui_actions and (action as String).begins_with("ui_"):
continue
var display_name := get_action_name(action)
@@ -131,7 +131,7 @@ func _construct_tree() -> void:
group_name = input_action.group
var tree_item: TreeItem
- if group_name and group_name in Keychain.groups:
+ if not group_name.is_empty() and group_name in Keychain.groups:
var input_group: Keychain.InputGroup = Keychain.groups[group_name]
var group_root: TreeItem = input_group.tree_item
tree_item = tree.create_item(group_root)
@@ -142,7 +142,7 @@ func _construct_tree() -> void:
tree_item.set_text(0, display_name)
tree_item.set_metadata(0, action)
tree_item.set_icon(0, shortcut_tex)
- for event in InputMap.get_action_list(action):
+ for event in InputMap.action_get_events(action):
add_event_tree_item(event, tree_item)
tree_item.add_button(0, add_tex, 0, buttons_disabled, "Add")
@@ -151,8 +151,6 @@ func _construct_tree() -> void:
func _fill_selector_options() -> void:
- keyboard_shortcut_selector.entered_shortcut.visible = true
- keyboard_shortcut_selector.option_button.visible = false
mouse_shortcut_selector.input_type_l.text = "Mouse Button Index:"
joy_key_shortcut_selector.input_type_l.text = "Joypad Button Index:"
joy_axis_shortcut_selector.input_type_l.text = "Joypad Axis Index:"
@@ -171,8 +169,8 @@ func _fill_selector_options() -> void:
var joy_axis_option_button: OptionButton = joy_axis_shortcut_selector.option_button
var i := 0.0
for option in JOY_AXIS_NAMES:
- var sign_symbol = "+" if floor(i) != i else "-"
- var text: String = tr("Axis") + " %s %s %s" % [floor(i), sign_symbol, tr(option)]
+ var sign_symbol := "+" if floori(i) != i else "-"
+ var text: String = tr("Axis") + " %s %s %s" % [floori(i), sign_symbol, tr(option)]
joy_axis_option_button.add_item(text)
i += 0.5
@@ -200,7 +198,7 @@ func get_action_name(action: String) -> String:
if action in Keychain.actions:
display_name = Keychain.actions[action].display_name
- if display_name.empty():
+ if display_name.is_empty():
display_name = _humanize_snake_case(action)
return display_name
@@ -209,7 +207,7 @@ func _humanize_snake_case(text: String) -> String:
text = text.replace("_", " ")
var first_letter := text.left(1)
first_letter = first_letter.capitalize()
- text.erase(0, 1)
+ text = text.right(-1)
text = text.insert(0, first_letter)
return text
@@ -236,7 +234,7 @@ func add_event_tree_item(event: InputEvent, action_tree_item: TreeItem) -> void:
event_tree_item.set_metadata(0, event)
match event_class:
"InputEventKey":
- var scancode: int = event.get_scancode_with_modifiers()
+ var scancode: int = event.get_keycode_with_modifiers()
if scancode > 0:
event_tree_item.set_icon(0, key_tex)
else:
@@ -252,19 +250,10 @@ func add_event_tree_item(event: InputEvent, action_tree_item: TreeItem) -> void:
func event_to_str(event: InputEvent) -> String:
- var output := ""
- if event is InputEventKey:
- var scancode: int = event.get_scancode_with_modifiers()
- var physical_str := ""
- if scancode == 0:
- scancode = event.get_physical_scancode_with_modifiers()
- physical_str = " " + tr("(Physical)")
- output = OS.get_scancode_string(scancode) + physical_str
-
- elif event is InputEventMouseButton:
- output = tr(MOUSE_BUTTON_NAMES[event.button_index - 1])
-
- elif event is InputEventJoypadButton:
+ var output := event.as_text()
+ # event.as_text() could be used for these event types as well, but this gives more control
+ # to the developer as to what strings will be printed
+ if event is InputEventJoypadButton:
var button_index: int = event.button_index
output = tr("Button")
if button_index >= JOY_BUTTON_NAMES.size():
@@ -281,24 +270,22 @@ func event_to_str(event: InputEvent) -> String:
return output
-func _on_ShortcutTree_button_pressed(item: TreeItem, _column: int, id: int) -> void:
+func _on_shortcut_tree_button_clicked(item: TreeItem, _column: int, id: int, _mbi: int) -> void:
var action = item.get_metadata(0)
currently_editing_tree_item = item
- if action is String:
+ if action is StringName:
if id == 0: # Add
var rect: Rect2 = tree.get_item_area_rect(item, 0)
rect.position.x = rect.end.x - 42
rect.position.y += 42 - tree.get_scroll().y
- rect.position += rect_global_position
+ rect.position += global_position
rect.size = Vector2(110, 23 * shortcut_type_menu.get_item_count())
shortcut_type_menu.popup(rect)
elif id == 1: # Delete
Keychain.action_erase_events(action)
Keychain.selected_profile.change_action(action)
- var child := item.get_children()
- while child != null:
+ for child in item.get_children():
child.free()
- child = item.get_children()
elif action is InputEvent:
var parent_action = item.get_parent().get_metadata(0)
@@ -312,7 +299,7 @@ func _on_ShortcutTree_button_pressed(item: TreeItem, _column: int, id: int) -> v
elif action is InputEventJoypadMotion:
joy_axis_shortcut_selector.popup_centered()
elif id == 1: # Delete
- if not parent_action is String:
+ if not parent_action is StringName:
return
Keychain.action_erase_event(parent_action, action)
Keychain.selected_profile.change_action(parent_action)
@@ -322,7 +309,7 @@ func _on_ShortcutTree_button_pressed(item: TreeItem, _column: int, id: int) -> v
func _on_ShortcutTree_item_activated() -> void:
var selected_item: TreeItem = tree.get_selected()
if selected_item.get_button_count(0) > 0 and !selected_item.is_button_disabled(0, 0):
- _on_ShortcutTree_button_pressed(tree.get_selected(), 0, 0)
+ _on_shortcut_tree_button_clicked(tree.get_selected(), 0, 0, 0)
func _on_ShortcutTypeMenu_id_pressed(id: int) -> void:
@@ -353,14 +340,14 @@ func _on_ProfileOptionButton_item_selected(index: int) -> void:
func _on_NewProfile_pressed() -> void:
is_editing = false
profile_name.text = "New Shortcut Profile"
- profile_settings.window_title = "New Shortcut Profile"
+ profile_settings.title = "New Shortcut Profile"
profile_settings.popup_centered()
func _on_RenameProfile_pressed() -> void:
is_editing = true
profile_name.text = Keychain.selected_profile.name
- profile_settings.window_title = "Rename Shortcut Profile"
+ profile_settings.title = "Rename Shortcut Profile"
profile_settings.popup_centered()
@@ -376,7 +363,7 @@ func _on_ProfileSettings_confirmed() -> void:
var file_name := profile_name.text + ".tres"
var profile := ShortcutProfile.new()
profile.name = profile_name.text
- profile.resource_path = Keychain.PROFILES_PATH.plus_file(file_name)
+ profile.resource_path = Keychain.PROFILES_PATH.path_join(file_name)
profile.fill_bindings()
var saved := profile.save()
if not saved:
@@ -397,14 +384,18 @@ func _on_ProfileSettings_confirmed() -> void:
func _delete_profile_file(file_name: String) -> void:
- var dir := Directory.new()
+ var dir := DirAccess.open(file_name.get_base_dir())
+ var err := dir.get_open_error()
+ if err != OK:
+ print("Error deleting shortcut profile %s. Error code: %s" % [file_name, err])
+ return
dir.remove(file_name)
func _on_DeleteConfirmation_confirmed() -> void:
_delete_profile_file(Keychain.selected_profile.resource_path)
profile_option_button.remove_item(Keychain.profile_index)
- Keychain.profiles.remove(Keychain.profile_index)
+ Keychain.profiles.remove_at(Keychain.profile_index)
Keychain.profile_index -= 1
if Keychain.profile_index < 0:
Keychain.profile_index = 0
diff --git a/addons/keychain/ShortcutEdit.tscn b/addons/keychain/ShortcutEdit.tscn
index 0dbd150c29c..57bfd46c4f7 100644
--- a/addons/keychain/ShortcutEdit.tscn
+++ b/addons/keychain/ShortcutEdit.tscn
@@ -1,105 +1,108 @@
-[gd_scene load_steps=7 format=2]
-
-[ext_resource path="res://addons/keychain/ShortcutEdit.gd" type="Script" id=1]
-[ext_resource path="res://addons/keychain/assets/joy_button.svg" type="Texture" id=2]
-[ext_resource path="res://addons/keychain/assets/keyboard.svg" type="Texture" id=3]
-[ext_resource path="res://addons/keychain/assets/joy_axis.svg" type="Texture" id=4]
-[ext_resource path="res://addons/keychain/assets/mouse.svg" type="Texture" id=5]
-[ext_resource path="res://addons/keychain/ShortcutSelectorDialog.tscn" type="PackedScene" id=6]
-
-[node name="ShortcutEdit" type="VBoxContainer"]
+[gd_scene load_steps=7 format=3 uid="uid://bq7ibhm0txl5p"]
+
+[ext_resource type="Script" path="res://addons/keychain/ShortcutEdit.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://ca58ufal2ufd8" path="res://addons/keychain/assets/joy_button.svg" id="2"]
+[ext_resource type="Texture2D" uid="uid://c2s5rm4nec5yh" path="res://addons/keychain/assets/keyboard.svg" id="3"]
+[ext_resource type="Texture2D" uid="uid://bb6q6om3d08cm" path="res://addons/keychain/assets/joy_axis.svg" id="4"]
+[ext_resource type="Texture2D" uid="uid://bma7xj2rqqcr8" path="res://addons/keychain/assets/mouse.svg" id="5"]
+[ext_resource type="PackedScene" uid="uid://bfjcafe2kvx7n" path="res://addons/keychain/ShortcutSelectorDialog.tscn" id="6"]
+
+[node name="ShortcutEdit" type="Control"]
+layout_mode = 3
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
size_flags_vertical = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_right = 1280.0
-margin_bottom = 720.0
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
size_flags_vertical = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_right = 1280.0
-margin_bottom = 20.0
+layout_mode = 2
[node name="ProfileLabel" type="Label" parent="VBoxContainer/HBoxContainer"]
-margin_top = 3.0
-margin_right = 102.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Shortcut profile:"
[node name="ProfileOptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer"]
-margin_left = 106.0
-margin_right = 135.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
[node name="NewProfile" type="Button" parent="VBoxContainer/HBoxContainer"]
-margin_left = 139.0
-margin_right = 179.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "New"
[node name="RenameProfile" type="Button" parent="VBoxContainer/HBoxContainer"]
-margin_left = 183.0
-margin_right = 247.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Rename"
[node name="DeleteProfile" type="Button" parent="VBoxContainer/HBoxContainer"]
-margin_left = 251.0
-margin_right = 306.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Delete"
[node name="OpenProfileFolder" type="Button" parent="VBoxContainer/HBoxContainer"]
-margin_left = 310.0
-margin_right = 401.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Open Folder"
[node name="ShortcutTree" type="Tree" parent="VBoxContainer"]
-margin_top = 24.0
-margin_right = 1280.0
-margin_bottom = 720.0
+layout_mode = 2
size_flags_vertical = 3
hide_root = true
[node name="ShortcutTypeMenu" type="PopupMenu" parent="."]
-margin_right = 20.0
-margin_bottom = 20.0
-items = [ "Key", ExtResource( 3 ), 0, false, false, 0, 0, null, "", false, "Mouse Button", ExtResource( 5 ), 0, false, false, 1, 0, null, "", false, "Joy Button", ExtResource( 2 ), 0, false, false, 2, 0, null, "", false, "Joy Axis", ExtResource( 4 ), 0, false, false, 3, 0, null, "", false ]
-
-[node name="KeyboardShortcutSelectorDialog" parent="." instance=ExtResource( 6 )]
-
-[node name="MouseShortcutSelectorDialog" parent="." instance=ExtResource( 6 )]
+size = Vector2i(154, 116)
+item_count = 4
+item_0/text = "Key"
+item_0/icon = ExtResource("3")
+item_0/id = 0
+item_1/text = "Mouse Button"
+item_1/icon = ExtResource("5")
+item_1/id = 1
+item_2/text = "Joy Button"
+item_2/icon = ExtResource("2")
+item_2/id = 2
+item_3/text = "Joy Axis"
+item_3/icon = ExtResource("4")
+item_3/id = 3
+
+[node name="KeyboardShortcutSelectorDialog" parent="." instance=ExtResource("6")]
+size = Vector2i(417, 134)
+
+[node name="MouseShortcutSelectorDialog" parent="." instance=ExtResource("6")]
+size = Vector2i(417, 134)
input_type = 1
-[node name="JoyKeyShortcutSelectorDialog" parent="." instance=ExtResource( 6 )]
+[node name="JoyKeyShortcutSelectorDialog" parent="." instance=ExtResource("6")]
+size = Vector2i(417, 134)
input_type = 2
-[node name="JoyAxisShortcutSelectorDialog" parent="." instance=ExtResource( 6 )]
+[node name="JoyAxisShortcutSelectorDialog" parent="." instance=ExtResource("6")]
+size = Vector2i(417, 134)
input_type = 3
[node name="ProfileSettings" type="ConfirmationDialog" parent="."]
-margin_right = 200.0
-margin_bottom = 70.0
[node name="ProfileName" type="LineEdit" parent="ProfileSettings"]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 192.0
-margin_bottom = 34.0
-caret_blink = true
-caret_blink_speed = 0.5
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 192.0
+offset_bottom = 51.0
[node name="DeleteConfirmation" type="ConfirmationDialog" parent="."]
-margin_right = 200.0
-margin_bottom = 70.0
+size = Vector2i(427, 100)
dialog_text = "Are you sure you want to delete this shortcut profile?"
[connection signal="item_selected" from="VBoxContainer/HBoxContainer/ProfileOptionButton" to="." method="_on_ProfileOptionButton_item_selected"]
@@ -107,7 +110,7 @@ dialog_text = "Are you sure you want to delete this shortcut profile?"
[connection signal="pressed" from="VBoxContainer/HBoxContainer/RenameProfile" to="." method="_on_RenameProfile_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/DeleteProfile" to="." method="_on_DeleteProfile_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/OpenProfileFolder" to="." method="_on_OpenProfileFolder_pressed"]
-[connection signal="button_pressed" from="VBoxContainer/ShortcutTree" to="." method="_on_ShortcutTree_button_pressed"]
+[connection signal="button_clicked" from="VBoxContainer/ShortcutTree" to="." method="_on_shortcut_tree_button_clicked"]
[connection signal="item_activated" from="VBoxContainer/ShortcutTree" to="." method="_on_ShortcutTree_item_activated"]
[connection signal="id_pressed" from="ShortcutTypeMenu" to="." method="_on_ShortcutTypeMenu_id_pressed"]
[connection signal="confirmed" from="ProfileSettings" to="." method="_on_ProfileSettings_confirmed"]
diff --git a/addons/keychain/ShortcutProfile.gd b/addons/keychain/ShortcutProfile.gd
index a3bf008026d..0fb269a192a 100644
--- a/addons/keychain/ShortcutProfile.gd
+++ b/addons/keychain/ShortcutProfile.gd
@@ -1,9 +1,9 @@
class_name ShortcutProfile
extends Resource
-export(String) var name := ""
-export(bool) var customizable := true
-export(Dictionary) var bindings := {}
+@export var name := ""
+@export var customizable := true
+@export var bindings := {}
func _init() -> void:
@@ -14,7 +14,7 @@ func fill_bindings() -> void:
var unnecessary_actions = bindings.duplicate() # Checks if the profile has any unused actions
for action in InputMap.get_actions():
if not action in bindings:
- bindings[action] = InputMap.get_action_list(action)
+ bindings[action] = InputMap.action_get_events(action)
unnecessary_actions.erase(action)
for action in unnecessary_actions:
bindings.erase(action)
@@ -24,14 +24,14 @@ func fill_bindings() -> void:
func change_action(action: String) -> void:
if not customizable:
return
- bindings[action] = InputMap.get_action_list(action)
+ bindings[action] = InputMap.action_get_events(action)
save()
func save() -> bool:
if !customizable:
return false
- var err := ResourceSaver.save(resource_path, self)
+ var err := ResourceSaver.save(self, resource_path)
if err != OK:
print("Error saving shortcut profile %s. Error code: %s" % [resource_path, err])
return false
diff --git a/addons/keychain/ShortcutSelectorDialog.gd b/addons/keychain/ShortcutSelectorDialog.gd
index be1bbb0691e..fb28434b02a 100644
--- a/addons/keychain/ShortcutSelectorDialog.gd
+++ b/addons/keychain/ShortcutSelectorDialog.gd
@@ -2,28 +2,39 @@ extends ConfirmationDialog
enum InputTypes { KEYBOARD, MOUSE, JOY_BUTTON, JOY_AXIS }
-export(InputTypes) var input_type: int = InputTypes.KEYBOARD
+@export var input_type := InputTypes.KEYBOARD
var listened_input: InputEvent
-onready var root: Node = get_parent()
-onready var input_type_l: Label = $VBoxContainer/InputTypeLabel
-onready var entered_shortcut: LineEdit = $VBoxContainer/EnteredShortcut
-onready var option_button: OptionButton = $VBoxContainer/OptionButton
-onready var already_exists: Label = $VBoxContainer/AlreadyExistsLabel
+@onready var root := get_parent()
+@onready var input_type_l := $VBoxContainer/InputTypeLabel as Label
+@onready var entered_shortcut := $VBoxContainer/EnteredShortcut as LineEdit
+@onready var option_button := $VBoxContainer/OptionButton as OptionButton
+@onready var modifier_buttons := $VBoxContainer/ModifierButtons as HBoxContainer
+@onready var alt_button := $VBoxContainer/ModifierButtons/Alt as CheckBox
+@onready var shift_button := $VBoxContainer/ModifierButtons/Shift as CheckBox
+@onready var control_button := $VBoxContainer/ModifierButtons/Control as CheckBox
+@onready var meta_button := $VBoxContainer/ModifierButtons/Meta as CheckBox
+@onready var command_control_button := $VBoxContainer/ModifierButtons/CommandOrControl as CheckBox
+@onready var already_exists := $VBoxContainer/AlreadyExistsLabel as Label
func _ready() -> void:
set_process_input(false)
if input_type == InputTypes.KEYBOARD:
- get_ok().focus_neighbour_top = entered_shortcut.get_path()
- get_cancel().focus_neighbour_top = entered_shortcut.get_path()
- entered_shortcut.focus_neighbour_bottom = get_ok().get_path()
+ entered_shortcut.visible = true
+ option_button.visible = false
+ get_ok_button().focus_neighbor_top = entered_shortcut.get_path()
+ get_cancel_button().focus_neighbor_top = entered_shortcut.get_path()
+ entered_shortcut.focus_neighbor_bottom = get_ok_button().get_path()
else:
- get_ok().focus_neighbour_top = option_button.get_path()
- get_cancel().focus_neighbour_top = option_button.get_path()
- option_button.focus_neighbour_bottom = get_ok().get_path()
+ if input_type != InputTypes.MOUSE:
+ modifier_buttons.visible = false
+ get_ok_button().focus_neighbor_top = option_button.get_path()
+ get_cancel_button().focus_neighbor_top = option_button.get_path()
+ option_button.focus_neighbor_bottom = get_ok_button().get_path()
- get_close_button().focus_mode = Control.FOCUS_NONE
+
+# get_close_button().focus_mode = Control.FOCUS_NONE
func _input(event: InputEvent) -> void:
@@ -31,7 +42,8 @@ func _input(event: InputEvent) -> void:
return
if event.pressed:
listened_input = event
- entered_shortcut.text = OS.get_scancode_string(event.get_scancode_with_modifiers())
+ _set_modifier_buttons_state(listened_input)
+ entered_shortcut.text = event.as_text()
_show_assigned_state(event)
@@ -40,7 +52,7 @@ func _show_assigned_state(event: InputEvent) -> void:
var action := ""
if metadata is InputEvent: # Editing an input event
action = root.currently_editing_tree_item.get_parent().get_metadata(0)
- elif metadata is String: # Adding a new input event to an action
+ elif metadata is StringName: # Adding a new input event to an action
action = metadata
var matching_pair: Array = _find_matching_event_in_map(action, event)
@@ -65,14 +77,14 @@ func _apply_shortcut_change(input_event: InputEvent) -> void:
return
root.currently_editing_tree_item.set_metadata(0, input_event)
root.currently_editing_tree_item.set_text(0, root.event_to_str(input_event))
- elif metadata is String: # Adding a new input event to an action
+ elif metadata is StringName: # Adding a new input event to an action
var changed: bool = _set_shortcut(metadata, null, input_event)
if !changed:
return
root.add_event_tree_item(input_event, root.currently_editing_tree_item)
-func _set_shortcut(action: String, old_event: InputEvent, new_event: InputEvent) -> bool:
+func _set_shortcut(action: StringName, old_event: InputEvent, new_event: InputEvent) -> bool:
if InputMap.action_has_event(action, new_event): # If the current action already has that event
return false
if old_event:
@@ -86,7 +98,7 @@ func _set_shortcut(action: String, old_event: InputEvent, new_event: InputEvent)
if action in Keychain.actions:
group = Keychain.actions[action].group
- var action_to_replace: String = matching_pair[0]
+ var action_to_replace: StringName = matching_pair[0]
var input_to_replace: InputEvent = matching_pair[1]
Keychain.action_erase_event(action_to_replace, input_to_replace)
Keychain.selected_profile.change_action(action_to_replace)
@@ -95,34 +107,20 @@ func _set_shortcut(action: String, old_event: InputEvent, new_event: InputEvent)
while tree_item != null: # Loop through Tree's TreeItems...
var metadata = tree_item.get_metadata(0)
if metadata is InputEvent:
- if input_to_replace.shortcut_match(metadata):
- var map_action: String = tree_item.get_parent().get_metadata(0)
+ if input_to_replace.is_match(metadata):
+ var map_action: StringName = tree_item.get_parent().get_metadata(0)
if map_action == action_to_replace:
tree_item.free()
break
- tree_item = _get_next_tree_item(tree_item)
+ tree_item = tree_item.get_next_in_tree()
Keychain.action_add_event(action, new_event)
Keychain.selected_profile.change_action(action)
return true
-# Based on https://github.com/godotengine/godot/blob/master/scene/gui/tree.cpp#L685
-func _get_next_tree_item(current: TreeItem) -> TreeItem:
- if current.get_children():
- current = current.get_children()
- elif current.get_next():
- current = current.get_next()
- else:
- while current and !current.get_next():
- current = current.get_parent()
- if current:
- current = current.get_next()
- return current
-
-
-func _find_matching_event_in_map(action: String, event: InputEvent) -> Array:
+func _find_matching_event_in_map(action: StringName, event: InputEvent) -> Array:
var group := ""
if action in Keychain.actions:
group = Keychain.actions[action].group
@@ -130,10 +128,10 @@ func _find_matching_event_in_map(action: String, event: InputEvent) -> Array:
for map_action in InputMap.get_actions():
if map_action in Keychain.ignore_actions:
continue
- if Keychain.ignore_ui_actions and map_action.begins_with("ui_"):
+ if Keychain.ignore_ui_actions and (map_action as String).begins_with("ui_"):
continue
- for map_event in InputMap.get_action_list(map_action):
- if !event.shortcut_match(map_event):
+ for map_event in InputMap.action_get_events(map_action):
+ if !event.is_match(map_event):
continue
if map_action in Keychain.actions:
@@ -148,27 +146,30 @@ func _find_matching_event_in_map(action: String, event: InputEvent) -> Array:
func _on_ShortcutSelectorDialog_about_to_show() -> void:
+ var metadata = root.currently_editing_tree_item.get_metadata(0)
if input_type == InputTypes.KEYBOARD:
listened_input = null
already_exists.text = ""
entered_shortcut.text = ""
- yield(get_tree(), "idle_frame")
+ if metadata is InputEvent:
+ _set_modifier_buttons_state(metadata)
+ await get_tree().process_frame
entered_shortcut.grab_focus()
else:
- var metadata = root.currently_editing_tree_item.get_metadata(0)
if metadata is InputEvent: # Editing an input event
var index := 0
if metadata is InputEventMouseButton:
index = metadata.button_index - 1
+ _set_modifier_buttons_state(metadata)
elif metadata is InputEventJoypadButton:
index = metadata.button_index
elif metadata is InputEventJoypadMotion:
index = metadata.axis * 2
- index += round(metadata.axis_value) / 2.0 + 0.5
+ index += signi(metadata.axis_value) / 2.0 + 0.5
option_button.select(index)
_on_OptionButton_item_selected(index)
- elif metadata is String: # Adding a new input event to an action
+ elif metadata is StringName: # Adding a new input event to an action
option_button.select(0)
_on_OptionButton_item_selected(0)
@@ -181,6 +182,11 @@ func _on_OptionButton_item_selected(index: int) -> void:
if input_type == InputTypes.MOUSE:
listened_input = InputEventMouseButton.new()
listened_input.button_index = index + 1
+ listened_input.alt_pressed = alt_button.button_pressed
+ listened_input.shift_pressed = shift_button.button_pressed
+ listened_input.ctrl_pressed = control_button.button_pressed
+ listened_input.meta_pressed = meta_button.button_pressed
+ listened_input.command_or_control_autoremap = command_control_button.button_pressed
elif input_type == InputTypes.JOY_BUTTON:
listened_input = InputEventJoypadButton.new()
listened_input.button_index = index
@@ -197,3 +203,50 @@ func _on_EnteredShortcut_focus_entered() -> void:
func _on_EnteredShortcut_focus_exited() -> void:
set_process_input(false)
+
+
+func _on_alt_toggled(button_pressed: bool) -> void:
+ if not is_instance_valid(listened_input):
+ return
+ listened_input.alt_pressed = button_pressed
+ entered_shortcut.text = listened_input.as_text()
+
+
+func _set_modifier_buttons_state(event: InputEventWithModifiers) -> void:
+ alt_button.button_pressed = event.alt_pressed
+ shift_button.button_pressed = event.shift_pressed
+ control_button.button_pressed = event.ctrl_pressed
+ meta_button.button_pressed = event.meta_pressed
+ command_control_button.button_pressed = event.command_or_control_autoremap
+
+
+func _on_shift_toggled(button_pressed: bool) -> void:
+ if not is_instance_valid(listened_input):
+ return
+ listened_input.shift_pressed = button_pressed
+ entered_shortcut.text = listened_input.as_text()
+
+
+func _on_control_toggled(button_pressed: bool) -> void:
+ if not is_instance_valid(listened_input):
+ return
+ listened_input.ctrl_pressed = button_pressed
+ entered_shortcut.text = listened_input.as_text()
+
+
+func _on_meta_toggled(button_pressed: bool) -> void:
+ if not is_instance_valid(listened_input):
+ return
+ listened_input.meta_pressed = button_pressed
+ entered_shortcut.text = listened_input.as_text()
+
+
+func _on_command_or_control_toggled(button_pressed: bool) -> void:
+ control_button.button_pressed = false
+ meta_button.button_pressed = false
+ control_button.visible = not button_pressed
+ meta_button.visible = not button_pressed
+ if not is_instance_valid(listened_input):
+ return
+ listened_input.command_or_control_autoremap = button_pressed
+ entered_shortcut.text = listened_input.as_text()
diff --git a/addons/keychain/ShortcutSelectorDialog.tscn b/addons/keychain/ShortcutSelectorDialog.tscn
index 0e4188dbe43..65250e3063f 100644
--- a/addons/keychain/ShortcutSelectorDialog.tscn
+++ b/addons/keychain/ShortcutSelectorDialog.tscn
@@ -1,49 +1,69 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://bfjcafe2kvx7n"]
-[ext_resource path="res://addons/keychain/ShortcutSelectorDialog.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://addons/keychain/ShortcutSelectorDialog.gd" id="1"]
[node name="ShortcutSelectorDialog" type="ConfirmationDialog"]
-margin_right = 200.0
-margin_bottom = 70.0
-popup_exclusive = true
-window_title = "Set the shortcut"
-script = ExtResource( 1 )
+size = Vector2i(417, 169)
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 341.0
-margin_bottom = 64.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 409.0
+offset_bottom = 120.0
[node name="InputTypeLabel" type="Label" parent="VBoxContainer"]
-margin_right = 333.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Press a key or a key combination to set the shortcut"
[node name="EnteredShortcut" type="LineEdit" parent="VBoxContainer"]
visible = false
-margin_top = 18.0
-margin_right = 333.0
-margin_bottom = 32.0
-align = 1
+layout_mode = 2
editable = false
virtual_keyboard_enabled = false
[node name="OptionButton" type="OptionButton" parent="VBoxContainer"]
-margin_top = 18.0
-margin_right = 333.0
-margin_bottom = 38.0
+layout_mode = 2
mouse_default_cursor_shape = 2
+[node name="ModifierButtons" type="HBoxContainer" parent="VBoxContainer"]
+layout_mode = 2
+
+[node name="Alt" type="CheckBox" parent="VBoxContainer/ModifierButtons"]
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Alt"
+
+[node name="Shift" type="CheckBox" parent="VBoxContainer/ModifierButtons"]
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Shift"
+
+[node name="Control" type="CheckBox" parent="VBoxContainer/ModifierButtons"]
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Control"
+
+[node name="Meta" type="CheckBox" parent="VBoxContainer/ModifierButtons"]
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Meta"
+
+[node name="CommandOrControl" type="CheckBox" parent="VBoxContainer/ModifierButtons"]
+layout_mode = 2
+mouse_default_cursor_shape = 2
+text = "Command / Control (auto)"
+
[node name="AlreadyExistsLabel" type="Label" parent="VBoxContainer"]
-margin_top = 42.0
-margin_right = 333.0
-margin_bottom = 56.0
-align = 1
+layout_mode = 2
-[connection signal="about_to_show" from="." to="." method="_on_ShortcutSelectorDialog_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_ShortcutSelectorDialog_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_ShortcutSelectorDialog_confirmed"]
-[connection signal="popup_hide" from="." to="." method="_on_ShortcutSelectorDialog_popup_hide"]
[connection signal="focus_entered" from="VBoxContainer/EnteredShortcut" to="." method="_on_EnteredShortcut_focus_entered"]
[connection signal="focus_exited" from="VBoxContainer/EnteredShortcut" to="." method="_on_EnteredShortcut_focus_exited"]
[connection signal="item_selected" from="VBoxContainer/OptionButton" to="." method="_on_OptionButton_item_selected"]
+[connection signal="toggled" from="VBoxContainer/ModifierButtons/Alt" to="." method="_on_alt_toggled"]
+[connection signal="toggled" from="VBoxContainer/ModifierButtons/Shift" to="." method="_on_shift_toggled"]
+[connection signal="toggled" from="VBoxContainer/ModifierButtons/Control" to="." method="_on_control_toggled"]
+[connection signal="toggled" from="VBoxContainer/ModifierButtons/Meta" to="." method="_on_meta_toggled"]
+[connection signal="toggled" from="VBoxContainer/ModifierButtons/CommandOrControl" to="." method="_on_command_or_control_toggled"]
diff --git a/addons/keychain/assets/add.svg b/addons/keychain/assets/add.svg
index b0fdf8a3b51..afad08a2e0c 100644
--- a/addons/keychain/assets/add.svg
+++ b/addons/keychain/assets/add.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/add.svg.import b/addons/keychain/assets/add.svg.import
index 7437cee83be..7119d897979 100644
--- a/addons/keychain/assets/add.svg.import
+++ b/addons/keychain/assets/add.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/add.svg-4084e314648c872072757f9b0f544cf9.stex"
+type="CompressedTexture2D"
+uid="uid://c4433pa25cxp2"
+path="res://.godot/imported/add.svg-4084e314648c872072757f9b0f544cf9.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/add.svg"
-dest_files=[ "res://.import/add.svg-4084e314648c872072757f9b0f544cf9.stex" ]
+dest_files=["res://.godot/imported/add.svg-4084e314648c872072757f9b0f544cf9.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/close.svg b/addons/keychain/assets/close.svg
index fc587082c15..331727ab913 100644
--- a/addons/keychain/assets/close.svg
+++ b/addons/keychain/assets/close.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/close.svg.import b/addons/keychain/assets/close.svg.import
index 386cc270530..f5cbc7ba293 100644
--- a/addons/keychain/assets/close.svg.import
+++ b/addons/keychain/assets/close.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.stex"
+type="CompressedTexture2D"
+uid="uid://f1gcylay6c6f"
+path="res://.godot/imported/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/close.svg"
-dest_files=[ "res://.import/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.stex" ]
+dest_files=["res://.godot/imported/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/edit.svg b/addons/keychain/assets/edit.svg
index 925f7930bcc..6fc7ae012db 100644
--- a/addons/keychain/assets/edit.svg
+++ b/addons/keychain/assets/edit.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/edit.svg.import b/addons/keychain/assets/edit.svg.import
index 97e414ccff8..7e1f8f0007c 100644
--- a/addons/keychain/assets/edit.svg.import
+++ b/addons/keychain/assets/edit.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/edit.svg-cd9834545a8696f1e8611efa12a48f33.stex"
+type="CompressedTexture2D"
+uid="uid://df8gl3u2nqpl3"
+path="res://.godot/imported/edit.svg-cd9834545a8696f1e8611efa12a48f33.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/edit.svg"
-dest_files=[ "res://.import/edit.svg-cd9834545a8696f1e8611efa12a48f33.stex" ]
+dest_files=["res://.godot/imported/edit.svg-cd9834545a8696f1e8611efa12a48f33.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/folder.svg b/addons/keychain/assets/folder.svg
index 904f94b2929..c2def257ea0 100644
--- a/addons/keychain/assets/folder.svg
+++ b/addons/keychain/assets/folder.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/folder.svg.import b/addons/keychain/assets/folder.svg.import
index 6f338de44cd..da52faa774d 100644
--- a/addons/keychain/assets/folder.svg.import
+++ b/addons/keychain/assets/folder.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/folder.svg-490bb7e2d2aa4425de998b1d382cf534.stex"
+type="CompressedTexture2D"
+uid="uid://b0gbmkb8xwksb"
+path="res://.godot/imported/folder.svg-490bb7e2d2aa4425de998b1d382cf534.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/folder.svg"
-dest_files=[ "res://.import/folder.svg-490bb7e2d2aa4425de998b1d382cf534.stex" ]
+dest_files=["res://.godot/imported/folder.svg-490bb7e2d2aa4425de998b1d382cf534.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/joy_axis.svg.import b/addons/keychain/assets/joy_axis.svg.import
index bb97537f4cf..322d8196941 100644
--- a/addons/keychain/assets/joy_axis.svg.import
+++ b/addons/keychain/assets/joy_axis.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.stex"
+type="CompressedTexture2D"
+uid="uid://bb6q6om3d08cm"
+path="res://.godot/imported/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/joy_axis.svg"
-dest_files=[ "res://.import/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.stex" ]
+dest_files=["res://.godot/imported/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/joy_button.svg.import b/addons/keychain/assets/joy_button.svg.import
index d5662ed2ed5..22c1bada9ff 100644
--- a/addons/keychain/assets/joy_button.svg.import
+++ b/addons/keychain/assets/joy_button.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/joy_button.svg-df5663c6f296cab556e81b9c770699d0.stex"
+type="CompressedTexture2D"
+uid="uid://ca58ufal2ufd8"
+path="res://.godot/imported/joy_button.svg-df5663c6f296cab556e81b9c770699d0.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/joy_button.svg"
-dest_files=[ "res://.import/joy_button.svg-df5663c6f296cab556e81b9c770699d0.stex" ]
+dest_files=["res://.godot/imported/joy_button.svg-df5663c6f296cab556e81b9c770699d0.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/keyboard.svg b/addons/keychain/assets/keyboard.svg
index ab6755c8b4a..b9dfab71ed2 100644
--- a/addons/keychain/assets/keyboard.svg
+++ b/addons/keychain/assets/keyboard.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/keyboard.svg.import b/addons/keychain/assets/keyboard.svg.import
index a74b8cfdaee..9c67f4722f0 100644
--- a/addons/keychain/assets/keyboard.svg.import
+++ b/addons/keychain/assets/keyboard.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.stex"
+type="CompressedTexture2D"
+uid="uid://c2s5rm4nec5yh"
+path="res://.godot/imported/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/keyboard.svg"
-dest_files=[ "res://.import/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.stex" ]
+dest_files=["res://.godot/imported/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/keyboard_physical.svg b/addons/keychain/assets/keyboard_physical.svg
index f12cd461188..4364e0b4fa5 100644
--- a/addons/keychain/assets/keyboard_physical.svg
+++ b/addons/keychain/assets/keyboard_physical.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/keyboard_physical.svg.import b/addons/keychain/assets/keyboard_physical.svg.import
index d25f2aed7d6..b6e1c826751 100644
--- a/addons/keychain/assets/keyboard_physical.svg.import
+++ b/addons/keychain/assets/keyboard_physical.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.stex"
+type="CompressedTexture2D"
+uid="uid://cmh8eaibhn5y8"
+path="res://.godot/imported/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/keyboard_physical.svg"
-dest_files=[ "res://.import/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.stex" ]
+dest_files=["res://.godot/imported/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/mouse.svg b/addons/keychain/assets/mouse.svg
index 2dcc03e12ec..217512085e9 100644
--- a/addons/keychain/assets/mouse.svg
+++ b/addons/keychain/assets/mouse.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/mouse.svg.import b/addons/keychain/assets/mouse.svg.import
index ad38c3a71cc..af0251b6a72 100644
--- a/addons/keychain/assets/mouse.svg.import
+++ b/addons/keychain/assets/mouse.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.stex"
+type="CompressedTexture2D"
+uid="uid://bma7xj2rqqcr8"
+path="res://.godot/imported/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/mouse.svg"
-dest_files=[ "res://.import/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.stex" ]
+dest_files=["res://.godot/imported/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/assets/shortcut.svg b/addons/keychain/assets/shortcut.svg
index 87b1a40e482..4ef16f0401a 100644
--- a/addons/keychain/assets/shortcut.svg
+++ b/addons/keychain/assets/shortcut.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/addons/keychain/assets/shortcut.svg.import b/addons/keychain/assets/shortcut.svg.import
index c690e79acb7..ab7ac36d797 100644
--- a/addons/keychain/assets/shortcut.svg.import
+++ b/addons/keychain/assets/shortcut.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/shortcut.svg-401daac18a817142e2b29e5801e00053.stex"
+type="CompressedTexture2D"
+uid="uid://bmi24jp4fqi7k"
+path="res://.godot/imported/shortcut.svg-401daac18a817142e2b29e5801e00053.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://addons/keychain/assets/shortcut.svg"
-dest_files=[ "res://.import/shortcut.svg-401daac18a817142e2b29e5801e00053.stex" ]
+dest_files=["res://.godot/imported/shortcut.svg-401daac18a817142e2b29e5801e00053.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/addons/keychain/plugin.cfg b/addons/keychain/plugin.cfg
index 36bf2f63e7b..095c8eef529 100644
--- a/addons/keychain/plugin.cfg
+++ b/addons/keychain/plugin.cfg
@@ -3,5 +3,5 @@
name="Keychain"
description="A plugin for the Godot Engine that aims to give the player full control over the input actions of the game."
author="Orama Interactive"
-version="1.1"
+version="2.0"
script="plugin.gd"
diff --git a/addons/keychain/plugin.gd b/addons/keychain/plugin.gd
index 0eee623e340..1eb1d3c73eb 100644
--- a/addons/keychain/plugin.gd
+++ b/addons/keychain/plugin.gd
@@ -1,4 +1,4 @@
-tool
+@tool
extends EditorPlugin
diff --git a/addons/keychain/profiles/default.tres b/addons/keychain/profiles/default.tres
index ce74da48503..b952157427e 100644
--- a/addons/keychain/profiles/default.tres
+++ b/addons/keychain/profiles/default.tres
@@ -1,10 +1,9 @@
-[gd_resource type="Resource" load_steps=2 format=2]
+[gd_resource type="Resource" script_class="ShortcutProfile" load_steps=2 format=3 uid="uid://df04uev1epmmo"]
-[ext_resource path="res://addons/keychain/ShortcutProfile.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://addons/keychain/ShortcutProfile.gd" id="1"]
[resource]
-script = ExtResource( 1 )
+script = ExtResource("1")
name = "Default"
customizable = false
-bindings = {
-}
+bindings = {}
diff --git a/assets/dither-matrices/bayer16.png.import b/assets/dither-matrices/bayer16.png.import
index cc50d8a4500..a31f0f23778 100644
--- a/assets/dither-matrices/bayer16.png.import
+++ b/assets/dither-matrices/bayer16.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.stex"
+type="CompressedTexture2D"
+uid="uid://cdtpmo4pjjjdd"
+path="res://.godot/imported/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/dither-matrices/bayer16.png"
-dest_files=[ "res://.import/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.stex" ]
+dest_files=["res://.godot/imported/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=1
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/dither-matrices/bayer2.png.import b/assets/dither-matrices/bayer2.png.import
index f2615956578..3b4d40593f7 100644
--- a/assets/dither-matrices/bayer2.png.import
+++ b/assets/dither-matrices/bayer2.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.stex"
+type="CompressedTexture2D"
+uid="uid://cdoxrolk7qdju"
+path="res://.godot/imported/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/dither-matrices/bayer2.png"
-dest_files=[ "res://.import/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.stex" ]
+dest_files=["res://.godot/imported/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=1
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/dither-matrices/bayer4.png.import b/assets/dither-matrices/bayer4.png.import
index 5a072bef8e7..7cc9104f962 100644
--- a/assets/dither-matrices/bayer4.png.import
+++ b/assets/dither-matrices/bayer4.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.stex"
+type="CompressedTexture2D"
+uid="uid://oald6mp1l1h7"
+path="res://.godot/imported/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/dither-matrices/bayer4.png"
-dest_files=[ "res://.import/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.stex" ]
+dest_files=["res://.godot/imported/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=1
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/dither-matrices/bayer8.png.import b/assets/dither-matrices/bayer8.png.import
index 483cea2ad04..530a9bf37f7 100644
--- a/assets/dither-matrices/bayer8.png.import
+++ b/assets/dither-matrices/bayer8.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.stex"
+type="CompressedTexture2D"
+uid="uid://bq45j7jxav8nw"
+path="res://.godot/imported/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/dither-matrices/bayer8.png"
-dest_files=[ "res://.import/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.stex" ]
+dest_files=["res://.godot/imported/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=1
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/fonts/DroidSansFallback-License.txt b/assets/fonts/DroidSansFallback-License.txt
deleted file mode 100644
index 1a96dfde6c2..00000000000
--- a/assets/fonts/DroidSansFallback-License.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (C) 2008 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-##########
-
-This directory contains the fonts for the platform. They are licensed
-under the Apache 2 license.
diff --git a/assets/fonts/DroidSansFallback.ttf b/assets/fonts/DroidSansFallback.ttf
deleted file mode 100644
index 61460b1f9df..00000000000
Binary files a/assets/fonts/DroidSansFallback.ttf and /dev/null differ
diff --git a/assets/fonts/Roboto-Big.tres b/assets/fonts/Roboto-Big.tres
deleted file mode 100644
index 2721e19cac5..00000000000
--- a/assets/fonts/Roboto-Big.tres
+++ /dev/null
@@ -1,10 +0,0 @@
-[gd_resource type="DynamicFont" load_steps=3 format=2]
-
-[ext_resource path="res://assets/fonts/Roboto-Regular.ttf" type="DynamicFontData" id=1]
-[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2]
-
-[resource]
-use_mipmaps = true
-use_filter = true
-font_data = ExtResource( 1 )
-fallback/0 = ExtResource( 2 )
diff --git a/assets/fonts/Roboto-Italic.tres b/assets/fonts/Roboto-Italic.tres
deleted file mode 100644
index b4fcaac7c7b..00000000000
--- a/assets/fonts/Roboto-Italic.tres
+++ /dev/null
@@ -1,11 +0,0 @@
-[gd_resource type="DynamicFont" load_steps=3 format=2]
-
-[ext_resource path="res://assets/fonts/Roboto-Italic.ttf" type="DynamicFontData" id=1]
-[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2]
-
-[resource]
-size = 12
-use_mipmaps = true
-use_filter = true
-font_data = ExtResource( 1 )
-fallback/0 = ExtResource( 2 )
diff --git a/assets/fonts/Roboto-Italic.ttf.import b/assets/fonts/Roboto-Italic.ttf.import
new file mode 100644
index 00000000000..0e97040ef24
--- /dev/null
+++ b/assets/fonts/Roboto-Italic.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cy5lkye8vdr5t"
+path="res://.godot/imported/Roboto-Italic.ttf-1459ab7510a4240cd642ef0fe9caff7f.fontdata"
+
+[deps]
+
+source_file="res://assets/fonts/Roboto-Italic.ttf"
+dest_files=["res://.godot/imported/Roboto-Italic.ttf-1459ab7510a4240cd642ef0fe9caff7f.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/fonts/Roboto-Regular.tres b/assets/fonts/Roboto-Regular.tres
deleted file mode 100644
index d8e5b485e70..00000000000
--- a/assets/fonts/Roboto-Regular.tres
+++ /dev/null
@@ -1,11 +0,0 @@
-[gd_resource type="DynamicFont" load_steps=3 format=2]
-
-[ext_resource path="res://assets/fonts/Roboto-Regular.ttf" type="DynamicFontData" id=1]
-[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2]
-
-[resource]
-size = 12
-use_mipmaps = true
-use_filter = true
-font_data = ExtResource( 1 )
-fallback/0 = ExtResource( 2 )
diff --git a/assets/fonts/Roboto-Regular.ttf.import b/assets/fonts/Roboto-Regular.ttf.import
new file mode 100644
index 00000000000..5a7e24eaa7a
--- /dev/null
+++ b/assets/fonts/Roboto-Regular.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cvc4lelf6hl7x"
+path="res://.godot/imported/Roboto-Regular.ttf-e67097a08cc051e6b179dbaab401b2bc.fontdata"
+
+[deps]
+
+source_file="res://assets/fonts/Roboto-Regular.ttf"
+dest_files=["res://.godot/imported/Roboto-Regular.ttf-e67097a08cc051e6b179dbaab401b2bc.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/fonts/Roboto-Small.tres b/assets/fonts/Roboto-Small.tres
deleted file mode 100644
index c4d999caed4..00000000000
--- a/assets/fonts/Roboto-Small.tres
+++ /dev/null
@@ -1,10 +0,0 @@
-[gd_resource type="DynamicFont" load_steps=3 format=2]
-
-[ext_resource path="res://assets/fonts/Roboto-Regular.ttf" type="DynamicFontData" id=1]
-[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2]
-
-[resource]
-size = 10
-use_mipmaps = true
-font_data = ExtResource( 1 )
-fallback/0 = ExtResource( 2 )
diff --git a/assets/graphics/circle_9x9.png.import b/assets/graphics/circle_9x9.png.import
index 4fb3dabbf2b..d2a3e6f1a86 100644
--- a/assets/graphics/circle_9x9.png.import
+++ b/assets/graphics/circle_9x9.png.import
@@ -2,12 +2,13 @@
importer="image"
type="Image"
-path="res://.import/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image"
+uid="uid://bccayivs7v851"
+path="res://.godot/imported/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image"
[deps]
source_file="res://assets/graphics/circle_9x9.png"
-dest_files=[ "res://.import/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image" ]
+dest_files=["res://.godot/imported/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image"]
[params]
diff --git a/assets/graphics/circle_filled_9x9.png.import b/assets/graphics/circle_filled_9x9.png.import
index e1e79fc900c..69d05332b45 100644
--- a/assets/graphics/circle_filled_9x9.png.import
+++ b/assets/graphics/circle_filled_9x9.png.import
@@ -2,12 +2,13 @@
importer="image"
type="Image"
-path="res://.import/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image"
+uid="uid://0rkdth7xh8ah"
+path="res://.godot/imported/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image"
[deps]
source_file="res://assets/graphics/circle_filled_9x9.png"
-dest_files=[ "res://.import/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image" ]
+dest_files=["res://.godot/imported/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image"]
[params]
diff --git a/assets/graphics/cursor.png.import b/assets/graphics/cursor.png.import
index 3ea87ca1251..a8a740d74ce 100644
--- a/assets/graphics/cursor.png.import
+++ b/assets/graphics/cursor.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.stex"
+type="CompressedTexture2D"
+uid="uid://busi7lojhqxgq"
+path="res://.godot/imported/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/cursor.png"
-dest_files=[ "res://.import/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.stex" ]
+dest_files=["res://.godot/imported/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/dotted_line.png.import b/assets/graphics/dotted_line.png.import
index e37bc2484e6..d0ad9172a27 100644
--- a/assets/graphics/dotted_line.png.import
+++ b/assets/graphics/dotted_line.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.stex"
+type="CompressedTexture2D"
+uid="uid://xnqvppcpt7jb"
+path="res://.godot/imported/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/dotted_line.png"
-dest_files=[ "res://.import/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.stex" ]
+dest_files=["res://.godot/imported/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=1
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gizmos/directional_light.svg.import b/assets/graphics/gizmos/directional_light.svg.import
index 0f9e25737b6..dab7d548234 100644
--- a/assets/graphics/gizmos/directional_light.svg.import
+++ b/assets/graphics/gizmos/directional_light.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/directional_light.svg-093cdb9a72dee590271da014181a4680.stex"
+type="CompressedTexture2D"
+uid="uid://bd25ysikhyhqn"
+path="res://.godot/imported/directional_light.svg-093cdb9a72dee590271da014181a4680.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://assets/graphics/gizmos/directional_light.svg"
-dest_files=[ "res://.import/directional_light.svg-093cdb9a72dee590271da014181a4680.stex" ]
+dest_files=["res://.godot/imported/directional_light.svg-093cdb9a72dee590271da014181a4680.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/gizmos/omni_light.svg.import b/assets/graphics/gizmos/omni_light.svg.import
index 886848a9997..a1cc97b7eaf 100644
--- a/assets/graphics/gizmos/omni_light.svg.import
+++ b/assets/graphics/gizmos/omni_light.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.stex"
+type="CompressedTexture2D"
+uid="uid://cu38hb880ltae"
+path="res://.godot/imported/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://assets/graphics/gizmos/omni_light.svg"
-dest_files=[ "res://.import/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.stex" ]
+dest_files=["res://.godot/imported/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/gizmos/spot_light.svg.import b/assets/graphics/gizmos/spot_light.svg.import
index a8040fae612..ab9a3405575 100644
--- a/assets/graphics/gizmos/spot_light.svg.import
+++ b/assets/graphics/gizmos/spot_light.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.stex"
+type="CompressedTexture2D"
+uid="uid://ded88bscdjle8"
+path="res://.godot/imported/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://assets/graphics/gizmos/spot_light.svg"
-dest_files=[ "res://.import/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.stex" ]
+dest_files=["res://.godot/imported/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/icons/icon.png.import b/assets/graphics/icons/icon.png.import
index 29af9a99ac1..742e24bbb46 100644
--- a/assets/graphics/icons/icon.png.import
+++ b/assets/graphics/icons/icon.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.stex"
+type="CompressedTexture2D"
+uid="uid://b47r0c6auaqk6"
+path="res://.godot/imported/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/icons/icon.png"
-dest_files=[ "res://.import/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.stex" ]
+dest_files=["res://.godot/imported/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/clone.png.import b/assets/graphics/layers/clone.png.import
index 5241134ac94..2564dc1488c 100644
--- a/assets/graphics/layers/clone.png.import
+++ b/assets/graphics/layers/clone.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/clone.png-04ad708db9ea2b00606e50fe99f4ca29.stex"
+type="CompressedTexture2D"
+uid="uid://d3gx4phcox58s"
+path="res://.godot/imported/clone.png-04ad708db9ea2b00606e50fe99f4ca29.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/clone.png"
-dest_files=[ "res://.import/clone.png-04ad708db9ea2b00606e50fe99f4ca29.stex" ]
+dest_files=["res://.godot/imported/clone.png-04ad708db9ea2b00606e50fe99f4ca29.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/delete.png.import b/assets/graphics/layers/delete.png.import
index 55dc4554064..d61be7fb1eb 100644
--- a/assets/graphics/layers/delete.png.import
+++ b/assets/graphics/layers/delete.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/delete.png-78cc7779425d13dd019b2b6b51aca5b2.stex"
+type="CompressedTexture2D"
+uid="uid://x2k652y15v04"
+path="res://.godot/imported/delete.png-78cc7779425d13dd019b2b6b51aca5b2.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/delete.png"
-dest_files=[ "res://.import/delete.png-78cc7779425d13dd019b2b6b51aca5b2.stex" ]
+dest_files=["res://.godot/imported/delete.png-78cc7779425d13dd019b2b6b51aca5b2.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/group_collapsed.png.import b/assets/graphics/layers/group_collapsed.png.import
index 83ac242ef69..fc3e4c5cdf0 100644
--- a/assets/graphics/layers/group_collapsed.png.import
+++ b/assets/graphics/layers/group_collapsed.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.stex"
+type="CompressedTexture2D"
+uid="uid://d11kh3e3nq1l5"
+path="res://.godot/imported/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/group_collapsed.png"
-dest_files=[ "res://.import/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.stex" ]
+dest_files=["res://.godot/imported/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/group_expanded.png.import b/assets/graphics/layers/group_expanded.png.import
index 9c8eff2dd93..660a0d26507 100644
--- a/assets/graphics/layers/group_expanded.png.import
+++ b/assets/graphics/layers/group_expanded.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.stex"
+type="CompressedTexture2D"
+uid="uid://dndlglvqc7v6a"
+path="res://.godot/imported/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/group_expanded.png"
-dest_files=[ "res://.import/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.stex" ]
+dest_files=["res://.godot/imported/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/group_new.png.import b/assets/graphics/layers/group_new.png.import
index 904b6b0bd6f..73ab0710ded 100644
--- a/assets/graphics/layers/group_new.png.import
+++ b/assets/graphics/layers/group_new.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.stex"
+type="CompressedTexture2D"
+uid="uid://cmgnc2emsbxni"
+path="res://.godot/imported/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/group_new.png"
-dest_files=[ "res://.import/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.stex" ]
+dest_files=["res://.godot/imported/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/layer_invisible.png.import b/assets/graphics/layers/layer_invisible.png.import
index 3cb9cc47bc7..46376e521d8 100644
--- a/assets/graphics/layers/layer_invisible.png.import
+++ b/assets/graphics/layers/layer_invisible.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.stex"
+type="CompressedTexture2D"
+uid="uid://dwqdm6pllnipj"
+path="res://.godot/imported/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/layer_invisible.png"
-dest_files=[ "res://.import/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.stex" ]
+dest_files=["res://.godot/imported/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/layer_visible.png.import b/assets/graphics/layers/layer_visible.png.import
index 3f3a47df6f6..28024064957 100644
--- a/assets/graphics/layers/layer_visible.png.import
+++ b/assets/graphics/layers/layer_visible.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.stex"
+type="CompressedTexture2D"
+uid="uid://c2b3htff5yox8"
+path="res://.godot/imported/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/layer_visible.png"
-dest_files=[ "res://.import/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.stex" ]
+dest_files=["res://.godot/imported/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/linked_layer.png.import b/assets/graphics/layers/linked_layer.png.import
index 635f6fcb260..0ad2f04186a 100644
--- a/assets/graphics/layers/linked_layer.png.import
+++ b/assets/graphics/layers/linked_layer.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.stex"
+type="CompressedTexture2D"
+uid="uid://brxdpqcx5g7v2"
+path="res://.godot/imported/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/linked_layer.png"
-dest_files=[ "res://.import/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.stex" ]
+dest_files=["res://.godot/imported/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/lock.png.import b/assets/graphics/layers/lock.png.import
index ad321455ac4..fd83c888c40 100644
--- a/assets/graphics/layers/lock.png.import
+++ b/assets/graphics/layers/lock.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.stex"
+type="CompressedTexture2D"
+uid="uid://des606sdhau2i"
+path="res://.godot/imported/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/lock.png"
-dest_files=[ "res://.import/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.stex" ]
+dest_files=["res://.godot/imported/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/merge_down.png.import b/assets/graphics/layers/merge_down.png.import
index fbd4883da5f..f42ff5c8a8b 100644
--- a/assets/graphics/layers/merge_down.png.import
+++ b/assets/graphics/layers/merge_down.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.stex"
+type="CompressedTexture2D"
+uid="uid://bx1xa5aacxfx4"
+path="res://.godot/imported/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/merge_down.png"
-dest_files=[ "res://.import/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.stex" ]
+dest_files=["res://.godot/imported/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/move_down.png.import b/assets/graphics/layers/move_down.png.import
index 6df051ce4a9..9b7a10382f7 100644
--- a/assets/graphics/layers/move_down.png.import
+++ b/assets/graphics/layers/move_down.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/move_down.png-5c0dcaa0f2a312e278777265b5650041.stex"
+type="CompressedTexture2D"
+uid="uid://dmhauk0dee42v"
+path="res://.godot/imported/move_down.png-5c0dcaa0f2a312e278777265b5650041.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/move_down.png"
-dest_files=[ "res://.import/move_down.png-5c0dcaa0f2a312e278777265b5650041.stex" ]
+dest_files=["res://.godot/imported/move_down.png-5c0dcaa0f2a312e278777265b5650041.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/move_up.png.import b/assets/graphics/layers/move_up.png.import
index b7dfeff71d6..02ef8cd0108 100644
--- a/assets/graphics/layers/move_up.png.import
+++ b/assets/graphics/layers/move_up.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/move_up.png-2e639f267f2670e8bc72d0101082d31e.stex"
+type="CompressedTexture2D"
+uid="uid://c7bha4a6x4bav"
+path="res://.godot/imported/move_up.png-2e639f267f2670e8bc72d0101082d31e.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/move_up.png"
-dest_files=[ "res://.import/move_up.png-2e639f267f2670e8bc72d0101082d31e.stex" ]
+dest_files=["res://.godot/imported/move_up.png-2e639f267f2670e8bc72d0101082d31e.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/new.png.import b/assets/graphics/layers/new.png.import
index 148317df3f9..4e68a57cedf 100644
--- a/assets/graphics/layers/new.png.import
+++ b/assets/graphics/layers/new.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/new.png-0807d977a6b977842f10a56051eb0c7b.stex"
+type="CompressedTexture2D"
+uid="uid://d36mlbmq06q4e"
+path="res://.godot/imported/new.png-0807d977a6b977842f10a56051eb0c7b.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/new.png"
-dest_files=[ "res://.import/new.png-0807d977a6b977842f10a56051eb0c7b.stex" ]
+dest_files=["res://.godot/imported/new.png-0807d977a6b977842f10a56051eb0c7b.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/unlinked_layer.png.import b/assets/graphics/layers/unlinked_layer.png.import
index bf88889d8e1..e52d179769d 100644
--- a/assets/graphics/layers/unlinked_layer.png.import
+++ b/assets/graphics/layers/unlinked_layer.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.stex"
+type="CompressedTexture2D"
+uid="uid://cofw1x6chh4i"
+path="res://.godot/imported/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/unlinked_layer.png"
-dest_files=[ "res://.import/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.stex" ]
+dest_files=["res://.godot/imported/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/layers/unlock.png.import b/assets/graphics/layers/unlock.png.import
index a1cb0bb447c..560b0f0959b 100644
--- a/assets/graphics/layers/unlock.png.import
+++ b/assets/graphics/layers/unlock.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.stex"
+type="CompressedTexture2D"
+uid="uid://dhc0pnnqojd2m"
+path="res://.godot/imported/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/layers/unlock.png"
-dest_files=[ "res://.import/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.stex" ]
+dest_files=["res://.godot/imported/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/animate.png.import b/assets/graphics/misc/animate.png.import
index 2d3817f74b4..bf39584dfd8 100644
--- a/assets/graphics/misc/animate.png.import
+++ b/assets/graphics/misc/animate.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/animate.png-79364ccdc41b6325d06915e85b554b1e.stex"
+type="CompressedTexture2D"
+uid="uid://blrd4x0ma7b3h"
+path="res://.godot/imported/animate.png-79364ccdc41b6325d06915e85b554b1e.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/animate.png"
-dest_files=[ "res://.import/animate.png-79364ccdc41b6325d06915e85b554b1e.stex" ]
+dest_files=["res://.godot/imported/animate.png-79364ccdc41b6325d06915e85b554b1e.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/check.png.import b/assets/graphics/misc/check.png.import
index 8e108e2eb9f..e89c25901c9 100644
--- a/assets/graphics/misc/check.png.import
+++ b/assets/graphics/misc/check.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/check.png-0fc65a6dd56b2296f9f8446beb7b136a.stex"
+type="CompressedTexture2D"
+uid="uid://heqfoai5j8p"
+path="res://.godot/imported/check.png-0fc65a6dd56b2296f9f8446beb7b136a.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/check.png"
-dest_files=[ "res://.import/check.png-0fc65a6dd56b2296f9f8446beb7b136a.stex" ]
+dest_files=["res://.godot/imported/check.png-0fc65a6dd56b2296f9f8446beb7b136a.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/color_defaults.png.import b/assets/graphics/misc/color_defaults.png.import
index e73c99df02f..c816142b61f 100644
--- a/assets/graphics/misc/color_defaults.png.import
+++ b/assets/graphics/misc/color_defaults.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.stex"
+type="CompressedTexture2D"
+uid="uid://dkpxkdk1xf0ea"
+path="res://.godot/imported/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/color_defaults.png"
-dest_files=[ "res://.import/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.stex" ]
+dest_files=["res://.godot/imported/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/color_switch.png.import b/assets/graphics/misc/color_switch.png.import
index 183792000d7..4820e84f83c 100644
--- a/assets/graphics/misc/color_switch.png.import
+++ b/assets/graphics/misc/color_switch.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.stex"
+type="CompressedTexture2D"
+uid="uid://d0v821l01w7go"
+path="res://.godot/imported/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/color_switch.png"
-dest_files=[ "res://.import/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.stex" ]
+dest_files=["res://.godot/imported/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/dynamics.png.import b/assets/graphics/misc/dynamics.png.import
index 4d6142134f0..e61d019119a 100644
--- a/assets/graphics/misc/dynamics.png.import
+++ b/assets/graphics/misc/dynamics.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.stex"
+type="CompressedTexture2D"
+uid="uid://dg3dumyfj1682"
+path="res://.godot/imported/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/dynamics.png"
-dest_files=[ "res://.import/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.stex" ]
+dest_files=["res://.godot/imported/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/horizontal_mirror_off.png.import b/assets/graphics/misc/horizontal_mirror_off.png.import
index e0d0bd61535..a76b63caeea 100644
--- a/assets/graphics/misc/horizontal_mirror_off.png.import
+++ b/assets/graphics/misc/horizontal_mirror_off.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.stex"
+type="CompressedTexture2D"
+uid="uid://cjrokejjsp5dm"
+path="res://.godot/imported/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/horizontal_mirror_off.png"
-dest_files=[ "res://.import/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.stex" ]
+dest_files=["res://.godot/imported/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/horizontal_mirror_on.png.import b/assets/graphics/misc/horizontal_mirror_on.png.import
index e863fc54b01..e0490bba02b 100644
--- a/assets/graphics/misc/horizontal_mirror_on.png.import
+++ b/assets/graphics/misc/horizontal_mirror_on.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.stex"
+type="CompressedTexture2D"
+uid="uid://38kahqv1fdiu"
+path="res://.godot/imported/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/horizontal_mirror_on.png"
-dest_files=[ "res://.import/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.stex" ]
+dest_files=["res://.godot/imported/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/icon_reload.png.import b/assets/graphics/misc/icon_reload.png.import
index 53b233cd394..aed04a3c839 100644
--- a/assets/graphics/misc/icon_reload.png.import
+++ b/assets/graphics/misc/icon_reload.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.stex"
+type="CompressedTexture2D"
+uid="uid://bv7ldl8obhawm"
+path="res://.godot/imported/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/icon_reload.png"
-dest_files=[ "res://.import/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.stex" ]
+dest_files=["res://.godot/imported/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/landscape.png.import b/assets/graphics/misc/landscape.png.import
index bd0822c9b3a..bf98aca9a5e 100644
--- a/assets/graphics/misc/landscape.png.import
+++ b/assets/graphics/misc/landscape.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/landscape.png-06f6d4634b998fafceba8617ed995411.stex"
+type="CompressedTexture2D"
+uid="uid://0vc1pn1sn2ud"
+path="res://.godot/imported/landscape.png-06f6d4634b998fafceba8617ed995411.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/landscape.png"
-dest_files=[ "res://.import/landscape.png-06f6d4634b998fafceba8617ed995411.stex" ]
+dest_files=["res://.godot/imported/landscape.png-06f6d4634b998fafceba8617ed995411.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/lock_aspect.png.import b/assets/graphics/misc/lock_aspect.png.import
index a9edbf1ca82..1ea22935c7c 100644
--- a/assets/graphics/misc/lock_aspect.png.import
+++ b/assets/graphics/misc/lock_aspect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.stex"
+type="CompressedTexture2D"
+uid="uid://beqermx8s5q8y"
+path="res://.godot/imported/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/lock_aspect.png"
-dest_files=[ "res://.import/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.stex" ]
+dest_files=["res://.godot/imported/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/lock_aspect_2.png.import b/assets/graphics/misc/lock_aspect_2.png.import
index 7ffd846712a..1e950d7dad5 100644
--- a/assets/graphics/misc/lock_aspect_2.png.import
+++ b/assets/graphics/misc/lock_aspect_2.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.stex"
+type="CompressedTexture2D"
+uid="uid://cancw70yw0pv7"
+path="res://.godot/imported/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/lock_aspect_2.png"
-dest_files=[ "res://.import/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.stex" ]
+dest_files=["res://.godot/imported/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/lock_aspect_guides.png.import b/assets/graphics/misc/lock_aspect_guides.png.import
index 1ecc4c44ff8..5222b3e84e9 100644
--- a/assets/graphics/misc/lock_aspect_guides.png.import
+++ b/assets/graphics/misc/lock_aspect_guides.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.stex"
+type="CompressedTexture2D"
+uid="uid://kd10jfc1dxf5"
+path="res://.godot/imported/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/lock_aspect_guides.png"
-dest_files=[ "res://.import/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.stex" ]
+dest_files=["res://.godot/imported/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/locked_size.png.import b/assets/graphics/misc/locked_size.png.import
index bcfe69e1744..4174545d512 100644
--- a/assets/graphics/misc/locked_size.png.import
+++ b/assets/graphics/misc/locked_size.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/locked_size.png-05ec97950456a9ee42557d3414337309.stex"
+type="CompressedTexture2D"
+uid="uid://cq0uqutw8r8wi"
+path="res://.godot/imported/locked_size.png-05ec97950456a9ee42557d3414337309.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/locked_size.png"
-dest_files=[ "res://.import/locked_size.png-05ec97950456a9ee42557d3414337309.stex" ]
+dest_files=["res://.godot/imported/locked_size.png-05ec97950456a9ee42557d3414337309.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/pixel_perfect_off.png.import b/assets/graphics/misc/pixel_perfect_off.png.import
index f0abb0e186d..70ad1934fba 100644
--- a/assets/graphics/misc/pixel_perfect_off.png.import
+++ b/assets/graphics/misc/pixel_perfect_off.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.stex"
+type="CompressedTexture2D"
+uid="uid://22h12g8p3jtd"
+path="res://.godot/imported/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/pixel_perfect_off.png"
-dest_files=[ "res://.import/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.stex" ]
+dest_files=["res://.godot/imported/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/pixel_perfect_on.png.import b/assets/graphics/misc/pixel_perfect_on.png.import
index dd1f8108a7e..cc09c8fafa9 100644
--- a/assets/graphics/misc/pixel_perfect_on.png.import
+++ b/assets/graphics/misc/pixel_perfect_on.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.stex"
+type="CompressedTexture2D"
+uid="uid://ckx4ua0ecg4xq"
+path="res://.godot/imported/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/pixel_perfect_on.png"
-dest_files=[ "res://.import/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.stex" ]
+dest_files=["res://.godot/imported/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/portrait.png.import b/assets/graphics/misc/portrait.png.import
index 18a48b5dfaf..0cb861c3721 100644
--- a/assets/graphics/misc/portrait.png.import
+++ b/assets/graphics/misc/portrait.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.stex"
+type="CompressedTexture2D"
+uid="uid://kj867tldofxi"
+path="res://.godot/imported/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/portrait.png"
-dest_files=[ "res://.import/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.stex" ]
+dest_files=["res://.godot/imported/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/uncheck.png.import b/assets/graphics/misc/uncheck.png.import
index 16eeadfca9e..6f37d68a4c2 100644
--- a/assets/graphics/misc/uncheck.png.import
+++ b/assets/graphics/misc/uncheck.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.stex"
+type="CompressedTexture2D"
+uid="uid://di8au2u87jgv5"
+path="res://.godot/imported/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/uncheck.png"
-dest_files=[ "res://.import/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.stex" ]
+dest_files=["res://.godot/imported/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/unlocked_size.png.import b/assets/graphics/misc/unlocked_size.png.import
index bbca431f977..5b1361ad530 100644
--- a/assets/graphics/misc/unlocked_size.png.import
+++ b/assets/graphics/misc/unlocked_size.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/unlocked_size.png-bd224f1987da9100f208bda51349ff67.stex"
+type="CompressedTexture2D"
+uid="uid://bgrq56ndc4ydj"
+path="res://.godot/imported/unlocked_size.png-bd224f1987da9100f208bda51349ff67.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/unlocked_size.png"
-dest_files=[ "res://.import/unlocked_size.png-bd224f1987da9100f208bda51349ff67.stex" ]
+dest_files=["res://.godot/imported/unlocked_size.png-bd224f1987da9100f208bda51349ff67.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/value_arrow.svg.import b/assets/graphics/misc/value_arrow.svg.import
index 4be56869a29..87f879050c3 100644
--- a/assets/graphics/misc/value_arrow.svg.import
+++ b/assets/graphics/misc/value_arrow.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.stex"
+type="CompressedTexture2D"
+uid="uid://ct8wn8m6x4m54"
+path="res://.godot/imported/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/value_arrow.svg"
-dest_files=[ "res://.import/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.stex" ]
+dest_files=["res://.godot/imported/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/misc/value_arrow_hover.svg.import b/assets/graphics/misc/value_arrow_hover.svg.import
index ee7fcb9cf32..1789dbba2d3 100644
--- a/assets/graphics/misc/value_arrow_hover.svg.import
+++ b/assets/graphics/misc/value_arrow_hover.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.stex"
+type="CompressedTexture2D"
+uid="uid://bq8h66v4ie8xl"
+path="res://.godot/imported/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/value_arrow_hover.svg"
-dest_files=[ "res://.import/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.stex" ]
+dest_files=["res://.godot/imported/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/misc/value_arrow_press.svg.import b/assets/graphics/misc/value_arrow_press.svg.import
index ed7b08133e8..d6ad0e715a1 100644
--- a/assets/graphics/misc/value_arrow_press.svg.import
+++ b/assets/graphics/misc/value_arrow_press.svg.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.stex"
+type="CompressedTexture2D"
+uid="uid://hhxenhteahv6"
+path="res://.godot/imported/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,27 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/value_arrow_press.svg"
-dest_files=[ "res://.import/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.stex" ]
+dest_files=["res://.godot/imported/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/misc/value_slider.png.import b/assets/graphics/misc/value_slider.png.import
index cbad17ed9a0..0b0250c1d53 100644
--- a/assets/graphics/misc/value_slider.png.import
+++ b/assets/graphics/misc/value_slider.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/value_slider.png-1923f0534fe53aef508cb99231851c39.stex"
+type="CompressedTexture2D"
+uid="uid://c7u0yofrpm50a"
+path="res://.godot/imported/value_slider.png-1923f0534fe53aef508cb99231851c39.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/value_slider.png"
-dest_files=[ "res://.import/value_slider.png-1923f0534fe53aef508cb99231851c39.stex" ]
+dest_files=["res://.godot/imported/value_slider.png-1923f0534fe53aef508cb99231851c39.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/vertical_mirror_off.png.import b/assets/graphics/misc/vertical_mirror_off.png.import
index 74424094c36..292836cc1b9 100644
--- a/assets/graphics/misc/vertical_mirror_off.png.import
+++ b/assets/graphics/misc/vertical_mirror_off.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.stex"
+type="CompressedTexture2D"
+uid="uid://hiduvaa73fr6"
+path="res://.godot/imported/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/vertical_mirror_off.png"
-dest_files=[ "res://.import/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.stex" ]
+dest_files=["res://.godot/imported/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/misc/vertical_mirror_on.png.import b/assets/graphics/misc/vertical_mirror_on.png.import
index 9c38fb23439..4bcb6254bfd 100644
--- a/assets/graphics/misc/vertical_mirror_on.png.import
+++ b/assets/graphics/misc/vertical_mirror_on.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.stex"
+type="CompressedTexture2D"
+uid="uid://di0v6f5osw0id"
+path="res://.godot/imported/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/misc/vertical_mirror_on.png"
-dest_files=[ "res://.import/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.stex" ]
+dest_files=["res://.godot/imported/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/palette/add.png.import b/assets/graphics/palette/add.png.import
index 496837affd7..4e23cf4e15c 100644
--- a/assets/graphics/palette/add.png.import
+++ b/assets/graphics/palette/add.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.stex"
+type="CompressedTexture2D"
+uid="uid://b7ydn1tt37rcl"
+path="res://.godot/imported/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/palette/add.png"
-dest_files=[ "res://.import/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.stex" ]
+dest_files=["res://.godot/imported/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/palette/edit.png.import b/assets/graphics/palette/edit.png.import
index 8b20d2a08e5..5a7816fb9a3 100644
--- a/assets/graphics/palette/edit.png.import
+++ b/assets/graphics/palette/edit.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/edit.png-69d6fa919970bb9987f02f09190d3661.stex"
+type="CompressedTexture2D"
+uid="uid://biyn51upnlxle"
+path="res://.godot/imported/edit.png-69d6fa919970bb9987f02f09190d3661.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/palette/edit.png"
-dest_files=[ "res://.import/edit.png-69d6fa919970bb9987f02f09190d3661.stex" ]
+dest_files=["res://.godot/imported/edit.png-69d6fa919970bb9987f02f09190d3661.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/pixel_image.png.import b/assets/graphics/pixel_image.png.import
index 39c3a8d6473..08834143156 100644
--- a/assets/graphics/pixel_image.png.import
+++ b/assets/graphics/pixel_image.png.import
@@ -2,12 +2,13 @@
importer="image"
type="Image"
-path="res://.import/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image"
+uid="uid://dp23gk2ocyjiu"
+path="res://.godot/imported/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image"
[deps]
source_file="res://assets/graphics/pixel_image.png"
-dest_files=[ "res://.import/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image" ]
+dest_files=["res://.godot/imported/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image"]
[params]
diff --git a/assets/graphics/recorder/start.png.import b/assets/graphics/recorder/start.png.import
index 1cc5c971964..58fd17343b0 100644
--- a/assets/graphics/recorder/start.png.import
+++ b/assets/graphics/recorder/start.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/start.png-f7a4d6649bfd0c2da16e274157bff38e.stex"
+type="CompressedTexture2D"
+uid="uid://bgfqvkmstecr5"
+path="res://.godot/imported/start.png-f7a4d6649bfd0c2da16e274157bff38e.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/recorder/start.png"
-dest_files=[ "res://.import/start.png-f7a4d6649bfd0c2da16e274157bff38e.stex" ]
+dest_files=["res://.godot/imported/start.png-f7a4d6649bfd0c2da16e274157bff38e.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/recorder/stop.png.import b/assets/graphics/recorder/stop.png.import
index 8880b153923..62533017145 100644
--- a/assets/graphics/recorder/stop.png.import
+++ b/assets/graphics/recorder/stop.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.stex"
+type="CompressedTexture2D"
+uid="uid://cdaou5ckbayre"
+path="res://.godot/imported/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/recorder/stop.png"
-dest_files=[ "res://.import/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.stex" ]
+dest_files=["res://.godot/imported/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash.png.import b/assets/graphics/splash.png.import
index 7358eef0ffd..4963b92af3a 100644
--- a/assets/graphics/splash.png.import
+++ b/assets/graphics/splash.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/splash.png-17460da1948f3a674809d951b9a8184a.stex"
+type="CompressedTexture2D"
+uid="uid://cgjbk5vsy535u"
+path="res://.godot/imported/splash.png-17460da1948f3a674809d951b9a8184a.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash.png"
-dest_files=[ "res://.import/splash.png-17460da1948f3a674809d951b9a8184a.stex" ]
+dest_files=["res://.godot/imported/splash.png-17460da1948f3a674809d951b9a8184a.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/artworks/exuvita.png.import b/assets/graphics/splash_screen/artworks/exuvita.png.import
index 4b7aa424701..0ef687be86e 100644
--- a/assets/graphics/splash_screen/artworks/exuvita.png.import
+++ b/assets/graphics/splash_screen/artworks/exuvita.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.stex"
+type="CompressedTexture2D"
+uid="uid://ttgefsksr61"
+path="res://.godot/imported/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/artworks/exuvita.png"
-dest_files=[ "res://.import/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.stex" ]
+dest_files=["res://.godot/imported/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/artworks/roroto.png.import b/assets/graphics/splash_screen/artworks/roroto.png.import
index c35caf1e014..4d89cf8d5d0 100644
--- a/assets/graphics/splash_screen/artworks/roroto.png.import
+++ b/assets/graphics/splash_screen/artworks/roroto.png.import
@@ -1,17 +1,34 @@
[remap]
-importer="aimgio.apng_animatedtexture"
-type="AnimatedTexture"
-path="res://.import/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.res"
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bpyrg1b61ap1f"
+path="res://.godot/imported/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.ctex"
+metadata={
+"vram_texture": false
+}
[deps]
source_file="res://assets/graphics/splash_screen/artworks/roroto.png"
-dest_files=[ "res://.import/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.res" ]
+dest_files=["res://.godot/imported/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.ctex"]
[params]
-image_texture_storage=2
-image_texture_lossy_quality=0.7
-texture_flags=3
-texture_flags_add=0
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/artworks/uch.png.import b/assets/graphics/splash_screen/artworks/uch.png.import
index e37347d58b5..f0356e06edf 100644
--- a/assets/graphics/splash_screen/artworks/uch.png.import
+++ b/assets/graphics/splash_screen/artworks/uch.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.stex"
+type="CompressedTexture2D"
+uid="uid://mq50x8xtj6vf"
+path="res://.godot/imported/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/artworks/uch.png"
-dest_files=[ "res://.import/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.stex" ]
+dest_files=["res://.godot/imported/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/artworks/wishdream.png.import b/assets/graphics/splash_screen/artworks/wishdream.png.import
index 0517eb18700..cc3c2003c55 100644
--- a/assets/graphics/splash_screen/artworks/wishdream.png.import
+++ b/assets/graphics/splash_screen/artworks/wishdream.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/wishdream.png-2d4b51ec077caa274db44eee48928c59.stex"
+type="CompressedTexture2D"
+uid="uid://b5adjms3vxj13"
+path="res://.godot/imported/wishdream.png-2d4b51ec077caa274db44eee48928c59.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/artworks/wishdream.png"
-dest_files=[ "res://.import/wishdream.png-2d4b51ec077caa274db44eee48928c59.stex" ]
+dest_files=["res://.godot/imported/wishdream.png-2d4b51ec077caa274db44eee48928c59.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/discord.png.import b/assets/graphics/splash_screen/discord.png.import
index 4b4deb55927..9bb66a9e931 100644
--- a/assets/graphics/splash_screen/discord.png.import
+++ b/assets/graphics/splash_screen/discord.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/discord.png-73d97a9585e0efb593d5a88792440de4.stex"
+type="CompressedTexture2D"
+uid="uid://du0tqirgve32c"
+path="res://.godot/imported/discord.png-73d97a9585e0efb593d5a88792440de4.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/discord.png"
-dest_files=[ "res://.import/discord.png-73d97a9585e0efb593d5a88792440de4.stex" ]
+dest_files=["res://.godot/imported/discord.png-73d97a9585e0efb593d5a88792440de4.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/github_32px.png.import b/assets/graphics/splash_screen/github_32px.png.import
index 4d6bad7854e..b3d72ed5fc5 100644
--- a/assets/graphics/splash_screen/github_32px.png.import
+++ b/assets/graphics/splash_screen/github_32px.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/github_32px.png-281ab32f2184cefb27bac8e948163a0c.stex"
+type="CompressedTexture2D"
+uid="uid://bnhuqq1ucdlw2"
+path="res://.godot/imported/github_32px.png-281ab32f2184cefb27bac8e948163a0c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/github_32px.png"
-dest_files=[ "res://.import/github_32px.png-281ab32f2184cefb27bac8e948163a0c.stex" ]
+dest_files=["res://.godot/imported/github_32px.png-281ab32f2184cefb27bac8e948163a0c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=0.5
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/orama_64x64.png.import b/assets/graphics/splash_screen/orama_64x64.png.import
index dd5cd7e100f..1b137beb4fd 100644
--- a/assets/graphics/splash_screen/orama_64x64.png.import
+++ b/assets/graphics/splash_screen/orama_64x64.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.stex"
+type="CompressedTexture2D"
+uid="uid://s25pa611bpvj"
+path="res://.godot/imported/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/orama_64x64.png"
-dest_files=[ "res://.import/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.stex" ]
+dest_files=["res://.godot/imported/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/patreon_mark_white.png.import b/assets/graphics/splash_screen/patreon_mark_white.png.import
index c6528b66727..fcbf10a06e2 100644
--- a/assets/graphics/splash_screen/patreon_mark_white.png.import
+++ b/assets/graphics/splash_screen/patreon_mark_white.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.stex"
+type="CompressedTexture2D"
+uid="uid://c587jfnyu84ro"
+path="res://.godot/imported/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/patreon_mark_white.png"
-dest_files=[ "res://.import/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.stex" ]
+dest_files=["res://.godot/imported/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash_screen/version.png.import b/assets/graphics/splash_screen/version.png.import
index c7f750033ef..350a0585ead 100644
--- a/assets/graphics/splash_screen/version.png.import
+++ b/assets/graphics/splash_screen/version.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/version.png-8fd3ce593258c5b901d0eeab8f20b522.stex"
+type="CompressedTexture2D"
+uid="uid://dywk5yd41twch"
+path="res://.godot/imported/version.png-8fd3ce593258c5b901d0eeab8f20b522.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/splash_screen/version.png"
-dest_files=[ "res://.import/version.png-8fd3ce593258c5b901d0eeab8f20b522.stex" ]
+dest_files=["res://.godot/imported/version.png-8fd3ce593258c5b901d0eeab8f20b522.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/copy_frame.png.import b/assets/graphics/timeline/copy_frame.png.import
index dfdb6566777..a821c2e1507 100644
--- a/assets/graphics/timeline/copy_frame.png.import
+++ b/assets/graphics/timeline/copy_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/copy_frame.png-e09a3c5a1070079322962a711999889d.stex"
+type="CompressedTexture2D"
+uid="uid://cerkv5yx4cqeh"
+path="res://.godot/imported/copy_frame.png-e09a3c5a1070079322962a711999889d.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/copy_frame.png"
-dest_files=[ "res://.import/copy_frame.png-e09a3c5a1070079322962a711999889d.stex" ]
+dest_files=["res://.godot/imported/copy_frame.png-e09a3c5a1070079322962a711999889d.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/expandable.png.import b/assets/graphics/timeline/expandable.png.import
index cdc6565d095..421212c7f5f 100644
--- a/assets/graphics/timeline/expandable.png.import
+++ b/assets/graphics/timeline/expandable.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.stex"
+type="CompressedTexture2D"
+uid="uid://dinubfua8gqhw"
+path="res://.godot/imported/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/expandable.png"
-dest_files=[ "res://.import/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.stex" ]
+dest_files=["res://.godot/imported/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/go_to_first_frame.png.import b/assets/graphics/timeline/go_to_first_frame.png.import
index beec7394ff2..802341261e9 100644
--- a/assets/graphics/timeline/go_to_first_frame.png.import
+++ b/assets/graphics/timeline/go_to_first_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.stex"
+type="CompressedTexture2D"
+uid="uid://bujrukk5ii3bi"
+path="res://.godot/imported/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/go_to_first_frame.png"
-dest_files=[ "res://.import/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.stex" ]
+dest_files=["res://.godot/imported/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/go_to_last_frame.png.import b/assets/graphics/timeline/go_to_last_frame.png.import
index cbcb5f063a7..7d95f8868a7 100644
--- a/assets/graphics/timeline/go_to_last_frame.png.import
+++ b/assets/graphics/timeline/go_to_last_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.stex"
+type="CompressedTexture2D"
+uid="uid://l4jj86y1hukm"
+path="res://.godot/imported/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/go_to_last_frame.png"
-dest_files=[ "res://.import/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.stex" ]
+dest_files=["res://.godot/imported/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/loop.png.import b/assets/graphics/timeline/loop.png.import
index 7114da2dc36..f254bd55737 100644
--- a/assets/graphics/timeline/loop.png.import
+++ b/assets/graphics/timeline/loop.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/loop.png-0fe21b3572696cfdf51daf177457d190.stex"
+type="CompressedTexture2D"
+uid="uid://fbwld5ofmocm"
+path="res://.godot/imported/loop.png-0fe21b3572696cfdf51daf177457d190.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/loop.png"
-dest_files=[ "res://.import/loop.png-0fe21b3572696cfdf51daf177457d190.stex" ]
+dest_files=["res://.godot/imported/loop.png-0fe21b3572696cfdf51daf177457d190.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/loop_none.png.import b/assets/graphics/timeline/loop_none.png.import
index 004c25f4f0d..0910d84fd90 100644
--- a/assets/graphics/timeline/loop_none.png.import
+++ b/assets/graphics/timeline/loop_none.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.stex"
+type="CompressedTexture2D"
+uid="uid://b3v4o0nfdlcbn"
+path="res://.godot/imported/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/loop_none.png"
-dest_files=[ "res://.import/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.stex" ]
+dest_files=["res://.godot/imported/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/loop_pingpong.png.import b/assets/graphics/timeline/loop_pingpong.png.import
index 0a07bd2d44d..e35534ff184 100644
--- a/assets/graphics/timeline/loop_pingpong.png.import
+++ b/assets/graphics/timeline/loop_pingpong.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.stex"
+type="CompressedTexture2D"
+uid="uid://d3nhxgjkgdwx4"
+path="res://.godot/imported/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/loop_pingpong.png"
-dest_files=[ "res://.import/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.stex" ]
+dest_files=["res://.godot/imported/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/move_arrow.png.import b/assets/graphics/timeline/move_arrow.png.import
index 11753e33d7f..dda6cdb8b34 100644
--- a/assets/graphics/timeline/move_arrow.png.import
+++ b/assets/graphics/timeline/move_arrow.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.stex"
+type="CompressedTexture2D"
+uid="uid://d1oxrkwndy5fi"
+path="res://.godot/imported/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/move_arrow.png"
-dest_files=[ "res://.import/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.stex" ]
+dest_files=["res://.godot/imported/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/new_frame.png.import b/assets/graphics/timeline/new_frame.png.import
index b91a30f42fb..1003fb6a9ae 100644
--- a/assets/graphics/timeline/new_frame.png.import
+++ b/assets/graphics/timeline/new_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/new_frame.png-af2063a43cbf3c78591238e21f66f075.stex"
+type="CompressedTexture2D"
+uid="uid://d1urikaf1lxwl"
+path="res://.godot/imported/new_frame.png-af2063a43cbf3c78591238e21f66f075.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/new_frame.png"
-dest_files=[ "res://.import/new_frame.png-af2063a43cbf3c78591238e21f66f075.stex" ]
+dest_files=["res://.godot/imported/new_frame.png-af2063a43cbf3c78591238e21f66f075.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/next_frame.png.import b/assets/graphics/timeline/next_frame.png.import
index 808075ea69a..c86bf44d215 100644
--- a/assets/graphics/timeline/next_frame.png.import
+++ b/assets/graphics/timeline/next_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/next_frame.png-cd7680ea9df19801117c47b11806f322.stex"
+type="CompressedTexture2D"
+uid="uid://b2ndrc0cvy1m5"
+path="res://.godot/imported/next_frame.png-cd7680ea9df19801117c47b11806f322.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/next_frame.png"
-dest_files=[ "res://.import/next_frame.png-cd7680ea9df19801117c47b11806f322.stex" ]
+dest_files=["res://.godot/imported/next_frame.png-cd7680ea9df19801117c47b11806f322.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/onion_skinning.png.import b/assets/graphics/timeline/onion_skinning.png.import
index 4ee2361ed5d..242cf5a98e7 100644
--- a/assets/graphics/timeline/onion_skinning.png.import
+++ b/assets/graphics/timeline/onion_skinning.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.stex"
+type="CompressedTexture2D"
+uid="uid://bx08wgf4t6r06"
+path="res://.godot/imported/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/onion_skinning.png"
-dest_files=[ "res://.import/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.stex" ]
+dest_files=["res://.godot/imported/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/onion_skinning_off.png.import b/assets/graphics/timeline/onion_skinning_off.png.import
index f3246b9f78a..3d493c453ec 100644
--- a/assets/graphics/timeline/onion_skinning_off.png.import
+++ b/assets/graphics/timeline/onion_skinning_off.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.stex"
+type="CompressedTexture2D"
+uid="uid://dukip7mvotxsp"
+path="res://.godot/imported/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/onion_skinning_off.png"
-dest_files=[ "res://.import/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.stex" ]
+dest_files=["res://.godot/imported/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/pause.png.import b/assets/graphics/timeline/pause.png.import
index 68611c12bc8..15ddd73cbfb 100644
--- a/assets/graphics/timeline/pause.png.import
+++ b/assets/graphics/timeline/pause.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pause.png-6213e49d72351c855d9a86b758e2f276.stex"
+type="CompressedTexture2D"
+uid="uid://bsk6rjydiogcc"
+path="res://.godot/imported/pause.png-6213e49d72351c855d9a86b758e2f276.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/pause.png"
-dest_files=[ "res://.import/pause.png-6213e49d72351c855d9a86b758e2f276.stex" ]
+dest_files=["res://.godot/imported/pause.png-6213e49d72351c855d9a86b758e2f276.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/play.png.import b/assets/graphics/timeline/play.png.import
index b5f0e053668..966ff676fb5 100644
--- a/assets/graphics/timeline/play.png.import
+++ b/assets/graphics/timeline/play.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/play.png-968e50b88d3511be5f0d3d76d9dde478.stex"
+type="CompressedTexture2D"
+uid="uid://c7smxwfa8826j"
+path="res://.godot/imported/play.png-968e50b88d3511be5f0d3d76d9dde478.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/play.png"
-dest_files=[ "res://.import/play.png-968e50b88d3511be5f0d3d76d9dde478.stex" ]
+dest_files=["res://.godot/imported/play.png-968e50b88d3511be5f0d3d76d9dde478.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/play_backwards.png.import b/assets/graphics/timeline/play_backwards.png.import
index 5a6e588ea9f..1ea916623ba 100644
--- a/assets/graphics/timeline/play_backwards.png.import
+++ b/assets/graphics/timeline/play_backwards.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.stex"
+type="CompressedTexture2D"
+uid="uid://esistdjfbrc4"
+path="res://.godot/imported/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/play_backwards.png"
-dest_files=[ "res://.import/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.stex" ]
+dest_files=["res://.godot/imported/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/previous_frame.png.import b/assets/graphics/timeline/previous_frame.png.import
index 0b8637a1033..c00fa70c90c 100644
--- a/assets/graphics/timeline/previous_frame.png.import
+++ b/assets/graphics/timeline/previous_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/previous_frame.png-fc37ecd96f63e90341b50c578185611c.stex"
+type="CompressedTexture2D"
+uid="uid://cw7nn7360atot"
+path="res://.godot/imported/previous_frame.png-fc37ecd96f63e90341b50c578185611c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/previous_frame.png"
-dest_files=[ "res://.import/previous_frame.png-fc37ecd96f63e90341b50c578185611c.stex" ]
+dest_files=["res://.godot/imported/previous_frame.png-fc37ecd96f63e90341b50c578185611c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/remove_frame.png.import b/assets/graphics/timeline/remove_frame.png.import
index 78d98dc5f83..fc0aeb2d46b 100644
--- a/assets/graphics/timeline/remove_frame.png.import
+++ b/assets/graphics/timeline/remove_frame.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/remove_frame.png-8093a4405f9a88bcb896e973afef045b.stex"
+type="CompressedTexture2D"
+uid="uid://bt72662c3gp2f"
+path="res://.godot/imported/remove_frame.png-8093a4405f9a88bcb896e973afef045b.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/remove_frame.png"
-dest_files=[ "res://.import/remove_frame.png-8093a4405f9a88bcb896e973afef045b.stex" ]
+dest_files=["res://.godot/imported/remove_frame.png-8093a4405f9a88bcb896e973afef045b.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/timeline/tag.png.import b/assets/graphics/timeline/tag.png.import
index 260dcb6147b..61a0918e701 100644
--- a/assets/graphics/timeline/tag.png.import
+++ b/assets/graphics/timeline/tag.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/tag.png-d40c07fde0f15ca4aa9533f283d8253f.stex"
+type="CompressedTexture2D"
+uid="uid://i13jhsg117kd"
+path="res://.godot/imported/tag.png-d40c07fde0f15ca4aa9533f283d8253f.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/timeline/tag.png"
-dest_files=[ "res://.import/tag.png-d40c07fde0f15ca4aa9533f283d8253f.stex" ]
+dest_files=["res://.godot/imported/tag.png-d40c07fde0f15ca4aa9533f283d8253f.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/3dshapeedit.png.import b/assets/graphics/tools/3dshapeedit.png.import
index 81a39355d13..2799a42972f 100644
--- a/assets/graphics/tools/3dshapeedit.png.import
+++ b/assets/graphics/tools/3dshapeedit.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.stex"
+type="CompressedTexture2D"
+uid="uid://dgiwrnyslvciy"
+path="res://.godot/imported/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/3dshapeedit.png"
-dest_files=[ "res://.import/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.stex" ]
+dest_files=["res://.godot/imported/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/bucket.png.import b/assets/graphics/tools/bucket.png.import
index 9755194dd73..c35c18c189f 100644
--- a/assets/graphics/tools/bucket.png.import
+++ b/assets/graphics/tools/bucket.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/bucket.png-c31dc57fbf727577f054850c63eb803f.stex"
+type="CompressedTexture2D"
+uid="uid://cqki4c2chcjtx"
+path="res://.godot/imported/bucket.png-c31dc57fbf727577f054850c63eb803f.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/bucket.png"
-dest_files=[ "res://.import/bucket.png-c31dc57fbf727577f054850c63eb803f.stex" ]
+dest_files=["res://.godot/imported/bucket.png-c31dc57fbf727577f054850c63eb803f.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/colorpicker.png.import b/assets/graphics/tools/colorpicker.png.import
index 6eadc05f019..3447d62a197 100644
--- a/assets/graphics/tools/colorpicker.png.import
+++ b/assets/graphics/tools/colorpicker.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.stex"
+type="CompressedTexture2D"
+uid="uid://jqgqq0x4csuv"
+path="res://.godot/imported/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/colorpicker.png"
-dest_files=[ "res://.import/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.stex" ]
+dest_files=["res://.godot/imported/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/colorselect.png.import b/assets/graphics/tools/colorselect.png.import
index 7e58ed9c006..0f99b5315ab 100644
--- a/assets/graphics/tools/colorselect.png.import
+++ b/assets/graphics/tools/colorselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.stex"
+type="CompressedTexture2D"
+uid="uid://c7ehylp4krapg"
+path="res://.godot/imported/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/colorselect.png"
-dest_files=[ "res://.import/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.stex" ]
+dest_files=["res://.godot/imported/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/crop.png.import b/assets/graphics/tools/crop.png.import
index 8d8f188f1a3..6a4dad8ff3f 100644
--- a/assets/graphics/tools/crop.png.import
+++ b/assets/graphics/tools/crop.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/crop.png-b117b864c2b96dd1998350bff3c06cf8.stex"
+type="CompressedTexture2D"
+uid="uid://ddv5j1mhgkb1v"
+path="res://.godot/imported/crop.png-b117b864c2b96dd1998350bff3c06cf8.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/crop.png"
-dest_files=[ "res://.import/crop.png-b117b864c2b96dd1998350bff3c06cf8.stex" ]
+dest_files=["res://.godot/imported/crop.png-b117b864c2b96dd1998350bff3c06cf8.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/3dshapeedit.png.import b/assets/graphics/tools/cursors/3dshapeedit.png.import
index 2186ebe709b..27f64b9c985 100644
--- a/assets/graphics/tools/cursors/3dshapeedit.png.import
+++ b/assets/graphics/tools/cursors/3dshapeedit.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/3dshapeedit.png-cca253df77476289c578814dc8af5d80.stex"
+type="CompressedTexture2D"
+uid="uid://du4f0vx07ekxu"
+path="res://.godot/imported/3dshapeedit.png-cca253df77476289c578814dc8af5d80.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/3dshapeedit.png"
-dest_files=[ "res://.import/3dshapeedit.png-cca253df77476289c578814dc8af5d80.stex" ]
+dest_files=["res://.godot/imported/3dshapeedit.png-cca253df77476289c578814dc8af5d80.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/bucket.png.import b/assets/graphics/tools/cursors/bucket.png.import
index ec044c133ca..6692409ae6f 100644
--- a/assets/graphics/tools/cursors/bucket.png.import
+++ b/assets/graphics/tools/cursors/bucket.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/bucket.png-c4bf805415b00425c55b8adac894ad7c.stex"
+type="CompressedTexture2D"
+uid="uid://4gwpbvu11u5t"
+path="res://.godot/imported/bucket.png-c4bf805415b00425c55b8adac894ad7c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/bucket.png"
-dest_files=[ "res://.import/bucket.png-c4bf805415b00425c55b8adac894ad7c.stex" ]
+dest_files=["res://.godot/imported/bucket.png-c4bf805415b00425c55b8adac894ad7c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/colorpicker.png.import b/assets/graphics/tools/cursors/colorpicker.png.import
index 600c3796bb2..a5590fa5cbf 100644
--- a/assets/graphics/tools/cursors/colorpicker.png.import
+++ b/assets/graphics/tools/cursors/colorpicker.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.stex"
+type="CompressedTexture2D"
+uid="uid://duc2e7vcjpc1a"
+path="res://.godot/imported/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/colorpicker.png"
-dest_files=[ "res://.import/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.stex" ]
+dest_files=["res://.godot/imported/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/colorselect.png.import b/assets/graphics/tools/cursors/colorselect.png.import
index 679b575beff..0c8f91250ac 100644
--- a/assets/graphics/tools/cursors/colorselect.png.import
+++ b/assets/graphics/tools/cursors/colorselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/colorselect.png-855fe4674fbd105e7500362dbda30f8a.stex"
+type="CompressedTexture2D"
+uid="uid://df1wb5rxfcrnj"
+path="res://.godot/imported/colorselect.png-855fe4674fbd105e7500362dbda30f8a.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/colorselect.png"
-dest_files=[ "res://.import/colorselect.png-855fe4674fbd105e7500362dbda30f8a.stex" ]
+dest_files=["res://.godot/imported/colorselect.png-855fe4674fbd105e7500362dbda30f8a.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/crop.png.import b/assets/graphics/tools/cursors/crop.png.import
index bb2158565d3..74f146783b1 100644
--- a/assets/graphics/tools/cursors/crop.png.import
+++ b/assets/graphics/tools/cursors/crop.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/crop.png-b1dd939167138aaa21a7eeec94aed6bc.stex"
+type="CompressedTexture2D"
+uid="uid://lyhijjv0r0hv"
+path="res://.godot/imported/crop.png-b1dd939167138aaa21a7eeec94aed6bc.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/crop.png"
-dest_files=[ "res://.import/crop.png-b1dd939167138aaa21a7eeec94aed6bc.stex" ]
+dest_files=["res://.godot/imported/crop.png-b1dd939167138aaa21a7eeec94aed6bc.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/ellipseselect.png.import b/assets/graphics/tools/cursors/ellipseselect.png.import
index 77b82c42266..2d6b07e603c 100644
--- a/assets/graphics/tools/cursors/ellipseselect.png.import
+++ b/assets/graphics/tools/cursors/ellipseselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.stex"
+type="CompressedTexture2D"
+uid="uid://r6g6gtw0pydb"
+path="res://.godot/imported/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/ellipseselect.png"
-dest_files=[ "res://.import/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.stex" ]
+dest_files=["res://.godot/imported/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/ellipsetool.png.import b/assets/graphics/tools/cursors/ellipsetool.png.import
index fb317a10b54..0b7632488bb 100644
--- a/assets/graphics/tools/cursors/ellipsetool.png.import
+++ b/assets/graphics/tools/cursors/ellipsetool.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.stex"
+type="CompressedTexture2D"
+uid="uid://cesvhtam3mwyb"
+path="res://.godot/imported/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/ellipsetool.png"
-dest_files=[ "res://.import/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.stex" ]
+dest_files=["res://.godot/imported/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/eraser.png.import b/assets/graphics/tools/cursors/eraser.png.import
index 5f2a9ae9b6b..91f7c632ebb 100644
--- a/assets/graphics/tools/cursors/eraser.png.import
+++ b/assets/graphics/tools/cursors/eraser.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/eraser.png-a00636af98c0fcf6bd6bf35640b83459.stex"
+type="CompressedTexture2D"
+uid="uid://cjig3eey2tffx"
+path="res://.godot/imported/eraser.png-a00636af98c0fcf6bd6bf35640b83459.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/eraser.png"
-dest_files=[ "res://.import/eraser.png-a00636af98c0fcf6bd6bf35640b83459.stex" ]
+dest_files=["res://.godot/imported/eraser.png-a00636af98c0fcf6bd6bf35640b83459.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/lasso.png.import b/assets/graphics/tools/cursors/lasso.png.import
index bba12ea126f..34ca978ee83 100644
--- a/assets/graphics/tools/cursors/lasso.png.import
+++ b/assets/graphics/tools/cursors/lasso.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/lasso.png-b57369a1f33ebad796567cc7f2255d6c.stex"
+type="CompressedTexture2D"
+uid="uid://bcslhoiu6rv6"
+path="res://.godot/imported/lasso.png-b57369a1f33ebad796567cc7f2255d6c.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/lasso.png"
-dest_files=[ "res://.import/lasso.png-b57369a1f33ebad796567cc7f2255d6c.stex" ]
+dest_files=["res://.godot/imported/lasso.png-b57369a1f33ebad796567cc7f2255d6c.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/linetool.png.import b/assets/graphics/tools/cursors/linetool.png.import
index 70557bfc42f..6904e3d1e96 100644
--- a/assets/graphics/tools/cursors/linetool.png.import
+++ b/assets/graphics/tools/cursors/linetool.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/linetool.png-f88b6978c31a033619980bf335cfaa21.stex"
+type="CompressedTexture2D"
+uid="uid://ciu01f7am4n1o"
+path="res://.godot/imported/linetool.png-f88b6978c31a033619980bf335cfaa21.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/linetool.png"
-dest_files=[ "res://.import/linetool.png-f88b6978c31a033619980bf335cfaa21.stex" ]
+dest_files=["res://.godot/imported/linetool.png-f88b6978c31a033619980bf335cfaa21.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/magicwand.png.import b/assets/graphics/tools/cursors/magicwand.png.import
index aed1e8433f9..69e6a687bc6 100644
--- a/assets/graphics/tools/cursors/magicwand.png.import
+++ b/assets/graphics/tools/cursors/magicwand.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/magicwand.png-a88950f47e167183b2e78f8980f580f0.stex"
+type="CompressedTexture2D"
+uid="uid://bpceh02g4g2sy"
+path="res://.godot/imported/magicwand.png-a88950f47e167183b2e78f8980f580f0.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/magicwand.png"
-dest_files=[ "res://.import/magicwand.png-a88950f47e167183b2e78f8980f580f0.stex" ]
+dest_files=["res://.godot/imported/magicwand.png-a88950f47e167183b2e78f8980f580f0.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/move.png.import b/assets/graphics/tools/cursors/move.png.import
index 124d185ca5f..81ba2c664a1 100644
--- a/assets/graphics/tools/cursors/move.png.import
+++ b/assets/graphics/tools/cursors/move.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/move.png-3d9f5f2d803b18a63b76370eb4228771.stex"
+type="CompressedTexture2D"
+uid="uid://byt5eb1wvnwss"
+path="res://.godot/imported/move.png-3d9f5f2d803b18a63b76370eb4228771.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/move.png"
-dest_files=[ "res://.import/move.png-3d9f5f2d803b18a63b76370eb4228771.stex" ]
+dest_files=["res://.godot/imported/move.png-3d9f5f2d803b18a63b76370eb4228771.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/paintselect.png.import b/assets/graphics/tools/cursors/paintselect.png.import
index f39c069c025..a60e121e59a 100644
--- a/assets/graphics/tools/cursors/paintselect.png.import
+++ b/assets/graphics/tools/cursors/paintselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/paintselect.png-1d54eb74829e8876df77b986085c99ff.stex"
+type="CompressedTexture2D"
+uid="uid://cplipjwqdowiw"
+path="res://.godot/imported/paintselect.png-1d54eb74829e8876df77b986085c99ff.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/paintselect.png"
-dest_files=[ "res://.import/paintselect.png-1d54eb74829e8876df77b986085c99ff.stex" ]
+dest_files=["res://.godot/imported/paintselect.png-1d54eb74829e8876df77b986085c99ff.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/pan.png.import b/assets/graphics/tools/cursors/pan.png.import
index 20b9728747e..2a53a0ea64f 100644
--- a/assets/graphics/tools/cursors/pan.png.import
+++ b/assets/graphics/tools/cursors/pan.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pan.png-c49ef20d232155a864f417b751f95229.stex"
+type="CompressedTexture2D"
+uid="uid://21ghkqotcvf6"
+path="res://.godot/imported/pan.png-c49ef20d232155a864f417b751f95229.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/pan.png"
-dest_files=[ "res://.import/pan.png-c49ef20d232155a864f417b751f95229.stex" ]
+dest_files=["res://.godot/imported/pan.png-c49ef20d232155a864f417b751f95229.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/pencil.png.import b/assets/graphics/tools/cursors/pencil.png.import
index 2570a59fcca..cd5df7eedd3 100644
--- a/assets/graphics/tools/cursors/pencil.png.import
+++ b/assets/graphics/tools/cursors/pencil.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pencil.png-ad4aa17c50d39e687be59518f7ec26db.stex"
+type="CompressedTexture2D"
+uid="uid://c03sutx62rpqu"
+path="res://.godot/imported/pencil.png-ad4aa17c50d39e687be59518f7ec26db.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/pencil.png"
-dest_files=[ "res://.import/pencil.png-ad4aa17c50d39e687be59518f7ec26db.stex" ]
+dest_files=["res://.godot/imported/pencil.png-ad4aa17c50d39e687be59518f7ec26db.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/polygonselect.png.import b/assets/graphics/tools/cursors/polygonselect.png.import
index 0f5d4140551..ceafe4ce113 100644
--- a/assets/graphics/tools/cursors/polygonselect.png.import
+++ b/assets/graphics/tools/cursors/polygonselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.stex"
+type="CompressedTexture2D"
+uid="uid://bwtwx2gkkr272"
+path="res://.godot/imported/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/polygonselect.png"
-dest_files=[ "res://.import/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.stex" ]
+dest_files=["res://.godot/imported/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/rectangletool.png.import b/assets/graphics/tools/cursors/rectangletool.png.import
index c69af75cea6..3197c3c88df 100644
--- a/assets/graphics/tools/cursors/rectangletool.png.import
+++ b/assets/graphics/tools/cursors/rectangletool.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/rectangletool.png-09c04120a942fab47b3339db72969340.stex"
+type="CompressedTexture2D"
+uid="uid://c7b1125hs66sf"
+path="res://.godot/imported/rectangletool.png-09c04120a942fab47b3339db72969340.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/rectangletool.png"
-dest_files=[ "res://.import/rectangletool.png-09c04120a942fab47b3339db72969340.stex" ]
+dest_files=["res://.godot/imported/rectangletool.png-09c04120a942fab47b3339db72969340.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/rectselect.png.import b/assets/graphics/tools/cursors/rectselect.png.import
index c44bafdb597..8ffbd0d843e 100644
--- a/assets/graphics/tools/cursors/rectselect.png.import
+++ b/assets/graphics/tools/cursors/rectselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.stex"
+type="CompressedTexture2D"
+uid="uid://bxiqomq08ctsr"
+path="res://.godot/imported/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/rectselect.png"
-dest_files=[ "res://.import/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.stex" ]
+dest_files=["res://.godot/imported/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/shading.png.import b/assets/graphics/tools/cursors/shading.png.import
index 495be5b579d..c9920ea2598 100644
--- a/assets/graphics/tools/cursors/shading.png.import
+++ b/assets/graphics/tools/cursors/shading.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/shading.png-984f5bf0d673a3c8f88917a16ae424be.stex"
+type="CompressedTexture2D"
+uid="uid://bmvmfr51d54im"
+path="res://.godot/imported/shading.png-984f5bf0d673a3c8f88917a16ae424be.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/shading.png"
-dest_files=[ "res://.import/shading.png-984f5bf0d673a3c8f88917a16ae424be.stex" ]
+dest_files=["res://.godot/imported/shading.png-984f5bf0d673a3c8f88917a16ae424be.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/cursors/zoom.png.import b/assets/graphics/tools/cursors/zoom.png.import
index 344657753a7..38b6a3592fa 100644
--- a/assets/graphics/tools/cursors/zoom.png.import
+++ b/assets/graphics/tools/cursors/zoom.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/zoom.png-f285932698b88413c8bee72a7eaeb729.stex"
+type="CompressedTexture2D"
+uid="uid://cishexydlicef"
+path="res://.godot/imported/zoom.png-f285932698b88413c8bee72a7eaeb729.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/cursors/zoom.png"
-dest_files=[ "res://.import/zoom.png-f285932698b88413c8bee72a7eaeb729.stex" ]
+dest_files=["res://.godot/imported/zoom.png-f285932698b88413c8bee72a7eaeb729.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/ellipseselect.png.import b/assets/graphics/tools/ellipseselect.png.import
index 3a81a7e71f1..1beee1f0f0c 100644
--- a/assets/graphics/tools/ellipseselect.png.import
+++ b/assets/graphics/tools/ellipseselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.stex"
+type="CompressedTexture2D"
+uid="uid://bg7kmumurtgtw"
+path="res://.godot/imported/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/ellipseselect.png"
-dest_files=[ "res://.import/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.stex" ]
+dest_files=["res://.godot/imported/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/ellipsetool.png.import b/assets/graphics/tools/ellipsetool.png.import
index 0688bcc0aae..45eeb12f6ce 100644
--- a/assets/graphics/tools/ellipsetool.png.import
+++ b/assets/graphics/tools/ellipsetool.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.stex"
+type="CompressedTexture2D"
+uid="uid://uvaboctgt76q"
+path="res://.godot/imported/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/ellipsetool.png"
-dest_files=[ "res://.import/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.stex" ]
+dest_files=["res://.godot/imported/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/eraser.png.import b/assets/graphics/tools/eraser.png.import
index a3dc3a62b47..233e07aba03 100644
--- a/assets/graphics/tools/eraser.png.import
+++ b/assets/graphics/tools/eraser.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/eraser.png-fab786bb3ac6594d489aa816194aaa35.stex"
+type="CompressedTexture2D"
+uid="uid://dq6xd7nc1n05f"
+path="res://.godot/imported/eraser.png-fab786bb3ac6594d489aa816194aaa35.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/eraser.png"
-dest_files=[ "res://.import/eraser.png-fab786bb3ac6594d489aa816194aaa35.stex" ]
+dest_files=["res://.godot/imported/eraser.png-fab786bb3ac6594d489aa816194aaa35.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/lasso.png.import b/assets/graphics/tools/lasso.png.import
index a92385972de..6ad91d9f5d6 100644
--- a/assets/graphics/tools/lasso.png.import
+++ b/assets/graphics/tools/lasso.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.stex"
+type="CompressedTexture2D"
+uid="uid://da7rs50xsblfs"
+path="res://.godot/imported/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/lasso.png"
-dest_files=[ "res://.import/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.stex" ]
+dest_files=["res://.godot/imported/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/linetool.png.import b/assets/graphics/tools/linetool.png.import
index 36f0f9e9db1..5a6c1a8e3e4 100644
--- a/assets/graphics/tools/linetool.png.import
+++ b/assets/graphics/tools/linetool.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.stex"
+type="CompressedTexture2D"
+uid="uid://cpjq2j6r4th0p"
+path="res://.godot/imported/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/linetool.png"
-dest_files=[ "res://.import/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.stex" ]
+dest_files=["res://.godot/imported/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/magicwand.png.import b/assets/graphics/tools/magicwand.png.import
index e59bacb18e2..a7de102b2a6 100644
--- a/assets/graphics/tools/magicwand.png.import
+++ b/assets/graphics/tools/magicwand.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.stex"
+type="CompressedTexture2D"
+uid="uid://b3xttw1w2sk0s"
+path="res://.godot/imported/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/magicwand.png"
-dest_files=[ "res://.import/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.stex" ]
+dest_files=["res://.godot/imported/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/move.png.import b/assets/graphics/tools/move.png.import
index 3802ffd8a13..c453c473d65 100644
--- a/assets/graphics/tools/move.png.import
+++ b/assets/graphics/tools/move.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/move.png-95395c868062f8af2883275731902866.stex"
+type="CompressedTexture2D"
+uid="uid://b7fxbxglmalit"
+path="res://.godot/imported/move.png-95395c868062f8af2883275731902866.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/move.png"
-dest_files=[ "res://.import/move.png-95395c868062f8af2883275731902866.stex" ]
+dest_files=["res://.godot/imported/move.png-95395c868062f8af2883275731902866.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/paintselect.png.import b/assets/graphics/tools/paintselect.png.import
index a07b8ea5950..5ba00c84ca7 100644
--- a/assets/graphics/tools/paintselect.png.import
+++ b/assets/graphics/tools/paintselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.stex"
+type="CompressedTexture2D"
+uid="uid://caayrm17iqoty"
+path="res://.godot/imported/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/paintselect.png"
-dest_files=[ "res://.import/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.stex" ]
+dest_files=["res://.godot/imported/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/pan.png.import b/assets/graphics/tools/pan.png.import
index e29bca6e2c0..c8ba07b1e36 100644
--- a/assets/graphics/tools/pan.png.import
+++ b/assets/graphics/tools/pan.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pan.png-6d28bfb8914e4526fac89435cef50f82.stex"
+type="CompressedTexture2D"
+uid="uid://bttky7v3r6kmp"
+path="res://.godot/imported/pan.png-6d28bfb8914e4526fac89435cef50f82.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/pan.png"
-dest_files=[ "res://.import/pan.png-6d28bfb8914e4526fac89435cef50f82.stex" ]
+dest_files=["res://.godot/imported/pan.png-6d28bfb8914e4526fac89435cef50f82.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/pencil.png.import b/assets/graphics/tools/pencil.png.import
index 22472d1b819..3ed728f03e1 100644
--- a/assets/graphics/tools/pencil.png.import
+++ b/assets/graphics/tools/pencil.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/pencil.png-7f662d20172670ff197e6dfacc532133.stex"
+type="CompressedTexture2D"
+uid="uid://buabnk6icy7ug"
+path="res://.godot/imported/pencil.png-7f662d20172670ff197e6dfacc532133.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/pencil.png"
-dest_files=[ "res://.import/pencil.png-7f662d20172670ff197e6dfacc532133.stex" ]
+dest_files=["res://.godot/imported/pencil.png-7f662d20172670ff197e6dfacc532133.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/polygonselect.png.import b/assets/graphics/tools/polygonselect.png.import
index bb102074f08..7b50a992266 100644
--- a/assets/graphics/tools/polygonselect.png.import
+++ b/assets/graphics/tools/polygonselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/polygonselect.png-18ef1901643c94d3e320871eb4791d31.stex"
+type="CompressedTexture2D"
+uid="uid://4u6cfo1rssuj"
+path="res://.godot/imported/polygonselect.png-18ef1901643c94d3e320871eb4791d31.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/polygonselect.png"
-dest_files=[ "res://.import/polygonselect.png-18ef1901643c94d3e320871eb4791d31.stex" ]
+dest_files=["res://.godot/imported/polygonselect.png-18ef1901643c94d3e320871eb4791d31.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/rectangletool.png.import b/assets/graphics/tools/rectangletool.png.import
index a4e5b5123e0..a87811587eb 100644
--- a/assets/graphics/tools/rectangletool.png.import
+++ b/assets/graphics/tools/rectangletool.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.stex"
+type="CompressedTexture2D"
+uid="uid://g58owiqp6lvv"
+path="res://.godot/imported/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/rectangletool.png"
-dest_files=[ "res://.import/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.stex" ]
+dest_files=["res://.godot/imported/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/rectselect.png.import b/assets/graphics/tools/rectselect.png.import
index 9bf682ed6e8..f531488ed71 100644
--- a/assets/graphics/tools/rectselect.png.import
+++ b/assets/graphics/tools/rectselect.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.stex"
+type="CompressedTexture2D"
+uid="uid://chg3ejelsgcwm"
+path="res://.godot/imported/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/rectselect.png"
-dest_files=[ "res://.import/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.stex" ]
+dest_files=["res://.godot/imported/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/shading.png.import b/assets/graphics/tools/shading.png.import
index 8745d9009d4..4426012da5e 100644
--- a/assets/graphics/tools/shading.png.import
+++ b/assets/graphics/tools/shading.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.stex"
+type="CompressedTexture2D"
+uid="uid://dbwj2nx7vj6u0"
+path="res://.godot/imported/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/shading.png"
-dest_files=[ "res://.import/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.stex" ]
+dest_files=["res://.godot/imported/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/tool_background.png.import b/assets/graphics/tools/tool_background.png.import
index 471ff2b22cf..dc1d62990ff 100644
--- a/assets/graphics/tools/tool_background.png.import
+++ b/assets/graphics/tools/tool_background.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.stex"
+type="CompressedTexture2D"
+uid="uid://cnomk15kl7go0"
+path="res://.godot/imported/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/tool_background.png"
-dest_files=[ "res://.import/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.stex" ]
+dest_files=["res://.godot/imported/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/tool_background_right.png b/assets/graphics/tools/tool_background_right.png
new file mode 100644
index 00000000000..3a45ce03d62
Binary files /dev/null and b/assets/graphics/tools/tool_background_right.png differ
diff --git a/assets/graphics/tools/tool_background_right.png.import b/assets/graphics/tools/tool_background_right.png.import
new file mode 100644
index 00000000000..33922425d73
--- /dev/null
+++ b/assets/graphics/tools/tool_background_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4h6t2v7tf6r2"
+path="res://.godot/imported/tool_background_right.png-b85194199086ecc86f931ab5d9e069d9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/tools/tool_background_right.png"
+dest_files=["res://.godot/imported/tool_background_right.png-b85194199086ecc86f931ab5d9e069d9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/tools/zoom.png.import b/assets/graphics/tools/zoom.png.import
index 8186e2b9509..bbc32ca8927 100644
--- a/assets/graphics/tools/zoom.png.import
+++ b/assets/graphics/tools/zoom.png.import
@@ -1,8 +1,9 @@
[remap]
importer="texture"
-type="StreamTexture"
-path="res://.import/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.stex"
+type="CompressedTexture2D"
+uid="uid://gie66g478yqe"
+path="res://.godot/imported/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.ctex"
metadata={
"vram_texture": false
}
@@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://assets/graphics/tools/zoom.png"
-dest_files=[ "res://.import/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.stex" ]
+dest_files=["res://.godot/imported/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.ctex"]
[params]
compress/mode=0
+compress/high_quality=false
compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/layouts/default.tres b/assets/layouts/default.tres
index be0fe146627..984567f78e2 100644
--- a/assets/layouts/default.tres
+++ b/assets/layouts/default.tres
@@ -1,173 +1,173 @@
-[gd_resource type="Resource" load_steps=27 format=2]
+[gd_resource type="Resource" script_class="DockableLayout" load_steps=27 format=3 uid="uid://cmssfxor8u6ph"]
-[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=1]
-[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=2]
-[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=3]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="1_5ntxi"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="2_ky8yd"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3_7wdyb"]
-[sub_resource type="Resource" id=1]
+[sub_resource type="Resource" id="Resource_xnnnd"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Tools" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Tools", "Reference Images")
current_tab = 0
-[sub_resource type="Resource" id=2]
+[sub_resource type="Resource" id="Resource_34hle"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Main Canvas" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Main Canvas")
current_tab = 0
-[sub_resource type="Resource" id=3]
+[sub_resource type="Resource" id="Resource_l6i6g"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Perspective Editor" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Perspective Editor")
current_tab = 0
-[sub_resource type="Resource" id=4]
+[sub_resource type="Resource" id="Resource_r2r5t"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 0
percent = 0.5
-first = SubResource( 2 )
-second = SubResource( 3 )
+first = SubResource("Resource_34hle")
+second = SubResource("Resource_l6i6g")
-[sub_resource type="Resource" id=5]
+[sub_resource type="Resource" id="Resource_k7omi"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Second Canvas" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Second Canvas")
current_tab = 0
-[sub_resource type="Resource" id=6]
+[sub_resource type="Resource" id="Resource_l142s"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 0
percent = 0.980952
-first = SubResource( 4 )
-second = SubResource( 5 )
+first = SubResource("Resource_r2r5t")
+second = SubResource("Resource_k7omi")
-[sub_resource type="Resource" id=7]
+[sub_resource type="Resource" id="Resource_wobi1"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Animation Timeline" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Animation Timeline")
current_tab = 0
-[sub_resource type="Resource" id=8]
+[sub_resource type="Resource" id="Resource_85y6p"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 1
-percent = 0.90625
-first = SubResource( 6 )
-second = SubResource( 7 )
+percent = 0.74711
+first = SubResource("Resource_l142s")
+second = SubResource("Resource_wobi1")
-[sub_resource type="Resource" id=9]
+[sub_resource type="Resource" id="Resource_4egp5"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Canvas Preview", "Reference Images" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Canvas Preview")
current_tab = 0
-[sub_resource type="Resource" id=10]
+[sub_resource type="Resource" id="Resource_fcw5v"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Color Pickers" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Color Pickers")
current_tab = 0
-[sub_resource type="Resource" id=11]
+[sub_resource type="Resource" id="Resource_c7hpy"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Global Tool Options" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Global Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=12]
+[sub_resource type="Resource" id="Resource_56tpw"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Recorder" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Recorder")
current_tab = 0
-[sub_resource type="Resource" id=13]
+[sub_resource type="Resource" id="Resource_fhmn0"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 1
percent = 0.5
-first = SubResource( 11 )
-second = SubResource( 12 )
+first = SubResource("Resource_c7hpy")
+second = SubResource("Resource_56tpw")
-[sub_resource type="Resource" id=14]
+[sub_resource type="Resource" id="Resource_u1u2a"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 1
percent = 0.5
-first = SubResource( 10 )
-second = SubResource( 13 )
+first = SubResource("Resource_fcw5v")
+second = SubResource("Resource_fhmn0")
-[sub_resource type="Resource" id=15]
+[sub_resource type="Resource" id="Resource_6eonw"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 1
percent = 0.911765
-first = SubResource( 9 )
-second = SubResource( 14 )
+first = SubResource("Resource_4egp5")
+second = SubResource("Resource_u1u2a")
-[sub_resource type="Resource" id=16]
+[sub_resource type="Resource" id="Resource_6pwxm"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Left Tool Options" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Left Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=17]
+[sub_resource type="Resource" id="Resource_24rfh"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Right Tool Options" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Right Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=18]
+[sub_resource type="Resource" id="Resource_tcb26"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 0
percent = 0.5
-first = SubResource( 16 )
-second = SubResource( 17 )
+first = SubResource("Resource_6pwxm")
+second = SubResource("Resource_24rfh")
-[sub_resource type="Resource" id=19]
+[sub_resource type="Resource" id="Resource_ugja0"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Palettes" )
+script = ExtResource("1_5ntxi")
+names = PackedStringArray("Palettes")
current_tab = 0
-[sub_resource type="Resource" id=20]
+[sub_resource type="Resource" id="Resource_hr77s"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 1
percent = 0.692661
-first = SubResource( 18 )
-second = SubResource( 19 )
+first = SubResource("Resource_tcb26")
+second = SubResource("Resource_ugja0")
-[sub_resource type="Resource" id=21]
+[sub_resource type="Resource" id="Resource_l8roh"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 1
-percent = 0.332031
-first = SubResource( 15 )
-second = SubResource( 20 )
+percent = 0.339595
+first = SubResource("Resource_6eonw")
+second = SubResource("Resource_hr77s")
-[sub_resource type="Resource" id=22]
+[sub_resource type="Resource" id="Resource_s2xu6"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 0
percent = 0.727569
-first = SubResource( 8 )
-second = SubResource( 21 )
+first = SubResource("Resource_85y6p")
+second = SubResource("Resource_l8roh")
-[sub_resource type="Resource" id=23]
+[sub_resource type="Resource" id="Resource_cwe4h"]
resource_name = "Split"
-script = ExtResource( 2 )
+script = ExtResource("2_ky8yd")
direction = 0
-percent = 0.0
-first = SubResource( 1 )
-second = SubResource( 22 )
+percent = 0.0398437
+first = SubResource("Resource_xnnnd")
+second = SubResource("Resource_s2xu6")
[resource]
resource_name = "Layout"
-script = ExtResource( 3 )
-root = SubResource( 23 )
+script = ExtResource("3_7wdyb")
+root = SubResource("Resource_cwe4h")
hidden_tabs = {
"Perspective Editor": true,
"Recorder": true,
diff --git a/assets/layouts/tallscreen.tres b/assets/layouts/tallscreen.tres
index 9b935b4a770..7cc35c79773 100644
--- a/assets/layouts/tallscreen.tres
+++ b/assets/layouts/tallscreen.tres
@@ -1,145 +1,145 @@
-[gd_resource type="Resource" load_steps=23 format=2]
+[gd_resource type="Resource" script_class="DockableLayout" load_steps=23 format=3 uid="uid://brcnmadkdaqok"]
-[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=1]
-[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=2]
-[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=3]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="1_uy50t"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="2_1m5ot"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3_uod50"]
-[sub_resource type="Resource" id=8]
+[sub_resource type="Resource" id="Resource_k2hh0"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Main Canvas" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Main Canvas", "Reference Images", "Perspective Editor", "Recorder")
current_tab = 0
-[sub_resource type="Resource" id=23]
+[sub_resource type="Resource" id="Resource_t1ktk"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Second Canvas" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Second Canvas")
current_tab = 0
-[sub_resource type="Resource" id=24]
+[sub_resource type="Resource" id="Resource_nvw7v"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 0
percent = 0.9875
-first = SubResource( 8 )
-second = SubResource( 23 )
+first = SubResource("Resource_k2hh0")
+second = SubResource("Resource_t1ktk")
-[sub_resource type="Resource" id=9]
+[sub_resource type="Resource" id="Resource_nqfbu"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Tools" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Tools")
current_tab = 0
-[sub_resource type="Resource" id=10]
+[sub_resource type="Resource" id="Resource_tube0"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Left Tool Options" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Left Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=11]
+[sub_resource type="Resource" id="Resource_37h2m"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Right Tool Options" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Right Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=12]
+[sub_resource type="Resource" id="Resource_1pnqq"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 0
percent = 0.5
-first = SubResource( 10 )
-second = SubResource( 11 )
+first = SubResource("Resource_tube0")
+second = SubResource("Resource_37h2m")
-[sub_resource type="Resource" id=13]
+[sub_resource type="Resource" id="Resource_3l4wk"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Color Pickers" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Color Pickers")
current_tab = 0
-[sub_resource type="Resource" id=25]
+[sub_resource type="Resource" id="Resource_x153t"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Global Tool Options" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Global Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=28]
+[sub_resource type="Resource" id="Resource_bb7vq"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 1
percent = 0.5
-first = SubResource( 13 )
-second = SubResource( 25 )
+first = SubResource("Resource_3l4wk")
+second = SubResource("Resource_x153t")
-[sub_resource type="Resource" id=14]
+[sub_resource type="Resource" id="Resource_m77lt"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Canvas Preview" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Canvas Preview")
current_tab = 0
-[sub_resource type="Resource" id=15]
+[sub_resource type="Resource" id="Resource_k7yue"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 1
percent = 0.5
-first = SubResource( 28 )
-second = SubResource( 14 )
+first = SubResource("Resource_bb7vq")
+second = SubResource("Resource_m77lt")
-[sub_resource type="Resource" id=16]
+[sub_resource type="Resource" id="Resource_g2hy1"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Palettes" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Palettes")
current_tab = 0
-[sub_resource type="Resource" id=17]
+[sub_resource type="Resource" id="Resource_wuga1"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 0
percent = 0.5
-first = SubResource( 15 )
-second = SubResource( 16 )
+first = SubResource("Resource_k7yue")
+second = SubResource("Resource_g2hy1")
-[sub_resource type="Resource" id=18]
+[sub_resource type="Resource" id="Resource_1k0pg"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 0
percent = 0.501251
-first = SubResource( 12 )
-second = SubResource( 17 )
+first = SubResource("Resource_1pnqq")
+second = SubResource("Resource_wuga1")
-[sub_resource type="Resource" id=19]
+[sub_resource type="Resource" id="Resource_5hlsb"]
resource_name = "Tabs"
-script = ExtResource( 1 )
-names = PoolStringArray( "Animation Timeline" )
+script = ExtResource("1_uy50t")
+names = PackedStringArray("Animation Timeline")
current_tab = 0
-[sub_resource type="Resource" id=20]
+[sub_resource type="Resource" id="Resource_cgtbw"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 1
percent = 0.8125
-first = SubResource( 18 )
-second = SubResource( 19 )
+first = SubResource("Resource_1k0pg")
+second = SubResource("Resource_5hlsb")
-[sub_resource type="Resource" id=21]
+[sub_resource type="Resource" id="Resource_lwm7e"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 0
percent = 0.03125
-first = SubResource( 9 )
-second = SubResource( 20 )
+first = SubResource("Resource_nqfbu")
+second = SubResource("Resource_cgtbw")
-[sub_resource type="Resource" id=22]
+[sub_resource type="Resource" id="Resource_fwg3p"]
resource_name = "Split"
-script = ExtResource( 3 )
+script = ExtResource("2_1m5ot")
direction = 1
percent = 0.5
-first = SubResource( 24 )
-second = SubResource( 21 )
+first = SubResource("Resource_nvw7v")
+second = SubResource("Resource_lwm7e")
[resource]
resource_name = "Layout"
-script = ExtResource( 2 )
-root = SubResource( 22 )
+script = ExtResource("3_uod50")
+root = SubResource("Resource_fwg3p")
hidden_tabs = {
"Second Canvas": true
}
diff --git a/assets/themes/blue/theme.tres b/assets/themes/blue/theme.tres
index 7a73d04b760..6b8e5f956d1 100644
--- a/assets/themes/blue/theme.tres
+++ b/assets/themes/blue/theme.tres
@@ -1,1745 +1,739 @@
-[gd_resource type="Theme" load_steps=175 format=2]
+[gd_resource type="Theme" load_steps=57 format=3 uid="uid://boe68kb6pd5ws"]
-[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
-[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
-[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
+[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="3"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_kf8h4"]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"]
-[sub_resource type="StyleBoxFlat" id=2]
+[sub_resource type="StyleBoxFlat" id="22"]
content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.18, 0.207, 0.279, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.14, 0.161, 0.217, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=3]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.41, 0.61, 0.91, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=4]
-content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.4, 0.4225, 0.4825, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=5]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=6]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.41, 0.61, 0.91, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="Image" id=169]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 106, 224, 224, 224, 244, 221, 221, 221, 106, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 106, 224, 224, 224, 249, 224, 224, 224, 255, 222, 222, 222, 187, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 105, 224, 224, 224, 249, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 49, 222, 222, 222, 68, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 104, 224, 224, 224, 248, 224, 224, 224, 255, 223, 223, 223, 194, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 221, 221, 221, 49, 222, 222, 222, 179, 224, 224, 224, 231, 222, 222, 222, 76, 222, 222, 222, 104, 224, 224, 224, 248, 224, 224, 224, 255, 223, 223, 223, 195, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 65, 223, 223, 223, 226, 224, 224, 224, 255, 223, 223, 223, 235, 224, 224, 224, 248, 224, 224, 224, 255, 223, 223, 223, 196, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 70, 224, 224, 224, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 196, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 69, 223, 223, 223, 225, 222, 222, 222, 197, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 66, 222, 222, 222, 54, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=8]
-flags = 0
-flags = 0
-image = SubResource( 169 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=170]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 164, 164, 164, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 69, 222, 222, 222, 182, 224, 224, 224, 234, 224, 224, 224, 234, 222, 222, 222, 182, 222, 222, 222, 69, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 69, 224, 224, 224, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 239, 221, 221, 221, 69, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 180, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 182, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 182, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 69, 224, 224, 224, 240, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 240, 221, 221, 221, 69, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 69, 222, 222, 222, 182, 224, 224, 224, 234, 224, 224, 224, 234, 222, 222, 222, 182, 222, 222, 222, 69, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 166, 166, 166, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=10]
-flags = 0
-flags = 0
-image = SubResource( 170 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=171]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 164, 164, 164, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 166, 166, 166, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=12]
-flags = 0
-flags = 0
-image = SubResource( 171 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=172]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=14]
-flags = 0
-flags = 0
-image = SubResource( 172 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=15]
-content_margin_left = 4.0
-content_margin_right = 4.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
draw_center = false
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
-
-[sub_resource type="Image" id=173]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 133, 133, 133, 1, 221, 221, 221, 16, 219, 219, 219, 30, 222, 222, 222, 41, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 222, 222, 222, 41, 219, 219, 219, 30, 221, 221, 221, 16, 133, 133, 133, 1, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 180, 180, 180, 13, 220, 220, 220, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 41, 180, 180, 180, 13, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 23, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 23, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 209, 209, 209, 18, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 223, 223, 223, 202, 224, 224, 224, 244, 224, 224, 224, 244, 223, 223, 223, 202, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 18, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, 5, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 146, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 222, 222, 222, 145, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 160, 160, 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 23, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 23, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 201, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 201, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 244, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 244, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 201, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 201, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, 5, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 146, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 222, 222, 222, 146, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 160, 160, 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 209, 209, 209, 18, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 223, 223, 223, 202, 224, 224, 224, 244, 224, 224, 224, 244, 223, 223, 223, 202, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 18, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 23, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 23, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 180, 180, 180, 13, 220, 220, 220, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 41, 180, 180, 180, 13, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 133, 133, 133, 1, 221, 221, 221, 16, 219, 219, 219, 30, 222, 222, 222, 41, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 222, 222, 222, 41, 219, 219, 219, 30, 221, 221, 221, 16, 133, 133, 133, 1, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 26,
-"mipmaps": false,
-"width": 42
-}
-
-[sub_resource type="ImageTexture" id=17]
-flags = 0
-flags = 0
-image = SubResource( 173 )
-size = Vector2( 42, 26 )
+border_color = Color(0.125, 0.14375, 0.19375, 1)
-[sub_resource type="Image" id=174]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=19]
-flags = 4
-flags = 4
-image = SubResource( 174 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=175]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 160, 160, 160, 5, 223, 223, 223, 90, 223, 223, 223, 166, 224, 224, 224, 221, 224, 224, 224, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 244, 224, 224, 224, 221, 223, 223, 223, 166, 223, 223, 223, 90, 160, 160, 160, 5, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 76, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 217, 217, 217, 76, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 126, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 254, 223, 223, 223, 126, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 222, 222, 222, 103, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 222, 222, 222, 65, 165, 165, 165, 13, 165, 165, 165, 13, 222, 222, 222, 65, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 103, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 197, 197, 27, 224, 224, 224, 242, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 121, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 242, 175, 175, 175, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 222, 222, 222, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 129, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 64, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 240, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 11, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 240, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 240, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 11, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 240, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 64, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 129, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 197, 197, 27, 224, 224, 224, 243, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 120, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 243, 197, 197, 197, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 222, 222, 222, 104, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 222, 222, 222, 65, 165, 165, 165, 13, 165, 165, 165, 13, 222, 222, 222, 65, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 104, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 127, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 254, 223, 223, 223, 126, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 76, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 217, 217, 217, 76, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 160, 160, 160, 5, 222, 222, 222, 90, 223, 223, 223, 166, 224, 224, 224, 221, 224, 224, 224, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 244, 224, 224, 224, 221, 223, 223, 223, 166, 222, 222, 222, 90, 160, 160, 160, 5, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 26,
-"mipmaps": false,
-"width": 42
-}
-
-[sub_resource type="ImageTexture" id=21]
-flags = 0
-flags = 0
-image = SubResource( 175 )
-size = Vector2( 42, 26 )
-
-[sub_resource type="StyleBoxFlat" id=22]
-content_margin_left = 6.0
-content_margin_right = 6.0
+[sub_resource type="StyleBoxFlat" id="15"]
+content_margin_left = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
draw_center = false
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
-
-[sub_resource type="Image" id=176]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=24]
-flags = 0
-flags = 0
-image = SubResource( 176 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=177]
-data = {
-"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 107, 107, 108, 222, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 108, 109, 222, 0, 0, 3, 255, 0, 0, 2, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 110, 110, 111, 222, 0, 0, 3, 255, 0, 0, 2, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 111, 111, 112, 222, 0, 0, 3, 255, 0, 0, 2, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 114, 222, 0, 0, 3, 255, 0, 0, 2, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 114, 114, 115, 222, 0, 0, 3, 255, 0, 0, 2, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 115, 117, 222, 0, 0, 3, 255, 0, 0, 2, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 117, 117, 118, 222, 0, 0, 3, 255, 0, 0, 2, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 118, 118, 119, 222, 0, 0, 3, 255, 0, 0, 2, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 121, 222, 0, 0, 3, 255, 0, 0, 2, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 2, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=26]
-flags = 0
-flags = 0
-image = SubResource( 177 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=178]
-data = {
-"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=28]
-flags = 0
-flags = 0
-image = SubResource( 178 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=179]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 219, 219, 219, 73, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 73, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, 168, 0, 224, 224, 224, 255, 168, 168, 168, 0, 168, 168, 168, 0, 224, 224, 224, 255, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 111, 111, 111, 0, 111, 111, 111, 0, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 220, 220, 220, 220, 73, 220, 220, 220, 74, 223, 223, 223, 219, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 217, 217, 217, 67, 224, 224, 224, 255, 224, 224, 224, 255, 217, 217, 217, 67, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 224, 224, 224, 255, 224, 224, 224, 255, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=30]
-flags = 0
-flags = 0
-image = SubResource( 179 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=180]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 73, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 111, 111, 111, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 111, 111, 111, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.125, 0.14375, 0.19375, 1)
-[sub_resource type="ImageTexture" id=32]
-flags = 0
-flags = 0
-image = SubResource( 180 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=181]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 23, 223, 223, 223, 198, 223, 223, 223, 197, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 22, 223, 223, 223, 212, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 211, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 22, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 22, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 207, 223, 223, 223, 254, 223, 223, 223, 253, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 210, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 194, 223, 223, 223, 254, 223, 223, 223, 208, 222, 222, 222, 20, 223, 223, 223, 254, 223, 223, 223, 252, 223, 223, 223, 20, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 194, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 176, 222, 222, 222, 191, 167, 167, 167, 20, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 252, 112, 112, 112, 0, 166, 166, 166, 21, 223, 223, 223, 191, 223, 223, 223, 174, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 252, 112, 112, 112, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 252, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 176, 223, 223, 223, 174, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=34]
-flags = 0
-flags = 0
-image = SubResource( 181 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=182]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 6, 220, 220, 220, 107, 223, 223, 223, 199, 223, 223, 223, 241, 223, 223, 223, 241, 223, 223, 223, 199, 220, 220, 220, 107, 167, 167, 167, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 26, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 205, 167, 167, 167, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 226, 213, 213, 213, 88, 222, 222, 222, 25, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 205, 167, 167, 167, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 219, 219, 219, 106, 223, 223, 223, 254, 223, 223, 223, 226, 167, 167, 167, 18, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 167, 167, 167, 18, 223, 223, 223, 226, 223, 223, 223, 254, 219, 219, 219, 106, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 197, 223, 223, 223, 254, 213, 213, 213, 88, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 216, 216, 216, 88, 223, 223, 223, 254, 223, 223, 223, 197, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 167, 167, 167, 0, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 25, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 25, 223, 223, 223, 254, 223, 223, 223, 240, 111, 111, 111, 0, 104, 104, 104, 0, 215, 215, 215, 149, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 220, 220, 220, 162, 109, 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 240, 111, 111, 111, 0, 0, 0, 0, 0, 162, 162, 162, 8, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 215, 165, 165, 165, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 86, 223, 223, 223, 254, 223, 223, 223, 197, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 207, 207, 36, 223, 223, 223, 240, 223, 223, 223, 245, 217, 217, 217, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 167, 167, 167, 18, 223, 223, 223, 225, 223, 223, 223, 254, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 222, 222, 222, 86, 222, 222, 222, 99, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 205, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 205, 167, 167, 167, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 241, 223, 223, 223, 199, 220, 220, 220, 107, 167, 167, 167, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=36]
-flags = 0
-flags = 0
-image = SubResource( 182 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=183]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, 164, 2, 222, 222, 222, 92, 223, 223, 223, 185, 223, 223, 223, 231, 223, 223, 223, 231, 223, 223, 223, 186, 222, 222, 222, 94, 155, 155, 155, 3, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 217, 217, 217, 43, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 211, 178, 178, 178, 48, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 44, 223, 223, 223, 239, 223, 223, 223, 254, 223, 223, 223, 226, 213, 213, 213, 88, 222, 222, 222, 25, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 241, 184, 184, 184, 49, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 8, 223, 223, 223, 217, 223, 223, 223, 254, 223, 223, 223, 226, 167, 167, 167, 18, 103, 103, 103, 0, 112, 112, 112, 0, 111, 111, 111, 0, 103, 103, 103, 0, 167, 167, 167, 18, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 222, 167, 167, 167, 10, 0, 0, 0, 0, 55, 55, 55, 0, 221, 221, 221, 115, 223, 223, 223, 254, 223, 223, 223, 254, 213, 213, 213, 88, 103, 103, 103, 0, 217, 217, 217, 71, 223, 223, 223, 226, 223, 223, 223, 226, 217, 217, 217, 71, 105, 105, 105, 0, 216, 216, 216, 88, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 120, 56, 56, 56, 0, 111, 111, 111, 0, 223, 223, 223, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 25, 112, 112, 112, 0, 223, 223, 223, 223, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 223, 112, 112, 112, 0, 223, 223, 223, 25, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 217, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 218, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 22, 112, 112, 112, 0, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 224, 112, 112, 112, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 217, 111, 111, 111, 0, 55, 55, 55, 0, 222, 222, 222, 123, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 86, 110, 110, 110, 0, 217, 217, 217, 72, 223, 223, 223, 226, 223, 223, 223, 226, 217, 217, 217, 72, 110, 110, 110, 0, 223, 223, 223, 86, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 123, 55, 55, 55, 0, 0, 0, 0, 0, 167, 167, 167, 12, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 167, 167, 167, 18, 103, 103, 103, 0, 112, 112, 112, 0, 112, 112, 112, 0, 103, 103, 103, 0, 167, 167, 167, 18, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 226, 167, 167, 167, 12, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 213, 213, 213, 55, 223, 223, 223, 245, 223, 223, 223, 254, 223, 223, 223, 226, 213, 213, 213, 88, 222, 222, 222, 25, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 245, 213, 213, 213, 55, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 214, 214, 214, 54, 223, 223, 223, 217, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 217, 214, 214, 214, 54, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 164, 164, 164, 4, 219, 219, 219, 98, 223, 223, 223, 189, 223, 223, 223, 233, 223, 223, 223, 233, 223, 223, 223, 189, 219, 219, 219, 98, 164, 164, 164, 4, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=38]
-flags = 0
-flags = 0
-image = SubResource( 183 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=184]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=40]
-flags = 0
-flags = 0
-image = SubResource( 184 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=185]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=42]
-flags = 0
-flags = 0
-image = SubResource( 185 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=186]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 191, 191, 191, 221, 59, 59, 59, 128, 95, 95, 95, 146, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 250, 126, 126, 126, 172, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 172, 172, 172, 207, 0, 0, 0, 100, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 171, 191, 191, 191, 221, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=44]
-flags = 0
-flags = 0
-image = SubResource( 186 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=187]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 113, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 113, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 161, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 161, 191, 191, 191, 18, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 112, 255, 255, 255, 174, 255, 255, 255, 124, 255, 255, 255, 19, 255, 255, 255, 19, 255, 255, 255, 124, 255, 255, 255, 174, 255, 255, 255, 112, 128, 128, 128, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 155, 255, 255, 255, 174, 255, 255, 255, 19, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 19, 255, 255, 255, 174, 255, 255, 255, 155, 128, 128, 128, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=46]
-flags = 0
-flags = 0
-image = SubResource( 187 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=47]
+[sub_resource type="StyleBoxFlat" id="47"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.1, 0.115, 0.155, 1 )
-
-[sub_resource type="Image" id=188]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 228, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 79, 191, 191, 191, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 79, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=49]
-flags = 0
-flags = 0
-image = SubResource( 188 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=189]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 121, 128, 128, 128, 0, 255, 255, 255, 60, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 60, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 61, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 122, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 10,
-"mipmaps": false,
-"width": 10
-}
-
-[sub_resource type="ImageTexture" id=51]
-flags = 0
-flags = 0
-image = SubResource( 189 )
-size = Vector2( 10, 10 )
-
-[sub_resource type="Image" id=190]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=53]
-flags = 0
-flags = 0
-image = SubResource( 190 )
-size = Vector2( 16, 16 )
+border_color = Color(0.1, 0.115, 0.155, 1)
-[sub_resource type="StyleBoxFlat" id=54]
+[sub_resource type="StyleBoxFlat" id="54"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.87, 0.4, 1 )
-shadow_color = Color( 1, 0.87, 0.4, 0.1 )
+border_color = Color(1, 0.87, 0.4, 1)
+shadow_color = Color(1, 0.87, 0.4, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=55]
+[sub_resource type="StyleBoxFlat" id="55"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.3 )
+bg_color = Color(0, 0, 0, 0.3)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=56]
+[sub_resource type="StyleBoxFlat" id="56"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.4 )
+bg_color = Color(0, 0, 0, 0.4)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=57]
+[sub_resource type="StyleBoxFlat" id="57"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=58]
+[sub_resource type="StyleBoxFlat" id="58"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.47, 0.42, 1 )
-shadow_color = Color( 1, 0.47, 0.42, 0.2 )
+border_color = Color(1, 0.47, 0.42, 1)
+shadow_color = Color(1, 0.47, 0.42, 0.2)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=59]
+[sub_resource type="StyleBoxFlat" id="59"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.41, 0.61, 0.91, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.41, 0.61, 0.91, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=60]
+[sub_resource type="StyleBoxFlat" id="60"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=61]
+[sub_resource type="StyleBoxFlat" id="61"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.41, 0.61, 0.91, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.41, 0.61, 0.91, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="ImageTexture" id=62]
-
-[sub_resource type="Image" id=191]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 20, 255, 255, 255, 62, 255, 255, 255, 62, 255, 255, 255, 20, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 62, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 62, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 62, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 20, 255, 255, 255, 62, 255, 255, 255, 62, 255, 255, 255, 20, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=64]
-flags = 0
-flags = 0
-image = SubResource( 191 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=65]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 64 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
+[sub_resource type="StyleBoxLine" id="76"]
+color = Color(1, 1, 1, 0.1)
-[sub_resource type="Image" id=192]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 124, 124, 124, 0, 124, 124, 124, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 180, 180, 4, 248, 248, 248, 99, 248, 248, 248, 167, 248, 248, 248, 167, 248, 248, 248, 99, 180, 180, 180, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 247, 247, 247, 98, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 98, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 0, 248, 248, 248, 166, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 166, 124, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 0, 248, 248, 248, 166, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 166, 124, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 247, 247, 247, 98, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 98, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 180, 180, 5, 248, 248, 248, 99, 248, 248, 248, 167, 248, 248, 248, 167, 248, 248, 248, 99, 180, 180, 180, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 124, 124, 124, 0, 124, 124, 124, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=67]
-flags = 0
-flags = 0
-image = SubResource( 192 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=68]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 67 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="Image" id=193]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 4, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 124, 124, 124, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 5, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 128, 128, 128, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=70]
-flags = 0
-flags = 0
-image = SubResource( 193 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=71]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 70 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=194]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=73]
-flags = 0
-flags = 0
-image = SubResource( 194 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=74]
+[sub_resource type="StyleBoxFlat" id="81"]
content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=75]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=76]
-color = Color( 1, 1, 1, 0.1 )
-
-[sub_resource type="Image" id=195]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 166, 166, 166, 6, 219, 219, 219, 37, 222, 222, 222, 59, 222, 222, 222, 69, 222, 222, 222, 69, 222, 222, 222, 59, 219, 219, 219, 37, 166, 166, 166, 6, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 217, 217, 217, 23, 223, 223, 223, 69, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 69, 217, 217, 217, 23, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 23, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 50, 221, 221, 221, 17, 152, 152, 152, 2, 152, 152, 152, 2, 221, 221, 221, 17, 222, 222, 222, 50, 223, 223, 223, 73, 223, 223, 223, 73, 217, 217, 217, 23, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 165, 165, 6, 223, 223, 223, 69, 223, 223, 223, 73, 222, 222, 222, 33, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 222, 222, 222, 33, 223, 223, 223, 73, 223, 223, 223, 69, 165, 165, 165, 6, 0, 0, 0, 0, 54, 54, 54, 0, 219, 219, 219, 37, 223, 223, 223, 73, 222, 222, 222, 50, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 110, 110, 110, 0, 222, 222, 222, 50, 223, 223, 223, 73, 219, 219, 219, 37, 54, 54, 54, 0, 110, 110, 110, 0, 221, 221, 221, 59, 223, 223, 223, 73, 221, 221, 221, 17, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 221, 221, 221, 17, 223, 223, 223, 73, 221, 221, 221, 59, 110, 110, 110, 0, 111, 111, 111, 0, 222, 222, 222, 69, 223, 223, 223, 73, 112, 112, 112, 2, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 149, 149, 149, 2, 223, 223, 223, 73, 222, 222, 222, 69, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 69, 223, 223, 223, 73, 149, 149, 149, 2, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 112, 112, 112, 2, 223, 223, 223, 73, 222, 222, 222, 69, 111, 111, 111, 0, 110, 110, 110, 0, 221, 221, 221, 59, 223, 223, 223, 73, 221, 221, 221, 17, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 221, 221, 221, 17, 223, 223, 223, 73, 221, 221, 221, 59, 110, 110, 110, 0, 54, 54, 54, 0, 219, 219, 219, 37, 223, 223, 223, 73, 221, 221, 221, 49, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 110, 110, 110, 0, 221, 221, 221, 49, 223, 223, 223, 73, 219, 219, 219, 37, 54, 54, 54, 0, 0, 0, 0, 0, 166, 166, 166, 6, 223, 223, 223, 69, 223, 223, 223, 73, 222, 222, 222, 33, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 222, 222, 222, 33, 223, 223, 223, 73, 223, 223, 223, 69, 166, 166, 166, 6, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 23, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 50, 221, 221, 221, 17, 152, 152, 152, 2, 152, 152, 152, 2, 221, 221, 221, 17, 222, 222, 222, 50, 223, 223, 223, 73, 223, 223, 223, 73, 217, 217, 217, 23, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 208, 208, 208, 23, 223, 223, 223, 69, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 69, 208, 208, 208, 23, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 166, 166, 166, 6, 219, 219, 219, 37, 222, 222, 222, 59, 222, 222, 222, 69, 222, 222, 222, 69, 222, 222, 222, 59, 219, 219, 219, 37, 166, 166, 166, 6, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=78]
-flags = 0
-flags = 0
-image = SubResource( 195 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=196]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 167, 167, 167, 20, 223, 223, 223, 129, 223, 223, 223, 208, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 208, 223, 223, 223, 129, 167, 167, 167, 20, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 222, 222, 222, 81, 224, 224, 224, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 241, 222, 222, 222, 81, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 222, 222, 222, 81, 224, 224, 224, 254, 224, 224, 224, 255, 221, 221, 221, 175, 222, 222, 222, 61, 163, 163, 163, 8, 164, 164, 164, 9, 222, 222, 222, 62, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 254, 222, 222, 222, 81, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 20, 224, 224, 224, 241, 224, 224, 224, 255, 223, 223, 223, 116, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 223, 223, 223, 116, 224, 224, 224, 255, 224, 224, 224, 241, 167, 167, 167, 20, 0, 0, 0, 0, 55, 55, 55, 0, 223, 223, 223, 128, 224, 224, 224, 255, 222, 222, 222, 175, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 110, 110, 110, 0, 222, 222, 222, 175, 224, 224, 224, 255, 223, 223, 223, 128, 55, 55, 55, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 222, 222, 222, 61, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 221, 221, 221, 62, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 205, 205, 205, 8, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 195, 195, 195, 8, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 194, 194, 194, 8, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 205, 205, 205, 8, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 222, 222, 222, 61, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 222, 222, 222, 61, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 56, 56, 56, 0, 223, 223, 223, 129, 224, 224, 224, 255, 222, 222, 222, 174, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 109, 109, 109, 0, 221, 221, 221, 174, 224, 224, 224, 255, 223, 223, 223, 129, 56, 56, 56, 0, 0, 0, 0, 0, 167, 167, 167, 20, 224, 224, 224, 241, 224, 224, 224, 255, 223, 223, 223, 116, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 223, 223, 223, 116, 224, 224, 224, 255, 224, 224, 224, 241, 167, 167, 167, 20, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 82, 224, 224, 224, 254, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 62, 164, 164, 164, 9, 163, 163, 163, 8, 222, 222, 222, 61, 221, 221, 221, 175, 224, 224, 224, 255, 224, 224, 224, 254, 222, 222, 222, 82, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 82, 224, 224, 224, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 241, 223, 223, 223, 82, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 167, 167, 167, 21, 223, 223, 223, 129, 223, 223, 223, 208, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 208, 223, 223, 223, 129, 167, 167, 167, 20, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=80]
-flags = 0
-flags = 0
-image = SubResource( 196 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=81]
-content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.4, 0.4225, 0.4825, 1 )
+bg_color = Color(0.4, 0.4225, 0.4825, 1)
-[sub_resource type="StyleBoxFlat" id=82]
+[sub_resource type="StyleBoxFlat" id="82"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.1, 0.115, 0.155, 1 )
-
-[sub_resource type="Image" id=197]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 66, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 66, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 64,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=84]
-flags = 0
-flags = 0
-image = SubResource( 197 )
-size = Vector2( 8, 64 )
+bg_color = Color(0.1, 0.115, 0.155, 1)
-[sub_resource type="StyleBoxTexture" id=85]
-texture = SubResource( 19 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=86]
+[sub_resource type="StyleBoxFlat" id="86"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.1, 0.115, 0.155, 1 )
+border_color = Color(0.1, 0.115, 0.155, 1)
-[sub_resource type="StyleBoxFlat" id=87]
+[sub_resource type="StyleBoxFlat" id="87"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.5, 0.51875, 0.56875, 1 )
+border_color = Color(0.5, 0.51875, 0.56875, 1)
-[sub_resource type="StyleBoxFlat" id=88]
+[sub_resource type="StyleBoxFlat" id="88"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.2 )
+border_color = Color(1, 1, 1, 0.2)
-[sub_resource type="StyleBoxFlat" id=89]
+[sub_resource type="StyleBoxFlat" id="89"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.2, 0.23, 0.31, 1)
-[sub_resource type="StyleBoxFlat" id=90]
+[sub_resource type="StyleBoxFlat" id="90"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.2, 0.23, 0.31, 1)
-[sub_resource type="StyleBoxEmpty" id=91]
+[sub_resource type="StyleBoxEmpty" id="91"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id=198]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 228, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 79, 191, 191, 191, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 79, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="3"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.41, 0.61, 0.91, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=93]
-flags = 0
-flags = 0
-image = SubResource( 198 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.125, 0.14375, 0.19375, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="Image" id=199]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 146, 255, 255, 255, 151, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 149, 255, 255, 255, 151, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 156, 255, 255, 255, 199, 255, 255, 255, 163, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 14, 255, 255, 255, 161, 255, 255, 255, 199, 255, 255, 255, 160, 128, 128, 128, 0, 0, 0, 0, 0, 191, 191, 191, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 163, 191, 191, 191, 16, 191, 191, 191, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 167, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 162, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 168, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 168, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 154, 255, 255, 255, 157, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxFlat" id="2"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.18, 0.207, 0.279, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.14, 0.161, 0.217, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=95]
-flags = 0
-flags = 0
-image = SubResource( 199 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxFlat" id="4"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.4, 0.4225, 0.4825, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=97]
+[sub_resource type="StyleBoxFlat" id="6"]
content_margin_left = 6.0
+content_margin_top = 4.0
content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.41, 0.61, 0.91, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[sub_resource type="StyleBoxFlat" id="97"]
+content_margin_left = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
-[sub_resource type="StyleBoxFlat" id=98]
+[sub_resource type="StyleBoxFlat" id="98"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 2.0
+content_margin_right = 2.0
content_margin_bottom = 2.0
-bg_color = Color( 0.231373, 0.258824, 0.337255, 1 )
+bg_color = Color(0.231373, 0.258824, 0.337255, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=99]
+[sub_resource type="StyleBoxFlat" id="99"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.4, 0.4225, 0.4825, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.4, 0.4225, 0.4825, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="Image" id=200]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 175, 223, 223, 223, 196, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 191, 223, 223, 223, 254, 223, 223, 223, 211, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 20, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 211, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 223, 223, 223, 20, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 210, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 222, 222, 222, 20, 223, 223, 223, 207, 223, 223, 223, 254, 223, 223, 223, 212, 166, 166, 166, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 19, 223, 223, 223, 207, 223, 223, 223, 254, 223, 223, 223, 213, 166, 166, 166, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 190, 223, 223, 223, 254, 223, 223, 223, 214, 167, 167, 167, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 175, 223, 223, 223, 197, 167, 167, 167, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=101]
-flags = 0
-flags = 0
-image = SubResource( 200 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=201]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 35, 128, 128, 128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 1, 222, 222, 222, 35, 111, 111, 111, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 184, 223, 223, 223, 254, 222, 222, 222, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 65, 223, 223, 223, 254, 223, 223, 223, 184, 112, 112, 112, 0, 56, 56, 56, 0, 223, 223, 223, 121, 223, 223, 223, 254, 223, 223, 223, 199, 166, 166, 166, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 6, 223, 223, 223, 200, 223, 223, 223, 254, 223, 223, 223, 121, 56, 56, 56, 0, 0, 0, 0, 0, 165, 165, 165, 11, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 177, 163, 163, 163, 6, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 163, 163, 163, 6, 223, 223, 223, 177, 223, 223, 223, 254, 223, 223, 223, 222, 165, 165, 165, 11, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 21, 223, 223, 223, 212, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 214, 223, 223, 223, 89, 220, 220, 220, 22, 221, 221, 221, 23, 223, 223, 223, 89, 223, 223, 223, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 212, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 12, 223, 223, 223, 194, 223, 223, 223, 212, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 223, 223, 223, 212, 223, 223, 223, 193, 167, 167, 167, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 12, 167, 167, 167, 21, 166, 166, 166, 6, 222, 222, 222, 107, 223, 223, 223, 191, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 191, 222, 222, 222, 106, 166, 166, 166, 6, 166, 166, 166, 21, 167, 167, 167, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 167, 167, 167, 0, 223, 223, 223, 254, 223, 223, 223, 252, 167, 167, 167, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=103]
-flags = 0
-flags = 0
-image = SubResource( 201 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=202]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 2, 220, 220, 220, 101, 223, 223, 223, 197, 223, 223, 223, 236, 222, 222, 222, 91, 221, 221, 221, 73, 218, 218, 218, 37, 147, 147, 147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 0, 202, 202, 202, 49, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 253, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 83, 119, 119, 119, 19, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 50, 223, 223, 223, 243, 223, 223, 223, 254, 223, 223, 223, 232, 208, 208, 208, 97, 218, 218, 218, 32, 209, 209, 209, 10, 203, 203, 203, 34, 221, 221, 221, 89, 221, 221, 221, 100, 221, 221, 221, 95, 132, 132, 132, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 10, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 232, 166, 166, 166, 23, 101, 101, 101, 0, 111, 111, 111, 0, 112, 112, 112, 0, 94, 94, 94, 0, 165, 165, 165, 7, 222, 222, 222, 89, 221, 221, 221, 100, 221, 221, 221, 88, 166, 166, 166, 4, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 124, 223, 223, 223, 254, 223, 223, 223, 254, 208, 208, 208, 98, 99, 99, 99, 0, 216, 216, 216, 77, 223, 223, 223, 234, 222, 222, 222, 89, 208, 208, 208, 28, 99, 99, 99, 0, 211, 211, 211, 35, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 47, 56, 56, 56, 0, 111, 111, 111, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 254, 219, 219, 219, 32, 112, 112, 112, 0, 223, 223, 223, 232, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 88, 111, 111, 111, 0, 209, 209, 209, 10, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 85, 111, 111, 111, 0, 112, 112, 112, 0, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 254, 217, 217, 217, 28, 112, 112, 112, 0, 223, 223, 223, 233, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 88, 111, 111, 111, 0, 208, 208, 208, 9, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 86, 111, 111, 111, 0, 54, 54, 54, 0, 220, 220, 220, 131, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 96, 105, 105, 105, 0, 219, 219, 219, 77, 223, 223, 223, 234, 222, 222, 222, 89, 208, 208, 208, 28, 94, 94, 94, 0, 203, 203, 203, 34, 221, 221, 221, 100, 221, 221, 221, 100, 217, 217, 217, 48, 53, 53, 53, 0, 0, 0, 0, 0, 166, 166, 166, 15, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 231, 166, 166, 166, 22, 101, 101, 101, 0, 111, 111, 111, 0, 112, 112, 112, 0, 94, 94, 94, 0, 164, 164, 164, 7, 221, 221, 221, 89, 221, 221, 221, 100, 222, 222, 222, 89, 160, 160, 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 201, 201, 201, 61, 223, 223, 223, 248, 223, 223, 223, 254, 223, 223, 223, 232, 208, 208, 208, 97, 218, 218, 218, 32, 209, 209, 209, 10, 203, 203, 203, 34, 221, 221, 221, 89, 221, 221, 221, 100, 221, 221, 221, 96, 187, 187, 187, 22, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 203, 203, 203, 60, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 253, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 185, 185, 185, 21, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 160, 160, 160, 5, 218, 218, 218, 107, 223, 223, 223, 201, 223, 223, 223, 238, 222, 222, 222, 91, 221, 221, 221, 75, 220, 220, 220, 39, 155, 155, 155, 1, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 111, 111, 111, 0, 112, 112, 112, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=105]
-flags = 0
-flags = 0
-image = SubResource( 202 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=106]
+[sub_resource type="StyleBoxFlat" id="106"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
+border_color = Color(0.125, 0.14375, 0.19375, 1)
-[sub_resource type="StyleBoxLine" id=107]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="107"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
-[sub_resource type="StyleBoxLine" id=108]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="108"]
+color = Color(1, 1, 1, 0.1)
grow_end = 7.0
-[sub_resource type="StyleBoxLine" id=109]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="109"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
grow_end = 7.0
-[sub_resource type="Image" id=203]
-data = {
-"data": PoolByteArray( 204, 204, 204, 27, 222, 222, 222, 89, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 204, 204, 204, 27, 222, 222, 222, 88, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 221, 221, 221, 100, 221, 221, 221, 100, 166, 166, 166, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 166, 166, 166, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 166, 166, 166, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 166, 166, 166, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 204, 204, 204, 27, 222, 222, 222, 89, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 89, 204, 204, 204, 27 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=111]
-flags = 0
-flags = 0
-image = SubResource( 203 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=112]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 111 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 4.0
-margin_right = 4.0
-margin_top = 4.0
-margin_bottom = 4.0
-
-[sub_resource type="Image" id=204]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=114]
-flags = 0
-flags = 0
-image = SubResource( 204 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=115]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 1.0
-content_margin_bottom = 1.0
-texture = SubResource( 114 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxFlat" id=116]
+[sub_resource type="StyleBoxFlat" id="116"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.125, 0.14375, 0.19375, 1 )
+bg_color = Color(0.125, 0.14375, 0.19375, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
+border_color = Color(0.125, 0.14375, 0.19375, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxEmpty" id=117]
+[sub_resource type="StyleBoxEmpty" id="117"]
-[sub_resource type="StyleBoxFlat" id=1]
+[sub_resource type="StyleBoxFlat" id="1"]
content_margin_left = 1.0
-bg_color = Color( 0.12549, 0.145098, 0.192157, 1 )
+bg_color = Color(0.12549, 0.145098, 0.192157, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=205]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 152, 223, 223, 223, 151, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 164, 222, 222, 222, 164, 222, 222, 222, 199, 223, 223, 223, 163, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 164, 165, 165, 165, 17, 165, 165, 165, 17, 222, 222, 222, 164, 222, 222, 222, 199, 223, 223, 223, 163, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 156, 222, 222, 222, 199, 222, 222, 222, 165, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 17, 222, 222, 222, 165, 222, 222, 222, 199, 223, 223, 223, 156, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 154, 222, 222, 222, 159, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 18, 222, 222, 222, 159, 222, 222, 222, 154, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 150, 223, 223, 223, 152, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 153, 222, 222, 222, 151, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 156, 222, 222, 222, 199, 223, 223, 223, 164, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 156, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 165, 165, 17, 222, 222, 222, 164, 222, 222, 222, 199, 223, 223, 223, 163, 167, 167, 167, 16, 167, 167, 167, 16, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 164, 165, 165, 165, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 17, 222, 222, 222, 165, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 165, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 17, 223, 223, 223, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 165, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 18, 222, 222, 222, 153, 222, 222, 222, 153, 166, 166, 166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=119]
-flags = 0
-flags = 0
-image = SubResource( 205 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=206]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 21, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 167, 167, 167, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 187, 187, 187, 46, 222, 222, 222, 57, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 167, 167, 167, 34, 64, 64, 64, 0, 187, 187, 187, 45, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 83, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 183, 183, 183, 34, 58, 58, 58, 0, 151, 151, 151, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 203, 203, 203, 46, 43, 43, 43, 0, 56, 56, 56, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 187, 187, 187, 45, 64, 64, 64, 0, 151, 151, 151, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 151, 151, 151, 33, 53, 53, 53, 0, 183, 183, 183, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 221, 221, 221, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 56, 56, 56, 32, 43, 43, 43, 0, 203, 203, 203, 46, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 83, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 222, 222, 222, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 139, 139, 139, 45, 222, 222, 222, 57, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 161, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 21, 223, 223, 223, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 161, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=121]
-flags = 0
-flags = 0
-image = SubResource( 206 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=207]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 27, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 167, 167, 167, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 202, 202, 202, 59, 220, 220, 220, 73, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 191, 191, 191, 44, 85, 85, 85, 0, 202, 202, 202, 58, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 234, 199, 199, 199, 44, 85, 85, 85, 0, 183, 183, 183, 43, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 59, 80, 80, 80, 0, 151, 151, 151, 42, 224, 224, 224, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 202, 202, 202, 58, 85, 85, 85, 0, 183, 183, 183, 43, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 183, 183, 183, 42, 82, 82, 82, 0, 199, 199, 199, 44, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 232, 151, 151, 151, 42, 80, 80, 80, 0, 210, 210, 210, 59, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 7, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 232, 186, 186, 186, 58, 220, 220, 220, 74, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 27, 223, 223, 223, 207, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 166, 166, 166, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=123]
-flags = 0
-flags = 0
-image = SubResource( 207 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=208]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 21, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 167, 167, 167, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 57, 187, 187, 187, 46, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 187, 187, 187, 45, 64, 64, 64, 0, 167, 167, 167, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 83, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 151, 151, 151, 33, 58, 58, 58, 0, 183, 183, 183, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 56, 56, 56, 32, 43, 43, 43, 0, 203, 203, 203, 46, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 151, 151, 151, 33, 64, 64, 64, 0, 187, 187, 187, 45, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 183, 183, 183, 34, 53, 53, 53, 0, 151, 151, 151, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 221, 221, 221, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 203, 203, 203, 46, 43, 43, 43, 0, 56, 56, 56, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 83, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 222, 222, 222, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 57, 139, 139, 139, 45, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 161, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 21, 223, 223, 223, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 161, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=125]
-flags = 0
-flags = 0
-image = SubResource( 208 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=209]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 27, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 167, 167, 167, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 73, 202, 202, 202, 59, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 202, 202, 202, 58, 85, 85, 85, 0, 191, 191, 191, 44, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 183, 183, 183, 42, 85, 85, 85, 0, 199, 199, 199, 44, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 232, 151, 151, 151, 42, 80, 80, 80, 0, 210, 210, 210, 59, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 183, 183, 183, 43, 85, 85, 85, 0, 202, 202, 202, 58, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 199, 199, 199, 44, 82, 82, 82, 0, 183, 183, 183, 43, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 59, 80, 80, 80, 0, 151, 151, 151, 42, 224, 224, 224, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 7, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 74, 186, 186, 186, 58, 224, 224, 224, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 27, 223, 223, 223, 207, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 166, 166, 166, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=127]
-flags = 0
-flags = 0
-image = SubResource( 209 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=210]
-data = {
-"data": PoolByteArray( 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 89, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 89, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 89, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 6
-}
-
-[sub_resource type="ImageTexture" id=129]
-flags = 0
-flags = 0
-image = SubResource( 210 )
-size = Vector2( 6, 16 )
-
-[sub_resource type="Image" id=211]
-data = {
-"data": PoolByteArray( 54, 54, 54, 0, 218, 218, 218, 72, 224, 224, 224, 227, 224, 224, 224, 227, 218, 218, 218, 72, 54, 54, 54, 0, 112, 112, 112, 0, 224, 224, 224, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 224, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 54, 54, 54, 0, 219, 219, 219, 72, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 72, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 218, 218, 218, 72, 224, 224, 224, 227, 224, 224, 224, 227, 218, 218, 218, 72, 54, 54, 54, 0, 112, 112, 112, 0, 224, 224, 224, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 224, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 54, 54, 54, 0, 219, 219, 219, 72, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 72, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 218, 218, 218, 72, 224, 224, 224, 227, 224, 224, 224, 227, 218, 218, 218, 72, 54, 54, 54, 0, 112, 112, 112, 0, 224, 224, 224, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 224, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 54, 54, 54, 0, 219, 219, 219, 72, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 72, 54, 54, 54, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 6
-}
-
-[sub_resource type="ImageTexture" id=131]
-flags = 0
-flags = 0
-image = SubResource( 211 )
-size = Vector2( 6, 16 )
-
-[sub_resource type="StyleBoxFlat" id=132]
-content_margin_left = 5.0
-content_margin_right = 5.0
+[sub_resource type="StyleBoxFlat" id="133"]
+content_margin_left = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.15, 0.1725, 0.2325, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.1, 0.115, 0.155, 1 )
+border_color = Color(0.125, 0.14375, 0.19375, 1)
+expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=133]
+[sub_resource type="StyleBoxFlat" id="134"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
+bg_color = Color(0.18, 0.207, 0.279, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
+border_color = Color(0.14, 0.161, 0.217, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=134]
+[sub_resource type="StyleBoxFlat" id="135"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.18, 0.207, 0.279, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.14, 0.161, 0.217, 1 )
+border_color = Color(0.1, 0.115, 0.155, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=135]
-content_margin_left = 10.0
-content_margin_right = 10.0
+[sub_resource type="StyleBoxFlat" id="132"]
+content_margin_left = 5.0
content_margin_top = 5.0
+content_margin_right = 5.0
content_margin_bottom = 5.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.1, 0.115, 0.155, 1 )
-expand_margin_bottom = 1.0
-
-[sub_resource type="Image" id=212]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 73, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 73, 255, 255, 255, 65, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 100, 255, 255, 255, 82, 191, 191, 191, 8, 191, 191, 191, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 73, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 9, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 9, 255, 255, 255, 77, 255, 255, 255, 76, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=137]
-flags = 0
-flags = 0
-image = SubResource( 212 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=213]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 73, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 100, 255, 255, 255, 82, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 82, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 9, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 76, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 76, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 72, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 73, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=139]
-flags = 0
-flags = 0
-image = SubResource( 213 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=214]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 17, 255, 255, 255, 17, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 17, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 17, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 17, 255, 255, 255, 17, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=141]
-flags = 0
-flags = 0
-image = SubResource( 214 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="Image" id=215]
-data = {
-"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 191, 191, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 191, 191, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=143]
-flags = 0
-flags = 0
-image = SubResource( 215 )
-size = Vector2( 8, 8 )
+border_width_bottom = 1
+border_color = Color(0.1, 0.115, 0.155, 1)
-[sub_resource type="StyleBoxFlat" id=144]
+[sub_resource type="StyleBoxFlat" id="144"]
content_margin_left = 1.0
-content_margin_right = 1.0
content_margin_top = 1.0
+content_margin_right = 1.0
content_margin_bottom = 1.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(1, 1, 1, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxFlat" id=96]
-bg_color = Color( 0.12549, 0.145098, 0.192157, 1 )
-
-[sub_resource type="Image" id=216]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 98, 255, 255, 255, 109, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 109, 255, 255, 255, 98, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 109, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 115, 255, 255, 255, 115, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=146]
-flags = 0
-flags = 0
-image = SubResource( 216 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="Image" id=217]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 115, 255, 255, 255, 114, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 124, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 114, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 115, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 115, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 114, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 115, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 115, 255, 255, 255, 115, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
+[sub_resource type="StyleBoxFlat" id="96"]
+bg_color = Color(0.12549, 0.145098, 0.192157, 1)
-[sub_resource type="ImageTexture" id=148]
-flags = 0
-flags = 0
-image = SubResource( 217 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="StyleBoxFlat" id=149]
+[sub_resource type="StyleBoxFlat" id="149"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.4, 0.4225, 0.4825, 1 )
-border_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.4, 0.4225, 0.4825, 1)
+border_color = Color(0.2, 0.23, 0.31, 1)
-[sub_resource type="StyleBoxFlat" id=150]
+[sub_resource type="StyleBoxFlat" id="150"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.4, 0.4225, 0.4825, 1 )
+border_color = Color(0.4, 0.4225, 0.4825, 1)
-[sub_resource type="StyleBoxEmpty" id=151]
+[sub_resource type="StyleBoxEmpty" id="151"]
-[sub_resource type="StyleBoxEmpty" id=152]
+[sub_resource type="StyleBoxEmpty" id="152"]
-[sub_resource type="StyleBoxFlat" id=153]
+[sub_resource type="StyleBoxFlat" id="153"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.08 )
-border_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(1, 1, 1, 0.08)
+border_color = Color(0.2, 0.23, 0.31, 1)
-[sub_resource type="StyleBoxFlat" id=154]
+[sub_resource type="StyleBoxFlat" id="154"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.1, 0.115, 0.155, 1 )
-border_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.1, 0.115, 0.155, 1)
+border_color = Color(0.2, 0.23, 0.31, 1)
-[sub_resource type="StyleBoxTexture" id=155]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 64 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=156]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 67 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=157]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 70 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=158]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=159]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=160]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="160"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 0.0
grow_end = 0.0
vertical = true
-[sub_resource type="StyleBoxFlat" id=161]
+[sub_resource type="StyleBoxFlat" id="161"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.4, 0.423529, 0.482353, 1 )
+bg_color = Color(0.4, 0.423529, 0.482353, 1)
-[sub_resource type="StyleBoxFlat" id=162]
+[sub_resource type="StyleBoxFlat" id="162"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.101961, 0.113725, 0.156863, 1 )
-
-[sub_resource type="Image" id=218]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 64, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 64, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 64, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 64, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 64
-}
-
-[sub_resource type="ImageTexture" id=164]
-flags = 0
-flags = 0
-image = SubResource( 218 )
-size = Vector2( 64, 8 )
+bg_color = Color(0.101961, 0.113725, 0.156863, 1)
-[sub_resource type="Image" id=219]
-data = {
-"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=166]
-flags = 0
-flags = 0
-image = SubResource( 219 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="StyleBoxTexture" id=167]
-texture = SubResource( 166 )
-region_rect = Rect2( 0, 0, 8, 8 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=168]
+[sub_resource type="StyleBoxFlat" id="168"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.2, 0.23, 0.31, 1 )
+bg_color = Color(0.2, 0.23, 0.31, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.2, 0.23, 0.31, 1 )
+border_color = Color(0.2, 0.23, 0.31, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
[resource]
resource_name = "Blue"
-default_font = ExtResource( 1 )
+default_font = ExtResource("3_kf8h4")
+default_font_size = 16
BoxContainer/constants/separation = 4
-Button/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-Button/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
-Button/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 )
-Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
-Button/colors/icon_color_pressed = Color( 0.4715, 0.7015, 1.0465, 1 )
+Button/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+Button/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+Button/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1)
+Button/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1)
+Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
+Button/colors/icon_color_pressed = Color(0.4715, 0.7015, 1.0465, 1)
Button/constants/hseparation = 2
-Button/fonts/font = ExtResource( 1 )
-Button/styles/disabled = SubResource( 2 )
-Button/styles/focus = SubResource( 3 )
-Button/styles/hover = SubResource( 4 )
-Button/styles/normal = SubResource( 5 )
-Button/styles/pressed = SubResource( 6 )
-CheckBox/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckBox/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
-CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 )
-CheckBox/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 )
-CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+Button/styles/disabled = SubResource("22")
+Button/styles/focus = SubResource("22")
+Button/styles/hover = SubResource("22")
+Button/styles/normal = SubResource("22")
+Button/styles/pressed = SubResource("22")
+CheckBox/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckBox/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1)
+CheckBox/colors/font_color_hover_pressed = Color(1, 1, 1, 1)
+CheckBox/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1)
+CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckBox/constants/check_vadjust = 0
CheckBox/constants/hseparation = 4
-CheckBox/fonts/font = ExtResource( 1 )
-CheckBox/icons/checked = SubResource( 8 )
-CheckBox/icons/radio_checked = SubResource( 10 )
-CheckBox/icons/radio_unchecked = SubResource( 12 )
-CheckBox/icons/unchecked = SubResource( 14 )
-CheckBox/styles/disabled = SubResource( 15 )
+CheckBox/styles/disabled = SubResource("15")
CheckBox/styles/focus = null
-CheckBox/styles/hover = SubResource( 15 )
+CheckBox/styles/hover = SubResource("15")
CheckBox/styles/hover_pressed = null
-CheckBox/styles/normal = SubResource( 15 )
-CheckBox/styles/pressed = SubResource( 15 )
-CheckButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
-CheckButton/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 )
-CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+CheckBox/styles/normal = SubResource("15")
+CheckBox/styles/pressed = SubResource("15")
+CheckButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckButton/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1)
+CheckButton/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1)
+CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckButton/constants/check_vadjust = 0
CheckButton/constants/hseparation = 4
-CheckButton/icons/off = SubResource( 17 )
-CheckButton/icons/off_disabled = SubResource( 19 )
-CheckButton/icons/on = SubResource( 21 )
-CheckButton/icons/on_disabled = SubResource( 19 )
-CheckButton/styles/disabled = SubResource( 22 )
-CheckButton/styles/hover = SubResource( 22 )
-CheckButton/styles/normal = SubResource( 22 )
-CheckButton/styles/pressed = SubResource( 22 )
-CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
+CheckButton/styles/disabled = SubResource("22")
+CheckButton/styles/hover = SubResource("22")
+CheckButton/styles/normal = SubResource("22")
+CheckButton/styles/pressed = SubResource("22")
+CollapsibleContainer/icons/arrow_normal = ExtResource("6")
ColorPicker/constants/h_width = 30
ColorPicker/constants/label_width = 10
ColorPicker/constants/margin = 8
ColorPicker/constants/sv_height = 256
ColorPicker/constants/sv_width = 256
-ColorPicker/icons/add_preset = SubResource( 24 )
-ColorPicker/icons/overbright_indicator = SubResource( 26 )
-ColorPicker/icons/preset_bg = SubResource( 28 )
-ColorPicker/icons/screen_picker = SubResource( 30 )
-ColorPickerButton/icons/bg = SubResource( 28 )
-FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 )
-FileDialog/colors/folder_icon_modulate = Color( 0.587, 0.727, 0.937, 1 )
-FileDialog/icons/folder = SubResource( 32 )
-FileDialog/icons/parent_folder = SubResource( 34 )
-FileDialog/icons/reload = SubResource( 36 )
-FileDialog/icons/toggle_hidden = SubResource( 38 )
-GraphEdit/colors/activity = Color( 0.41, 0.61, 0.91, 1 )
-GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 )
-GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 )
-GraphEdit/colors/selection_fill = Color( 0.41, 0.61, 0.91, 0.3 )
-GraphEdit/colors/selection_stroke = Color( 0.41, 0.61, 0.91, 0.8 )
+FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3)
+FileDialog/colors/folder_icon_modulate = Color(0.587, 0.727, 0.937, 1)
+GraphEdit/colors/activity = Color(0.41, 0.61, 0.91, 1)
+GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15)
+GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07)
+GraphEdit/colors/selection_fill = Color(0.41, 0.61, 0.91, 0.3)
+GraphEdit/colors/selection_stroke = Color(0.41, 0.61, 0.91, 0.8)
GraphEdit/constants/bezier_len_neg = 160
GraphEdit/constants/bezier_len_pos = 80
-GraphEdit/icons/minus = SubResource( 40 )
-GraphEdit/icons/more = SubResource( 42 )
-GraphEdit/icons/reset = SubResource( 44 )
-GraphEdit/icons/snap = SubResource( 46 )
-GraphEdit/styles/bg = SubResource( 47 )
-GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/title_color = Color( 1, 1, 1, 1 )
+GraphEdit/styles/bg = SubResource("47")
+GraphNode/colors/close_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/title_color = Color(1, 1, 1, 1)
GraphNode/constants/close_h_offset = 20
GraphNode/constants/close_offset = 20
GraphNode/constants/port_offset = 14
GraphNode/constants/separation = 1
GraphNode/constants/title_h_offset = -16
GraphNode/constants/title_offset = 20
-GraphNode/icons/close = SubResource( 49 )
-GraphNode/icons/port = SubResource( 51 )
-GraphNode/icons/resizer = SubResource( 53 )
-GraphNode/styles/breakpoint = SubResource( 54 )
-GraphNode/styles/comment = SubResource( 55 )
-GraphNode/styles/commentfocus = SubResource( 56 )
-GraphNode/styles/frame = SubResource( 57 )
-GraphNode/styles/position = SubResource( 58 )
-GraphNode/styles/selectedframe = SubResource( 59 )
-GraphNode/styles/state_machine_frame = SubResource( 60 )
-GraphNode/styles/state_machine_selectedframe = SubResource( 61 )
+GraphNode/styles/breakpoint = SubResource("54")
+GraphNode/styles/comment = SubResource("55")
+GraphNode/styles/commentfocus = SubResource("56")
+GraphNode/styles/frame = SubResource("57")
+GraphNode/styles/position = SubResource("58")
+GraphNode/styles/selectedframe = SubResource("59")
+GraphNode/styles/state_machine_frame = SubResource("60")
+GraphNode/styles/state_machine_selectedframe = SubResource("61")
GridContainer/constants/hseparation = 4
GridContainer/constants/vseparation = 4
HBoxContainer/constants/separation = 4
-HScrollBar/icons/decrement = SubResource( 62 )
-HScrollBar/icons/decrement_highlight = SubResource( 62 )
-HScrollBar/icons/increment = SubResource( 62 )
-HScrollBar/icons/increment_highlight = SubResource( 62 )
-HScrollBar/styles/grabber = SubResource( 65 )
-HScrollBar/styles/grabber_highlight = SubResource( 68 )
-HScrollBar/styles/grabber_pressed = SubResource( 71 )
-HScrollBar/styles/scroll = SubResource( 74 )
-HScrollBar/styles/scroll_focus = SubResource( 75 )
-HSeparator/styles/separator = SubResource( 76 )
-HSlider/icons/grabber = SubResource( 78 )
-HSlider/icons/grabber_highlight = SubResource( 80 )
-HSlider/styles/grabber_area = SubResource( 81 )
-HSlider/styles/slider = SubResource( 82 )
+HSeparator/styles/separator = SubResource("76")
+HSlider/styles/grabber_area = SubResource("81")
+HSlider/styles/slider = SubResource("82")
HSplitContainer/constants/separation = 8
-HSplitContainer/icons/grabber = SubResource( 84 )
-HSplitContainer/styles/bg = SubResource( 85 )
-Header/base_type = "Label"
-Header/colors/font_color = Color( 0.85098, 0.85098, 0.85098, 1 )
-Header/fonts/font = ExtResource( 2 )
-Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 )
-ItemList/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 )
-ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 )
+Header/base_type = &"Label"
+Header/colors/font_color = Color(0.85098, 0.85098, 0.85098, 1)
+Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1)
+ItemList/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+ItemList/colors/font_color_selected = Color(1, 1, 1, 1)
+ItemList/colors/guide_color = Color(1, 1, 1, 0.05)
ItemList/constants/hseparation = 3
ItemList/constants/icon_margin = 4
ItemList/constants/line_separation = 3
ItemList/constants/vseparation = 3
-ItemList/styles/bg = SubResource( 86 )
-ItemList/styles/bg_focus = SubResource( 87 )
-ItemList/styles/cursor = SubResource( 88 )
-ItemList/styles/cursor_unfocused = SubResource( 88 )
-ItemList/styles/selected = SubResource( 89 )
-ItemList/styles/selected_focus = SubResource( 90 )
-Label/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-Label/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+ItemList/styles/bg = SubResource("86")
+ItemList/styles/bg_focus = SubResource("87")
+ItemList/styles/cursor = SubResource("88")
+ItemList/styles/cursor_unfocused = SubResource("88")
+ItemList/styles/selected = SubResource("89")
+ItemList/styles/selected_focus = SubResource("90")
+Label/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+Label/colors/font_color_shadow = Color(0, 0, 0, 0)
Label/constants/line_spacing = 3
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/styles/normal = SubResource( 91 )
-LineEdit/colors/clear_button_color = Color( 0.8, 0.8075, 0.8275, 1 )
-LineEdit/colors/clear_button_color_pressed = Color( 0.41, 0.61, 0.91, 1 )
-LineEdit/colors/cursor_color = Color( 0.8, 0.8075, 0.8275, 1 )
-LineEdit/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 )
-LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 )
-LineEdit/colors/selection_color = Color( 0.41, 0.61, 0.91, 0.4 )
+Label/styles/normal = SubResource("91")
+LineEdit/colors/clear_button_color = Color(0.8, 0.8075, 0.8275, 1)
+LineEdit/colors/clear_button_color_pressed = Color(0.41, 0.61, 0.91, 1)
+LineEdit/colors/cursor_color = Color(0.8, 0.8075, 0.8275, 1)
+LineEdit/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+LineEdit/colors/font_color_selected = Color(1, 1, 1, 1)
+LineEdit/colors/read_only = Color(1, 1, 1, 0.3)
+LineEdit/colors/selection_color = Color(0.41, 0.61, 0.91, 0.4)
LineEdit/constants/minimum_spaces = 12
-LineEdit/fonts/font = ExtResource( 1 )
-LineEdit/icons/clear = SubResource( 93 )
-LineEdit/styles/focus = SubResource( 3 )
-LineEdit/styles/normal = SubResource( 5 )
-LineEdit/styles/read_only = SubResource( 2 )
-LinkButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-LinkButton/styles/focus = SubResource( 91 )
+LineEdit/styles/focus = SubResource("3")
+LineEdit/styles/normal = SubResource("5")
+LineEdit/styles/read_only = SubResource("2")
+LinkButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+LinkButton/styles/focus = SubResource("91")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
-MenuButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-MenuButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
-MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 )
+MenuButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+MenuButton/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1)
+MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1)
MenuButton/constants/hseparation = 3
-MenuButton/fonts/font = ExtResource( 1 )
-MenuButton/styles/disabled = SubResource( 22 )
-MenuButton/styles/focus = SubResource( 22 )
-MenuButton/styles/hover = SubResource( 22 )
-MenuButton/styles/normal = SubResource( 22 )
-MenuButton/styles/pressed = SubResource( 22 )
-Misc/colors/clear_color = Color( 0.231373, 0.258824, 0.337255, 1 )
-OptionButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-OptionButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
-OptionButton/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 )
-OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+MenuButton/styles/disabled = SubResource("22")
+MenuButton/styles/focus = SubResource("22")
+MenuButton/styles/hover = SubResource("22")
+MenuButton/styles/normal = SubResource("22")
+MenuButton/styles/pressed = SubResource("22")
+Misc/colors/clear_color = Color(0.231373, 0.258824, 0.337255, 1)
+OptionButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+OptionButton/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1)
+OptionButton/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1)
+OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/hseparation = 4
OptionButton/constants/modulate_arrow = 1
-OptionButton/icons/arrow = SubResource( 95 )
-OptionButton/styles/disabled = SubResource( 2 )
-OptionButton/styles/focus = SubResource( 3 )
-OptionButton/styles/hover = SubResource( 4 )
-OptionButton/styles/normal = SubResource( 5 )
-OptionButton/styles/pressed = SubResource( 6 )
-Panel/styles/panel = SubResource( 97 )
-PanelContainer/styles/panel = SubResource( 98 )
-PopupDialog/styles/panel = SubResource( 99 )
-PopupMenu/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
+OptionButton/styles/disabled = SubResource("2")
+OptionButton/styles/focus = SubResource("3")
+OptionButton/styles/hover = SubResource("4")
+OptionButton/styles/normal = SubResource("5")
+OptionButton/styles/pressed = SubResource("6")
+Panel/styles/panel = SubResource("97")
+PanelContainer/styles/panel = SubResource("98")
+Popup/styles/panel = SubResource("99")
+PopupMenu/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1)
PopupMenu/constants/vseparation = 5
-PopupMenu/icons/checked = SubResource( 8 )
-PopupMenu/icons/radio_checked = SubResource( 10 )
-PopupMenu/icons/radio_unchecked = SubResource( 12 )
-PopupMenu/icons/submenu = SubResource( 101 )
-PopupMenu/icons/unchecked = SubResource( 14 )
-PopupMenu/icons/visibility_hidden = SubResource( 103 )
-PopupMenu/icons/visibility_visible = SubResource( 38 )
-PopupMenu/icons/visibility_xray = SubResource( 105 )
-PopupMenu/styles/disabled = SubResource( 22 )
-PopupMenu/styles/focus = SubResource( 22 )
-PopupMenu/styles/hover = SubResource( 106 )
-PopupMenu/styles/labeled_separator_left = SubResource( 107 )
-PopupMenu/styles/labeled_separator_right = SubResource( 108 )
-PopupMenu/styles/normal = SubResource( 22 )
-PopupMenu/styles/panel = SubResource( 99 )
-PopupMenu/styles/pressed = SubResource( 22 )
-PopupMenu/styles/separator = SubResource( 109 )
-PopupPanel/styles/panel = SubResource( 99 )
-ProgressBar/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-ProgressBar/styles/bg = SubResource( 112 )
-ProgressBar/styles/fg = SubResource( 115 )
-ProjectSettingsEditor/styles/panel = SubResource( 116 )
-RichTextLabel/colors/default_color = Color( 0.8, 0.8075, 0.8275, 1 )
-RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+PopupMenu/styles/disabled = SubResource("22")
+PopupMenu/styles/focus = SubResource("22")
+PopupMenu/styles/hover = SubResource("106")
+PopupMenu/styles/labeled_separator_left = SubResource("107")
+PopupMenu/styles/labeled_separator_right = SubResource("108")
+PopupMenu/styles/normal = SubResource("22")
+PopupMenu/styles/panel = SubResource("99")
+PopupMenu/styles/pressed = SubResource("22")
+PopupMenu/styles/separator = SubResource("109")
+PopupPanel/styles/panel = SubResource("99")
+ProgressBar/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+ProjectSettingsEditor/styles/panel = SubResource("116")
+RichTextLabel/colors/default_color = Color(0.8, 0.8075, 0.8275, 1)
+RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0)
RichTextLabel/constants/shadow_as_outline = 0
RichTextLabel/constants/shadow_offset_x = 1
RichTextLabel/constants/shadow_offset_y = 1
-RichTextLabel/styles/focus = SubResource( 117 )
-RichTextLabel/styles/normal = SubResource( 47 )
-RulerButton/base_type = "Button"
-RulerButton/styles/focus = SubResource( 1 )
-RulerButton/styles/hover = SubResource( 1 )
-RulerButton/styles/normal = SubResource( 1 )
-RulerButton/styles/pressed = SubResource( 1 )
-SpinBox/icons/updown = SubResource( 119 )
-TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-TabContainer/colors/font_color_fg = Color( 0.8, 0.8075, 0.8275, 1 )
+RichTextLabel/styles/focus = SubResource("117")
+RichTextLabel/styles/normal = SubResource("47")
+RulerButton/base_type = &"Button"
+RulerButton/styles/focus = SubResource("1")
+RulerButton/styles/hover = SubResource("1")
+RulerButton/styles/normal = SubResource("1")
+RulerButton/styles/pressed = SubResource("1")
+TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabBar/colors/font_color_fg = Color(0.8, 0.8075, 0.8275, 1)
+TabBar/constants/hseparation = 4
+TabBar/styles/button = SubResource("22")
+TabBar/styles/button_pressed = SubResource("22")
+TabBar/styles/tab_bg = SubResource("133")
+TabBar/styles/tab_disabled = SubResource("134")
+TabBar/styles/tab_fg = SubResource("135")
+TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabContainer/colors/font_color_fg = Color(0.8, 0.8075, 0.8275, 1)
TabContainer/constants/hseparation = 4
TabContainer/constants/label_valign_bg = 2
TabContainer/constants/label_valign_fg = 0
TabContainer/constants/side_margin = 0
TabContainer/constants/top_margin = 24
-TabContainer/fonts/font = ExtResource( 1 )
-TabContainer/icons/decrement = SubResource( 121 )
-TabContainer/icons/decrement_highlight = SubResource( 123 )
-TabContainer/icons/increment = SubResource( 125 )
-TabContainer/icons/increment_highlight = SubResource( 127 )
-TabContainer/icons/menu = SubResource( 129 )
-TabContainer/icons/menu_highlight = SubResource( 131 )
-TabContainer/styles/panel = SubResource( 132 )
-TabContainer/styles/tab_bg = SubResource( 133 )
-TabContainer/styles/tab_disabled = SubResource( 134 )
-TabContainer/styles/tab_fg = SubResource( 135 )
-Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-Tabs/colors/font_color_fg = Color( 0.8, 0.8075, 0.8275, 1 )
-Tabs/constants/hseparation = 4
-Tabs/icons/close = SubResource( 93 )
-Tabs/icons/decrement = SubResource( 121 )
-Tabs/icons/decrement_highlight = SubResource( 123 )
-Tabs/icons/increment = SubResource( 125 )
-Tabs/icons/increment_highlight = SubResource( 127 )
-Tabs/styles/button = SubResource( 22 )
-Tabs/styles/button_pressed = SubResource( 22 )
-Tabs/styles/tab_bg = SubResource( 133 )
-Tabs/styles/tab_disabled = SubResource( 134 )
-Tabs/styles/tab_fg = SubResource( 135 )
-TextEdit/colors/caret_color = Color( 0.8, 0.8075, 0.8275, 1 )
-TextEdit/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-TextEdit/colors/selection_color = Color( 0.41, 0.61, 0.91, 0.4 )
-TextEdit/icons/fold = SubResource( 137 )
-TextEdit/icons/folded = SubResource( 139 )
-TextEdit/icons/space = SubResource( 141 )
-TextEdit/icons/tab = SubResource( 143 )
-TextEdit/styles/focus = SubResource( 4 )
-TextEdit/styles/normal = SubResource( 5 )
-TextEdit/styles/read_only = SubResource( 2 )
-ToolButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-ToolButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
-ToolButton/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 )
-ToolButton/styles/disabled = SubResource( 22 )
-ToolButton/styles/focus = SubResource( 22 )
-ToolButton/styles/hover = SubResource( 22 )
-ToolButton/styles/normal = SubResource( 22 )
-ToolButton/styles/pressed = SubResource( 22 )
-TooltipLabel/colors/font_color = Color( 0.2, 0.1925, 0.1725, 1 )
-TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 )
-TooltipPanel/styles/panel = SubResource( 144 )
-TopMenuPanel/base_type = "Panel"
-TopMenuPanel/styles/panel = SubResource( 96 )
-Tree/colors/custom_button_font_highlight = Color( 0.88, 0.8845, 0.8965, 1 )
-Tree/colors/drop_position_color = Color( 0.41, 0.61, 0.91, 1 )
-Tree/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
-Tree/colors/font_color_selected = Color( 1, 1, 1, 1 )
-Tree/colors/guide_color = Color( 1, 1, 1, 0.05 )
-Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 )
-Tree/colors/title_button_color = Color( 0.8, 0.8075, 0.8275, 1 )
+TabContainer/styles/panel = SubResource("132")
+TabContainer/styles/tab_bg = SubResource("133")
+TabContainer/styles/tab_disabled = SubResource("134")
+TabContainer/styles/tab_fg = SubResource("135")
+TextEdit/colors/caret_color = Color(0.8, 0.8075, 0.8275, 1)
+TextEdit/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+TextEdit/colors/selection_color = Color(0.41, 0.61, 0.91, 0.4)
+TextEdit/styles/focus = SubResource("4")
+TextEdit/styles/normal = SubResource("5")
+TextEdit/styles/read_only = SubResource("2")
+TooltipLabel/colors/font_color = Color(0.2, 0.1925, 0.1725, 1)
+TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1)
+TooltipPanel/styles/panel = SubResource("144")
+TopMenuPanel/base_type = &"Panel"
+TopMenuPanel/styles/panel = SubResource("96")
+Tree/colors/custom_button_font_highlight = Color(0.88, 0.8845, 0.8965, 1)
+Tree/colors/drop_position_color = Color(0.41, 0.61, 0.91, 1)
+Tree/colors/font_color = Color(0.8, 0.8075, 0.8275, 1)
+Tree/colors/font_color_selected = Color(1, 1, 1, 1)
+Tree/colors/guide_color = Color(1, 1, 1, 0.05)
+Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1)
+Tree/colors/title_button_color = Color(0.8, 0.8075, 0.8275, 1)
Tree/constants/button_margin = 4
Tree/constants/draw_guides = 0
Tree/constants/draw_relationship_lines = 1
@@ -1748,57 +742,35 @@ Tree/constants/item_margin = 12
Tree/constants/scroll_border = 40
Tree/constants/scroll_speed = 12
Tree/constants/vseparation = 4
-Tree/icons/arrow = SubResource( 137 )
-Tree/icons/arrow_collapsed = SubResource( 139 )
-Tree/icons/checked = SubResource( 8 )
-Tree/icons/select_arrow = SubResource( 146 )
-Tree/icons/unchecked = SubResource( 14 )
-Tree/icons/updown = SubResource( 148 )
-Tree/styles/bg = SubResource( 47 )
-Tree/styles/bg_focus = SubResource( 87 )
-Tree/styles/button_pressed = SubResource( 149 )
-Tree/styles/cursor = SubResource( 150 )
-Tree/styles/cursor_unfocused = SubResource( 150 )
-Tree/styles/custom_button = SubResource( 151 )
-Tree/styles/custom_button_hover = SubResource( 5 )
-Tree/styles/custom_button_pressed = SubResource( 152 )
-Tree/styles/hover = SubResource( 153 )
-Tree/styles/selected = SubResource( 89 )
-Tree/styles/selected_focus = SubResource( 90 )
-Tree/styles/title_button_hover = SubResource( 154 )
-Tree/styles/title_button_normal = SubResource( 154 )
-Tree/styles/title_button_pressed = SubResource( 154 )
+Tree/styles/bg = SubResource("47")
+Tree/styles/bg_focus = SubResource("87")
+Tree/styles/button_pressed = SubResource("149")
+Tree/styles/cursor = SubResource("150")
+Tree/styles/cursor_unfocused = SubResource("150")
+Tree/styles/custom_button = SubResource("151")
+Tree/styles/custom_button_hover = SubResource("5")
+Tree/styles/custom_button_pressed = SubResource("152")
+Tree/styles/hover = SubResource("153")
+Tree/styles/selected = SubResource("89")
+Tree/styles/selected_focus = SubResource("90")
+Tree/styles/title_button_hover = SubResource("154")
+Tree/styles/title_button_normal = SubResource("154")
+Tree/styles/title_button_pressed = SubResource("154")
VBoxContainer/constants/separation = 4
-VScrollBar/icons/decrement = SubResource( 62 )
-VScrollBar/icons/decrement_highlight = SubResource( 62 )
-VScrollBar/icons/increment = SubResource( 62 )
-VScrollBar/icons/increment_highlight = SubResource( 62 )
-VScrollBar/styles/grabber = SubResource( 155 )
-VScrollBar/styles/grabber_highlight = SubResource( 156 )
-VScrollBar/styles/grabber_pressed = SubResource( 157 )
-VScrollBar/styles/scroll = SubResource( 158 )
-VScrollBar/styles/scroll_focus = SubResource( 159 )
-VSeparator/styles/separator = SubResource( 160 )
-VSlider/icons/grabber = SubResource( 78 )
-VSlider/icons/grabber_highlight = SubResource( 80 )
-VSlider/styles/grabber_area = SubResource( 161 )
-VSlider/styles/slider = SubResource( 162 )
+VSeparator/styles/separator = SubResource("160")
+VSlider/styles/grabber_area = SubResource("161")
+VSlider/styles/slider = SubResource("162")
VSplitContainer/constants/separation = 8
-VSplitContainer/icons/grabber = SubResource( 164 )
-VSplitContainer/styles/bg = SubResource( 167 )
-ValueSlider/colors/progress_color = Color( 0.4, 0.423529, 0.482353, 1 )
-ValueSlider/colors/under_color = Color( 0.101961, 0.113725, 0.156863, 1 )
-ValueSlider/icons/arrow_hover = ExtResource( 3 )
-ValueSlider/icons/arrow_normal = ExtResource( 6 )
-ValueSlider/icons/arrow_pressed = ExtResource( 5 )
+ValueSlider/colors/progress_color = Color(0.4, 0.423529, 0.482353, 1)
+ValueSlider/colors/under_color = Color(0.101961, 0.113725, 0.156863, 1)
+ValueSlider/icons/arrow_hover = ExtResource("3")
+ValueSlider/icons/arrow_normal = ExtResource("6")
+ValueSlider/icons/arrow_pressed = ExtResource("5")
ValueSlider/icons/texture_over = null
-ValueSlider/icons/texture_progress = ExtResource( 4 )
-ValueSlider/icons/texture_under = ExtResource( 4 )
-WindowDialog/colors/title_color = Color( 0.8, 0.8075, 0.8275, 1 )
-WindowDialog/constants/close_h_ofs = 22
-WindowDialog/constants/close_v_ofs = 20
-WindowDialog/constants/title_height = 24
-WindowDialog/fonts/title_font = ExtResource( 1 )
-WindowDialog/icons/close = SubResource( 93 )
-WindowDialog/icons/close_highlight = SubResource( 93 )
-WindowDialog/styles/panel = SubResource( 168 )
+ValueSlider/icons/texture_progress = ExtResource("4")
+ValueSlider/icons/texture_under = ExtResource("4")
+Window/colors/title_color = Color(0.8, 0.8075, 0.8275, 1)
+Window/constants/close_h_ofs = 22
+Window/constants/close_v_ofs = 20
+Window/constants/title_height = 24
+Window/styles/panel = SubResource("168")
diff --git a/assets/themes/caramel/theme.tres b/assets/themes/caramel/theme.tres
index 9c04b7b7e80..0f06848edda 100644
--- a/assets/themes/caramel/theme.tres
+++ b/assets/themes/caramel/theme.tres
@@ -1,1833 +1,816 @@
-[gd_resource type="Theme" load_steps=178 format=2]
+[gd_resource type="Theme" load_steps=60 format=3 uid="uid://68ofdy0fw0t8"]
-[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
-[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
-[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=6]
+[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="3"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_vvu0m"]
+[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="4"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="5"]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="6"]
-[sub_resource type="StyleBoxFlat" id=2]
+[sub_resource type="StyleBoxFlat" id="23"]
content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.541176, 0.45098, 0.345098, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.964453, 0.841227, 0.697115, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=3]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 1, 0.819608, 0.00392157, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=4]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.713726, 0.580392, 0.423529, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=5]
-content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=6]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 1, 0.819608, 0.00392157, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="Image" id=172]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 60, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 106, 90, 90, 90, 244, 85, 85, 85, 106, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 106, 90, 90, 90, 249, 90, 90, 90, 255, 89, 89, 89, 187, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 105, 90, 90, 90, 249, 90, 90, 90, 255, 88, 88, 88, 194, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 49, 87, 87, 87, 68, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 104, 90, 90, 90, 248, 90, 90, 90, 255, 88, 88, 88, 194, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 49, 88, 88, 88, 179, 90, 90, 90, 231, 87, 87, 87, 76, 87, 87, 87, 104, 90, 90, 90, 248, 90, 90, 90, 255, 89, 89, 89, 195, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 65, 89, 89, 89, 226, 90, 90, 90, 255, 90, 90, 90, 235, 90, 90, 90, 248, 90, 90, 90, 255, 89, 89, 89, 196, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 70, 90, 90, 90, 225, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 196, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 69, 89, 89, 89, 225, 87, 87, 87, 197, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 66, 85, 85, 85, 54, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=8]
-flags = 0
-flags = 0
-image = SubResource( 172 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=173]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 56, 56, 56, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 66, 66, 66, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 66, 66, 66, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 66, 66, 66, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 66, 66, 66, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 69, 88, 88, 88, 182, 89, 89, 89, 234, 89, 89, 89, 234, 88, 88, 88, 182, 87, 87, 87, 69, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 89, 89, 89, 239, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 239, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 180, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 232, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 234, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 182, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 182, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 90, 90, 90, 240, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 240, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 69, 88, 88, 88, 182, 89, 89, 89, 234, 89, 89, 89, 234, 88, 88, 88, 182, 87, 87, 87, 69, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 67, 67, 67, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 67, 67, 67, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 67, 67, 67, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 67, 67, 67, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 64, 64, 64, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=10]
-flags = 0
-flags = 0
-image = SubResource( 173 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=174]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 56, 56, 56, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 66, 66, 66, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 66, 66, 66, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 66, 66, 66, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 66, 66, 66, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 67, 67, 67, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 67, 67, 67, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 67, 67, 67, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 67, 67, 67, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 64, 64, 64, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=12]
-flags = 0
-flags = 0
-image = SubResource( 174 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=175]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=14]
-flags = 0
-flags = 0
-image = SubResource( 175 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=15]
-content_margin_left = 4.0
-content_margin_right = 4.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
draw_center = false
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
-
-[sub_resource type="StyleBoxFlat" id=16]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
-
-[sub_resource type="Image" id=176]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 1, 87, 87, 87, 16, 86, 86, 86, 30, 86, 86, 86, 41, 86, 86, 86, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 45, 86, 86, 86, 41, 86, 86, 86, 30, 87, 87, 87, 16, 63, 63, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 50, 50, 50, 13, 85, 85, 85, 41, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 41, 50, 50, 50, 13, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 84, 84, 84, 23, 87, 87, 87, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 47, 84, 84, 84, 23, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 86, 86, 86, 18, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 88, 88, 88, 202, 90, 90, 90, 244, 90, 90, 90, 244, 88, 88, 88, 202, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 18, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 5, 87, 87, 87, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 146, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 87, 87, 87, 145, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 45, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 78, 78, 78, 23, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 78, 78, 78, 23, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 38, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 201, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 201, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 38, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 87, 87, 87, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 244, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 244, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 38, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 201, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 201, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 38, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 5, 87, 87, 87, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 146, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 86, 86, 86, 146, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 45, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 86, 86, 86, 18, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 88, 88, 88, 202, 90, 90, 90, 244, 90, 90, 90, 244, 88, 88, 88, 202, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 18, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 84, 84, 84, 23, 87, 87, 87, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 47, 84, 84, 84, 23, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 50, 50, 50, 13, 85, 85, 85, 41, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 41, 50, 50, 50, 13, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 1, 87, 87, 87, 16, 86, 86, 86, 30, 86, 86, 86, 41, 86, 86, 86, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 45, 86, 86, 86, 41, 86, 86, 86, 30, 87, 87, 87, 16, 63, 63, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 26,
-"mipmaps": false,
-"width": 42
-}
-
-[sub_resource type="ImageTexture" id=18]
-flags = 0
-flags = 0
-image = SubResource( 176 )
-size = Vector2( 42, 26 )
-
-[sub_resource type="Image" id=177]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=20]
-flags = 4
-flags = 4
-image = SubResource( 177 )
-size = Vector2( 16, 16 )
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
-[sub_resource type="Image" id=178]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 64, 64, 64, 5, 89, 89, 89, 90, 89, 89, 89, 166, 90, 90, 90, 221, 90, 90, 90, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 244, 90, 90, 90, 221, 89, 89, 89, 166, 89, 89, 89, 90, 64, 64, 64, 5, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 76, 89, 89, 89, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 224, 89, 89, 89, 76, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 126, 90, 90, 90, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 254, 89, 89, 89, 126, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 103, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 178, 87, 87, 87, 65, 65, 65, 65, 13, 65, 65, 65, 13, 87, 87, 87, 65, 89, 89, 89, 178, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 103, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 27, 90, 90, 90, 242, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 121, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 121, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 242, 44, 44, 44, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 129, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 178, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 178, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 129, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 64, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 206, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 240, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 82, 82, 82, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 11, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 240, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 240, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 82, 82, 82, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 11, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 240, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 64, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 129, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 178, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 88, 88, 88, 178, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 129, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 27, 90, 90, 90, 243, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 120, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 121, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 243, 87, 87, 87, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 104, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 178, 87, 87, 87, 65, 65, 65, 65, 13, 65, 65, 65, 13, 87, 87, 87, 65, 89, 89, 89, 178, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 104, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 127, 90, 90, 90, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 254, 89, 89, 89, 126, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 76, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 89, 89, 89, 76, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 64, 64, 64, 5, 89, 89, 89, 90, 89, 89, 89, 166, 90, 90, 90, 221, 90, 90, 90, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 244, 90, 90, 90, 221, 89, 89, 89, 166, 89, 89, 89, 90, 64, 64, 64, 5, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 26,
-"mipmaps": false,
-"width": 42
-}
-
-[sub_resource type="ImageTexture" id=22]
-flags = 0
-flags = 0
-image = SubResource( 178 )
-size = Vector2( 42, 26 )
-
-[sub_resource type="StyleBoxFlat" id=23]
-content_margin_left = 6.0
-content_margin_right = 6.0
+[sub_resource type="StyleBoxFlat" id="15"]
+content_margin_left = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
draw_center = false
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
-[sub_resource type="Image" id=179]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="16"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
-[sub_resource type="ImageTexture" id=25]
-flags = 0
-flags = 0
-image = SubResource( 179 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=180]
-data = {
-"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 107, 107, 108, 222, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 108, 109, 222, 0, 0, 3, 255, 0, 0, 2, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 110, 110, 111, 222, 0, 0, 3, 255, 0, 0, 2, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 111, 111, 112, 222, 0, 0, 3, 255, 0, 0, 2, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 114, 222, 0, 0, 3, 255, 0, 0, 2, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 114, 114, 115, 222, 0, 0, 3, 255, 0, 0, 2, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 115, 117, 222, 0, 0, 3, 255, 0, 0, 2, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 117, 117, 118, 222, 0, 0, 3, 255, 0, 0, 2, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 118, 118, 119, 222, 0, 0, 3, 255, 0, 0, 2, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 121, 222, 0, 0, 3, 255, 0, 0, 2, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 2, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=27]
-flags = 0
-flags = 0
-image = SubResource( 180 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=181]
-data = {
-"data": PoolByteArray( 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=29]
-flags = 0
-flags = 0
-image = SubResource( 181 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=182]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 85, 85, 85, 73, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 73, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 225, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 0, 90, 90, 90, 255, 68, 68, 68, 0, 68, 68, 68, 0, 90, 90, 90, 255, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 220, 88, 88, 88, 73, 87, 87, 87, 74, 89, 89, 89, 219, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 88, 88, 88, 67, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 67, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=31]
-flags = 0
-flags = 0
-image = SubResource( 182 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=32]
+[sub_resource type="StyleBoxFlat" id="32"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.372549, 0.360784, 0.301961, 1 )
+border_color = Color(0.372549, 0.360784, 0.301961, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=183]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 179, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 73, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 89, 89, 89, 179, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=34]
-flags = 0
-flags = 0
-image = SubResource( 183 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=184]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 23, 89, 89, 89, 198, 89, 89, 89, 197, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 22, 89, 89, 89, 212, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 211, 65, 65, 65, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 22, 89, 89, 89, 211, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 210, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 22, 89, 89, 89, 210, 89, 89, 89, 254, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 253, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 210, 66, 66, 66, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 194, 89, 89, 89, 254, 89, 89, 89, 208, 88, 88, 88, 20, 89, 89, 89, 254, 89, 89, 89, 252, 88, 88, 88, 20, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 194, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 176, 89, 89, 89, 191, 66, 66, 66, 20, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 252, 45, 45, 45, 0, 67, 67, 67, 21, 89, 89, 89, 191, 89, 89, 89, 174, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 252, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 252, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 176, 89, 89, 89, 174, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=36]
-flags = 0
-flags = 0
-image = SubResource( 184 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=185]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 6, 88, 88, 88, 107, 89, 89, 89, 199, 89, 89, 89, 241, 89, 89, 89, 241, 89, 89, 89, 199, 88, 88, 88, 107, 64, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 26, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 205, 66, 66, 66, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 6, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 226, 88, 88, 88, 88, 87, 87, 87, 25, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 205, 64, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 86, 86, 86, 106, 89, 89, 89, 254, 89, 89, 89, 226, 66, 66, 66, 18, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 66, 66, 66, 18, 89, 89, 89, 226, 89, 89, 89, 254, 86, 86, 86, 106, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 197, 89, 89, 89, 254, 87, 87, 87, 88, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 84, 84, 84, 88, 89, 89, 89, 254, 89, 89, 89, 197, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 67, 67, 67, 0, 89, 89, 89, 240, 89, 89, 89, 254, 88, 88, 88, 25, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 25, 89, 89, 89, 254, 89, 89, 89, 240, 45, 45, 45, 0, 38, 38, 38, 0, 82, 82, 82, 149, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 162, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 24, 89, 89, 89, 254, 89, 89, 89, 240, 45, 45, 45, 0, 0, 0, 0, 0, 62, 62, 62, 8, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 215, 66, 66, 66, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 80, 80, 80, 86, 89, 89, 89, 254, 89, 89, 89, 197, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 36, 89, 89, 89, 240, 89, 89, 89, 245, 87, 87, 87, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 65, 65, 65, 18, 89, 89, 89, 225, 89, 89, 89, 254, 88, 88, 88, 107, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 88, 88, 88, 86, 88, 88, 88, 99, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 205, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 205, 67, 67, 67, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 241, 89, 89, 89, 199, 88, 88, 88, 107, 64, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 44, 44, 44, 0, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=38]
-flags = 0
-flags = 0
-image = SubResource( 185 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=186]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 2, 87, 87, 87, 92, 89, 89, 89, 185, 89, 89, 89, 231, 89, 89, 89, 231, 89, 89, 89, 186, 86, 86, 86, 94, 59, 59, 59, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 87, 87, 87, 43, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 211, 54, 54, 54, 48, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 44, 89, 89, 89, 239, 89, 89, 89, 254, 89, 89, 89, 226, 88, 88, 88, 88, 87, 87, 87, 25, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 241, 52, 52, 52, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 8, 89, 89, 89, 217, 89, 89, 89, 254, 89, 89, 89, 226, 66, 66, 66, 18, 43, 43, 43, 0, 45, 45, 45, 0, 44, 44, 44, 0, 43, 43, 43, 0, 66, 66, 66, 18, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 222, 64, 64, 64, 10, 0, 0, 0, 0, 22, 22, 22, 0, 88, 88, 88, 115, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 88, 42, 42, 42, 0, 86, 86, 86, 71, 89, 89, 89, 226, 89, 89, 89, 226, 86, 86, 86, 71, 39, 39, 39, 0, 84, 84, 84, 88, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 120, 22, 22, 22, 0, 45, 45, 45, 0, 89, 89, 89, 215, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 25, 44, 44, 44, 0, 89, 89, 89, 223, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 223, 44, 44, 44, 0, 87, 87, 87, 25, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 217, 45, 45, 45, 0, 45, 45, 45, 0, 89, 89, 89, 218, 89, 89, 89, 254, 89, 89, 89, 254, 84, 84, 84, 22, 44, 44, 44, 0, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 224, 45, 45, 45, 0, 86, 86, 86, 24, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 217, 45, 45, 45, 0, 22, 22, 22, 0, 88, 88, 88, 123, 89, 89, 89, 254, 89, 89, 89, 254, 80, 80, 80, 86, 38, 38, 38, 0, 88, 88, 88, 72, 89, 89, 89, 226, 89, 89, 89, 226, 88, 88, 88, 72, 38, 38, 38, 0, 80, 80, 80, 86, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 123, 22, 22, 22, 0, 0, 0, 0, 0, 65, 65, 65, 12, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 225, 66, 66, 66, 18, 43, 43, 43, 0, 45, 45, 45, 0, 45, 45, 45, 0, 43, 43, 43, 0, 65, 65, 65, 18, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 226, 65, 65, 65, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 75, 75, 75, 55, 89, 89, 89, 245, 89, 89, 89, 254, 89, 89, 89, 226, 88, 88, 88, 88, 87, 87, 87, 25, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 245, 75, 75, 75, 55, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 88, 88, 88, 54, 89, 89, 89, 217, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 217, 88, 88, 88, 54, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 56, 56, 56, 4, 87, 87, 87, 98, 89, 89, 89, 189, 89, 89, 89, 233, 89, 89, 89, 233, 89, 89, 89, 189, 87, 87, 87, 98, 56, 56, 56, 4, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=40]
-flags = 0
-flags = 0
-image = SubResource( 186 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=187]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=42]
-flags = 0
-flags = 0
-image = SubResource( 187 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=188]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=44]
-flags = 0
-flags = 0
-image = SubResource( 188 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=189]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 191, 191, 191, 221, 59, 59, 59, 128, 95, 95, 95, 146, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 250, 126, 126, 126, 172, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 172, 172, 172, 207, 0, 0, 0, 100, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 171, 191, 191, 191, 221, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=46]
-flags = 0
-flags = 0
-image = SubResource( 189 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=190]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 32, 32, 32, 0, 32, 32, 32, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 19, 62, 62, 62, 113, 64, 64, 64, 156, 64, 64, 64, 156, 62, 62, 62, 113, 46, 46, 46, 19, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 47, 47, 47, 18, 64, 64, 64, 161, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 161, 47, 47, 47, 18, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 30, 30, 30, 0, 62, 62, 62, 112, 64, 64, 64, 174, 64, 64, 64, 124, 61, 61, 61, 19, 61, 61, 61, 19, 64, 64, 64, 124, 64, 64, 64, 174, 62, 62, 62, 112, 30, 30, 30, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 32, 32, 32, 0, 64, 64, 64, 155, 64, 64, 64, 174, 62, 62, 62, 19, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 19, 64, 64, 64, 174, 64, 64, 64, 155, 32, 32, 32, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=48]
-flags = 0
-flags = 0
-image = SubResource( 190 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=49]
+[sub_resource type="StyleBoxFlat" id="49"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.474609, 0.386591, 0.283653, 1 )
-
-[sub_resource type="Image" id=191]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 228, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 79, 191, 191, 191, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 79, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=51]
-flags = 0
-flags = 0
-image = SubResource( 191 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=192]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 121, 128, 128, 128, 0, 255, 255, 255, 60, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 60, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 61, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 122, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 10,
-"mipmaps": false,
-"width": 10
-}
-
-[sub_resource type="ImageTexture" id=53]
-flags = 0
-flags = 0
-image = SubResource( 192 )
-size = Vector2( 10, 10 )
-
-[sub_resource type="Image" id=193]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.474609, 0.386591, 0.283653, 1)
-[sub_resource type="ImageTexture" id=55]
-flags = 0
-flags = 0
-image = SubResource( 193 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=56]
+[sub_resource type="StyleBoxFlat" id="56"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.65, 0.5655, 0.26, 1 )
-shadow_color = Color( 0.65, 0.5655, 0.26, 0.1 )
+border_color = Color(0.65, 0.5655, 0.26, 1)
+shadow_color = Color(0.65, 0.5655, 0.26, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=57]
+[sub_resource type="StyleBoxFlat" id="57"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.3 )
+bg_color = Color(1, 1, 1, 0.3)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=58]
+[sub_resource type="StyleBoxFlat" id="58"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.4 )
+bg_color = Color(1, 1, 1, 0.4)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=59]
+[sub_resource type="StyleBoxFlat" id="59"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.7 )
+bg_color = Color(1, 1, 1, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=60]
+[sub_resource type="StyleBoxFlat" id="60"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.75, 0.3525, 0.315, 1 )
-shadow_color = Color( 0.75, 0.3525, 0.315, 0.2 )
+border_color = Color(0.75, 0.3525, 0.315, 1)
+shadow_color = Color(0.75, 0.3525, 0.315, 0.2)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=61]
+[sub_resource type="StyleBoxFlat" id="61"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.819608, 0.00392157, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(1, 0.819608, 0.00392157, 0.9)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=62]
+[sub_resource type="StyleBoxFlat" id="62"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.7 )
+bg_color = Color(1, 1, 1, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=63]
+[sub_resource type="StyleBoxFlat" id="63"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.819608, 0.00392157, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(1, 0.819608, 0.00392157, 0.9)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 8
-[sub_resource type="ImageTexture" id=64]
-
-[sub_resource type="Image" id=194]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 30, 30, 30, 0, 30, 30, 30, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 43, 43, 43, 20, 61, 61, 61, 62, 61, 61, 61, 62, 43, 43, 43, 20, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 62, 62, 62, 62, 61, 61, 61, 70, 61, 61, 61, 70, 62, 62, 62, 61, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 62, 61, 61, 61, 70, 61, 61, 61, 70, 62, 62, 62, 62, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 43, 43, 43, 20, 61, 61, 61, 62, 61, 61, 61, 62, 43, 43, 43, 20, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 30, 30, 30, 0, 30, 30, 30, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=66]
-flags = 0
-flags = 0
-image = SubResource( 194 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=67]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 66 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=195]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 47, 47, 47, 0, 47, 47, 47, 0, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 4, 94, 94, 94, 99, 95, 95, 95, 167, 95, 95, 95, 167, 94, 94, 94, 99, 68, 68, 68, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 94, 94, 94, 98, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 98, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 0, 95, 95, 95, 166, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 166, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 0, 95, 95, 95, 166, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 166, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 94, 94, 94, 98, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 98, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 5, 94, 94, 94, 99, 95, 95, 95, 167, 95, 95, 95, 167, 94, 94, 94, 99, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 47, 47, 47, 0, 47, 47, 47, 0, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=69]
-flags = 0
-flags = 0
-image = SubResource( 195 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=70]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 69 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="Image" id=196]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 4, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 124, 124, 124, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 5, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 128, 128, 128, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=72]
-flags = 0
-flags = 0
-image = SubResource( 196 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=73]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 72 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=197]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=75]
-flags = 0
-flags = 0
-image = SubResource( 197 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=76]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 75 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=77]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 75 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=78]
-color = Color( 0, 0, 0, 0.1 )
-
-[sub_resource type="Image" id=198]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 43, 43, 43, 0, 44, 44, 44, 0, 44, 44, 44, 0, 43, 43, 43, 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 66, 66, 66, 6, 84, 84, 84, 37, 87, 87, 87, 59, 87, 87, 87, 69, 87, 87, 87, 69, 87, 87, 87, 59, 84, 84, 84, 37, 66, 66, 66, 6, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 79, 79, 79, 23, 87, 87, 87, 69, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 69, 79, 79, 79, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 79, 79, 79, 23, 88, 88, 88, 73, 87, 87, 87, 73, 83, 83, 83, 50, 86, 86, 86, 17, 64, 64, 64, 2, 64, 64, 64, 2, 86, 86, 86, 17, 83, 83, 83, 50, 87, 87, 87, 73, 88, 88, 88, 73, 79, 79, 79, 23, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 6, 87, 87, 87, 69, 87, 87, 87, 73, 86, 86, 86, 33, 39, 39, 39, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 39, 39, 39, 0, 86, 86, 86, 33, 87, 87, 87, 73, 87, 87, 87, 69, 61, 61, 61, 6, 0, 0, 0, 0, 20, 20, 20, 0, 84, 84, 84, 37, 87, 87, 87, 73, 83, 83, 83, 50, 39, 39, 39, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 29, 29, 29, 5, 39, 39, 39, 0, 83, 83, 83, 50, 87, 87, 87, 73, 84, 84, 84, 37, 20, 20, 20, 0, 43, 43, 43, 0, 87, 87, 87, 59, 87, 87, 87, 73, 86, 86, 86, 17, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 86, 86, 86, 17, 87, 87, 87, 73, 87, 87, 87, 59, 43, 43, 43, 0, 44, 44, 44, 0, 88, 88, 88, 69, 87, 87, 87, 73, 32, 32, 32, 2, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 44, 44, 44, 2, 87, 87, 87, 73, 88, 88, 88, 69, 44, 44, 44, 0, 44, 44, 44, 0, 88, 88, 88, 69, 87, 87, 87, 73, 44, 44, 44, 2, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 32, 32, 32, 2, 87, 87, 87, 73, 88, 88, 88, 69, 44, 44, 44, 0, 43, 43, 43, 0, 87, 87, 87, 59, 87, 87, 87, 73, 86, 86, 86, 17, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 86, 86, 86, 17, 87, 87, 87, 73, 87, 87, 87, 59, 43, 43, 43, 0, 20, 20, 20, 0, 84, 84, 84, 37, 87, 87, 87, 73, 83, 83, 83, 49, 39, 39, 39, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 36, 36, 36, 5, 39, 39, 39, 0, 83, 83, 83, 49, 87, 87, 87, 73, 84, 84, 84, 37, 20, 20, 20, 0, 0, 0, 0, 0, 66, 66, 66, 6, 87, 87, 87, 69, 87, 87, 87, 73, 86, 86, 86, 33, 39, 39, 39, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 39, 39, 39, 0, 86, 86, 86, 33, 87, 87, 87, 73, 87, 87, 87, 69, 66, 66, 66, 6, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 79, 79, 79, 23, 88, 88, 88, 73, 87, 87, 87, 73, 83, 83, 83, 50, 86, 86, 86, 17, 64, 64, 64, 2, 64, 64, 64, 2, 86, 86, 86, 17, 83, 83, 83, 50, 87, 87, 87, 73, 88, 88, 88, 73, 79, 79, 79, 23, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 88, 88, 88, 23, 87, 87, 87, 69, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 69, 88, 88, 88, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 66, 66, 66, 6, 84, 84, 84, 37, 87, 87, 87, 59, 87, 87, 87, 69, 87, 87, 87, 69, 87, 87, 87, 59, 84, 84, 84, 37, 66, 66, 66, 6, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 43, 43, 43, 0, 44, 44, 44, 0, 44, 44, 44, 0, 43, 43, 43, 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=80]
-flags = 0
-flags = 0
-image = SubResource( 198 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=199]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 66, 66, 66, 20, 88, 88, 88, 129, 89, 89, 89, 208, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 208, 88, 88, 88, 129, 66, 66, 66, 20, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 86, 86, 86, 81, 90, 90, 90, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 241, 86, 86, 86, 81, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 81, 90, 90, 90, 254, 90, 90, 90, 255, 89, 89, 89, 175, 88, 88, 88, 61, 64, 64, 64, 8, 68, 68, 68, 9, 87, 87, 87, 62, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 254, 87, 87, 87, 81, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 20, 90, 90, 90, 241, 90, 90, 90, 255, 89, 89, 89, 116, 44, 44, 44, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 44, 44, 44, 0, 89, 89, 89, 116, 90, 90, 90, 255, 90, 90, 90, 241, 67, 67, 67, 20, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 128, 90, 90, 90, 255, 88, 88, 88, 175, 44, 44, 44, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 29, 29, 29, 5, 44, 44, 44, 0, 88, 88, 88, 175, 90, 90, 90, 255, 89, 89, 89, 128, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 206, 90, 90, 90, 255, 88, 88, 88, 61, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 89, 89, 89, 62, 90, 90, 90, 255, 90, 90, 90, 206, 45, 45, 45, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 75, 75, 75, 8, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 86, 86, 86, 8, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 83, 83, 83, 8, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 75, 75, 75, 8, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 45, 45, 45, 0, 90, 90, 90, 206, 90, 90, 90, 255, 88, 88, 88, 61, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 88, 88, 88, 61, 90, 90, 90, 255, 90, 90, 90, 206, 45, 45, 45, 0, 21, 21, 21, 0, 88, 88, 88, 129, 90, 90, 90, 255, 88, 88, 88, 174, 43, 43, 43, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 36, 36, 36, 5, 44, 44, 44, 0, 89, 89, 89, 174, 90, 90, 90, 255, 88, 88, 88, 129, 21, 21, 21, 0, 0, 0, 0, 0, 66, 66, 66, 20, 90, 90, 90, 241, 90, 90, 90, 255, 89, 89, 89, 116, 44, 44, 44, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 44, 44, 44, 0, 89, 89, 89, 116, 90, 90, 90, 255, 90, 90, 90, 241, 66, 66, 66, 20, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 85, 85, 85, 82, 90, 90, 90, 254, 90, 90, 90, 255, 88, 88, 88, 175, 87, 87, 87, 62, 68, 68, 68, 9, 64, 64, 64, 8, 88, 88, 88, 61, 89, 89, 89, 175, 90, 90, 90, 255, 90, 90, 90, 254, 85, 85, 85, 82, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 87, 87, 87, 82, 90, 90, 90, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 241, 87, 87, 87, 82, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 66, 66, 66, 21, 88, 88, 88, 129, 89, 89, 89, 208, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 208, 88, 88, 88, 129, 66, 66, 66, 20, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxLine" id="78"]
+color = Color(0, 0, 0, 0.1)
-[sub_resource type="ImageTexture" id=82]
-flags = 0
-flags = 0
-image = SubResource( 199 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=83]
+[sub_resource type="StyleBoxFlat" id="83"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
-[sub_resource type="StyleBoxFlat" id=84]
+[sub_resource type="StyleBoxFlat" id="84"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.474609, 0.386591, 0.283653, 1 )
-
-[sub_resource type="Image" id=200]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 60, 60, 60, 66, 60, 60, 60, 66, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 60, 60, 60, 66, 60, 60, 60, 66, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 64,
-"mipmaps": false,
-"width": 8
-}
+bg_color = Color(0.474609, 0.386591, 0.283653, 1)
-[sub_resource type="ImageTexture" id=86]
-flags = 0
-flags = 0
-image = SubResource( 200 )
-size = Vector2( 8, 64 )
-
-[sub_resource type="StyleBoxTexture" id=87]
-texture = SubResource( 20 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=88]
+[sub_resource type="StyleBoxFlat" id="88"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.474609, 0.386591, 0.283653, 1 )
+border_color = Color(0.474609, 0.386591, 0.283653, 1)
-[sub_resource type="StyleBoxFlat" id=89]
+[sub_resource type="StyleBoxFlat" id="89"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
-[sub_resource type="StyleBoxFlat" id=90]
+[sub_resource type="StyleBoxFlat" id="90"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.2 )
+border_color = Color(0, 0, 0, 0.2)
-[sub_resource type="StyleBoxFlat" id=91]
+[sub_resource type="StyleBoxFlat" id="91"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0, 0, 0, 0.2 )
-border_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0, 0, 0, 0.2)
+border_color = Color(0.949219, 0.773181, 0.567307, 1)
-[sub_resource type="StyleBoxFlat" id=92]
+[sub_resource type="StyleBoxFlat" id="92"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0, 0, 0, 0.2 )
-border_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0, 0, 0, 0.2)
+border_color = Color(0.949219, 0.773181, 0.567307, 1)
-[sub_resource type="StyleBoxEmpty" id=93]
+[sub_resource type="StyleBoxEmpty" id="93"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id=201]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 59, 59, 59, 77, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 19, 59, 59, 59, 77, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 62, 62, 62, 78, 64, 64, 64, 228, 64, 64, 64, 188, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 19, 64, 64, 64, 188, 64, 64, 64, 228, 62, 62, 62, 78, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 19, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 188, 47, 47, 47, 18, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 18, 64, 64, 64, 188, 64, 64, 64, 229, 64, 64, 64, 189, 46, 46, 46, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 20, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 187, 48, 48, 48, 18, 48, 48, 48, 18, 64, 64, 64, 187, 64, 64, 64, 229, 64, 64, 64, 190, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 20, 64, 64, 64, 190, 64, 64, 64, 229, 63, 63, 63, 186, 64, 64, 64, 187, 64, 64, 64, 229, 64, 64, 64, 190, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 20, 64, 64, 64, 191, 64, 64, 64, 229, 64, 64, 64, 229, 64, 64, 64, 191, 47, 47, 47, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 19, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 229, 64, 64, 64, 189, 48, 48, 48, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 19, 64, 64, 64, 188, 64, 64, 64, 229, 64, 64, 64, 189, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 188, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 18, 64, 64, 64, 188, 64, 64, 64, 229, 64, 64, 64, 190, 47, 47, 47, 20, 47, 47, 47, 20, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 187, 48, 48, 48, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 18, 64, 64, 64, 187, 64, 64, 64, 229, 64, 64, 64, 190, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 20, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 187, 48, 48, 48, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 63, 63, 63, 78, 64, 64, 64, 228, 64, 64, 64, 191, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 20, 64, 64, 64, 191, 64, 64, 64, 228, 64, 64, 64, 77, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 61, 61, 61, 79, 46, 46, 46, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 21, 61, 61, 61, 79, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="3"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(1, 0.819608, 0.00392157, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=95]
-flags = 0
-flags = 0
-image = SubResource( 201 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="Image" id=202]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 31, 31, 31, 0, 0, 0, 0, 0, 32, 32, 32, 0, 64, 64, 64, 146, 63, 63, 63, 151, 47, 47, 47, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 15, 64, 64, 64, 149, 63, 63, 63, 151, 31, 31, 31, 0, 32, 32, 32, 0, 64, 64, 64, 156, 64, 64, 64, 199, 64, 64, 64, 163, 48, 48, 48, 16, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 14, 64, 64, 64, 161, 64, 64, 64, 199, 64, 64, 64, 160, 32, 32, 32, 0, 0, 0, 0, 0, 47, 47, 47, 17, 63, 63, 63, 165, 64, 64, 64, 199, 63, 63, 63, 163, 46, 46, 46, 16, 47, 47, 47, 14, 64, 64, 64, 160, 64, 64, 64, 199, 64, 64, 64, 167, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 17, 63, 63, 63, 165, 64, 64, 64, 199, 64, 64, 64, 162, 63, 63, 63, 160, 64, 64, 64, 199, 64, 64, 64, 168, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 18, 64, 64, 64, 166, 64, 64, 64, 199, 64, 64, 64, 199, 64, 64, 64, 168, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 18, 63, 63, 63, 154, 64, 64, 64, 157, 47, 47, 47, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxFlat" id="2"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.541176, 0.45098, 0.345098, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.964453, 0.841227, 0.697115, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=97]
-flags = 0
-flags = 0
-image = SubResource( 202 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxFlat" id="4"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.713726, 0.580392, 0.423529, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.711914, 0.579886, 0.42548, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=99]
+[sub_resource type="StyleBoxFlat" id="6"]
content_margin_left = 6.0
+content_margin_top = 4.0
content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(1, 0.819608, 0.00392157, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[sub_resource type="StyleBoxFlat" id="99"]
+content_margin_left = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.713726, 0.580392, 0.423529, 1 )
+bg_color = Color(0.713726, 0.580392, 0.423529, 1)
-[sub_resource type="StyleBoxFlat" id=100]
+[sub_resource type="StyleBoxFlat" id="100"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 2.0
+content_margin_right = 2.0
content_margin_bottom = 2.0
-bg_color = Color( 0.866667, 0.701961, 0.439216, 1 )
+bg_color = Color(0.866667, 0.701961, 0.439216, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=101]
+[sub_resource type="StyleBoxFlat" id="101"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(0.711914, 0.579886, 0.42548, 1)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
-[sub_resource type="Image" id=203]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 88, 88, 88, 196, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 191, 89, 89, 89, 254, 89, 89, 89, 211, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 20, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 211, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 88, 88, 88, 20, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 210, 66, 66, 66, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 196, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 197, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 88, 88, 88, 20, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 212, 67, 67, 67, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 19, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 213, 66, 66, 66, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 190, 89, 89, 89, 254, 89, 89, 89, 214, 66, 66, 66, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 89, 89, 89, 197, 66, 66, 66, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=103]
-flags = 0
-flags = 0
-image = SubResource( 203 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=204]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 85, 85, 85, 35, 64, 64, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 1, 85, 85, 85, 35, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 184, 89, 89, 89, 254, 88, 88, 88, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 65, 89, 89, 89, 254, 89, 89, 89, 184, 45, 45, 45, 0, 21, 21, 21, 0, 88, 88, 88, 121, 89, 89, 89, 254, 89, 89, 89, 199, 66, 66, 66, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 6, 89, 89, 89, 200, 89, 89, 89, 254, 88, 88, 88, 121, 21, 21, 21, 0, 0, 0, 0, 0, 66, 66, 66, 11, 89, 89, 89, 222, 89, 89, 89, 254, 88, 88, 88, 177, 62, 62, 62, 6, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 62, 62, 62, 6, 88, 88, 88, 177, 89, 89, 89, 254, 89, 89, 89, 222, 66, 66, 66, 11, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 21, 89, 89, 89, 212, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 214, 79, 79, 79, 89, 88, 88, 88, 22, 86, 86, 86, 23, 79, 79, 79, 89, 89, 89, 89, 214, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 212, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 12, 88, 88, 88, 194, 89, 89, 89, 212, 89, 89, 89, 216, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 216, 89, 89, 89, 212, 88, 88, 88, 193, 65, 65, 65, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 12, 65, 65, 65, 21, 66, 66, 66, 6, 87, 87, 87, 107, 90, 90, 90, 191, 89, 89, 89, 254, 89, 89, 89, 254, 90, 90, 90, 191, 87, 87, 87, 106, 66, 66, 66, 6, 67, 67, 67, 21, 66, 66, 66, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 67, 67, 67, 0, 89, 89, 89, 254, 89, 89, 89, 252, 67, 67, 67, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=105]
-flags = 0
-flags = 0
-image = SubResource( 204 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=205]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 2, 84, 84, 84, 101, 88, 88, 88, 197, 89, 89, 89, 236, 88, 88, 88, 91, 89, 89, 89, 73, 86, 86, 86, 37, 51, 51, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 80, 80, 80, 49, 89, 89, 89, 216, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 253, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 83, 54, 54, 54, 19, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 72, 72, 50, 89, 89, 89, 243, 89, 89, 89, 254, 89, 89, 89, 232, 81, 81, 81, 97, 84, 84, 84, 32, 86, 86, 86, 10, 87, 87, 87, 34, 89, 89, 89, 89, 89, 89, 89, 100, 89, 89, 89, 95, 41, 41, 41, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 10, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 232, 64, 64, 64, 23, 38, 38, 38, 0, 44, 44, 44, 0, 44, 44, 44, 0, 40, 40, 40, 0, 65, 65, 65, 7, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 88, 64, 64, 64, 4, 0, 0, 0, 0, 20, 20, 20, 0, 86, 86, 86, 124, 89, 89, 89, 254, 89, 89, 89, 254, 81, 81, 81, 98, 36, 36, 36, 0, 81, 81, 81, 77, 89, 89, 89, 234, 88, 88, 88, 89, 79, 79, 79, 28, 35, 35, 35, 0, 79, 79, 79, 35, 89, 89, 89, 100, 89, 89, 89, 100, 85, 85, 85, 47, 20, 20, 20, 0, 44, 44, 44, 0, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 254, 84, 84, 84, 32, 44, 44, 44, 0, 89, 89, 89, 232, 89, 89, 89, 254, 89, 89, 89, 100, 89, 89, 89, 88, 45, 45, 45, 0, 86, 86, 86, 10, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 85, 44, 44, 44, 0, 45, 45, 45, 0, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 254, 79, 79, 79, 28, 44, 44, 44, 0, 88, 88, 88, 233, 89, 89, 89, 254, 89, 89, 89, 100, 89, 89, 89, 88, 45, 45, 45, 0, 85, 85, 85, 9, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 86, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 131, 89, 89, 89, 254, 89, 89, 89, 254, 74, 74, 74, 96, 33, 33, 33, 0, 84, 84, 84, 77, 89, 89, 89, 234, 88, 88, 88, 89, 79, 79, 79, 28, 40, 40, 40, 0, 87, 87, 87, 34, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 48, 23, 23, 23, 0, 0, 0, 0, 0, 63, 63, 63, 15, 89, 89, 89, 232, 89, 89, 89, 254, 89, 89, 89, 231, 64, 64, 64, 22, 38, 38, 38, 0, 44, 44, 44, 0, 44, 44, 44, 0, 40, 40, 40, 0, 64, 64, 64, 7, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 89, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 66, 66, 66, 61, 89, 89, 89, 248, 89, 89, 89, 254, 89, 89, 89, 232, 81, 81, 81, 97, 84, 84, 84, 32, 86, 86, 86, 10, 87, 87, 87, 34, 89, 89, 89, 89, 89, 89, 89, 100, 89, 89, 89, 96, 45, 45, 45, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 78, 78, 78, 60, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 253, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 85, 49, 49, 49, 21, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 0, 46, 46, 46, 5, 83, 83, 83, 107, 88, 88, 88, 201, 89, 89, 89, 238, 89, 89, 89, 91, 89, 89, 89, 75, 82, 82, 82, 39, 43, 43, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=107]
-flags = 0
-flags = 0
-image = SubResource( 205 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=108]
+[sub_resource type="StyleBoxFlat" id="108"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
-[sub_resource type="StyleBoxLine" id=109]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="109"]
+color = Color(0, 0, 0, 0.1)
grow_begin = 7.0
-[sub_resource type="StyleBoxLine" id=110]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="110"]
+color = Color(0, 0, 0, 0.1)
grow_end = 7.0
-[sub_resource type="StyleBoxLine" id=111]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="111"]
+color = Color(0, 0, 0, 0.1)
grow_begin = 7.0
grow_end = 7.0
-[sub_resource type="Image" id=206]
-data = {
-"data": PoolByteArray( 86, 86, 86, 27, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 88, 86, 86, 86, 27, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 100, 67, 67, 67, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 67, 67, 67, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 67, 67, 67, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 67, 67, 67, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 88, 86, 86, 86, 27, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 89, 86, 86, 86, 27 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=113]
-flags = 0
-flags = 0
-image = SubResource( 206 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=114]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 113 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 4.0
-margin_right = 4.0
-margin_top = 4.0
-margin_bottom = 4.0
-
-[sub_resource type="Image" id=207]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 70, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 70, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=116]
-flags = 0
-flags = 0
-image = SubResource( 207 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=117]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 1.0
-content_margin_bottom = 1.0
-texture = SubResource( 116 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxFlat" id=118]
+[sub_resource type="StyleBoxFlat" id="118"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.593262, 0.483238, 0.354567, 1 )
+bg_color = Color(0.593262, 0.483238, 0.354567, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.1 )
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
-[sub_resource type="StyleBoxEmpty" id=119]
+[sub_resource type="StyleBoxEmpty" id="119"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 0.54, 0.43668, 0.3186, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(0.54, 0.43668, 0.3186, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=208]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 88, 88, 88, 152, 88, 88, 88, 151, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 164, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 16, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 164, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 163, 66, 66, 66, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 88, 88, 88, 163, 89, 89, 89, 199, 89, 89, 89, 164, 66, 66, 66, 17, 66, 66, 66, 17, 89, 89, 89, 164, 89, 89, 89, 199, 88, 88, 88, 163, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 156, 89, 89, 89, 199, 89, 89, 89, 165, 68, 68, 68, 17, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 17, 89, 89, 89, 165, 89, 89, 89, 199, 89, 89, 89, 156, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 159, 66, 66, 66, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 18, 89, 89, 89, 159, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 150, 88, 88, 88, 152, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 89, 89, 89, 153, 89, 89, 89, 151, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 156, 89, 89, 89, 199, 88, 88, 88, 164, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 156, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 17, 89, 89, 89, 164, 89, 89, 89, 199, 89, 89, 89, 163, 66, 66, 66, 16, 66, 66, 66, 16, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 164, 65, 65, 65, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 17, 89, 89, 89, 165, 89, 89, 89, 199, 88, 88, 88, 163, 88, 88, 88, 163, 89, 89, 89, 199, 89, 89, 89, 165, 67, 67, 67, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 17, 89, 89, 89, 165, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 165, 66, 66, 66, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 18, 88, 88, 88, 153, 88, 88, 88, 153, 66, 66, 66, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=121]
-flags = 0
-flags = 0
-image = SubResource( 208 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=209]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 21, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 160, 65, 65, 65, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 55, 55, 55, 46, 86, 86, 86, 57, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 160, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 54, 54, 54, 34, 0, 0, 0, 0, 54, 54, 54, 45, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 83, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 86, 86, 86, 34, 21, 21, 21, 0, 22, 22, 22, 33, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 46, 21, 21, 21, 0, 22, 22, 22, 32, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 54, 54, 54, 45, 0, 0, 0, 0, 22, 22, 22, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 33, 11, 11, 11, 0, 86, 86, 86, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 32, 21, 21, 21, 0, 86, 86, 86, 46, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 87, 87, 87, 83, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 5, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 56, 56, 56, 45, 87, 87, 87, 57, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 21, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=123]
-flags = 0
-flags = 0
-image = SubResource( 209 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=210]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 27, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 67, 67, 67, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 59, 88, 88, 88, 73, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 78, 78, 78, 44, 43, 43, 43, 0, 86, 86, 86, 58, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 107, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 234, 70, 70, 70, 44, 26, 26, 26, 0, 86, 86, 86, 43, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 79, 79, 79, 59, 16, 16, 16, 0, 22, 22, 22, 42, 90, 90, 90, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 58, 43, 43, 43, 0, 86, 86, 86, 43, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 42, 29, 29, 29, 0, 69, 69, 69, 44, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 232, 22, 22, 22, 42, 16, 16, 16, 0, 79, 79, 79, 59, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 107, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 7, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 232, 55, 55, 55, 58, 87, 87, 87, 74, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 27, 89, 89, 89, 207, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=125]
-flags = 0
-flags = 0
-image = SubResource( 210 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=211]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 21, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 160, 65, 65, 65, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 57, 55, 55, 55, 46, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 160, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 54, 54, 54, 45, 0, 0, 0, 0, 54, 54, 54, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 83, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 33, 21, 21, 21, 0, 86, 86, 86, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 32, 21, 21, 21, 0, 86, 86, 86, 46, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 22, 22, 22, 33, 0, 0, 0, 0, 54, 54, 54, 45, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 86, 86, 86, 34, 11, 11, 11, 0, 22, 22, 22, 33, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 46, 21, 21, 21, 0, 22, 22, 22, 32, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 87, 87, 87, 83, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 5, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 87, 87, 87, 57, 56, 56, 56, 45, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 21, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=127]
-flags = 0
-flags = 0
-image = SubResource( 211 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=212]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 27, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 67, 67, 67, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 73, 86, 86, 86, 59, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 58, 43, 43, 43, 0, 78, 78, 78, 44, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 107, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 42, 26, 26, 26, 0, 70, 70, 70, 44, 90, 90, 90, 234, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 232, 22, 22, 22, 42, 16, 16, 16, 0, 79, 79, 79, 59, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 43, 43, 43, 43, 0, 86, 86, 86, 58, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 69, 69, 69, 44, 29, 29, 29, 0, 86, 86, 86, 43, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 79, 79, 79, 59, 16, 16, 16, 0, 22, 22, 22, 42, 90, 90, 90, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 107, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 7, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 74, 55, 55, 55, 58, 90, 90, 90, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 27, 89, 89, 89, 207, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=129]
-flags = 0
-flags = 0
-image = SubResource( 212 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=213]
-data = {
-"data": PoolByteArray( 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 32, 32, 32, 0, 63, 63, 63, 88, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 31, 31, 31, 0, 63, 63, 63, 89, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 32, 32, 32, 0, 63, 63, 63, 88, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 31, 31, 31, 0, 63, 63, 63, 89, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 32, 32, 32, 0, 63, 63, 63, 88, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 31, 31, 31, 0, 63, 63, 63, 89, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 6
-}
-
-[sub_resource type="ImageTexture" id=131]
-flags = 0
-flags = 0
-image = SubResource( 213 )
-size = Vector2( 6, 16 )
-
-[sub_resource type="Image" id=214]
-data = {
-"data": PoolByteArray( 22, 22, 22, 0, 87, 87, 87, 72, 90, 90, 90, 227, 90, 90, 90, 227, 87, 87, 87, 72, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 226, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 72, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 72, 21, 21, 21, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 22, 22, 22, 0, 87, 87, 87, 72, 90, 90, 90, 227, 90, 90, 90, 227, 87, 87, 87, 72, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 226, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 72, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 72, 21, 21, 21, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 22, 22, 22, 0, 87, 87, 87, 72, 90, 90, 90, 227, 90, 90, 90, 227, 87, 87, 87, 72, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 226, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 72, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 72, 21, 21, 21, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 6
-}
-
-[sub_resource type="ImageTexture" id=133]
-flags = 0
-flags = 0
-image = SubResource( 214 )
-size = Vector2( 6, 16 )
+[sub_resource type="StyleBoxFlat" id="138"]
+bg_color = Color(1, 0.898039, 0.501961, 1)
+border_width_left = 5
+border_width_top = 10
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color(1, 0.898039, 0.501961, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=134]
-content_margin_left = 5.0
-content_margin_right = 5.0
+[sub_resource type="StyleBoxFlat" id="135"]
+content_margin_left = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.474609, 0.386591, 0.283653, 1 )
+border_color = Color(0.593262, 0.483238, 0.354567, 1)
+expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=135]
+[sub_resource type="StyleBoxFlat" id="136"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
+bg_color = Color(0.954297, 0.795863, 0.610576, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.593262, 0.483238, 0.354567, 1 )
+border_color = Color(0.964453, 0.841227, 0.697115, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=136]
+[sub_resource type="StyleBoxFlat" id="137"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.954297, 0.795863, 0.610576, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.964453, 0.841227, 0.697115, 1 )
+border_color = Color(0.474609, 0.386591, 0.283653, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=137]
-content_margin_left = 10.0
-content_margin_right = 10.0
+[sub_resource type="StyleBoxFlat" id="134"]
+content_margin_left = 5.0
content_margin_top = 5.0
+content_margin_right = 5.0
content_margin_bottom = 5.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.474609, 0.386591, 0.283653, 1 )
-expand_margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=138]
-bg_color = Color( 1, 0.898039, 0.501961, 1 )
-border_width_left = 5
-border_width_top = 10
-border_width_right = 5
-border_width_bottom = 5
-border_color = Color( 1, 0.898039, 0.501961, 1 )
-corner_radius_top_left = 4
-corner_radius_top_right = 4
-corner_radius_bottom_right = 4
-corner_radius_bottom_left = 4
-anti_aliasing = false
-
-[sub_resource type="Image" id=215]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 66, 61, 61, 61, 73, 47, 47, 47, 8, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 8, 61, 61, 61, 73, 61, 61, 61, 65, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 73, 63, 63, 63, 100, 63, 63, 63, 82, 47, 47, 47, 8, 47, 47, 47, 8, 63, 63, 63, 82, 63, 63, 63, 100, 61, 61, 61, 73, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 8, 62, 62, 62, 83, 63, 63, 63, 100, 63, 63, 63, 82, 63, 63, 63, 82, 63, 63, 63, 100, 62, 62, 62, 83, 45, 45, 45, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 9, 62, 62, 62, 83, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 83, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 9, 63, 63, 63, 77, 62, 62, 62, 76, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=140]
-flags = 0
-flags = 0
-image = SubResource( 215 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=216]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 66, 61, 61, 61, 73, 47, 47, 47, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 73, 63, 63, 63, 100, 63, 63, 63, 82, 47, 47, 47, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 8, 62, 62, 62, 83, 63, 63, 63, 100, 63, 63, 63, 82, 43, 43, 43, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 9, 62, 62, 62, 83, 63, 63, 63, 100, 61, 61, 61, 76, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 8, 63, 63, 63, 82, 63, 63, 63, 100, 63, 63, 63, 76, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 8, 63, 63, 63, 82, 63, 63, 63, 100, 62, 62, 62, 83, 46, 46, 46, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 72, 63, 63, 63, 100, 62, 62, 62, 83, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 66, 61, 61, 61, 73, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=142]
-flags = 0
-flags = 0
-image = SubResource( 216 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=217]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 17, 62, 62, 62, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 17, 62, 62, 62, 49, 62, 62, 62, 49, 60, 60, 60, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 17, 62, 62, 62, 49, 62, 62, 62, 49, 60, 60, 60, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 17, 62, 62, 62, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=144]
-flags = 0
-flags = 0
-image = SubResource( 217 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="Image" id=218]
-data = {
-"data": PoolByteArray( 56, 56, 56, 35, 59, 59, 59, 38, 46, 46, 46, 4, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 59, 59, 59, 38, 61, 61, 61, 50, 62, 62, 62, 41, 47, 47, 47, 4, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 46, 46, 46, 4, 61, 61, 61, 41, 61, 61, 61, 50, 62, 62, 62, 41, 41, 41, 41, 4, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 0, 45, 45, 45, 4, 61, 61, 61, 41, 61, 61, 61, 50, 60, 60, 60, 38, 60, 60, 60, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 0, 47, 47, 47, 4, 62, 62, 62, 41, 61, 61, 61, 50, 59, 59, 59, 38, 59, 59, 59, 0, 61, 61, 61, 50, 61, 61, 61, 50, 47, 47, 47, 4, 62, 62, 62, 41, 61, 61, 61, 50, 61, 61, 61, 41, 46, 46, 46, 4, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 60, 60, 60, 38, 61, 61, 61, 50, 61, 61, 61, 41, 45, 45, 45, 4, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 56, 56, 56, 35, 59, 59, 59, 38, 44, 44, 44, 4, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=146]
-flags = 0
-flags = 0
-image = SubResource( 218 )
-size = Vector2( 8, 8 )
+border_width_bottom = 1
+border_color = Color(0.474609, 0.386591, 0.283653, 1)
-[sub_resource type="StyleBoxFlat" id=147]
+[sub_resource type="StyleBoxFlat" id="147"]
content_margin_left = 1.0
-content_margin_right = 1.0
content_margin_top = 1.0
+content_margin_right = 1.0
content_margin_bottom = 1.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 1 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(0, 0, 0, 1)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
-[sub_resource type="StyleBoxFlat" id=98]
-bg_color = Color( 0.709804, 0.517647, 0.188235, 1 )
-
-[sub_resource type="Image" id=219]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 98, 62, 62, 62, 109, 46, 46, 46, 12, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 12, 62, 62, 62, 109, 62, 62, 62, 98, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 63, 63, 63, 109, 64, 64, 64, 150, 64, 64, 64, 123, 47, 47, 47, 12, 47, 47, 47, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 109, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 123, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 124, 46, 46, 46, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 124, 49, 49, 49, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 13, 64, 64, 64, 115, 64, 64, 64, 115, 48, 48, 48, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
+[sub_resource type="StyleBoxFlat" id="98"]
+bg_color = Color(0.709804, 0.517647, 0.188235, 1)
-[sub_resource type="ImageTexture" id=149]
-flags = 0
-flags = 0
-image = SubResource( 219 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="Image" id=220]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 12, 63, 63, 63, 115, 63, 63, 63, 114, 46, 46, 46, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 47, 47, 47, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 124, 63, 63, 63, 124, 64, 64, 64, 150, 64, 64, 64, 123, 45, 45, 45, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 63, 63, 63, 114, 64, 64, 64, 150, 64, 64, 64, 124, 48, 48, 48, 13, 48, 48, 48, 13, 64, 64, 64, 124, 64, 64, 64, 150, 63, 63, 63, 114, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 105, 63, 63, 63, 115, 48, 48, 48, 13, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 13, 64, 64, 64, 115, 62, 62, 62, 105, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 105, 63, 63, 63, 114, 46, 46, 46, 12, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 12, 63, 63, 63, 115, 62, 62, 62, 105, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 63, 63, 63, 114, 64, 64, 64, 150, 64, 64, 64, 123, 47, 47, 47, 12, 47, 47, 47, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 114, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 123, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 124, 46, 46, 46, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 124, 49, 49, 49, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 13, 64, 64, 64, 115, 64, 64, 64, 115, 48, 48, 48, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=151]
-flags = 0
-flags = 0
-image = SubResource( 220 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="StyleBoxFlat" id=152]
+[sub_resource type="StyleBoxFlat" id="152"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.711914, 0.579886, 0.42548, 1 )
-border_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.711914, 0.579886, 0.42548, 1)
+border_color = Color(0.949219, 0.773181, 0.567307, 1)
-[sub_resource type="StyleBoxFlat" id=153]
+[sub_resource type="StyleBoxFlat" id="153"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.711914, 0.579886, 0.42548, 1 )
+border_color = Color(0.711914, 0.579886, 0.42548, 1)
-[sub_resource type="StyleBoxEmpty" id=154]
+[sub_resource type="StyleBoxEmpty" id="154"]
-[sub_resource type="StyleBoxEmpty" id=155]
+[sub_resource type="StyleBoxEmpty" id="155"]
-[sub_resource type="StyleBoxFlat" id=156]
+[sub_resource type="StyleBoxFlat" id="156"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0, 0, 0, 0.08 )
-border_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0, 0, 0, 0.08)
+border_color = Color(0.949219, 0.773181, 0.567307, 1)
-[sub_resource type="StyleBoxFlat" id=157]
+[sub_resource type="StyleBoxFlat" id="157"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.474609, 0.386591, 0.283653, 1 )
-border_color = Color( 0.949219, 0.773181, 0.567307, 1 )
-
-[sub_resource type="StyleBoxTexture" id=158]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 66 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=159]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 69 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
+bg_color = Color(0.474609, 0.386591, 0.283653, 1)
+border_color = Color(0.949219, 0.773181, 0.567307, 1)
-[sub_resource type="StyleBoxTexture" id=160]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 72 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=161]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 75 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=162]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 75 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=163]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="163"]
+color = Color(0, 0, 0, 0.1)
grow_begin = 0.0
grow_end = 0.0
vertical = true
-[sub_resource type="StyleBoxFlat" id=164]
+[sub_resource type="StyleBoxFlat" id="164"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.713726, 0.580392, 0.423529, 1 )
+bg_color = Color(0.713726, 0.580392, 0.423529, 1)
-[sub_resource type="StyleBoxFlat" id=165]
+[sub_resource type="StyleBoxFlat" id="165"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.47451, 0.388235, 0.282353, 1 )
-
-[sub_resource type="Image" id=221]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 29, 29, 29, 0, 0, 0, 0, 0, 29, 29, 29, 0, 60, 60, 60, 64, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 60, 60, 60, 64, 29, 29, 29, 0, 29, 29, 29, 0, 60, 60, 60, 64, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 60, 60, 60, 64, 29, 29, 29, 0, 0, 0, 0, 0, 29, 29, 29, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 64
-}
-
-[sub_resource type="ImageTexture" id=167]
-flags = 0
-flags = 0
-image = SubResource( 221 )
-size = Vector2( 64, 8 )
+bg_color = Color(0.47451, 0.388235, 0.282353, 1)
-[sub_resource type="Image" id=222]
-data = {
-"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=169]
-flags = 0
-flags = 0
-image = SubResource( 222 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="StyleBoxTexture" id=170]
-texture = SubResource( 169 )
-region_rect = Rect2( 0, 0, 8, 8 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=171]
+[sub_resource type="StyleBoxFlat" id="171"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+bg_color = Color(0.949219, 0.773181, 0.567307, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.949219, 0.773181, 0.567307, 1 )
+border_color = Color(0.949219, 0.773181, 0.567307, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.1 )
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
[resource]
resource_name = "Caramel"
-default_font = ExtResource( 1 )
+default_font = ExtResource("3_vvu0m")
+default_font_size = 16
BoxContainer/constants/separation = 4
-Button/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-Button/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-Button/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
-Button/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 )
-Button/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
-Button/colors/icon_color_pressed = Color( 3.5, 2.86863, 0.0137255, 1 )
+Button/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+Button/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+Button/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1)
+Button/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1)
+Button/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
+Button/colors/icon_color_pressed = Color(3.5, 2.86863, 0.0137255, 1)
Button/constants/hseparation = 2
-Button/fonts/font = ExtResource( 1 )
-Button/styles/disabled = SubResource( 2 )
-Button/styles/focus = SubResource( 3 )
-Button/styles/hover = SubResource( 4 )
-Button/styles/normal = SubResource( 5 )
-Button/styles/pressed = SubResource( 6 )
-CheckBox/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-CheckBox/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
-CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 )
-CheckBox/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 )
-CheckBox/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
+Button/styles/disabled = SubResource("23")
+Button/styles/focus = SubResource("23")
+Button/styles/hover = SubResource("23")
+Button/styles/normal = SubResource("23")
+Button/styles/pressed = SubResource("23")
+CheckBox/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+CheckBox/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+CheckBox/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1)
+CheckBox/colors/font_color_hover_pressed = Color(0, 0, 0, 1)
+CheckBox/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1)
+CheckBox/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
CheckBox/constants/check_vadjust = 0
CheckBox/constants/hseparation = 4
-CheckBox/fonts/font = ExtResource( 1 )
-CheckBox/icons/checked = SubResource( 8 )
-CheckBox/icons/radio_checked = SubResource( 10 )
-CheckBox/icons/radio_unchecked = SubResource( 12 )
-CheckBox/icons/unchecked = SubResource( 14 )
-CheckBox/styles/disabled = SubResource( 15 )
+CheckBox/styles/disabled = SubResource("15")
CheckBox/styles/focus = null
-CheckBox/styles/hover = SubResource( 15 )
-CheckBox/styles/hover_pressed = SubResource( 16 )
-CheckBox/styles/normal = SubResource( 15 )
-CheckBox/styles/pressed = SubResource( 15 )
-CheckButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-CheckButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-CheckButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
-CheckButton/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 )
-CheckButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
+CheckBox/styles/hover = SubResource("15")
+CheckBox/styles/hover_pressed = SubResource("16")
+CheckBox/styles/normal = SubResource("15")
+CheckBox/styles/pressed = SubResource("15")
+CheckButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+CheckButton/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+CheckButton/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1)
+CheckButton/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1)
+CheckButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
CheckButton/constants/check_vadjust = 0
CheckButton/constants/hseparation = 4
-CheckButton/icons/off = SubResource( 18 )
-CheckButton/icons/off_disabled = SubResource( 20 )
-CheckButton/icons/on = SubResource( 22 )
-CheckButton/icons/on_disabled = SubResource( 20 )
-CheckButton/styles/disabled = SubResource( 23 )
-CheckButton/styles/hover = SubResource( 23 )
-CheckButton/styles/normal = SubResource( 23 )
-CheckButton/styles/pressed = SubResource( 23 )
-CollapsibleContainer/icons/arrow_normal = ExtResource( 5 )
+CheckButton/styles/disabled = SubResource("23")
+CheckButton/styles/hover = SubResource("23")
+CheckButton/styles/normal = SubResource("23")
+CheckButton/styles/pressed = SubResource("23")
+CollapsibleContainer/icons/arrow_normal = ExtResource("5")
ColorPicker/constants/h_width = 30
ColorPicker/constants/label_width = 10
ColorPicker/constants/margin = 8
ColorPicker/constants/sv_height = 256
ColorPicker/constants/sv_width = 256
-ColorPicker/icons/add_preset = SubResource( 25 )
-ColorPicker/icons/color_hue = null
-ColorPicker/icons/color_sample = null
-ColorPicker/icons/overbright_indicator = SubResource( 27 )
-ColorPicker/icons/preset_bg = SubResource( 29 )
-ColorPicker/icons/screen_picker = SubResource( 31 )
-ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 )
-ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 )
+ColorPickerButton/colors/font_color = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3)
+ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1)
ColorPickerButton/constants/hseparation = 2
-ColorPickerButton/fonts/font = ExtResource( 1 )
-ColorPickerButton/icons/bg = SubResource( 29 )
ColorPickerButton/styles/disabled = null
ColorPickerButton/styles/focus = null
ColorPickerButton/styles/hover = null
-ColorPickerButton/styles/normal = SubResource( 32 )
+ColorPickerButton/styles/normal = SubResource("32")
ColorPickerButton/styles/pressed = null
Dialogs/constants/button_margin = 32
Dialogs/constants/margin = 8
-FileDialog/colors/files_disabled = Color( 0, 0, 0, 0.3 )
-FileDialog/colors/folder_icon_modulate = Color( 1.975, 1.84873, 1.27775, 1 )
-FileDialog/icons/folder = SubResource( 34 )
-FileDialog/icons/parent_folder = SubResource( 36 )
-FileDialog/icons/reload = SubResource( 38 )
-FileDialog/icons/toggle_hidden = SubResource( 40 )
-GraphEdit/colors/activity = Color( 1, 0.819608, 0.00392157, 1 )
-GraphEdit/colors/grid_major = Color( 0, 0, 0, 0.15 )
-GraphEdit/colors/grid_minor = Color( 0, 0, 0, 0.07 )
-GraphEdit/colors/selection_fill = Color( 1, 0.819608, 0.00392157, 0.3 )
-GraphEdit/colors/selection_stroke = Color( 1, 0.819608, 0.00392157, 0.8 )
+FileDialog/colors/files_disabled = Color(0, 0, 0, 0.3)
+FileDialog/colors/folder_icon_modulate = Color(1.975, 1.84873, 1.27775, 1)
+GraphEdit/colors/activity = Color(1, 0.819608, 0.00392157, 1)
+GraphEdit/colors/grid_major = Color(0, 0, 0, 0.15)
+GraphEdit/colors/grid_minor = Color(0, 0, 0, 0.07)
+GraphEdit/colors/selection_fill = Color(1, 0.819608, 0.00392157, 0.3)
+GraphEdit/colors/selection_stroke = Color(1, 0.819608, 0.00392157, 0.8)
GraphEdit/constants/bezier_len_neg = 160
GraphEdit/constants/bezier_len_pos = 80
-GraphEdit/icons/minus = SubResource( 42 )
-GraphEdit/icons/more = SubResource( 44 )
-GraphEdit/icons/reset = SubResource( 46 )
-GraphEdit/icons/snap = SubResource( 48 )
-GraphEdit/styles/bg = SubResource( 49 )
-GraphNode/colors/close_color = Color( 0, 0, 0, 0.7 )
-GraphNode/colors/resizer_color = Color( 0, 0, 0, 0.7 )
-GraphNode/colors/title_color = Color( 0, 0, 0, 1 )
+GraphEdit/styles/bg = SubResource("49")
+GraphNode/colors/close_color = Color(0, 0, 0, 0.7)
+GraphNode/colors/resizer_color = Color(0, 0, 0, 0.7)
+GraphNode/colors/title_color = Color(0, 0, 0, 1)
GraphNode/constants/close_h_offset = 20
GraphNode/constants/close_offset = 20
GraphNode/constants/port_offset = 14
GraphNode/constants/separation = 1
GraphNode/constants/title_h_offset = -16
GraphNode/constants/title_offset = 20
-GraphNode/icons/close = SubResource( 51 )
-GraphNode/icons/port = SubResource( 53 )
-GraphNode/icons/resizer = SubResource( 55 )
-GraphNode/styles/breakpoint = SubResource( 56 )
-GraphNode/styles/comment = SubResource( 57 )
-GraphNode/styles/commentfocus = SubResource( 58 )
-GraphNode/styles/frame = SubResource( 59 )
-GraphNode/styles/position = SubResource( 60 )
-GraphNode/styles/selectedframe = SubResource( 61 )
-GraphNode/styles/state_machine_frame = SubResource( 62 )
-GraphNode/styles/state_machine_selectedframe = SubResource( 63 )
+GraphNode/styles/breakpoint = SubResource("56")
+GraphNode/styles/comment = SubResource("57")
+GraphNode/styles/commentfocus = SubResource("58")
+GraphNode/styles/frame = SubResource("59")
+GraphNode/styles/position = SubResource("60")
+GraphNode/styles/selectedframe = SubResource("61")
+GraphNode/styles/state_machine_frame = SubResource("62")
+GraphNode/styles/state_machine_selectedframe = SubResource("63")
GridContainer/constants/hseparation = 4
GridContainer/constants/vseparation = 4
HBoxContainer/constants/separation = 4
-HScrollBar/icons/decrement = SubResource( 64 )
-HScrollBar/icons/decrement_highlight = SubResource( 64 )
-HScrollBar/icons/increment = SubResource( 64 )
-HScrollBar/icons/increment_highlight = SubResource( 64 )
-HScrollBar/styles/grabber = SubResource( 67 )
-HScrollBar/styles/grabber_highlight = SubResource( 70 )
-HScrollBar/styles/grabber_pressed = SubResource( 73 )
-HScrollBar/styles/scroll = SubResource( 76 )
-HScrollBar/styles/scroll_focus = SubResource( 77 )
HSeparator/constants/separation = 4
-HSeparator/styles/separator = SubResource( 78 )
-HSlider/icons/grabber = SubResource( 80 )
-HSlider/icons/grabber_disabled = null
-HSlider/icons/grabber_highlight = SubResource( 82 )
-HSlider/icons/tick = null
+HSeparator/styles/separator = SubResource("78")
HSlider/styles/focus = null
-HSlider/styles/grabber_area = SubResource( 83 )
+HSlider/styles/grabber_area = SubResource("83")
HSlider/styles/grabber_disabled = null
HSlider/styles/grabber_highlight = null
-HSlider/styles/slider = SubResource( 84 )
+HSlider/styles/slider = SubResource("84")
HSplitContainer/constants/autohide = 1
HSplitContainer/constants/separation = 8
-HSplitContainer/icons/grabber = SubResource( 86 )
-HSplitContainer/styles/bg = SubResource( 87 )
-Header/base_type = "Label"
-Header/colors/font_color = Color( 0.18, 0.14433, 0.1062, 1 )
-Header/fonts/font = ExtResource( 2 )
-Icons/colors/modulate_color = Color( 0.2, 0.2, 0.2, 1 )
-ItemList/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-ItemList/colors/font_color_selected = Color( 0, 0, 0, 1 )
-ItemList/colors/guide_color = Color( 0, 0, 0, 0.05 )
+Header/base_type = &"Label"
+Header/colors/font_color = Color(0.18, 0.14433, 0.1062, 1)
+Icons/colors/modulate_color = Color(0.2, 0.2, 0.2, 1)
+ItemList/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+ItemList/colors/font_color_selected = Color(0, 0, 0, 1)
+ItemList/colors/guide_color = Color(0, 0, 0, 0.05)
ItemList/constants/hseparation = 3
ItemList/constants/icon_margin = 4
ItemList/constants/line_separation = 3
ItemList/constants/vseparation = 3
-ItemList/fonts/font = ExtResource( 1 )
-ItemList/styles/bg = SubResource( 88 )
-ItemList/styles/bg_focus = SubResource( 89 )
-ItemList/styles/cursor = SubResource( 90 )
-ItemList/styles/cursor_unfocused = SubResource( 90 )
-ItemList/styles/selected = SubResource( 91 )
-ItemList/styles/selected_focus = SubResource( 92 )
-Label/colors/font_color = Color( 0.239216, 0.192157, 0.141176, 1 )
-Label/colors/font_color_shadow = Color( 0, 0, 0, 0 )
-Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 )
+ItemList/styles/bg = SubResource("88")
+ItemList/styles/bg_focus = SubResource("89")
+ItemList/styles/cursor = SubResource("90")
+ItemList/styles/cursor_unfocused = SubResource("90")
+ItemList/styles/selected = SubResource("91")
+ItemList/styles/selected_focus = SubResource("92")
+Label/colors/font_color = Color(0.239216, 0.192157, 0.141176, 1)
+Label/colors/font_color_shadow = Color(0, 0, 0, 0)
+Label/colors/font_outline_modulate = Color(0, 0, 0, 1)
Label/constants/line_spacing = 3
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/fonts/font = ExtResource( 1 )
-Label/styles/normal = SubResource( 93 )
-LineEdit/colors/clear_button_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-LineEdit/colors/clear_button_color_pressed = Color( 1, 0.819608, 0.00392157, 1 )
-LineEdit/colors/cursor_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-LineEdit/colors/font_color = Color( 0.24, 0.19, 0.14, 1 )
-LineEdit/colors/font_color_selected = Color( 0, 0, 0, 1 )
-LineEdit/colors/read_only = Color( 0, 0, 0, 0.3 )
-LineEdit/colors/selection_color = Color( 1, 0.819608, 0.00392157, 0.4 )
+Label/styles/normal = SubResource("93")
+LineEdit/colors/clear_button_color = Color(0.237305, 0.193295, 0.141827, 1)
+LineEdit/colors/clear_button_color_pressed = Color(1, 0.819608, 0.00392157, 1)
+LineEdit/colors/cursor_color = Color(0.237305, 0.193295, 0.141827, 1)
+LineEdit/colors/font_color = Color(0.24, 0.19, 0.14, 1)
+LineEdit/colors/font_color_selected = Color(0, 0, 0, 1)
+LineEdit/colors/read_only = Color(0, 0, 0, 0.3)
+LineEdit/colors/selection_color = Color(1, 0.819608, 0.00392157, 0.4)
LineEdit/constants/minimum_spaces = 12
-LineEdit/fonts/font = ExtResource( 1 )
-LineEdit/icons/clear = SubResource( 95 )
-LineEdit/styles/focus = SubResource( 3 )
-LineEdit/styles/normal = SubResource( 5 )
-LineEdit/styles/read_only = SubResource( 2 )
-LinkButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-LinkButton/styles/focus = SubResource( 93 )
+LineEdit/styles/focus = SubResource("3")
+LineEdit/styles/normal = SubResource("5")
+LineEdit/styles/read_only = SubResource("2")
+LinkButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+LinkButton/styles/focus = SubResource("93")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
-MenuButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-MenuButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
-MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 )
+MenuButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+MenuButton/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1)
+MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1)
MenuButton/constants/hseparation = 3
-MenuButton/fonts/font = ExtResource( 1 )
-MenuButton/styles/disabled = SubResource( 23 )
-MenuButton/styles/focus = SubResource( 23 )
-MenuButton/styles/hover = SubResource( 23 )
-MenuButton/styles/normal = SubResource( 23 )
-MenuButton/styles/pressed = SubResource( 23 )
-Misc/colors/clear_color = Color( 0.866667, 0.701961, 0.439216, 1 )
-OptionButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-OptionButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-OptionButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
-OptionButton/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 )
-OptionButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
+MenuButton/styles/disabled = SubResource("23")
+MenuButton/styles/focus = SubResource("23")
+MenuButton/styles/hover = SubResource("23")
+MenuButton/styles/normal = SubResource("23")
+MenuButton/styles/pressed = SubResource("23")
+Misc/colors/clear_color = Color(0.866667, 0.701961, 0.439216, 1)
+OptionButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+OptionButton/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+OptionButton/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1)
+OptionButton/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1)
+OptionButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/hseparation = 4
OptionButton/constants/modulate_arrow = 1
-OptionButton/fonts/font = ExtResource( 1 )
-OptionButton/icons/arrow = SubResource( 97 )
-OptionButton/styles/disabled = SubResource( 2 )
-OptionButton/styles/focus = SubResource( 3 )
-OptionButton/styles/hover = SubResource( 4 )
-OptionButton/styles/normal = SubResource( 5 )
-OptionButton/styles/pressed = SubResource( 6 )
-Panel/styles/panel = SubResource( 99 )
-PanelContainer/styles/panel = SubResource( 100 )
-PopupDialog/styles/panel = SubResource( 101 )
-PopupMenu/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-PopupMenu/colors/font_color_accel = Color( 0, 0, 0, 0.3 )
-PopupMenu/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-PopupMenu/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
+OptionButton/styles/disabled = SubResource("2")
+OptionButton/styles/focus = SubResource("3")
+OptionButton/styles/hover = SubResource("4")
+OptionButton/styles/normal = SubResource("5")
+OptionButton/styles/pressed = SubResource("6")
+Panel/styles/panel = SubResource("99")
+PanelContainer/styles/panel = SubResource("100")
+Popup/styles/panel = SubResource("101")
+PopupMenu/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+PopupMenu/colors/font_color_accel = Color(0, 0, 0, 0.3)
+PopupMenu/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+PopupMenu/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1)
PopupMenu/constants/hseparation = 4
PopupMenu/constants/vseparation = 5
-PopupMenu/fonts/font = ExtResource( 1 )
-PopupMenu/icons/checked = SubResource( 8 )
-PopupMenu/icons/radio_checked = SubResource( 10 )
-PopupMenu/icons/radio_unchecked = SubResource( 12 )
-PopupMenu/icons/submenu = SubResource( 103 )
-PopupMenu/icons/unchecked = SubResource( 14 )
-PopupMenu/icons/visibility_hidden = SubResource( 105 )
-PopupMenu/icons/visibility_visible = SubResource( 40 )
-PopupMenu/icons/visibility_xray = SubResource( 107 )
-PopupMenu/styles/disabled = SubResource( 23 )
-PopupMenu/styles/focus = SubResource( 23 )
-PopupMenu/styles/hover = SubResource( 108 )
-PopupMenu/styles/labeled_separator_left = SubResource( 109 )
-PopupMenu/styles/labeled_separator_right = SubResource( 110 )
-PopupMenu/styles/normal = SubResource( 23 )
-PopupMenu/styles/panel = SubResource( 101 )
+PopupMenu/styles/disabled = SubResource("23")
+PopupMenu/styles/focus = SubResource("23")
+PopupMenu/styles/hover = SubResource("108")
+PopupMenu/styles/labeled_separator_left = SubResource("109")
+PopupMenu/styles/labeled_separator_right = SubResource("110")
+PopupMenu/styles/normal = SubResource("23")
+PopupMenu/styles/panel = SubResource("101")
PopupMenu/styles/panel_disabled = null
-PopupMenu/styles/pressed = SubResource( 23 )
-PopupMenu/styles/separator = SubResource( 111 )
-PopupPanel/styles/panel = SubResource( 101 )
-ProgressBar/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-ProgressBar/styles/bg = SubResource( 114 )
-ProgressBar/styles/fg = SubResource( 117 )
-ProjectSettingsEditor/styles/panel = SubResource( 118 )
-RichTextLabel/colors/default_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+PopupMenu/styles/pressed = SubResource("23")
+PopupMenu/styles/separator = SubResource("111")
+PopupPanel/styles/panel = SubResource("101")
+ProgressBar/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+ProjectSettingsEditor/styles/panel = SubResource("118")
+RichTextLabel/colors/default_color = Color(0.237305, 0.193295, 0.141827, 1)
+RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0)
RichTextLabel/constants/shadow_as_outline = 0
RichTextLabel/constants/shadow_offset_x = 1
RichTextLabel/constants/shadow_offset_y = 1
-RichTextLabel/styles/focus = SubResource( 119 )
-RichTextLabel/styles/normal = SubResource( 49 )
-RulerButton/base_type = "Button"
-RulerButton/styles/focus = SubResource( 1 )
-RulerButton/styles/hover = SubResource( 1 )
-RulerButton/styles/normal = SubResource( 1 )
-RulerButton/styles/pressed = SubResource( 1 )
-SpinBox/icons/updown = SubResource( 121 )
-TabContainer/colors/font_color_bg = Color( 0, 0, 0, 0.3 )
-TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-TabContainer/colors/font_color_fg = Color( 0.237305, 0.193295, 0.141827, 1 )
+RichTextLabel/styles/focus = SubResource("119")
+RichTextLabel/styles/normal = SubResource("49")
+RulerButton/base_type = &"Button"
+RulerButton/styles/focus = SubResource("1")
+RulerButton/styles/hover = SubResource("1")
+RulerButton/styles/normal = SubResource("1")
+RulerButton/styles/pressed = SubResource("1")
+TabBar/colors/font_color_bg = Color(0, 0, 0, 0.3)
+TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabBar/colors/font_color_fg = Color(0.237305, 0.193295, 0.141827, 1)
+TabBar/constants/hseparation = 4
+TabBar/constants/label_valign_bg = 2
+TabBar/constants/label_valign_fg = 0
+TabBar/constants/top_margin = 24
+TabBar/styles/button = SubResource("23")
+TabBar/styles/button_pressed = SubResource("23")
+TabBar/styles/panel = SubResource("138")
+TabBar/styles/tab_bg = SubResource("135")
+TabBar/styles/tab_disabled = SubResource("136")
+TabBar/styles/tab_fg = SubResource("137")
+TabContainer/colors/font_color_bg = Color(0, 0, 0, 0.3)
+TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabContainer/colors/font_color_fg = Color(0.237305, 0.193295, 0.141827, 1)
TabContainer/constants/hseparation = 4
TabContainer/constants/label_valign_bg = 2
TabContainer/constants/label_valign_fg = 0
TabContainer/constants/side_margin = 0
TabContainer/constants/top_margin = 24
-TabContainer/fonts/font = ExtResource( 1 )
-TabContainer/icons/decrement = SubResource( 123 )
-TabContainer/icons/decrement_highlight = SubResource( 125 )
-TabContainer/icons/increment = SubResource( 127 )
-TabContainer/icons/increment_highlight = SubResource( 129 )
-TabContainer/icons/menu = SubResource( 131 )
-TabContainer/icons/menu_highlight = SubResource( 133 )
-TabContainer/styles/panel = SubResource( 134 )
-TabContainer/styles/tab_bg = SubResource( 135 )
-TabContainer/styles/tab_disabled = SubResource( 136 )
-TabContainer/styles/tab_fg = SubResource( 137 )
-Tabs/colors/font_color_bg = Color( 0, 0, 0, 0.3 )
-Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-Tabs/colors/font_color_fg = Color( 0.237305, 0.193295, 0.141827, 1 )
-Tabs/constants/hseparation = 4
-Tabs/constants/label_valign_bg = 2
-Tabs/constants/label_valign_fg = 0
-Tabs/constants/top_margin = 24
-Tabs/fonts/font = ExtResource( 1 )
-Tabs/icons/close = SubResource( 95 )
-Tabs/icons/decrement = SubResource( 123 )
-Tabs/icons/decrement_highlight = SubResource( 125 )
-Tabs/icons/increment = SubResource( 127 )
-Tabs/icons/increment_highlight = SubResource( 129 )
-Tabs/styles/button = SubResource( 23 )
-Tabs/styles/button_pressed = SubResource( 23 )
-Tabs/styles/panel = SubResource( 138 )
-Tabs/styles/tab_bg = SubResource( 135 )
-Tabs/styles/tab_disabled = SubResource( 136 )
-Tabs/styles/tab_fg = SubResource( 137 )
-TextEdit/colors/background_color = Color( 0, 0, 0, 0 )
-TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 )
-TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 )
-TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 )
-TextEdit/colors/caret_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 )
-TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 )
-TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 )
-TextEdit/colors/completion_font_color = Color( 0.666667, 0.666667, 0.666667, 1 )
-TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 )
-TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 )
-TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 )
-TextEdit/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 )
-TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 )
-TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 )
-TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 )
-TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 )
-TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 )
-TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 )
-TextEdit/colors/selection_color = Color( 1, 0.819608, 0.00392157, 0.4 )
-TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 )
-TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 )
+TabContainer/styles/panel = SubResource("134")
+TabContainer/styles/tab_bg = SubResource("135")
+TabContainer/styles/tab_disabled = SubResource("136")
+TabContainer/styles/tab_fg = SubResource("137")
+TextEdit/colors/background_color = Color(0, 0, 0, 0)
+TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1)
+TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2)
+TextEdit/colors/caret_background_color = Color(0, 0, 0, 1)
+TextEdit/colors/caret_color = Color(0.237305, 0.193295, 0.141827, 1)
+TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8)
+TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1)
+TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412)
+TextEdit/colors/completion_font_color = Color(0.666667, 0.666667, 0.666667, 1)
+TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1)
+TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1)
+TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8)
+TextEdit/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+TextEdit/colors/font_color_selected = Color(0, 0, 0, 1)
+TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1)
+TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4)
+TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4)
+TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1)
+TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1)
+TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6)
+TextEdit/colors/selection_color = Color(1, 0.819608, 0.00392157, 0.4)
+TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1)
+TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15)
TextEdit/constants/completion_lines = 7
TextEdit/constants/completion_max_width = 50
TextEdit/constants/completion_scroll_width = 3
TextEdit/constants/line_spacing = 4
-TextEdit/fonts/font = ExtResource( 1 )
-TextEdit/icons/fold = SubResource( 140 )
-TextEdit/icons/folded = SubResource( 142 )
-TextEdit/icons/space = SubResource( 144 )
-TextEdit/icons/tab = SubResource( 146 )
TextEdit/styles/completion = null
-TextEdit/styles/focus = SubResource( 4 )
-TextEdit/styles/normal = SubResource( 5 )
-TextEdit/styles/read_only = SubResource( 2 )
-ToolButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-ToolButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 )
-ToolButton/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 )
-ToolButton/styles/disabled = SubResource( 23 )
-ToolButton/styles/focus = SubResource( 23 )
-ToolButton/styles/hover = SubResource( 23 )
-ToolButton/styles/normal = SubResource( 23 )
-ToolButton/styles/pressed = SubResource( 23 )
-TooltipLabel/colors/font_color = Color( 0.762695, 0.806705, 0.858173, 1 )
-TooltipLabel/colors/font_color_shadow = Color( 1, 1, 1, 0.1 )
-TooltipPanel/styles/panel = SubResource( 147 )
-TopMenuPanel/base_type = "Panel"
-TopMenuPanel/styles/panel = SubResource( 98 )
-Tree/colors/cursor_color = Color( 0, 0, 0, 1 )
-Tree/colors/custom_button_font_highlight = Color( 0.142383, 0.115977, 0.085096, 1 )
-Tree/colors/drop_position_color = Color( 1, 0.819608, 0.00392157, 1 )
-Tree/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-Tree/colors/font_color_selected = Color( 0, 0, 0, 1 )
-Tree/colors/guide_color = Color( 0, 0, 0, 0.05 )
-Tree/colors/relationship_line_color = Color( 0, 0, 0, 0.1 )
-Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 )
-Tree/colors/title_button_color = Color( 0.237305, 0.193295, 0.141827, 1 )
+TextEdit/styles/focus = SubResource("4")
+TextEdit/styles/normal = SubResource("5")
+TextEdit/styles/read_only = SubResource("2")
+TooltipLabel/colors/font_color = Color(0.762695, 0.806705, 0.858173, 1)
+TooltipLabel/colors/font_color_shadow = Color(1, 1, 1, 0.1)
+TooltipPanel/styles/panel = SubResource("147")
+TopMenuPanel/base_type = &"Panel"
+TopMenuPanel/styles/panel = SubResource("98")
+Tree/colors/cursor_color = Color(0, 0, 0, 1)
+Tree/colors/custom_button_font_highlight = Color(0.142383, 0.115977, 0.085096, 1)
+Tree/colors/drop_position_color = Color(1, 0.819608, 0.00392157, 1)
+Tree/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1)
+Tree/colors/font_color_selected = Color(0, 0, 0, 1)
+Tree/colors/guide_color = Color(0, 0, 0, 0.05)
+Tree/colors/relationship_line_color = Color(0, 0, 0, 0.1)
+Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8)
+Tree/colors/title_button_color = Color(0.237305, 0.193295, 0.141827, 1)
Tree/constants/button_margin = 4
Tree/constants/draw_guides = 0
Tree/constants/draw_relationship_lines = 1
@@ -1837,62 +820,38 @@ Tree/constants/item_margin = 12
Tree/constants/scroll_border = 40
Tree/constants/scroll_speed = 12
Tree/constants/vseparation = 4
-Tree/fonts/font = ExtResource( 1 )
-Tree/fonts/title_button_font = ExtResource( 1 )
-Tree/icons/arrow = SubResource( 140 )
-Tree/icons/arrow_collapsed = SubResource( 142 )
-Tree/icons/checked = SubResource( 8 )
-Tree/icons/select_arrow = SubResource( 149 )
-Tree/icons/unchecked = SubResource( 14 )
-Tree/icons/updown = SubResource( 151 )
-Tree/styles/bg = SubResource( 49 )
-Tree/styles/bg_focus = SubResource( 89 )
-Tree/styles/button_pressed = SubResource( 152 )
-Tree/styles/cursor = SubResource( 153 )
-Tree/styles/cursor_unfocused = SubResource( 153 )
-Tree/styles/custom_button = SubResource( 154 )
-Tree/styles/custom_button_hover = SubResource( 5 )
-Tree/styles/custom_button_pressed = SubResource( 155 )
-Tree/styles/hover = SubResource( 156 )
-Tree/styles/selected = SubResource( 91 )
-Tree/styles/selected_focus = SubResource( 92 )
-Tree/styles/title_button_hover = SubResource( 157 )
-Tree/styles/title_button_normal = SubResource( 157 )
-Tree/styles/title_button_pressed = SubResource( 157 )
+Tree/styles/bg = SubResource("49")
+Tree/styles/bg_focus = SubResource("89")
+Tree/styles/button_pressed = SubResource("152")
+Tree/styles/cursor = SubResource("153")
+Tree/styles/cursor_unfocused = SubResource("153")
+Tree/styles/custom_button = SubResource("154")
+Tree/styles/custom_button_hover = SubResource("5")
+Tree/styles/custom_button_pressed = SubResource("155")
+Tree/styles/hover = SubResource("156")
+Tree/styles/selected = SubResource("91")
+Tree/styles/selected_focus = SubResource("92")
+Tree/styles/title_button_hover = SubResource("157")
+Tree/styles/title_button_normal = SubResource("157")
+Tree/styles/title_button_pressed = SubResource("157")
VBoxContainer/constants/separation = 4
-VScrollBar/icons/decrement = SubResource( 64 )
-VScrollBar/icons/decrement_highlight = SubResource( 64 )
-VScrollBar/icons/increment = SubResource( 64 )
-VScrollBar/icons/increment_highlight = SubResource( 64 )
-VScrollBar/styles/grabber = SubResource( 158 )
-VScrollBar/styles/grabber_highlight = SubResource( 159 )
-VScrollBar/styles/grabber_pressed = SubResource( 160 )
-VScrollBar/styles/scroll = SubResource( 161 )
-VScrollBar/styles/scroll_focus = SubResource( 162 )
VSeparator/constants/separation = 4
-VSeparator/styles/separator = SubResource( 163 )
-VSlider/icons/grabber = SubResource( 80 )
-VSlider/icons/grabber_highlight = SubResource( 82 )
-VSlider/styles/grabber_area = SubResource( 164 )
-VSlider/styles/slider = SubResource( 165 )
+VSeparator/styles/separator = SubResource("163")
+VSlider/styles/grabber_area = SubResource("164")
+VSlider/styles/slider = SubResource("165")
VSplitContainer/constants/autohide = 1
VSplitContainer/constants/separation = 8
-VSplitContainer/icons/grabber = SubResource( 167 )
-VSplitContainer/styles/bg = SubResource( 170 )
-ValueSlider/colors/progress_color = Color( 0.713726, 0.580392, 0.423529, 1 )
-ValueSlider/colors/under_color = Color( 0.47451, 0.388235, 0.282353, 1 )
-ValueSlider/icons/arrow_hover = ExtResource( 3 )
-ValueSlider/icons/arrow_normal = ExtResource( 5 )
-ValueSlider/icons/arrow_pressed = ExtResource( 4 )
+ValueSlider/colors/progress_color = Color(0.713726, 0.580392, 0.423529, 1)
+ValueSlider/colors/under_color = Color(0.47451, 0.388235, 0.282353, 1)
+ValueSlider/icons/arrow_hover = ExtResource("3")
+ValueSlider/icons/arrow_normal = ExtResource("5")
+ValueSlider/icons/arrow_pressed = ExtResource("4")
ValueSlider/icons/texture_over = null
-ValueSlider/icons/texture_progress = ExtResource( 6 )
-ValueSlider/icons/texture_under = ExtResource( 6 )
-WindowDialog/colors/title_color = Color( 0.237305, 0.193295, 0.141827, 1 )
-WindowDialog/constants/close_h_ofs = 22
-WindowDialog/constants/close_v_ofs = 20
-WindowDialog/constants/scaleborder_size = 4
-WindowDialog/constants/title_height = 24
-WindowDialog/fonts/title_font = ExtResource( 1 )
-WindowDialog/icons/close = SubResource( 95 )
-WindowDialog/icons/close_highlight = SubResource( 95 )
-WindowDialog/styles/panel = SubResource( 171 )
+ValueSlider/icons/texture_progress = ExtResource("6")
+ValueSlider/icons/texture_under = ExtResource("6")
+Window/colors/title_color = Color(0.237305, 0.193295, 0.141827, 1)
+Window/constants/close_h_ofs = 22
+Window/constants/close_v_ofs = 20
+Window/constants/scaleborder_size = 4
+Window/constants/title_height = 24
+Window/styles/panel = SubResource("171")
diff --git a/assets/themes/dark/theme.tres b/assets/themes/dark/theme.tres
index 50a4ede122d..06486df5d86 100644
--- a/assets/themes/dark/theme.tres
+++ b/assets/themes/dark/theme.tres
@@ -1,1868 +1,845 @@
-[gd_resource type="Theme" load_steps=182 format=2]
+[gd_resource type="Theme" load_steps=64 format=3 uid="uid://w1q3piojx08s"]
-[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
-[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="4"]
+[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="7_q8bkb"]
-[sub_resource type="StyleBoxFlat" id=2]
+[sub_resource type="StyleBoxFlat" id="23"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.101953, 0.101953, 0.101953, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=3]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.184314, 0.396078, 0.533333, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=4]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.334961, 0.334961, 0.334961, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
+bg_color = Color(0.0901961, 0.0901961, 0.0901961, 1)
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
-[sub_resource type="StyleBoxFlat" id=5]
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_t0f5f"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=6]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0901961, 0.0901961, 0.0901961, 1 )
+bg_color = Color(0.09, 0.09, 0.09, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.184314, 0.396078, 0.533333, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="Image" id=177]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 243, 223, 223, 223, 105, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 104, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 225, 225, 225, 51, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 48, 224, 224, 224, 66, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 103, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 217, 217, 217, 48, 223, 223, 223, 178, 222, 222, 222, 231, 220, 220, 220, 74, 222, 222, 222, 102, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 194, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 219, 219, 219, 64, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 233, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 195, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 224, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 66, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=8]
-flags = 0
-flags = 0
-image = SubResource( 177 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=178]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 221, 221, 221, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 217, 217, 217, 68, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 179, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 223, 223, 223, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=10]
-flags = 0
-flags = 0
-image = SubResource( 178 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=179]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=12]
-flags = 0
-flags = 0
-image = SubResource( 179 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=180]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.184314, 0.396078, 0.533333, 1)
-[sub_resource type="ImageTexture" id=14]
-flags = 0
-flags = 0
-image = SubResource( 180 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=15]
+[sub_resource type="StyleBoxFlat" id="15"]
content_margin_left = 4.0
-content_margin_right = 4.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
-draw_center = false
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
-
-[sub_resource type="StyleBoxFlat" id=16]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
-
-[sub_resource type="Image" id=181]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 219, 219, 219, 94, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 220, 220, 220, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=18]
-flags = 0
-flags = 0
-image = SubResource( 181 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="Image" id=182]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=20]
-flags = 4
-flags = 4
-image = SubResource( 182 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=183]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 66, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 223, 220, 220, 220, 66, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 223, 223, 223, 65, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 217, 217, 217, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 12, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 223, 223, 223, 222, 212, 212, 212, 12, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 120, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 120, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 75, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 0, 221, 221, 221, 75, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 214, 214, 214, 25, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 216, 216, 216, 20, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 71, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 121, 223, 223, 223, 0, 215, 215, 215, 0, 215, 215, 215, 13, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 222, 222, 222, 223, 215, 215, 215, 13, 215, 215, 215, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 66, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 254, 220, 220, 220, 66, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 220, 220, 220, 66, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 220, 220, 220, 66, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=22]
-flags = 0
-flags = 0
-image = SubResource( 183 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="StyleBoxFlat" id=23]
-content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
draw_center = false
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
-
-[sub_resource type="StyleBoxFlat" id=24]
-bg_color = Color( 0.2, 0.2, 0.2, 0 )
-
-[sub_resource type="Image" id=184]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=26]
-flags = 0
-flags = 0
-image = SubResource( 184 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=185]
-data = {
-"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=28]
-flags = 0
-flags = 0
-image = SubResource( 185 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=186]
-data = {
-"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=30]
-flags = 0
-flags = 0
-image = SubResource( 186 )
-size = Vector2( 16, 16 )
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
-[sub_resource type="Image" id=187]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 218, 222, 222, 222, 70, 222, 222, 222, 70, 223, 223, 223, 218, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 65, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 65, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="24"]
+bg_color = Color(0.2, 0.2, 0.2, 0)
-[sub_resource type="ImageTexture" id=32]
-flags = 0
-flags = 0
-image = SubResource( 187 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=33]
-bg_color = Color( 0.768627, 0.768627, 0.768627, 1 )
+[sub_resource type="StyleBoxFlat" id="33"]
+bg_color = Color(0.768627, 0.768627, 0.768627, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=34]
+[sub_resource type="StyleBoxFlat" id="34"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=35]
-bg_color = Color( 0.2, 0.2, 0.2, 1 )
+[sub_resource type="StyleBoxFlat" id="35"]
+bg_color = Color(0.2, 0.2, 0.2, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=188]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=37]
-flags = 0
-flags = 0
-image = SubResource( 188 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=189]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 199, 222, 222, 222, 198, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 218, 218, 218, 21, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 216, 216, 216, 20, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 216, 216, 216, 20, 223, 223, 223, 209, 223, 223, 223, 254, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 251, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 193, 223, 223, 223, 254, 222, 222, 222, 206, 214, 214, 214, 19, 223, 223, 223, 254, 223, 223, 223, 249, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 193, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 192, 214, 214, 214, 19, 217, 217, 217, 0, 223, 223, 223, 254, 223, 223, 223, 249, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 192, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=39]
-flags = 0
-flags = 0
-image = SubResource( 189 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=190]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 98, 223, 223, 223, 177, 223, 223, 223, 228, 223, 223, 223, 228, 223, 223, 223, 177, 223, 223, 223, 98, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 23, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 185, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 215, 215, 215, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 174, 223, 223, 223, 254, 222, 222, 222, 87, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 87, 223, 223, 223, 254, 222, 222, 222, 174, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 147, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 161, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 212, 212, 212, 0, 212, 212, 212, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 214, 204, 204, 204, 10, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 178, 223, 223, 223, 0, 0, 0, 0, 0, 214, 214, 214, 0, 217, 217, 217, 34, 223, 223, 223, 240, 223, 223, 223, 245, 218, 218, 218, 42, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 96, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 221, 221, 221, 84, 223, 223, 223, 97, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 186, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 228, 223, 223, 223, 177, 221, 221, 221, 99, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=41]
-flags = 0
-flags = 0
-image = SubResource( 190 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=191]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 221, 221, 221, 0, 221, 221, 221, 92, 223, 223, 223, 185, 222, 222, 222, 231, 222, 222, 222, 231, 223, 223, 223, 186, 222, 222, 222, 95, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 218, 218, 218, 35, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 41, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 0, 223, 223, 223, 32, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 228, 218, 218, 218, 35, 194, 194, 194, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 213, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 217, 170, 170, 170, 3, 170, 170, 170, 0, 223, 223, 223, 0, 223, 223, 223, 89, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 87, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 200, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 87, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 93, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 24, 222, 222, 222, 0, 222, 222, 222, 198, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 198, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 19, 218, 218, 218, 0, 222, 222, 222, 199, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 199, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 254, 221, 221, 221, 84, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 201, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 224, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 222, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 196, 196, 196, 0, 223, 223, 223, 41, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 232, 223, 223, 223, 41, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 44, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 220, 220, 220, 44, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 127, 127, 127, 2, 223, 223, 223, 98, 222, 222, 222, 190, 223, 223, 223, 232, 223, 223, 223, 232, 222, 222, 222, 190, 223, 223, 223, 98, 127, 127, 127, 2, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=43]
-flags = 0
-flags = 0
-image = SubResource( 191 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=192]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=45]
-flags = 0
-flags = 0
-image = SubResource( 192 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=193]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=47]
-flags = 0
-flags = 0
-image = SubResource( 193 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=194]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=49]
-flags = 0
-flags = 0
-image = SubResource( 194 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=195]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 115, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 114, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 160, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 160, 255, 255, 255, 17, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 110, 255, 255, 255, 174, 255, 255, 255, 131, 255, 255, 255, 35, 255, 255, 255, 35, 255, 255, 255, 131, 255, 255, 255, 174, 255, 255, 255, 110, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 153, 255, 255, 255, 174, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 174, 255, 255, 255, 153, 255, 255, 255, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=51]
-flags = 0
-flags = 0
-image = SubResource( 195 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=52]
+[sub_resource type="StyleBoxFlat" id="52"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 )
-
-[sub_resource type="Image" id=196]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=54]
-flags = 0
-flags = 0
-image = SubResource( 196 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=197]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 10,
-"mipmaps": false,
-"width": 10
-}
-
-[sub_resource type="ImageTexture" id=56]
-flags = 0
-flags = 0
-image = SubResource( 197 )
-size = Vector2( 10, 10 )
+border_color = Color(0.0679686, 0.0679686, 0.0679686, 1)
-[sub_resource type="Image" id=198]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=58]
-flags = 0
-flags = 0
-image = SubResource( 198 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=59]
+[sub_resource type="StyleBoxFlat" id="59"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.87, 0.4, 1 )
-shadow_color = Color( 1, 0.87, 0.4, 0.1 )
+border_color = Color(1, 0.87, 0.4, 1)
+shadow_color = Color(1, 0.87, 0.4, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=60]
+[sub_resource type="StyleBoxFlat" id="60"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.3 )
+bg_color = Color(0, 0, 0, 0.3)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=61]
+[sub_resource type="StyleBoxFlat" id="61"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.4 )
+bg_color = Color(0, 0, 0, 0.4)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=62]
+[sub_resource type="StyleBoxFlat" id="62"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=63]
+[sub_resource type="StyleBoxFlat" id="63"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.47, 0.42, 1 )
-shadow_color = Color( 1, 0.47, 0.42, 0.2 )
+border_color = Color(1, 0.47, 0.42, 1)
+shadow_color = Color(1, 0.47, 0.42, 0.2)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=64]
+[sub_resource type="StyleBoxFlat" id="64"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.184314, 0.396078, 0.533333, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.184314, 0.396078, 0.533333, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=65]
+[sub_resource type="StyleBoxFlat" id="65"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=66]
+[sub_resource type="StyleBoxFlat" id="66"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.184314, 0.396078, 0.533333, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.184314, 0.396078, 0.533333, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="ImageTexture" id=67]
-
-[sub_resource type="Image" id=199]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=69]
-flags = 0
-flags = 0
-image = SubResource( 199 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=70]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 69 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=200]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=72]
-flags = 0
-flags = 0
-image = SubResource( 200 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=73]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 72 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="Image" id=201]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=75]
-flags = 0
-flags = 0
-image = SubResource( 201 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxLine" id="81"]
+color = Color(1, 1, 1, 0.1)
-[sub_resource type="StyleBoxTexture" id=76]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 75 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=202]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=78]
-flags = 0
-flags = 0
-image = SubResource( 202 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=79]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 78 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=80]
+[sub_resource type="StyleBoxFlat" id="86"]
content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 78 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=81]
-color = Color( 1, 1, 1, 0.1 )
-
-[sub_resource type="Image" id=203]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 190, 190, 0, 210, 210, 210, 17, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 210, 210, 210, 17, 190, 190, 190, 0, 0, 0, 0, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 62, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 62, 170, 170, 170, 3, 170, 170, 170, 0, 216, 216, 216, 0, 216, 216, 216, 33, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 216, 216, 216, 33, 216, 216, 216, 0, 219, 219, 219, 0, 219, 219, 219, 50, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 219, 219, 219, 50, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 65, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 51, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 220, 220, 220, 51, 220, 220, 220, 0, 218, 218, 218, 0, 218, 218, 218, 35, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 218, 218, 218, 35, 218, 218, 218, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 63, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 191, 191, 191, 0, 212, 212, 212, 18, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 212, 212, 212, 18, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=83]
-flags = 0
-flags = 0
-image = SubResource( 203 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=204]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 63, 223, 223, 223, 221, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 222, 222, 222, 62, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 0, 0, 0, 1, 148, 148, 148, 0, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 222, 222, 222, 62, 215, 215, 215, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 220, 224, 224, 224, 255, 223, 223, 223, 114, 233, 233, 233, 0, 237, 237, 237, 0, 127, 127, 127, 0, 255, 255, 255, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 219, 208, 208, 208, 11, 208, 208, 208, 0, 222, 222, 222, 0, 222, 222, 222, 118, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 222, 222, 222, 118, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 123, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 223, 223, 223, 123, 223, 223, 223, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 222, 224, 224, 224, 255, 223, 223, 223, 112, 233, 233, 233, 0, 237, 237, 237, 0, 255, 255, 255, 0, 127, 127, 127, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 221, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 215, 215, 215, 0, 223, 223, 223, 64, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 148, 148, 148, 0, 0, 0, 0, 1, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=85]
-flags = 0
-flags = 0
-image = SubResource( 204 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=86]
-content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.333333, 0.333333, 0.333333, 1 )
+bg_color = Color(0.333333, 0.333333, 0.333333, 1)
-[sub_resource type="StyleBoxFlat" id=87]
+[sub_resource type="StyleBoxFlat" id="87"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.333333, 0.333333, 0.333333, 1 )
+bg_color = Color(0.333333, 0.333333, 0.333333, 1)
-[sub_resource type="StyleBoxFlat" id=88]
+[sub_resource type="StyleBoxFlat" id="88"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
-
-[sub_resource type="Image" id=205]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 64,
-"mipmaps": false,
-"width": 8
-}
+bg_color = Color(0.0666667, 0.0666667, 0.0666667, 1)
-[sub_resource type="ImageTexture" id=90]
-flags = 0
-flags = 0
-image = SubResource( 205 )
-size = Vector2( 8, 64 )
-
-[sub_resource type="StyleBoxTexture" id=91]
-texture = SubResource( 20 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=92]
+[sub_resource type="StyleBoxFlat" id="92"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 )
+border_color = Color(0.0679686, 0.0679686, 0.0679686, 1)
-[sub_resource type="StyleBoxFlat" id=93]
+[sub_resource type="StyleBoxFlat" id="93"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.445801, 0.445801, 0.445801, 1 )
+border_color = Color(0.445801, 0.445801, 0.445801, 1)
-[sub_resource type="StyleBoxFlat" id=94]
+[sub_resource type="StyleBoxFlat" id="94"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.2 )
+border_color = Color(1, 1, 1, 0.2)
-[sub_resource type="StyleBoxFlat" id=95]
+[sub_resource type="StyleBoxFlat" id="95"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.113281, 0.113281, 0.113281, 1)
-[sub_resource type="StyleBoxFlat" id=96]
+[sub_resource type="StyleBoxFlat" id="96"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.113281, 0.113281, 0.113281, 1)
-[sub_resource type="StyleBoxEmpty" id=97]
+[sub_resource type="StyleBoxEmpty" id="97"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id=206]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="3"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.184314, 0.396078, 0.533333, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=99]
-flags = 0
-flags = 0
-image = SubResource( 206 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="Image" id=207]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 121, 255, 255, 255, 151, 255, 255, 255, 15, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 149, 255, 255, 255, 125, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 142, 255, 255, 255, 199, 255, 255, 255, 163, 255, 255, 255, 15, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 144, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 163, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 15, 255, 255, 255, 14, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 166, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 155, 255, 255, 255, 157, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxFlat" id="2"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.101953, 0.101953, 0.101953, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=101]
-flags = 0
-flags = 0
-image = SubResource( 207 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxFlat" id="4"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.334961, 0.334961, 0.334961, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=103]
+[sub_resource type="StyleBoxFlat" id="6"]
content_margin_left = 6.0
+content_margin_top = 4.0
content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.0901961, 0.0901961, 0.0901961, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.184314, 0.396078, 0.533333, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[sub_resource type="StyleBoxFlat" id="103"]
+content_margin_left = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
-[sub_resource type="StyleBoxFlat" id=104]
+[sub_resource type="StyleBoxFlat" id="104"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 2.0
+content_margin_right = 2.0
content_margin_bottom = 2.0
-bg_color = Color( 0.141176, 0.141176, 0.141176, 1 )
+bg_color = Color(0.141176, 0.141176, 0.141176, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=105]
+[sub_resource type="StyleBoxFlat" id="105"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.334961, 0.334961, 0.334961, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.334961, 0.334961, 0.334961, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="Image" id=208]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 197, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 190, 223, 223, 223, 254, 223, 223, 223, 210, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 214, 214, 214, 19, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 189, 223, 223, 223, 254, 223, 223, 223, 212, 220, 220, 220, 22, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 222, 222, 222, 198, 221, 221, 221, 23, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=107]
-flags = 0
-flags = 0
-image = SubResource( 208 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=209]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 222, 222, 222, 31, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 178, 223, 223, 223, 254, 223, 223, 223, 81, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 213, 0, 223, 223, 223, 81, 223, 223, 223, 254, 223, 223, 223, 177, 223, 223, 223, 0, 221, 221, 221, 0, 221, 221, 221, 84, 223, 223, 223, 254, 223, 223, 223, 204, 204, 204, 204, 5, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 204, 5, 223, 223, 223, 204, 223, 223, 223, 254, 221, 221, 221, 84, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 176, 204, 204, 204, 5, 213, 213, 213, 0, 220, 220, 220, 0, 220, 220, 220, 0, 213, 213, 213, 0, 204, 204, 204, 5, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 209, 0, 0, 0, 1, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 213, 223, 223, 223, 88, 220, 220, 220, 22, 220, 220, 220, 22, 223, 223, 223, 88, 222, 222, 222, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 214, 214, 214, 19, 214, 214, 214, 0, 198, 198, 198, 0, 198, 198, 198, 9, 223, 223, 223, 194, 222, 222, 222, 214, 222, 222, 222, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 215, 222, 222, 222, 214, 223, 223, 223, 194, 198, 198, 198, 9, 198, 198, 198, 0, 0, 0, 0, 0, 201, 201, 201, 0, 204, 204, 204, 10, 216, 216, 216, 20, 204, 204, 204, 5, 223, 223, 223, 105, 223, 223, 223, 187, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 187, 223, 223, 223, 105, 204, 204, 204, 5, 216, 216, 216, 20, 204, 204, 204, 10, 201, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 223, 223, 223, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=109]
-flags = 0
-flags = 0
-image = SubResource( 209 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=210]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 0, 219, 219, 219, 115, 223, 223, 223, 204, 223, 223, 223, 236, 223, 223, 223, 90, 223, 223, 223, 73, 220, 220, 220, 37, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 217, 217, 217, 47, 222, 222, 222, 222, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 16, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 218, 218, 218, 42, 222, 222, 222, 236, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 216, 216, 216, 33, 223, 223, 223, 88, 221, 221, 221, 100, 223, 223, 223, 89, 218, 218, 218, 14, 109, 109, 109, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 235, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 218, 218, 218, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 85, 0, 0, 0, 1, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 111, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 109, 217, 217, 217, 0, 221, 221, 221, 76, 223, 223, 223, 216, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 217, 217, 217, 34, 221, 221, 221, 100, 221, 221, 221, 100, 219, 219, 219, 36, 219, 219, 219, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 32, 218, 218, 218, 0, 222, 222, 222, 215, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 25, 217, 217, 217, 0, 221, 221, 221, 216, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 117, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 106, 216, 216, 216, 0, 221, 221, 221, 76, 223, 223, 223, 217, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 216, 216, 216, 33, 221, 221, 221, 100, 221, 221, 221, 100, 220, 220, 220, 37, 220, 220, 220, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 233, 223, 223, 223, 254, 223, 223, 223, 234, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 220, 220, 220, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 0, 221, 221, 221, 54, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 223, 223, 223, 32, 223, 223, 223, 88, 221, 221, 221, 100, 221, 221, 221, 91, 223, 223, 223, 16, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 215, 215, 215, 58, 222, 222, 222, 229, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 127, 127, 127, 2, 223, 223, 223, 121, 223, 223, 223, 208, 223, 223, 223, 237, 221, 221, 221, 91, 223, 223, 223, 74, 221, 221, 221, 38, 0, 0, 0, 1, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=111]
-flags = 0
-flags = 0
-image = SubResource( 210 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=112]
+[sub_resource type="StyleBoxFlat" id="112"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
-[sub_resource type="StyleBoxLine" id=113]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="113"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
-[sub_resource type="StyleBoxLine" id=114]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="114"]
+color = Color(1, 1, 1, 0.1)
grow_end = 7.0
-[sub_resource type="StyleBoxLine" id=115]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="115"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
grow_end = 7.0
-[sub_resource type="Image" id=211]
-data = {
-"data": PoolByteArray( 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=117]
-flags = 0
-flags = 0
-image = SubResource( 211 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=118]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 117 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 4.0
-margin_right = 4.0
-margin_top = 4.0
-margin_bottom = 4.0
-
-[sub_resource type="Image" id=212]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=120]
-flags = 0
-flags = 0
-image = SubResource( 212 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxEmpty" id="123"]
-[sub_resource type="StyleBoxTexture" id=121]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 1.0
-content_margin_bottom = 1.0
-texture = SubResource( 120 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxEmpty" id=123]
-
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 0.2, 0.2, 0.2, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(0.2, 0.2, 0.2, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=213]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 152, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 143, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 216, 216, 216, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 143, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 138, 223, 223, 223, 145, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 145, 223, 223, 223, 138, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 124, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 153, 222, 222, 222, 125, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 142, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 142, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 154, 223, 223, 223, 154, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=125]
-flags = 0
-flags = 0
-image = SubResource( 213 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=214]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 220, 220, 220, 44, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 216, 216, 216, 33, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 219, 219, 219, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 218, 218, 218, 42, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=127]
-flags = 0
-flags = 0
-image = SubResource( 214 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=215]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 223, 223, 223, 57, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 219, 219, 219, 43, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 219, 219, 219, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 221, 221, 221, 54, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=129]
-flags = 0
-flags = 0
-image = SubResource( 215 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=216]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 220, 220, 220, 44, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 221, 221, 221, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 218, 218, 218, 42, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=131]
-flags = 0
-flags = 0
-image = SubResource( 216 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=217]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 57, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 220, 220, 220, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 219, 219, 219, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 222, 222, 222, 55, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=133]
-flags = 0
-flags = 0
-image = SubResource( 217 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=218]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=135]
-flags = 0
-flags = 0
-image = SubResource( 218 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=219]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=137]
-flags = 0
-flags = 0
-image = SubResource( 219 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="142"]
+bg_color = Color(0.321569, 0.321569, 0.321569, 1)
+border_width_left = 5
+border_width_top = 10
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color(0.321569, 0.321569, 0.321569, 1)
+anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=138]
-content_margin_left = 5.0
-content_margin_right = 5.0
+[sub_resource type="StyleBoxFlat" id="139"]
+content_margin_left = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 )
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
+expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=139]
+[sub_resource type="StyleBoxFlat" id="140"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 )
+bg_color = Color(0.101953, 0.101953, 0.101953, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
+border_color = Color(0.0792967, 0.0792967, 0.0792967, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=140]
+[sub_resource type="StyleBoxFlat" id="141"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.101953, 0.101953, 0.101953, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 )
+border_color = Color(0.0679686, 0.0679686, 0.0679686, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=141]
-content_margin_left = 10.0
-content_margin_right = 10.0
+[sub_resource type="StyleBoxFlat" id="138"]
+content_margin_left = 5.0
content_margin_top = 5.0
+content_margin_right = 5.0
content_margin_bottom = 5.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 )
-expand_margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=142]
-bg_color = Color( 0.321569, 0.321569, 0.321569, 1 )
-border_width_left = 5
-border_width_top = 10
-border_width_right = 5
-border_width_bottom = 5
-border_color = Color( 0.321569, 0.321569, 0.321569, 1 )
-anti_aliasing = false
-
-[sub_resource type="Image" id=220]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 72, 255, 255, 255, 56, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 72, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=144]
-flags = 0
-flags = 0
-image = SubResource( 220 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=221]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=146]
-flags = 0
-flags = 0
-image = SubResource( 221 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=222]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 13, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=148]
-flags = 0
-flags = 0
-image = SubResource( 222 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="Image" id=223]
-data = {
-"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=150]
-flags = 0
-flags = 0
-image = SubResource( 223 )
-size = Vector2( 8, 8 )
+border_width_bottom = 1
+border_color = Color(0.0679686, 0.0679686, 0.0679686, 1)
-[sub_resource type="StyleBoxFlat" id=151]
+[sub_resource type="StyleBoxFlat" id="151"]
content_margin_left = 1.0
-content_margin_right = 1.0
content_margin_top = 1.0
+content_margin_right = 1.0
content_margin_bottom = 1.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(1, 1, 1, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxFlat" id=102]
-bg_color = Color( 0.0823529, 0.0823529, 0.0823529, 1 )
-
-[sub_resource type="Image" id=224]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 84, 255, 255, 255, 108, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 108, 255, 255, 255, 84, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 109, 255, 255, 255, 108, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=153]
-flags = 0
-flags = 0
-image = SubResource( 224 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="Image" id=225]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 113, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 113, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 116, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=155]
-flags = 0
-flags = 0
-image = SubResource( 225 )
-size = Vector2( 14, 14 )
+[sub_resource type="StyleBoxFlat" id="102"]
+bg_color = Color(0.0823529, 0.0823529, 0.0823529, 1)
-[sub_resource type="StyleBoxFlat" id=156]
+[sub_resource type="StyleBoxFlat" id="156"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.334961, 0.334961, 0.334961, 1 )
-border_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.334961, 0.334961, 0.334961, 1)
+border_color = Color(0.113281, 0.113281, 0.113281, 1)
-[sub_resource type="StyleBoxFlat" id=157]
+[sub_resource type="StyleBoxFlat" id="157"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.334961, 0.334961, 0.334961, 1 )
+border_color = Color(0.334961, 0.334961, 0.334961, 1)
-[sub_resource type="StyleBoxEmpty" id=158]
+[sub_resource type="StyleBoxEmpty" id="158"]
-[sub_resource type="StyleBoxEmpty" id=159]
+[sub_resource type="StyleBoxEmpty" id="159"]
-[sub_resource type="StyleBoxFlat" id=160]
+[sub_resource type="StyleBoxFlat" id="160"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.08 )
-border_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(1, 1, 1, 0.08)
+border_color = Color(0.113281, 0.113281, 0.113281, 1)
-[sub_resource type="StyleBoxFlat" id=161]
+[sub_resource type="StyleBoxFlat" id="161"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 )
-border_color = Color( 0.113281, 0.113281, 0.113281, 1 )
-
-[sub_resource type="StyleBoxTexture" id=162]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 69 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=163]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 72 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=164]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 75 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
+bg_color = Color(0.0679686, 0.0679686, 0.0679686, 1)
+border_color = Color(0.113281, 0.113281, 0.113281, 1)
-[sub_resource type="StyleBoxTexture" id=165]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 78 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=166]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 78 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=167]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="167"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 0.0
grow_end = 0.0
vertical = true
-[sub_resource type="StyleBoxFlat" id=168]
+[sub_resource type="StyleBoxFlat" id="168"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.334961, 0.334961, 0.334961, 1 )
+bg_color = Color(0.334961, 0.334961, 0.334961, 1)
-[sub_resource type="StyleBoxFlat" id=169]
+[sub_resource type="StyleBoxFlat" id="169"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.334961, 0.334961, 0.334961, 1 )
+bg_color = Color(0.334961, 0.334961, 0.334961, 1)
-[sub_resource type="StyleBoxFlat" id=170]
+[sub_resource type="StyleBoxFlat" id="170"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 )
-
-[sub_resource type="Image" id=226]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 64
-}
-
-[sub_resource type="ImageTexture" id=172]
-flags = 0
-flags = 0
-image = SubResource( 226 )
-size = Vector2( 64, 8 )
+bg_color = Color(0.0679686, 0.0679686, 0.0679686, 1)
-[sub_resource type="Image" id=227]
-data = {
-"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=174]
-flags = 0
-flags = 0
-image = SubResource( 227 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="StyleBoxTexture" id=175]
-texture = SubResource( 174 )
-region_rect = Rect2( 0, 0, 8, 8 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=176]
+[sub_resource type="StyleBoxFlat" id="176"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+bg_color = Color(0.113281, 0.113281, 0.113281, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.113281, 0.113281, 0.113281, 1 )
+border_color = Color(0.113281, 0.113281, 0.113281, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
[resource]
resource_name = "Dark"
-default_font = ExtResource( 1 )
+default_font = ExtResource("7_q8bkb")
+default_font_size = 16
BoxContainer/constants/separation = 4
-Button/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-Button/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-Button/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
-Button/colors/icon_color_pressed = Color( 0.211961, 0.45549, 0.613333, 1 )
-Button/constants/hseparation = 2
-Button/fonts/font = ExtResource( 1 )
-Button/styles/disabled = SubResource( 2 )
-Button/styles/focus = SubResource( 3 )
-Button/styles/hover = SubResource( 4 )
-Button/styles/normal = SubResource( 5 )
-Button/styles/pressed = SubResource( 6 )
-CheckBox/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckBox/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 )
-CheckBox/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
-CheckBox/constants/check_vadjust = 0
-CheckBox/constants/hseparation = 4
-CheckBox/fonts/font = ExtResource( 1 )
-CheckBox/icons/checked = SubResource( 8 )
-CheckBox/icons/radio_checked = SubResource( 10 )
-CheckBox/icons/radio_unchecked = SubResource( 12 )
-CheckBox/icons/unchecked = SubResource( 14 )
-CheckBox/styles/disabled = SubResource( 15 )
-CheckBox/styles/focus = null
-CheckBox/styles/hover = SubResource( 15 )
-CheckBox/styles/hover_pressed = SubResource( 16 )
-CheckBox/styles/normal = SubResource( 15 )
-CheckBox/styles/pressed = SubResource( 15 )
-CheckButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-CheckButton/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 )
-CheckButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+Button/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+Button/colors/font_pressed_color = Color(0.184314, 0.396078, 0.533333, 1)
+Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
+Button/colors/icon_color_pressed = Color(0.211961, 0.45549, 0.613333, 1)
+Button/styles/disabled = SubResource("23")
+Button/styles/focus = SubResource("23")
+Button/styles/hover = SubResource("23")
+Button/styles/normal = SubResource("23")
+Button/styles/pressed = SubResource("StyleBoxFlat_t0f5f")
+CheckBox/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckBox/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1)
+CheckBox/colors/font_color_hover_pressed = Color(1, 1, 1, 1)
+CheckBox/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1)
+CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
+CheckBox/styles/disabled = SubResource("15")
+CheckBox/styles/hover = SubResource("15")
+CheckBox/styles/normal = SubResource("15")
+CheckBox/styles/pressed = SubResource("15")
+CheckButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckButton/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1)
+CheckButton/colors/font_color_hover_pressed = Color(1, 1, 1, 1)
+CheckButton/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1)
+CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckButton/constants/check_vadjust = 0
CheckButton/constants/hseparation = 4
-CheckButton/fonts/font = ExtResource( 1 )
-CheckButton/icons/off = SubResource( 18 )
-CheckButton/icons/off_disabled = SubResource( 20 )
-CheckButton/icons/on = SubResource( 22 )
-CheckButton/icons/on_disabled = SubResource( 20 )
-CheckButton/styles/disabled = SubResource( 23 )
-CheckButton/styles/focus = SubResource( 24 )
-CheckButton/styles/hover = SubResource( 23 )
-CheckButton/styles/hover_pressed = SubResource( 24 )
-CheckButton/styles/normal = SubResource( 23 )
-CheckButton/styles/pressed = SubResource( 23 )
-CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
+CheckButton/styles/disabled = SubResource("23")
+CheckButton/styles/focus = SubResource("24")
+CheckButton/styles/hover = SubResource("23")
+CheckButton/styles/normal = SubResource("23")
+CheckButton/styles/pressed = SubResource("23")
+CollapsibleContainer/icons/arrow_normal = ExtResource("6")
ColorPicker/constants/h_width = 30
ColorPicker/constants/label_width = 10
ColorPicker/constants/margin = 8
ColorPicker/constants/sv_height = 256
ColorPicker/constants/sv_width = 256
-ColorPicker/icons/add_preset = SubResource( 26 )
-ColorPicker/icons/color_hue = null
-ColorPicker/icons/color_sample = null
-ColorPicker/icons/overbright_indicator = SubResource( 28 )
-ColorPicker/icons/preset_bg = SubResource( 30 )
-ColorPicker/icons/screen_picker = SubResource( 32 )
-ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 )
-ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 )
+ColorPickerButton/colors/font_color = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3)
+ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1)
ColorPickerButton/constants/hseparation = 2
-ColorPickerButton/fonts/font = ExtResource( 1 )
-ColorPickerButton/icons/bg = SubResource( 30 )
ColorPickerButton/styles/disabled = null
ColorPickerButton/styles/focus = null
-ColorPickerButton/styles/hover = SubResource( 33 )
-ColorPickerButton/styles/normal = SubResource( 34 )
-ColorPickerButton/styles/pressed = SubResource( 35 )
+ColorPickerButton/styles/hover = SubResource("33")
+ColorPickerButton/styles/normal = SubResource("34")
+ColorPickerButton/styles/pressed = SubResource("35")
Dialogs/constants/button_margin = 32
Dialogs/constants/margin = 8
-FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 )
-FileDialog/colors/folder_icon_modulate = Color( 0.42902, 0.577255, 0.673333, 1 )
-FileDialog/icons/folder = SubResource( 37 )
-FileDialog/icons/parent_folder = SubResource( 39 )
-FileDialog/icons/reload = SubResource( 41 )
-FileDialog/icons/toggle_hidden = SubResource( 43 )
-GraphEdit/colors/activity = Color( 0.184314, 0.396078, 0.533333, 1 )
-GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 )
-GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 )
-GraphEdit/colors/selection_fill = Color( 0.184314, 0.396078, 0.533333, 0.3 )
-GraphEdit/colors/selection_stroke = Color( 0.184314, 0.396078, 0.533333, 0.8 )
+FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3)
+FileDialog/colors/folder_icon_modulate = Color(0.42902, 0.577255, 0.673333, 1)
+GraphEdit/colors/activity = Color(0.184314, 0.396078, 0.533333, 1)
+GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15)
+GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07)
+GraphEdit/colors/selection_fill = Color(0.184314, 0.396078, 0.533333, 0.3)
+GraphEdit/colors/selection_stroke = Color(0.184314, 0.396078, 0.533333, 0.8)
GraphEdit/constants/bezier_len_neg = 160
GraphEdit/constants/bezier_len_pos = 80
-GraphEdit/icons/minus = SubResource( 45 )
-GraphEdit/icons/more = SubResource( 47 )
-GraphEdit/icons/reset = SubResource( 49 )
-GraphEdit/icons/snap = SubResource( 51 )
-GraphEdit/styles/bg = SubResource( 52 )
-GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/title_color = Color( 1, 1, 1, 1 )
+GraphEdit/styles/bg = SubResource("52")
+GraphNode/colors/close_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/title_color = Color(1, 1, 1, 1)
GraphNode/constants/close_h_offset = 20
GraphNode/constants/close_offset = 20
GraphNode/constants/port_offset = 14
GraphNode/constants/separation = 1
GraphNode/constants/title_h_offset = -16
GraphNode/constants/title_offset = 20
-GraphNode/icons/close = SubResource( 54 )
-GraphNode/icons/port = SubResource( 56 )
-GraphNode/icons/resizer = SubResource( 58 )
-GraphNode/styles/breakpoint = SubResource( 59 )
-GraphNode/styles/comment = SubResource( 60 )
-GraphNode/styles/commentfocus = SubResource( 61 )
-GraphNode/styles/frame = SubResource( 62 )
-GraphNode/styles/position = SubResource( 63 )
-GraphNode/styles/selectedframe = SubResource( 64 )
-GraphNode/styles/state_machine_frame = SubResource( 65 )
-GraphNode/styles/state_machine_selectedframe = SubResource( 66 )
+GraphNode/styles/breakpoint = SubResource("59")
+GraphNode/styles/comment = SubResource("60")
+GraphNode/styles/commentfocus = SubResource("61")
+GraphNode/styles/frame = SubResource("62")
+GraphNode/styles/position = SubResource("63")
+GraphNode/styles/selectedframe = SubResource("64")
+GraphNode/styles/state_machine_frame = SubResource("65")
+GraphNode/styles/state_machine_selectedframe = SubResource("66")
GridContainer/constants/hseparation = 4
GridContainer/constants/vseparation = 4
HBoxContainer/constants/separation = 4
-HScrollBar/icons/decrement = SubResource( 67 )
-HScrollBar/icons/decrement_highlight = SubResource( 67 )
-HScrollBar/icons/increment = SubResource( 67 )
-HScrollBar/icons/increment_highlight = SubResource( 67 )
-HScrollBar/styles/grabber = SubResource( 70 )
-HScrollBar/styles/grabber_highlight = SubResource( 73 )
-HScrollBar/styles/grabber_pressed = SubResource( 76 )
-HScrollBar/styles/scroll = SubResource( 79 )
-HScrollBar/styles/scroll_focus = SubResource( 80 )
HSeparator/constants/separation = 4
-HSeparator/styles/separator = SubResource( 81 )
-HSlider/icons/grabber = SubResource( 83 )
-HSlider/icons/grabber_disabled = null
-HSlider/icons/grabber_highlight = SubResource( 85 )
-HSlider/icons/tick = null
-HSlider/styles/focus = null
-HSlider/styles/grabber_area = SubResource( 86 )
-HSlider/styles/grabber_area_highlight = SubResource( 87 )
-HSlider/styles/grabber_disabled = null
-HSlider/styles/grabber_highlight = null
-HSlider/styles/slider = SubResource( 88 )
+HSeparator/styles/separator = SubResource("81")
+HSlider/styles/grabber_area = SubResource("86")
+HSlider/styles/grabber_area_highlight = SubResource("87")
+HSlider/styles/slider = SubResource("88")
HSplitContainer/constants/autohide = 1
HSplitContainer/constants/separation = 8
-HSplitContainer/icons/grabber = SubResource( 90 )
-HSplitContainer/styles/bg = SubResource( 91 )
-Header/base_type = "Label"
-Header/colors/font_color = Color( 0.85, 0.85, 0.85, 1 )
-Header/fonts/font = ExtResource( 2 )
-Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 )
-ItemList/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 )
-ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 )
+HeaderSmall/font_sizes/font_size = 18
+Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1)
+ItemList/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+ItemList/colors/font_color_selected = Color(1, 1, 1, 1)
+ItemList/colors/guide_color = Color(1, 1, 1, 0.05)
ItemList/constants/hseparation = 3
ItemList/constants/icon_margin = 4
ItemList/constants/line_separation = 3
ItemList/constants/vseparation = 3
-ItemList/fonts/font = ExtResource( 1 )
-ItemList/styles/bg = SubResource( 92 )
-ItemList/styles/bg_focus = SubResource( 93 )
-ItemList/styles/cursor = SubResource( 94 )
-ItemList/styles/cursor_unfocused = SubResource( 94 )
-ItemList/styles/selected = SubResource( 95 )
-ItemList/styles/selected_focus = SubResource( 96 )
-Label/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-Label/colors/font_color_shadow = Color( 0, 0, 0, 0 )
-Label/colors/font_outline_modulate = Color( 1, 1, 1, 1 )
+ItemList/styles/bg = SubResource("92")
+ItemList/styles/bg_focus = SubResource("93")
+ItemList/styles/cursor = SubResource("94")
+ItemList/styles/cursor_unfocused = SubResource("94")
+ItemList/styles/selected = SubResource("95")
+ItemList/styles/selected_focus = SubResource("96")
+Label/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+Label/colors/font_color_shadow = Color(0, 0, 0, 0)
+Label/colors/font_outline_modulate = Color(1, 1, 1, 1)
Label/constants/line_spacing = 3
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/fonts/font = ExtResource( 1 )
-Label/styles/normal = SubResource( 97 )
-LineEdit/colors/clear_button_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-LineEdit/colors/clear_button_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-LineEdit/colors/cursor_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-LineEdit/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 )
-LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 )
-LineEdit/colors/selection_color = Color( 0.184314, 0.396078, 0.533333, 0.4 )
+Label/styles/normal = SubResource("97")
+LineEdit/colors/clear_button_color = Color(0.77832, 0.77832, 0.77832, 1)
+LineEdit/colors/clear_button_color_pressed = Color(0.184314, 0.396078, 0.533333, 1)
+LineEdit/colors/cursor_color = Color(0.77832, 0.77832, 0.77832, 1)
+LineEdit/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+LineEdit/colors/font_color_selected = Color(1, 1, 1, 1)
+LineEdit/colors/read_only = Color(1, 1, 1, 0.3)
+LineEdit/colors/selection_color = Color(0.184314, 0.396078, 0.533333, 0.4)
LineEdit/constants/minimum_spaces = 12
-LineEdit/fonts/font = ExtResource( 1 )
-LineEdit/icons/clear = SubResource( 99 )
-LineEdit/styles/focus = SubResource( 3 )
-LineEdit/styles/normal = SubResource( 5 )
-LineEdit/styles/read_only = SubResource( 2 )
-LinkButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-LinkButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-LinkButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-LinkButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-LinkButton/styles/focus = SubResource( 97 )
+LineEdit/styles/focus = SubResource("3")
+LineEdit/styles/normal = SubResource("5")
+LineEdit/styles/read_only = SubResource("2")
+LinkButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+LinkButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+LinkButton/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1)
+LinkButton/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1)
+LinkButton/styles/focus = SubResource("97")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
-MenuButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-MenuButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 )
+MenuButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+MenuButton/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1)
+MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1)
MenuButton/constants/hseparation = 3
-MenuButton/fonts/font = ExtResource( 1 )
-MenuButton/styles/disabled = SubResource( 23 )
-MenuButton/styles/focus = SubResource( 23 )
-MenuButton/styles/hover = SubResource( 23 )
-MenuButton/styles/normal = SubResource( 23 )
-MenuButton/styles/pressed = SubResource( 23 )
-Misc/colors/clear_color = Color( 0.141176, 0.141176, 0.141176, 1 )
-OptionButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-OptionButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-OptionButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+MenuButton/styles/disabled = SubResource("23")
+MenuButton/styles/focus = SubResource("23")
+MenuButton/styles/hover = SubResource("23")
+MenuButton/styles/normal = SubResource("23")
+MenuButton/styles/pressed = SubResource("23")
+Misc/colors/clear_color = Color(0.141176, 0.141176, 0.141176, 1)
+OptionButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+OptionButton/colors/font_color_hover = Color(0.866667, 0.866667, 0.866667, 1)
+OptionButton/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1)
+OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/hseparation = 4
OptionButton/constants/modulate_arrow = 1
-OptionButton/fonts/font = ExtResource( 1 )
-OptionButton/icons/arrow = SubResource( 101 )
-OptionButton/styles/disabled = SubResource( 2 )
-OptionButton/styles/focus = SubResource( 3 )
-OptionButton/styles/hover = SubResource( 4 )
-OptionButton/styles/normal = SubResource( 5 )
-OptionButton/styles/pressed = SubResource( 6 )
-Panel/styles/panel = SubResource( 103 )
+OptionButton/styles/disabled = SubResource("2")
+OptionButton/styles/focus = SubResource("3")
+OptionButton/styles/hover = SubResource("4")
+OptionButton/styles/normal = SubResource("5")
+OptionButton/styles/pressed = SubResource("6")
+Panel/styles/panel = SubResource("103")
Panel/styles/panelf = null
Panel/styles/panelnc = null
-PanelContainer/styles/panel = SubResource( 104 )
-PopupDialog/styles/panel = SubResource( 105 )
-PopupMenu/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
+PanelContainer/styles/panel = SubResource("104")
+Popup/styles/panel = SubResource("105")
+PopupMenu/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1)
PopupMenu/constants/hseparation = 4
PopupMenu/constants/vseparation = 5
-PopupMenu/fonts/font = ExtResource( 1 )
-PopupMenu/icons/checked = SubResource( 8 )
-PopupMenu/icons/radio_checked = SubResource( 10 )
-PopupMenu/icons/radio_unchecked = SubResource( 12 )
-PopupMenu/icons/submenu = SubResource( 107 )
-PopupMenu/icons/unchecked = SubResource( 14 )
-PopupMenu/icons/visibility_hidden = SubResource( 109 )
-PopupMenu/icons/visibility_visible = SubResource( 43 )
-PopupMenu/icons/visibility_xray = SubResource( 111 )
-PopupMenu/styles/disabled = SubResource( 23 )
-PopupMenu/styles/focus = SubResource( 23 )
-PopupMenu/styles/hover = SubResource( 112 )
-PopupMenu/styles/labeled_separator_left = SubResource( 113 )
-PopupMenu/styles/labeled_separator_right = SubResource( 114 )
-PopupMenu/styles/normal = SubResource( 23 )
-PopupMenu/styles/panel = SubResource( 105 )
+PopupMenu/styles/disabled = SubResource("23")
+PopupMenu/styles/focus = SubResource("23")
+PopupMenu/styles/hover = SubResource("112")
+PopupMenu/styles/labeled_separator_left = SubResource("113")
+PopupMenu/styles/labeled_separator_right = SubResource("114")
+PopupMenu/styles/normal = SubResource("23")
+PopupMenu/styles/panel = SubResource("105")
PopupMenu/styles/panel_disabled = null
-PopupMenu/styles/pressed = SubResource( 23 )
-PopupMenu/styles/separator = SubResource( 115 )
-PopupPanel/styles/panel = SubResource( 105 )
-ProgressBar/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-ProgressBar/styles/bg = SubResource( 118 )
-ProgressBar/styles/fg = SubResource( 121 )
-RichTextLabel/colors/default_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+PopupMenu/styles/pressed = SubResource("23")
+PopupMenu/styles/separator = SubResource("115")
+PopupPanel/styles/panel = SubResource("105")
+ProgressBar/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+RichTextLabel/colors/default_color = Color(0.77832, 0.77832, 0.77832, 1)
+RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0)
RichTextLabel/constants/shadow_as_outline = 0
RichTextLabel/constants/shadow_offset_x = 1
RichTextLabel/constants/shadow_offset_y = 1
-RichTextLabel/styles/focus = SubResource( 123 )
-RichTextLabel/styles/normal = SubResource( 52 )
-RulerButton/base_type = "Button"
-RulerButton/styles/focus = SubResource( 1 )
-RulerButton/styles/hover = SubResource( 1 )
-RulerButton/styles/normal = SubResource( 1 )
-RulerButton/styles/pressed = SubResource( 1 )
-SpinBox/icons/updown = SubResource( 125 )
-TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-TabContainer/colors/font_color_fg = Color( 0.77832, 0.77832, 0.77832, 1 )
+RichTextLabel/styles/focus = SubResource("123")
+RichTextLabel/styles/normal = SubResource("52")
+RulerButton/base_type = &"Button"
+RulerButton/styles/focus = SubResource("1")
+RulerButton/styles/hover = SubResource("1")
+RulerButton/styles/normal = SubResource("1")
+RulerButton/styles/pressed = SubResource("1")
+TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabBar/colors/font_color_fg = Color(0.77832, 0.77832, 0.77832, 1)
+TabBar/constants/hseparation = 4
+TabBar/constants/label_valign_bg = 2
+TabBar/constants/label_valign_fg = 0
+TabBar/constants/top_margin = 24
+TabBar/styles/button = SubResource("23")
+TabBar/styles/button_pressed = SubResource("23")
+TabBar/styles/panel = SubResource("142")
+TabBar/styles/tab_bg = SubResource("139")
+TabBar/styles/tab_disabled = SubResource("140")
+TabBar/styles/tab_fg = SubResource("141")
+TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabContainer/colors/font_color_fg = Color(0.77832, 0.77832, 0.77832, 1)
TabContainer/constants/hseparation = 4
TabContainer/constants/label_valign_bg = 2
TabContainer/constants/label_valign_fg = 0
TabContainer/constants/side_margin = 0
TabContainer/constants/top_margin = 24
-TabContainer/fonts/font = ExtResource( 1 )
-TabContainer/icons/decrement = SubResource( 127 )
-TabContainer/icons/decrement_highlight = SubResource( 129 )
-TabContainer/icons/increment = SubResource( 131 )
-TabContainer/icons/increment_highlight = SubResource( 133 )
-TabContainer/icons/menu = SubResource( 135 )
-TabContainer/icons/menu_highlight = SubResource( 137 )
-TabContainer/styles/panel = SubResource( 138 )
-TabContainer/styles/tab_bg = SubResource( 139 )
-TabContainer/styles/tab_disabled = SubResource( 140 )
-TabContainer/styles/tab_fg = SubResource( 141 )
-Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-Tabs/colors/font_color_fg = Color( 0.77832, 0.77832, 0.77832, 1 )
-Tabs/constants/hseparation = 4
-Tabs/constants/label_valign_bg = 2
-Tabs/constants/label_valign_fg = 0
-Tabs/constants/top_margin = 24
-Tabs/fonts/font = ExtResource( 1 )
-Tabs/icons/close = SubResource( 99 )
-Tabs/icons/decrement = SubResource( 127 )
-Tabs/icons/decrement_highlight = SubResource( 129 )
-Tabs/icons/increment = SubResource( 131 )
-Tabs/icons/increment_highlight = SubResource( 133 )
-Tabs/styles/button = SubResource( 23 )
-Tabs/styles/button_pressed = SubResource( 23 )
-Tabs/styles/panel = SubResource( 142 )
-Tabs/styles/tab_bg = SubResource( 139 )
-Tabs/styles/tab_disabled = SubResource( 140 )
-Tabs/styles/tab_fg = SubResource( 141 )
-TextEdit/colors/background_color = Color( 0, 0, 0, 0 )
-TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 )
-TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 )
-TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 )
-TextEdit/colors/caret_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 )
-TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 )
-TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 )
-TextEdit/colors/completion_font_color = Color( 0.666667, 0.666667, 0.666667, 1 )
-TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 )
-TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 )
-TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 )
-TextEdit/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 )
-TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 )
-TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 )
-TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 )
-TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 )
-TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 )
-TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 )
-TextEdit/colors/selection_color = Color( 0.184314, 0.396078, 0.533333, 0.4 )
-TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 )
-TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 )
+TabContainer/styles/panel = SubResource("138")
+TabContainer/styles/tab_bg = SubResource("139")
+TabContainer/styles/tab_disabled = SubResource("140")
+TabContainer/styles/tab_fg = SubResource("141")
+TextEdit/colors/background_color = Color(0, 0, 0, 0)
+TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1)
+TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2)
+TextEdit/colors/caret_background_color = Color(0, 0, 0, 1)
+TextEdit/colors/caret_color = Color(0.77832, 0.77832, 0.77832, 1)
+TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8)
+TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1)
+TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412)
+TextEdit/colors/completion_font_color = Color(0.666667, 0.666667, 0.666667, 1)
+TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1)
+TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1)
+TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8)
+TextEdit/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+TextEdit/colors/font_color_selected = Color(0, 0, 0, 1)
+TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1)
+TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4)
+TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4)
+TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1)
+TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1)
+TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6)
+TextEdit/colors/selection_color = Color(0.184314, 0.396078, 0.533333, 0.4)
+TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1)
+TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15)
TextEdit/constants/completion_lines = 7
TextEdit/constants/completion_max_width = 50
TextEdit/constants/completion_scroll_width = 3
TextEdit/constants/line_spacing = 4
-TextEdit/fonts/font = ExtResource( 1 )
-TextEdit/icons/fold = SubResource( 144 )
-TextEdit/icons/folded = SubResource( 146 )
-TextEdit/icons/space = SubResource( 148 )
-TextEdit/icons/tab = SubResource( 150 )
TextEdit/styles/completion = null
-TextEdit/styles/focus = SubResource( 4 )
-TextEdit/styles/normal = SubResource( 5 )
-TextEdit/styles/read_only = SubResource( 2 )
-ToolButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-ToolButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 )
-ToolButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 )
-ToolButton/styles/disabled = SubResource( 23 )
-ToolButton/styles/focus = SubResource( 23 )
-ToolButton/styles/hover = SubResource( 23 )
-ToolButton/styles/normal = SubResource( 23 )
-ToolButton/styles/pressed = SubResource( 23 )
-TooltipLabel/colors/font_color = Color( 0.22168, 0.22168, 0.22168, 1 )
-TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 )
+TextEdit/styles/focus = SubResource("4")
+TextEdit/styles/normal = SubResource("5")
+TextEdit/styles/read_only = SubResource("2")
+TooltipLabel/colors/font_color = Color(0.22168, 0.22168, 0.22168, 1)
+TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1)
TooltipLabel/constants/shadow_offset_x = 1
TooltipLabel/constants/shadow_offset_y = 1
-TooltipLabel/fonts/font = ExtResource( 1 )
-TooltipPanel/styles/panel = SubResource( 151 )
-TopMenuPanel/base_type = "Panel"
-TopMenuPanel/styles/panel = SubResource( 102 )
-Tree/colors/cursor_color = Color( 0, 0, 0, 1 )
-Tree/colors/custom_button_font_highlight = Color( 0.866992, 0.866992, 0.866992, 1 )
-Tree/colors/drop_position_color = Color( 0.184314, 0.396078, 0.533333, 1 )
-Tree/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-Tree/colors/font_color_selected = Color( 1, 1, 1, 1 )
-Tree/colors/guide_color = Color( 1, 1, 1, 0.05 )
-Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 )
-Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 )
-Tree/colors/title_button_color = Color( 0.77832, 0.77832, 0.77832, 1 )
+TooltipPanel/styles/panel = SubResource("151")
+TopMenuPanel/base_type = &"Panel"
+TopMenuPanel/styles/panel = SubResource("102")
+Tree/colors/cursor_color = Color(0, 0, 0, 1)
+Tree/colors/custom_button_font_highlight = Color(0.866992, 0.866992, 0.866992, 1)
+Tree/colors/drop_position_color = Color(0.184314, 0.396078, 0.533333, 1)
+Tree/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1)
+Tree/colors/font_color_selected = Color(1, 1, 1, 1)
+Tree/colors/guide_color = Color(1, 1, 1, 0.05)
+Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1)
+Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8)
+Tree/colors/title_button_color = Color(0.77832, 0.77832, 0.77832, 1)
Tree/constants/button_margin = 4
Tree/constants/draw_guides = 0
Tree/constants/draw_relationship_lines = 1
@@ -1872,63 +849,39 @@ Tree/constants/item_margin = 12
Tree/constants/scroll_border = 40
Tree/constants/scroll_speed = 12
Tree/constants/vseparation = 4
-Tree/fonts/font = ExtResource( 1 )
-Tree/fonts/title_button_font = ExtResource( 1 )
-Tree/icons/arrow = SubResource( 144 )
-Tree/icons/arrow_collapsed = SubResource( 146 )
-Tree/icons/checked = SubResource( 8 )
-Tree/icons/select_arrow = SubResource( 153 )
-Tree/icons/unchecked = SubResource( 14 )
-Tree/icons/updown = SubResource( 155 )
-Tree/styles/bg = SubResource( 52 )
-Tree/styles/bg_focus = SubResource( 93 )
-Tree/styles/button_pressed = SubResource( 156 )
-Tree/styles/cursor = SubResource( 157 )
-Tree/styles/cursor_unfocused = SubResource( 157 )
-Tree/styles/custom_button = SubResource( 158 )
-Tree/styles/custom_button_hover = SubResource( 5 )
-Tree/styles/custom_button_pressed = SubResource( 159 )
-Tree/styles/hover = SubResource( 160 )
-Tree/styles/selected = SubResource( 95 )
-Tree/styles/selected_focus = SubResource( 96 )
-Tree/styles/title_button_hover = SubResource( 161 )
-Tree/styles/title_button_normal = SubResource( 161 )
-Tree/styles/title_button_pressed = SubResource( 161 )
+Tree/styles/bg = SubResource("52")
+Tree/styles/bg_focus = SubResource("93")
+Tree/styles/button_pressed = SubResource("156")
+Tree/styles/cursor = SubResource("157")
+Tree/styles/cursor_unfocused = SubResource("157")
+Tree/styles/custom_button = SubResource("158")
+Tree/styles/custom_button_hover = SubResource("5")
+Tree/styles/custom_button_pressed = SubResource("159")
+Tree/styles/hover = SubResource("160")
+Tree/styles/selected = SubResource("95")
+Tree/styles/selected_focus = SubResource("96")
+Tree/styles/title_button_hover = SubResource("161")
+Tree/styles/title_button_normal = SubResource("161")
+Tree/styles/title_button_pressed = SubResource("161")
VBoxContainer/constants/separation = 4
-VScrollBar/icons/decrement = SubResource( 67 )
-VScrollBar/icons/decrement_highlight = SubResource( 67 )
-VScrollBar/icons/increment = SubResource( 67 )
-VScrollBar/icons/increment_highlight = SubResource( 67 )
-VScrollBar/styles/grabber = SubResource( 162 )
-VScrollBar/styles/grabber_highlight = SubResource( 163 )
-VScrollBar/styles/grabber_pressed = SubResource( 164 )
-VScrollBar/styles/scroll = SubResource( 165 )
-VScrollBar/styles/scroll_focus = SubResource( 166 )
VSeparator/constants/separation = 4
-VSeparator/styles/separator = SubResource( 167 )
-VSlider/icons/grabber = SubResource( 83 )
-VSlider/icons/grabber_highlight = SubResource( 85 )
-VSlider/styles/grabber_area = SubResource( 168 )
-VSlider/styles/grabber_area_highlight = SubResource( 169 )
-VSlider/styles/slider = SubResource( 170 )
+VSeparator/styles/separator = SubResource("167")
+VSlider/styles/grabber_area = SubResource("168")
+VSlider/styles/grabber_area_highlight = SubResource("169")
+VSlider/styles/slider = SubResource("170")
VSplitContainer/constants/autohide = 1
VSplitContainer/constants/separation = 8
-VSplitContainer/icons/grabber = SubResource( 172 )
-VSplitContainer/styles/bg = SubResource( 175 )
-ValueSlider/colors/progress_color = Color( 0.333333, 0.333333, 0.333333, 1 )
-ValueSlider/colors/under_color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
-ValueSlider/icons/arrow_hover = ExtResource( 4 )
-ValueSlider/icons/arrow_normal = ExtResource( 6 )
-ValueSlider/icons/arrow_pressed = ExtResource( 5 )
+ValueSlider/colors/progress_color = Color(0.333333, 0.333333, 0.333333, 1)
+ValueSlider/colors/under_color = Color(0.0666667, 0.0666667, 0.0666667, 1)
+ValueSlider/icons/arrow_hover = ExtResource("4")
+ValueSlider/icons/arrow_normal = ExtResource("6")
+ValueSlider/icons/arrow_pressed = ExtResource("5")
ValueSlider/icons/texture_over = null
-ValueSlider/icons/texture_progress = ExtResource( 3 )
-ValueSlider/icons/texture_under = ExtResource( 3 )
-WindowDialog/colors/title_color = Color( 0.77832, 0.77832, 0.77832, 1 )
-WindowDialog/constants/close_h_ofs = 22
-WindowDialog/constants/close_v_ofs = 20
-WindowDialog/constants/scaleborder_size = 4
-WindowDialog/constants/title_height = 24
-WindowDialog/fonts/title_font = ExtResource( 1 )
-WindowDialog/icons/close = SubResource( 99 )
-WindowDialog/icons/close_highlight = SubResource( 99 )
-WindowDialog/styles/panel = SubResource( 176 )
+ValueSlider/icons/texture_progress = ExtResource("3")
+ValueSlider/icons/texture_under = ExtResource("3")
+Window/colors/title_color = Color(0.77832, 0.77832, 0.77832, 1)
+Window/constants/close_h_ofs = 22
+Window/constants/close_v_ofs = 20
+Window/constants/scaleborder_size = 4
+Window/constants/title_height = 24
+Window/styles/panel = SubResource("176")
diff --git a/assets/themes/gray/theme.tres b/assets/themes/gray/theme.tres
index 6fbbbc0f52b..3730f74c72f 100644
--- a/assets/themes/gray/theme.tres
+++ b/assets/themes/gray/theme.tres
@@ -1,1876 +1,859 @@
-[gd_resource type="Theme" load_steps=182 format=2]
+[gd_resource type="Theme" load_steps=64 format=3 uid="uid://bcfsxuu6eykiq"]
-[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
-[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="3"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_3yr54"]
+[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="4"]
+[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"]
-[sub_resource type="StyleBoxFlat" id=2]
+[sub_resource type="StyleBoxFlat" id="23"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.352941, 0.352941, 0.352941, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=3]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.00392157, 0.454902, 0.741176, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=4]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.544118, 0.544118, 0.544118, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=5]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=6]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.00392157, 0.454902, 0.741176, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="Image" id=176]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 243, 223, 223, 223, 105, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 104, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 225, 225, 225, 51, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 48, 224, 224, 224, 66, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 103, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 217, 217, 217, 48, 223, 223, 223, 178, 222, 222, 222, 231, 220, 220, 220, 74, 222, 222, 222, 102, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 194, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 219, 219, 219, 64, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 233, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 195, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 224, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 66, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=8]
-flags = 0
-flags = 0
-image = SubResource( 176 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=177]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 221, 221, 221, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 217, 217, 217, 68, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 179, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 223, 223, 223, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=10]
-flags = 0
-flags = 0
-image = SubResource( 177 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=178]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=12]
-flags = 0
-flags = 0
-image = SubResource( 178 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=179]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=14]
-flags = 0
-flags = 0
-image = SubResource( 179 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=15]
-content_margin_left = 4.0
-content_margin_right = 4.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
draw_center = false
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
-[sub_resource type="StyleBoxFlat" id=16]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
-
-[sub_resource type="Image" id=180]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 219, 219, 219, 94, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 220, 220, 220, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=18]
-flags = 0
-flags = 0
-image = SubResource( 180 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="Image" id=181]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=20]
-flags = 4
-flags = 4
-image = SubResource( 181 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=182]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 66, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 223, 220, 220, 220, 66, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 223, 223, 223, 65, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 217, 217, 217, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 12, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 223, 223, 223, 222, 212, 212, 212, 12, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 120, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 120, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 75, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 0, 221, 221, 221, 75, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 214, 214, 214, 25, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 216, 216, 216, 20, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 71, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 121, 223, 223, 223, 0, 215, 215, 215, 0, 215, 215, 215, 13, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 222, 222, 222, 223, 215, 215, 215, 13, 215, 215, 215, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 66, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 254, 220, 220, 220, 66, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 220, 220, 220, 66, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 220, 220, 220, 66, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=22]
-flags = 0
-flags = 0
-image = SubResource( 182 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="StyleBoxFlat" id=23]
-content_margin_left = 6.0
-content_margin_right = 6.0
+[sub_resource type="StyleBoxFlat" id="15"]
+content_margin_left = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
draw_center = false
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
-
-[sub_resource type="Image" id=183]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
-[sub_resource type="ImageTexture" id=25]
-flags = 0
-flags = 0
-image = SubResource( 183 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="16"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
-[sub_resource type="Image" id=184]
-data = {
-"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=27]
-flags = 0
-flags = 0
-image = SubResource( 184 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=185]
-data = {
-"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=29]
-flags = 0
-flags = 0
-image = SubResource( 185 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=186]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 218, 222, 222, 222, 70, 222, 222, 222, 70, 223, 223, 223, 218, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 65, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 65, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=31]
-flags = 0
-flags = 0
-image = SubResource( 186 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=32]
-bg_color = Color( 0.768627, 0.768627, 0.768627, 1 )
+[sub_resource type="StyleBoxFlat" id="32"]
+bg_color = Color(0.768627, 0.768627, 0.768627, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=33]
+[sub_resource type="StyleBoxFlat" id="33"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=34]
-bg_color = Color( 0.2, 0.2, 0.2, 1 )
+[sub_resource type="StyleBoxFlat" id="34"]
+bg_color = Color(0.2, 0.2, 0.2, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=187]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=36]
-flags = 0
-flags = 0
-image = SubResource( 187 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=188]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 199, 222, 222, 222, 198, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 218, 218, 218, 21, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 216, 216, 216, 20, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 216, 216, 216, 20, 223, 223, 223, 209, 223, 223, 223, 254, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 251, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 193, 223, 223, 223, 254, 222, 222, 222, 206, 214, 214, 214, 19, 223, 223, 223, 254, 223, 223, 223, 249, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 193, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 192, 214, 214, 214, 19, 217, 217, 217, 0, 223, 223, 223, 254, 223, 223, 223, 249, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 192, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=38]
-flags = 0
-flags = 0
-image = SubResource( 188 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=189]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 98, 223, 223, 223, 177, 223, 223, 223, 228, 223, 223, 223, 228, 223, 223, 223, 177, 223, 223, 223, 98, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 23, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 185, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 215, 215, 215, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 174, 223, 223, 223, 254, 222, 222, 222, 87, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 87, 223, 223, 223, 254, 222, 222, 222, 174, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 147, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 161, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 212, 212, 212, 0, 212, 212, 212, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 214, 204, 204, 204, 10, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 178, 223, 223, 223, 0, 0, 0, 0, 0, 214, 214, 214, 0, 217, 217, 217, 34, 223, 223, 223, 240, 223, 223, 223, 245, 218, 218, 218, 42, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 96, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 221, 221, 221, 84, 223, 223, 223, 97, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 186, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 228, 223, 223, 223, 177, 221, 221, 221, 99, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=40]
-flags = 0
-flags = 0
-image = SubResource( 189 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=190]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 221, 221, 221, 0, 221, 221, 221, 92, 223, 223, 223, 185, 222, 222, 222, 231, 222, 222, 222, 231, 223, 223, 223, 186, 222, 222, 222, 95, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 218, 218, 218, 35, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 41, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 0, 223, 223, 223, 32, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 228, 218, 218, 218, 35, 194, 194, 194, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 213, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 217, 170, 170, 170, 3, 170, 170, 170, 0, 223, 223, 223, 0, 223, 223, 223, 89, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 87, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 200, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 87, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 93, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 24, 222, 222, 222, 0, 222, 222, 222, 198, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 198, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 19, 218, 218, 218, 0, 222, 222, 222, 199, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 199, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 254, 221, 221, 221, 84, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 201, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 224, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 222, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 196, 196, 196, 0, 223, 223, 223, 41, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 232, 223, 223, 223, 41, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 44, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 220, 220, 220, 44, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 127, 127, 127, 2, 223, 223, 223, 98, 222, 222, 222, 190, 223, 223, 223, 232, 223, 223, 223, 232, 222, 222, 222, 190, 223, 223, 223, 98, 127, 127, 127, 2, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=42]
-flags = 0
-flags = 0
-image = SubResource( 190 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=191]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=44]
-flags = 0
-flags = 0
-image = SubResource( 191 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=192]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=46]
-flags = 0
-flags = 0
-image = SubResource( 192 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=193]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=48]
-flags = 0
-flags = 0
-image = SubResource( 193 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=194]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 115, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 114, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 160, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 160, 255, 255, 255, 17, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 110, 255, 255, 255, 174, 255, 255, 255, 131, 255, 255, 255, 35, 255, 255, 255, 35, 255, 255, 255, 131, 255, 255, 255, 174, 255, 255, 255, 110, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 153, 255, 255, 255, 174, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 174, 255, 255, 255, 153, 255, 255, 255, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=50]
-flags = 0
-flags = 0
-image = SubResource( 194 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=51]
+[sub_resource type="StyleBoxFlat" id="51"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.235294, 0.235294, 0.235294, 1 )
-
-[sub_resource type="Image" id=195]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.235294, 0.235294, 0.235294, 1)
-[sub_resource type="ImageTexture" id=53]
-flags = 0
-flags = 0
-image = SubResource( 195 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=196]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 10,
-"mipmaps": false,
-"width": 10
-}
-
-[sub_resource type="ImageTexture" id=55]
-flags = 0
-flags = 0
-image = SubResource( 196 )
-size = Vector2( 10, 10 )
-
-[sub_resource type="Image" id=197]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=57]
-flags = 0
-flags = 0
-image = SubResource( 197 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=58]
+[sub_resource type="StyleBoxFlat" id="58"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.87, 0.4, 1 )
-shadow_color = Color( 1, 0.87, 0.4, 0.1 )
+border_color = Color(1, 0.87, 0.4, 1)
+shadow_color = Color(1, 0.87, 0.4, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=59]
+[sub_resource type="StyleBoxFlat" id="59"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.3 )
+bg_color = Color(0, 0, 0, 0.3)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=60]
+[sub_resource type="StyleBoxFlat" id="60"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.4 )
+bg_color = Color(0, 0, 0, 0.4)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=61]
+[sub_resource type="StyleBoxFlat" id="61"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=62]
+[sub_resource type="StyleBoxFlat" id="62"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.47, 0.42, 1 )
-shadow_color = Color( 1, 0.47, 0.42, 0.2 )
+border_color = Color(1, 0.47, 0.42, 1)
+shadow_color = Color(1, 0.47, 0.42, 0.2)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=63]
+[sub_resource type="StyleBoxFlat" id="63"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.00392157, 0.454902, 0.741176, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.00392157, 0.454902, 0.741176, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=64]
+[sub_resource type="StyleBoxFlat" id="64"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=65]
+[sub_resource type="StyleBoxFlat" id="65"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.00392157, 0.454902, 0.741176, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.00392157, 0.454902, 0.741176, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="ImageTexture" id=66]
-
-[sub_resource type="Image" id=198]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=68]
-flags = 0
-flags = 0
-image = SubResource( 198 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=69]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 68 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=199]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=71]
-flags = 0
-flags = 0
-image = SubResource( 199 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=72]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 71 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="Image" id=200]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxLine" id="80"]
+color = Color(1, 1, 1, 0.1)
-[sub_resource type="ImageTexture" id=74]
-flags = 0
-flags = 0
-image = SubResource( 200 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=75]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 74 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=201]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=77]
-flags = 0
-flags = 0
-image = SubResource( 201 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=78]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=79]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=80]
-color = Color( 1, 1, 1, 0.1 )
-
-[sub_resource type="Image" id=202]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 190, 190, 0, 210, 210, 210, 17, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 210, 210, 210, 17, 190, 190, 190, 0, 0, 0, 0, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 62, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 62, 170, 170, 170, 3, 170, 170, 170, 0, 216, 216, 216, 0, 216, 216, 216, 33, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 216, 216, 216, 33, 216, 216, 216, 0, 219, 219, 219, 0, 219, 219, 219, 50, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 219, 219, 219, 50, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 65, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 51, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 220, 220, 220, 51, 220, 220, 220, 0, 218, 218, 218, 0, 218, 218, 218, 35, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 218, 218, 218, 35, 218, 218, 218, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 63, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 191, 191, 191, 0, 212, 212, 212, 18, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 212, 212, 212, 18, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=82]
-flags = 0
-flags = 0
-image = SubResource( 202 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=203]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 63, 223, 223, 223, 221, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 222, 222, 222, 62, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 0, 0, 0, 1, 148, 148, 148, 0, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 222, 222, 222, 62, 215, 215, 215, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 220, 224, 224, 224, 255, 223, 223, 223, 114, 233, 233, 233, 0, 237, 237, 237, 0, 127, 127, 127, 0, 255, 255, 255, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 219, 208, 208, 208, 11, 208, 208, 208, 0, 222, 222, 222, 0, 222, 222, 222, 118, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 222, 222, 222, 118, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 123, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 223, 223, 223, 123, 223, 223, 223, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 222, 224, 224, 224, 255, 223, 223, 223, 112, 233, 233, 233, 0, 237, 237, 237, 0, 255, 255, 255, 0, 127, 127, 127, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 221, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 215, 215, 215, 0, 223, 223, 223, 64, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 148, 148, 148, 0, 0, 0, 0, 1, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=84]
-flags = 0
-flags = 0
-image = SubResource( 203 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=85]
+[sub_resource type="StyleBoxFlat" id="85"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.544118, 0.544118, 0.544118, 1 )
+bg_color = Color(0.544118, 0.544118, 0.544118, 1)
-[sub_resource type="StyleBoxFlat" id=86]
+[sub_resource type="StyleBoxFlat" id="86"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.544118, 0.544118, 0.544118, 1 )
+bg_color = Color(0.544118, 0.544118, 0.544118, 1)
-[sub_resource type="StyleBoxFlat" id=87]
+[sub_resource type="StyleBoxFlat" id="87"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.235294, 0.235294, 0.235294, 1 )
-
-[sub_resource type="Image" id=204]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 64,
-"mipmaps": false,
-"width": 8
-}
+bg_color = Color(0.235294, 0.235294, 0.235294, 1)
-[sub_resource type="ImageTexture" id=89]
-flags = 0
-flags = 0
-image = SubResource( 204 )
-size = Vector2( 8, 64 )
-
-[sub_resource type="StyleBoxTexture" id=90]
-texture = SubResource( 20 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=91]
+[sub_resource type="StyleBoxFlat" id="91"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.235294, 0.235294, 0.235294, 1 )
+border_color = Color(0.235294, 0.235294, 0.235294, 1)
-[sub_resource type="StyleBoxFlat" id=92]
+[sub_resource type="StyleBoxFlat" id="92"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.620098, 0.620098, 0.620098, 1 )
+border_color = Color(0.620098, 0.620098, 0.620098, 1)
-[sub_resource type="StyleBoxFlat" id=93]
+[sub_resource type="StyleBoxFlat" id="93"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.2 )
+border_color = Color(1, 1, 1, 0.2)
-[sub_resource type="StyleBoxFlat" id=94]
+[sub_resource type="StyleBoxFlat" id="94"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.392157, 0.392157, 0.392157, 1)
-[sub_resource type="StyleBoxFlat" id=95]
+[sub_resource type="StyleBoxFlat" id="95"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.392157, 0.392157, 0.392157, 1)
-[sub_resource type="StyleBoxEmpty" id=96]
+[sub_resource type="StyleBoxEmpty" id="96"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id=205]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="3"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.00392157, 0.454902, 0.741176, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=98]
-flags = 0
-flags = 0
-image = SubResource( 205 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="Image" id=206]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 121, 255, 255, 255, 151, 255, 255, 255, 15, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 149, 255, 255, 255, 125, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 142, 255, 255, 255, 199, 255, 255, 255, 163, 255, 255, 255, 15, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 144, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 163, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 15, 255, 255, 255, 14, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 166, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 155, 255, 255, 255, 157, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxFlat" id="2"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.352941, 0.352941, 0.352941, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=100]
-flags = 0
-flags = 0
-image = SubResource( 206 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxFlat" id="4"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.544118, 0.544118, 0.544118, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=102]
+[sub_resource type="StyleBoxFlat" id="6"]
content_margin_left = 6.0
+content_margin_top = 4.0
content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.00392157, 0.454902, 0.741176, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[sub_resource type="StyleBoxFlat" id="102"]
+content_margin_left = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
-[sub_resource type="StyleBoxFlat" id=103]
+[sub_resource type="StyleBoxFlat" id="103"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 2.0
+content_margin_right = 2.0
content_margin_bottom = 2.0
-bg_color = Color( 0.243137, 0.243137, 0.243137, 1 )
+bg_color = Color(0.243137, 0.243137, 0.243137, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=104]
+[sub_resource type="StyleBoxFlat" id="104"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.544118, 0.544118, 0.544118, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.544118, 0.544118, 0.544118, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="Image" id=207]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 197, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 190, 223, 223, 223, 254, 223, 223, 223, 210, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 214, 214, 214, 19, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 189, 223, 223, 223, 254, 223, 223, 223, 212, 220, 220, 220, 22, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 222, 222, 222, 198, 221, 221, 221, 23, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=106]
-flags = 0
-flags = 0
-image = SubResource( 207 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=208]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 222, 222, 222, 31, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 178, 223, 223, 223, 254, 223, 223, 223, 81, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 213, 0, 223, 223, 223, 81, 223, 223, 223, 254, 223, 223, 223, 177, 223, 223, 223, 0, 221, 221, 221, 0, 221, 221, 221, 84, 223, 223, 223, 254, 223, 223, 223, 204, 204, 204, 204, 5, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 204, 5, 223, 223, 223, 204, 223, 223, 223, 254, 221, 221, 221, 84, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 176, 204, 204, 204, 5, 213, 213, 213, 0, 220, 220, 220, 0, 220, 220, 220, 0, 213, 213, 213, 0, 204, 204, 204, 5, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 209, 0, 0, 0, 1, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 213, 223, 223, 223, 88, 220, 220, 220, 22, 220, 220, 220, 22, 223, 223, 223, 88, 222, 222, 222, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 214, 214, 214, 19, 214, 214, 214, 0, 198, 198, 198, 0, 198, 198, 198, 9, 223, 223, 223, 194, 222, 222, 222, 214, 222, 222, 222, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 215, 222, 222, 222, 214, 223, 223, 223, 194, 198, 198, 198, 9, 198, 198, 198, 0, 0, 0, 0, 0, 201, 201, 201, 0, 204, 204, 204, 10, 216, 216, 216, 20, 204, 204, 204, 5, 223, 223, 223, 105, 223, 223, 223, 187, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 187, 223, 223, 223, 105, 204, 204, 204, 5, 216, 216, 216, 20, 204, 204, 204, 10, 201, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 223, 223, 223, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=108]
-flags = 0
-flags = 0
-image = SubResource( 208 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=209]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 0, 219, 219, 219, 115, 223, 223, 223, 204, 223, 223, 223, 236, 223, 223, 223, 90, 223, 223, 223, 73, 220, 220, 220, 37, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 217, 217, 217, 47, 222, 222, 222, 222, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 16, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 218, 218, 218, 42, 222, 222, 222, 236, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 216, 216, 216, 33, 223, 223, 223, 88, 221, 221, 221, 100, 223, 223, 223, 89, 218, 218, 218, 14, 109, 109, 109, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 235, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 218, 218, 218, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 85, 0, 0, 0, 1, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 111, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 109, 217, 217, 217, 0, 221, 221, 221, 76, 223, 223, 223, 216, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 217, 217, 217, 34, 221, 221, 221, 100, 221, 221, 221, 100, 219, 219, 219, 36, 219, 219, 219, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 32, 218, 218, 218, 0, 222, 222, 222, 215, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 25, 217, 217, 217, 0, 221, 221, 221, 216, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 117, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 106, 216, 216, 216, 0, 221, 221, 221, 76, 223, 223, 223, 217, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 216, 216, 216, 33, 221, 221, 221, 100, 221, 221, 221, 100, 220, 220, 220, 37, 220, 220, 220, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 233, 223, 223, 223, 254, 223, 223, 223, 234, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 220, 220, 220, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 0, 221, 221, 221, 54, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 223, 223, 223, 32, 223, 223, 223, 88, 221, 221, 221, 100, 221, 221, 221, 91, 223, 223, 223, 16, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 215, 215, 215, 58, 222, 222, 222, 229, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 127, 127, 127, 2, 223, 223, 223, 121, 223, 223, 223, 208, 223, 223, 223, 237, 221, 221, 221, 91, 223, 223, 223, 74, 221, 221, 221, 38, 0, 0, 0, 1, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=110]
-flags = 0
-flags = 0
-image = SubResource( 209 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=111]
+[sub_resource type="StyleBoxFlat" id="111"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
-[sub_resource type="StyleBoxLine" id=112]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="112"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
-[sub_resource type="StyleBoxLine" id=113]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="113"]
+color = Color(1, 1, 1, 0.1)
grow_end = 7.0
-[sub_resource type="StyleBoxLine" id=114]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="114"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
grow_end = 7.0
-[sub_resource type="Image" id=210]
-data = {
-"data": PoolByteArray( 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=116]
-flags = 0
-flags = 0
-image = SubResource( 210 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=117]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 116 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 4.0
-margin_right = 4.0
-margin_top = 4.0
-margin_bottom = 4.0
-
-[sub_resource type="Image" id=211]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=119]
-flags = 0
-flags = 0
-image = SubResource( 211 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=120]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 1.0
-content_margin_bottom = 1.0
-texture = SubResource( 119 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxFlat" id=121]
+[sub_resource type="StyleBoxFlat" id="121"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.27451, 0.27451, 0.27451, 1 )
+bg_color = Color(0.27451, 0.27451, 0.27451, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxEmpty" id=122]
+[sub_resource type="StyleBoxEmpty" id="122"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 0.2, 0.2, 0.2, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(0.2, 0.2, 0.2, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=212]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 152, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 143, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 216, 216, 216, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 143, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 138, 223, 223, 223, 145, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 145, 223, 223, 223, 138, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 124, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 153, 222, 222, 222, 125, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 142, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 142, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 154, 223, 223, 223, 154, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=124]
-flags = 0
-flags = 0
-image = SubResource( 212 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=213]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 220, 220, 220, 44, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 216, 216, 216, 33, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 219, 219, 219, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 218, 218, 218, 42, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=126]
-flags = 0
-flags = 0
-image = SubResource( 213 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=214]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 223, 223, 223, 57, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 219, 219, 219, 43, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 219, 219, 219, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 221, 221, 221, 54, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=128]
-flags = 0
-flags = 0
-image = SubResource( 214 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=215]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 220, 220, 220, 44, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 221, 221, 221, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 218, 218, 218, 42, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=130]
-flags = 0
-flags = 0
-image = SubResource( 215 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=216]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 57, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 220, 220, 220, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 219, 219, 219, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 222, 222, 222, 55, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=132]
-flags = 0
-flags = 0
-image = SubResource( 216 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=217]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=134]
-flags = 0
-flags = 0
-image = SubResource( 217 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=218]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=136]
-flags = 0
-flags = 0
-image = SubResource( 218 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="141"]
+bg_color = Color(0.321569, 0.321569, 0.321569, 1)
+border_width_left = 5
+border_width_top = 10
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color(0.321569, 0.321569, 0.321569, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=137]
-content_margin_left = 5.0
-content_margin_right = 5.0
+[sub_resource type="StyleBoxFlat" id="138"]
+content_margin_left = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.313726, 0.313726, 0.313726, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.235294, 0.235294, 0.235294, 1 )
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
+expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=138]
+[sub_resource type="StyleBoxFlat" id="139"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.313726, 0.313726, 0.313726, 1 )
+bg_color = Color(0.352941, 0.352941, 0.352941, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
+border_color = Color(0.27451, 0.27451, 0.27451, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=139]
+[sub_resource type="StyleBoxFlat" id="140"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.352941, 0.352941, 0.352941, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.27451, 0.27451, 0.27451, 1 )
+border_color = Color(0.235294, 0.235294, 0.235294, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=140]
-content_margin_left = 10.0
-content_margin_right = 10.0
+[sub_resource type="StyleBoxFlat" id="137"]
+content_margin_left = 5.0
content_margin_top = 5.0
+content_margin_right = 5.0
content_margin_bottom = 5.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.235294, 0.235294, 0.235294, 1 )
-expand_margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=141]
-bg_color = Color( 0.321569, 0.321569, 0.321569, 1 )
-border_width_left = 5
-border_width_top = 10
-border_width_right = 5
-border_width_bottom = 5
-border_color = Color( 0.321569, 0.321569, 0.321569, 1 )
-corner_radius_top_left = 4
-corner_radius_top_right = 4
-corner_radius_bottom_right = 4
-corner_radius_bottom_left = 4
-anti_aliasing = false
-
-[sub_resource type="Image" id=219]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 72, 255, 255, 255, 56, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 72, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=143]
-flags = 0
-flags = 0
-image = SubResource( 219 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=220]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=145]
-flags = 0
-flags = 0
-image = SubResource( 220 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=221]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 13, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=147]
-flags = 0
-flags = 0
-image = SubResource( 221 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="Image" id=222]
-data = {
-"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=149]
-flags = 0
-flags = 0
-image = SubResource( 222 )
-size = Vector2( 8, 8 )
+border_width_bottom = 1
+border_color = Color(0.235294, 0.235294, 0.235294, 1)
-[sub_resource type="StyleBoxFlat" id=150]
+[sub_resource type="StyleBoxFlat" id="150"]
content_margin_left = 1.0
-content_margin_right = 1.0
content_margin_top = 1.0
+content_margin_right = 1.0
content_margin_bottom = 1.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(1, 1, 1, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxFlat" id=101]
-bg_color = Color( 0.117647, 0.117647, 0.117647, 1 )
-
-[sub_resource type="Image" id=223]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 84, 255, 255, 255, 108, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 108, 255, 255, 255, 84, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 109, 255, 255, 255, 108, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=152]
-flags = 0
-flags = 0
-image = SubResource( 223 )
-size = Vector2( 14, 14 )
+[sub_resource type="StyleBoxFlat" id="101"]
+bg_color = Color(0.117647, 0.117647, 0.117647, 1)
-[sub_resource type="Image" id=224]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 113, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 113, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 116, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=154]
-flags = 0
-flags = 0
-image = SubResource( 224 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="StyleBoxFlat" id=155]
+[sub_resource type="StyleBoxFlat" id="155"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.544118, 0.544118, 0.544118, 1 )
-border_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.544118, 0.544118, 0.544118, 1)
+border_color = Color(0.392157, 0.392157, 0.392157, 1)
-[sub_resource type="StyleBoxFlat" id=156]
+[sub_resource type="StyleBoxFlat" id="156"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.544118, 0.544118, 0.544118, 1 )
+border_color = Color(0.544118, 0.544118, 0.544118, 1)
-[sub_resource type="StyleBoxEmpty" id=157]
+[sub_resource type="StyleBoxEmpty" id="157"]
-[sub_resource type="StyleBoxEmpty" id=158]
+[sub_resource type="StyleBoxEmpty" id="158"]
-[sub_resource type="StyleBoxFlat" id=159]
+[sub_resource type="StyleBoxFlat" id="159"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.08 )
-border_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(1, 1, 1, 0.08)
+border_color = Color(0.392157, 0.392157, 0.392157, 1)
-[sub_resource type="StyleBoxFlat" id=160]
+[sub_resource type="StyleBoxFlat" id="160"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.235294, 0.235294, 0.235294, 1 )
-border_color = Color( 0.392157, 0.392157, 0.392157, 1 )
-
-[sub_resource type="StyleBoxTexture" id=161]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 68 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=162]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 71 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=163]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 74 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=164]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
+bg_color = Color(0.235294, 0.235294, 0.235294, 1)
+border_color = Color(0.392157, 0.392157, 0.392157, 1)
-[sub_resource type="StyleBoxTexture" id=165]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=166]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="166"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 0.0
grow_end = 0.0
vertical = true
-[sub_resource type="StyleBoxFlat" id=167]
+[sub_resource type="StyleBoxFlat" id="167"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.545098, 0.545098, 0.545098, 1 )
+bg_color = Color(0.545098, 0.545098, 0.545098, 1)
-[sub_resource type="StyleBoxFlat" id=168]
+[sub_resource type="StyleBoxFlat" id="168"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.544118, 0.544118, 0.544118, 1 )
+bg_color = Color(0.544118, 0.544118, 0.544118, 1)
-[sub_resource type="StyleBoxFlat" id=169]
+[sub_resource type="StyleBoxFlat" id="169"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.235294, 0.235294, 0.235294, 1 )
-
-[sub_resource type="Image" id=225]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 64
-}
+bg_color = Color(0.235294, 0.235294, 0.235294, 1)
-[sub_resource type="ImageTexture" id=171]
-flags = 0
-flags = 0
-image = SubResource( 225 )
-size = Vector2( 64, 8 )
-
-[sub_resource type="Image" id=226]
-data = {
-"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=173]
-flags = 0
-flags = 0
-image = SubResource( 226 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="StyleBoxTexture" id=174]
-texture = SubResource( 173 )
-region_rect = Rect2( 0, 0, 8, 8 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=175]
+[sub_resource type="StyleBoxFlat" id="175"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+bg_color = Color(0.392157, 0.392157, 0.392157, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.392157, 0.392157, 0.392157, 1 )
+border_color = Color(0.392157, 0.392157, 0.392157, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
[resource]
resource_name = "Gray"
-default_font = ExtResource( 1 )
+default_font = ExtResource("3_3yr54")
+default_font_size = 16
BoxContainer/constants/separation = 4
-Button/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-Button/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-Button/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
-Button/colors/icon_color_pressed = Color( 0.0045098, 0.523137, 0.852353, 1 )
+Button/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+Button/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+Button/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
+Button/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1)
+Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
+Button/colors/icon_color_pressed = Color(0.0045098, 0.523137, 0.852353, 1)
Button/constants/hseparation = 2
-Button/fonts/font = ExtResource( 1 )
-Button/styles/disabled = SubResource( 2 )
-Button/styles/focus = SubResource( 3 )
-Button/styles/hover = SubResource( 4 )
-Button/styles/normal = SubResource( 5 )
-Button/styles/pressed = SubResource( 6 )
-CheckBox/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckBox/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 )
-CheckBox/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+Button/styles/disabled = SubResource("23")
+Button/styles/focus = SubResource("23")
+Button/styles/hover = SubResource("23")
+Button/styles/normal = SubResource("23")
+Button/styles/pressed = SubResource("23")
+CheckBox/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckBox/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
+CheckBox/colors/font_color_hover_pressed = Color(1, 1, 1, 1)
+CheckBox/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1)
+CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckBox/constants/check_vadjust = 0
CheckBox/constants/hseparation = 4
-CheckBox/fonts/font = ExtResource( 1 )
-CheckBox/icons/checked = SubResource( 8 )
-CheckBox/icons/radio_checked = SubResource( 10 )
-CheckBox/icons/radio_unchecked = SubResource( 12 )
-CheckBox/icons/unchecked = SubResource( 14 )
-CheckBox/styles/disabled = SubResource( 15 )
+CheckBox/styles/disabled = SubResource("15")
CheckBox/styles/focus = null
-CheckBox/styles/hover = SubResource( 15 )
-CheckBox/styles/hover_pressed = SubResource( 16 )
-CheckBox/styles/normal = SubResource( 15 )
-CheckBox/styles/pressed = SubResource( 15 )
-CheckButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-CheckButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+CheckBox/styles/hover = SubResource("15")
+CheckBox/styles/hover_pressed = SubResource("16")
+CheckBox/styles/normal = SubResource("15")
+CheckBox/styles/pressed = SubResource("15")
+CheckButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
+CheckButton/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1)
+CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckButton/constants/check_vadjust = 0
CheckButton/constants/hseparation = 4
-CheckButton/icons/off = SubResource( 18 )
-CheckButton/icons/off_disabled = SubResource( 20 )
-CheckButton/icons/on = SubResource( 22 )
-CheckButton/icons/on_disabled = SubResource( 20 )
-CheckButton/styles/disabled = SubResource( 23 )
-CheckButton/styles/hover = SubResource( 23 )
-CheckButton/styles/normal = SubResource( 23 )
-CheckButton/styles/pressed = SubResource( 23 )
-CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
+CheckButton/styles/disabled = SubResource("23")
+CheckButton/styles/hover = SubResource("23")
+CheckButton/styles/normal = SubResource("23")
+CheckButton/styles/pressed = SubResource("23")
+CollapsibleContainer/icons/arrow_normal = ExtResource("6")
ColorPicker/constants/h_width = 30
ColorPicker/constants/label_width = 10
ColorPicker/constants/margin = 8
ColorPicker/constants/sv_height = 256
ColorPicker/constants/sv_width = 256
-ColorPicker/icons/add_preset = SubResource( 25 )
-ColorPicker/icons/color_hue = null
-ColorPicker/icons/color_sample = null
-ColorPicker/icons/overbright_indicator = SubResource( 27 )
-ColorPicker/icons/preset_bg = SubResource( 29 )
-ColorPicker/icons/screen_picker = SubResource( 31 )
-ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 )
-ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 )
+ColorPickerButton/colors/font_color = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3)
+ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1)
ColorPickerButton/constants/hseparation = 2
-ColorPickerButton/fonts/font = ExtResource( 1 )
-ColorPickerButton/icons/bg = SubResource( 29 )
ColorPickerButton/styles/disabled = null
ColorPickerButton/styles/focus = null
-ColorPickerButton/styles/hover = SubResource( 32 )
-ColorPickerButton/styles/normal = SubResource( 33 )
-ColorPickerButton/styles/pressed = SubResource( 34 )
+ColorPickerButton/styles/hover = SubResource("32")
+ColorPickerButton/styles/normal = SubResource("33")
+ColorPickerButton/styles/pressed = SubResource("34")
Dialogs/constants/button_margin = 32
Dialogs/constants/margin = 8
-FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 )
-FileDialog/colors/folder_icon_modulate = Color( 0.302745, 0.618431, 0.818824, 1 )
-FileDialog/icons/folder = SubResource( 36 )
-FileDialog/icons/parent_folder = SubResource( 38 )
-FileDialog/icons/reload = SubResource( 40 )
-FileDialog/icons/toggle_hidden = SubResource( 42 )
-GraphEdit/colors/activity = Color( 0.00392157, 0.454902, 0.741176, 1 )
-GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 )
-GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 )
-GraphEdit/colors/selection_fill = Color( 0.00392157, 0.454902, 0.741176, 0.3 )
-GraphEdit/colors/selection_stroke = Color( 0.00392157, 0.454902, 0.741176, 0.8 )
+FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3)
+FileDialog/colors/folder_icon_modulate = Color(0.302745, 0.618431, 0.818824, 1)
+GraphEdit/colors/activity = Color(0.00392157, 0.454902, 0.741176, 1)
+GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15)
+GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07)
+GraphEdit/colors/selection_fill = Color(0.00392157, 0.454902, 0.741176, 0.3)
+GraphEdit/colors/selection_stroke = Color(0.00392157, 0.454902, 0.741176, 0.8)
GraphEdit/constants/bezier_len_neg = 160
GraphEdit/constants/bezier_len_pos = 80
-GraphEdit/icons/minus = SubResource( 44 )
-GraphEdit/icons/more = SubResource( 46 )
-GraphEdit/icons/reset = SubResource( 48 )
-GraphEdit/icons/snap = SubResource( 50 )
-GraphEdit/styles/bg = SubResource( 51 )
-GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/title_color = Color( 1, 1, 1, 1 )
+GraphEdit/styles/bg = SubResource("51")
+GraphNode/colors/close_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/title_color = Color(1, 1, 1, 1)
GraphNode/constants/close_h_offset = 20
GraphNode/constants/close_offset = 20
GraphNode/constants/port_offset = 14
GraphNode/constants/separation = 1
GraphNode/constants/title_h_offset = -16
GraphNode/constants/title_offset = 20
-GraphNode/icons/close = SubResource( 53 )
-GraphNode/icons/port = SubResource( 55 )
-GraphNode/icons/resizer = SubResource( 57 )
-GraphNode/styles/breakpoint = SubResource( 58 )
-GraphNode/styles/comment = SubResource( 59 )
-GraphNode/styles/commentfocus = SubResource( 60 )
-GraphNode/styles/frame = SubResource( 61 )
-GraphNode/styles/position = SubResource( 62 )
-GraphNode/styles/selectedframe = SubResource( 63 )
-GraphNode/styles/state_machine_frame = SubResource( 64 )
-GraphNode/styles/state_machine_selectedframe = SubResource( 65 )
+GraphNode/styles/breakpoint = SubResource("58")
+GraphNode/styles/comment = SubResource("59")
+GraphNode/styles/commentfocus = SubResource("60")
+GraphNode/styles/frame = SubResource("61")
+GraphNode/styles/position = SubResource("62")
+GraphNode/styles/selectedframe = SubResource("63")
+GraphNode/styles/state_machine_frame = SubResource("64")
+GraphNode/styles/state_machine_selectedframe = SubResource("65")
GridContainer/constants/hseparation = 4
GridContainer/constants/vseparation = 4
HBoxContainer/constants/separation = 4
-HScrollBar/icons/decrement = SubResource( 66 )
-HScrollBar/icons/decrement_highlight = SubResource( 66 )
-HScrollBar/icons/increment = SubResource( 66 )
-HScrollBar/icons/increment_highlight = SubResource( 66 )
-HScrollBar/styles/grabber = SubResource( 69 )
-HScrollBar/styles/grabber_highlight = SubResource( 72 )
-HScrollBar/styles/grabber_pressed = SubResource( 75 )
-HScrollBar/styles/scroll = SubResource( 78 )
-HScrollBar/styles/scroll_focus = SubResource( 79 )
HSeparator/constants/separation = 4
-HSeparator/styles/separator = SubResource( 80 )
-HSlider/icons/grabber = SubResource( 82 )
-HSlider/icons/grabber_disabled = null
-HSlider/icons/grabber_highlight = SubResource( 84 )
-HSlider/icons/tick = null
+HSeparator/styles/separator = SubResource("80")
HSlider/styles/focus = null
-HSlider/styles/grabber_area = SubResource( 85 )
-HSlider/styles/grabber_area_highlight = SubResource( 86 )
+HSlider/styles/grabber_area = SubResource("85")
+HSlider/styles/grabber_area_highlight = SubResource("86")
HSlider/styles/grabber_disabled = null
HSlider/styles/grabber_highlight = null
-HSlider/styles/slider = SubResource( 87 )
+HSlider/styles/slider = SubResource("87")
HSplitContainer/constants/autohide = 1
HSplitContainer/constants/separation = 8
-HSplitContainer/icons/grabber = SubResource( 89 )
-HSplitContainer/styles/bg = SubResource( 90 )
-Header/base_type = "Label"
-Header/colors/font_color = Color( 0.909804, 0.909804, 0.909804, 1 )
-Header/fonts/font = ExtResource( 2 )
-Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 )
-ItemList/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 )
-ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 )
+Header/base_type = &"Label"
+Header/colors/font_color = Color(0.909804, 0.909804, 0.909804, 1)
+Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1)
+ItemList/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+ItemList/colors/font_color_selected = Color(1, 1, 1, 1)
+ItemList/colors/guide_color = Color(1, 1, 1, 0.05)
ItemList/constants/hseparation = 3
ItemList/constants/icon_margin = 4
ItemList/constants/line_separation = 3
ItemList/constants/vseparation = 3
-ItemList/fonts/font = ExtResource( 1 )
-ItemList/styles/bg = SubResource( 91 )
-ItemList/styles/bg_focus = SubResource( 92 )
-ItemList/styles/cursor = SubResource( 93 )
-ItemList/styles/cursor_unfocused = SubResource( 93 )
-ItemList/styles/selected = SubResource( 94 )
-ItemList/styles/selected_focus = SubResource( 95 )
-Label/colors/font_color = Color( 0.847059, 0.847059, 0.847059, 1 )
-Label/colors/font_color_shadow = Color( 0, 0, 0, 0 )
-Label/colors/font_outline_modulate = Color( 1, 1, 1, 1 )
+ItemList/styles/bg = SubResource("91")
+ItemList/styles/bg_focus = SubResource("92")
+ItemList/styles/cursor = SubResource("93")
+ItemList/styles/cursor_unfocused = SubResource("93")
+ItemList/styles/selected = SubResource("94")
+ItemList/styles/selected_focus = SubResource("95")
+Label/colors/font_color = Color(0.847059, 0.847059, 0.847059, 1)
+Label/colors/font_color_shadow = Color(0, 0, 0, 0)
+Label/colors/font_outline_modulate = Color(1, 1, 1, 1)
Label/constants/line_spacing = 3
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/fonts/font = ExtResource( 1 )
-Label/styles/normal = SubResource( 96 )
-LineEdit/colors/clear_button_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-LineEdit/colors/clear_button_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-LineEdit/colors/cursor_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-LineEdit/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 )
-LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 )
-LineEdit/colors/selection_color = Color( 0.00392157, 0.454902, 0.741176, 0.4 )
+Label/styles/normal = SubResource("96")
+LineEdit/colors/clear_button_color = Color(0.848039, 0.848039, 0.848039, 1)
+LineEdit/colors/clear_button_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1)
+LineEdit/colors/cursor_color = Color(0.848039, 0.848039, 0.848039, 1)
+LineEdit/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+LineEdit/colors/font_color_selected = Color(1, 1, 1, 1)
+LineEdit/colors/read_only = Color(1, 1, 1, 0.3)
+LineEdit/colors/selection_color = Color(0.00392157, 0.454902, 0.741176, 0.4)
LineEdit/constants/minimum_spaces = 12
-LineEdit/fonts/font = ExtResource( 1 )
-LineEdit/icons/clear = SubResource( 98 )
-LineEdit/styles/focus = SubResource( 3 )
-LineEdit/styles/normal = SubResource( 5 )
-LineEdit/styles/read_only = SubResource( 2 )
-LinkButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-LinkButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-LinkButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-LinkButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-LinkButton/styles/focus = SubResource( 96 )
+LineEdit/styles/focus = SubResource("3")
+LineEdit/styles/normal = SubResource("5")
+LineEdit/styles/read_only = SubResource("2")
+LinkButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+LinkButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+LinkButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
+LinkButton/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1)
+LinkButton/styles/focus = SubResource("96")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
-MenuButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-MenuButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 )
+MenuButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+MenuButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
+MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1)
MenuButton/constants/hseparation = 3
-MenuButton/fonts/font = ExtResource( 1 )
-MenuButton/styles/disabled = SubResource( 23 )
-MenuButton/styles/focus = SubResource( 23 )
-MenuButton/styles/hover = SubResource( 23 )
-MenuButton/styles/normal = SubResource( 23 )
-MenuButton/styles/pressed = SubResource( 23 )
-Misc/colors/clear_color = Color( 0.243137, 0.243137, 0.243137, 1 )
-OptionButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-OptionButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-OptionButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+MenuButton/styles/disabled = SubResource("23")
+MenuButton/styles/focus = SubResource("23")
+MenuButton/styles/hover = SubResource("23")
+MenuButton/styles/normal = SubResource("23")
+MenuButton/styles/pressed = SubResource("23")
+Misc/colors/clear_color = Color(0.243137, 0.243137, 0.243137, 1)
+OptionButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+OptionButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
+OptionButton/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1)
+OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/hseparation = 4
OptionButton/constants/modulate_arrow = 1
-OptionButton/fonts/font = ExtResource( 1 )
-OptionButton/icons/arrow = SubResource( 100 )
-OptionButton/styles/disabled = SubResource( 2 )
-OptionButton/styles/focus = SubResource( 3 )
-OptionButton/styles/hover = SubResource( 4 )
-OptionButton/styles/normal = SubResource( 5 )
-OptionButton/styles/pressed = SubResource( 6 )
-Panel/styles/panel = SubResource( 102 )
-PanelContainer/styles/panel = SubResource( 103 )
-PopupDialog/styles/panel = SubResource( 104 )
-PopupMenu/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
+OptionButton/styles/disabled = SubResource("2")
+OptionButton/styles/focus = SubResource("3")
+OptionButton/styles/hover = SubResource("4")
+OptionButton/styles/normal = SubResource("5")
+OptionButton/styles/pressed = SubResource("6")
+Panel/styles/panel = SubResource("102")
+PanelContainer/styles/panel = SubResource("103")
+Popup/styles/panel = SubResource("104")
+PopupMenu/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1)
PopupMenu/constants/hseparation = 4
PopupMenu/constants/vseparation = 5
-PopupMenu/fonts/font = ExtResource( 1 )
-PopupMenu/icons/checked = SubResource( 8 )
-PopupMenu/icons/radio_checked = SubResource( 10 )
-PopupMenu/icons/radio_unchecked = SubResource( 12 )
-PopupMenu/icons/submenu = SubResource( 106 )
-PopupMenu/icons/unchecked = SubResource( 14 )
-PopupMenu/icons/visibility_hidden = SubResource( 108 )
-PopupMenu/icons/visibility_visible = SubResource( 42 )
-PopupMenu/icons/visibility_xray = SubResource( 110 )
-PopupMenu/styles/disabled = SubResource( 23 )
-PopupMenu/styles/focus = SubResource( 23 )
-PopupMenu/styles/hover = SubResource( 111 )
-PopupMenu/styles/labeled_separator_left = SubResource( 112 )
-PopupMenu/styles/labeled_separator_right = SubResource( 113 )
-PopupMenu/styles/normal = SubResource( 23 )
-PopupMenu/styles/panel = SubResource( 104 )
+PopupMenu/styles/disabled = SubResource("23")
+PopupMenu/styles/focus = SubResource("23")
+PopupMenu/styles/hover = SubResource("111")
+PopupMenu/styles/labeled_separator_left = SubResource("112")
+PopupMenu/styles/labeled_separator_right = SubResource("113")
+PopupMenu/styles/normal = SubResource("23")
+PopupMenu/styles/panel = SubResource("104")
PopupMenu/styles/panel_disabled = null
-PopupMenu/styles/pressed = SubResource( 23 )
-PopupMenu/styles/separator = SubResource( 114 )
-PopupPanel/styles/panel = SubResource( 104 )
-ProgressBar/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-ProgressBar/styles/bg = SubResource( 117 )
-ProgressBar/styles/fg = SubResource( 120 )
-ProjectSettingsEditor/styles/panel = SubResource( 121 )
-RichTextLabel/colors/default_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+PopupMenu/styles/pressed = SubResource("23")
+PopupMenu/styles/separator = SubResource("114")
+PopupPanel/styles/panel = SubResource("104")
+ProgressBar/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+ProjectSettingsEditor/styles/panel = SubResource("121")
+RichTextLabel/colors/default_color = Color(0.848039, 0.848039, 0.848039, 1)
+RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0)
RichTextLabel/constants/shadow_as_outline = 0
RichTextLabel/constants/shadow_offset_x = 1
RichTextLabel/constants/shadow_offset_y = 1
-RichTextLabel/styles/focus = SubResource( 122 )
-RichTextLabel/styles/normal = SubResource( 51 )
-RulerButton/base_type = "Button"
-RulerButton/styles/focus = SubResource( 1 )
-RulerButton/styles/hover = SubResource( 1 )
-RulerButton/styles/normal = SubResource( 1 )
-RulerButton/styles/pressed = SubResource( 1 )
-SpinBox/icons/updown = SubResource( 124 )
-TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-TabContainer/colors/font_color_fg = Color( 0.848039, 0.848039, 0.848039, 1 )
+RichTextLabel/styles/focus = SubResource("122")
+RichTextLabel/styles/normal = SubResource("51")
+RulerButton/base_type = &"Button"
+RulerButton/styles/focus = SubResource("1")
+RulerButton/styles/hover = SubResource("1")
+RulerButton/styles/normal = SubResource("1")
+RulerButton/styles/pressed = SubResource("1")
+TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabBar/colors/font_color_fg = Color(0.848039, 0.848039, 0.848039, 1)
+TabBar/constants/hseparation = 4
+TabBar/constants/label_valign_bg = 2
+TabBar/constants/label_valign_fg = 0
+TabBar/constants/top_margin = 24
+TabBar/styles/button = SubResource("23")
+TabBar/styles/button_pressed = SubResource("23")
+TabBar/styles/panel = SubResource("141")
+TabBar/styles/tab_bg = SubResource("138")
+TabBar/styles/tab_disabled = SubResource("139")
+TabBar/styles/tab_fg = SubResource("140")
+TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabContainer/colors/font_color_fg = Color(0.848039, 0.848039, 0.848039, 1)
TabContainer/constants/hseparation = 4
TabContainer/constants/label_valign_bg = 2
TabContainer/constants/label_valign_fg = 0
TabContainer/constants/side_margin = 0
TabContainer/constants/top_margin = 24
-TabContainer/fonts/font = ExtResource( 1 )
-TabContainer/icons/decrement = SubResource( 126 )
-TabContainer/icons/decrement_highlight = SubResource( 128 )
-TabContainer/icons/increment = SubResource( 130 )
-TabContainer/icons/increment_highlight = SubResource( 132 )
-TabContainer/icons/menu = SubResource( 134 )
-TabContainer/icons/menu_highlight = SubResource( 136 )
-TabContainer/styles/panel = SubResource( 137 )
-TabContainer/styles/tab_bg = SubResource( 138 )
-TabContainer/styles/tab_disabled = SubResource( 139 )
-TabContainer/styles/tab_fg = SubResource( 140 )
-Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-Tabs/colors/font_color_fg = Color( 0.848039, 0.848039, 0.848039, 1 )
-Tabs/constants/hseparation = 4
-Tabs/constants/label_valign_bg = 2
-Tabs/constants/label_valign_fg = 0
-Tabs/constants/top_margin = 24
-Tabs/fonts/font = ExtResource( 1 )
-Tabs/icons/close = SubResource( 98 )
-Tabs/icons/decrement = SubResource( 126 )
-Tabs/icons/decrement_highlight = SubResource( 128 )
-Tabs/icons/increment = SubResource( 130 )
-Tabs/icons/increment_highlight = SubResource( 132 )
-Tabs/styles/button = SubResource( 23 )
-Tabs/styles/button_pressed = SubResource( 23 )
-Tabs/styles/panel = SubResource( 141 )
-Tabs/styles/tab_bg = SubResource( 138 )
-Tabs/styles/tab_disabled = SubResource( 139 )
-Tabs/styles/tab_fg = SubResource( 140 )
-TextEdit/colors/background_color = Color( 0, 0, 0, 0 )
-TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 )
-TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 )
-TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 )
-TextEdit/colors/caret_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 )
-TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 )
-TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 )
-TextEdit/colors/completion_font_color = Color( 0.666667, 0.666667, 0.666667, 1 )
-TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 )
-TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 )
-TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 )
-TextEdit/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 )
-TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 )
-TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 )
-TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 )
-TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 )
-TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 )
-TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 )
-TextEdit/colors/selection_color = Color( 0.00392157, 0.454902, 0.741176, 0.4 )
-TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 )
-TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 )
+TabContainer/styles/panel = SubResource("137")
+TabContainer/styles/tab_bg = SubResource("138")
+TabContainer/styles/tab_disabled = SubResource("139")
+TabContainer/styles/tab_fg = SubResource("140")
+TextEdit/colors/background_color = Color(0, 0, 0, 0)
+TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1)
+TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2)
+TextEdit/colors/caret_background_color = Color(0, 0, 0, 1)
+TextEdit/colors/caret_color = Color(0.848039, 0.848039, 0.848039, 1)
+TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8)
+TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1)
+TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412)
+TextEdit/colors/completion_font_color = Color(0.666667, 0.666667, 0.666667, 1)
+TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1)
+TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1)
+TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8)
+TextEdit/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+TextEdit/colors/font_color_selected = Color(0, 0, 0, 1)
+TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1)
+TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4)
+TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4)
+TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1)
+TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1)
+TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6)
+TextEdit/colors/selection_color = Color(0.00392157, 0.454902, 0.741176, 0.4)
+TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1)
+TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15)
TextEdit/constants/completion_lines = 7
TextEdit/constants/completion_max_width = 50
TextEdit/constants/completion_scroll_width = 3
TextEdit/constants/line_spacing = 4
-TextEdit/fonts/font = ExtResource( 1 )
-TextEdit/icons/fold = SubResource( 143 )
-TextEdit/icons/folded = SubResource( 145 )
-TextEdit/icons/space = SubResource( 147 )
-TextEdit/icons/tab = SubResource( 149 )
TextEdit/styles/completion = null
-TextEdit/styles/focus = SubResource( 4 )
-TextEdit/styles/normal = SubResource( 5 )
-TextEdit/styles/read_only = SubResource( 2 )
-ToolButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-ToolButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 )
-ToolButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 )
-ToolButton/styles/disabled = SubResource( 23 )
-ToolButton/styles/focus = SubResource( 23 )
-ToolButton/styles/hover = SubResource( 23 )
-ToolButton/styles/normal = SubResource( 23 )
-ToolButton/styles/pressed = SubResource( 23 )
-TooltipLabel/colors/font_color = Color( 0.151961, 0.151961, 0.151961, 1 )
-TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 )
-TooltipPanel/styles/panel = SubResource( 150 )
-TopMenuPanel/base_type = "Panel"
-TopMenuPanel/styles/panel = SubResource( 101 )
-Tree/colors/cursor_color = Color( 0, 0, 0, 1 )
-Tree/colors/custom_button_font_highlight = Color( 0.908823, 0.908823, 0.908823, 1 )
-Tree/colors/drop_position_color = Color( 0.00392157, 0.454902, 0.741176, 1 )
-Tree/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-Tree/colors/font_color_selected = Color( 1, 1, 1, 1 )
-Tree/colors/guide_color = Color( 1, 1, 1, 0.05 )
-Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 )
-Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 )
-Tree/colors/title_button_color = Color( 0.848039, 0.848039, 0.848039, 1 )
+TextEdit/styles/focus = SubResource("4")
+TextEdit/styles/normal = SubResource("5")
+TextEdit/styles/read_only = SubResource("2")
+TooltipLabel/colors/font_color = Color(0.151961, 0.151961, 0.151961, 1)
+TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1)
+TooltipPanel/styles/panel = SubResource("150")
+TopMenuPanel/base_type = &"Panel"
+TopMenuPanel/styles/panel = SubResource("101")
+Tree/colors/cursor_color = Color(0, 0, 0, 1)
+Tree/colors/custom_button_font_highlight = Color(0.908823, 0.908823, 0.908823, 1)
+Tree/colors/drop_position_color = Color(0.00392157, 0.454902, 0.741176, 1)
+Tree/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1)
+Tree/colors/font_color_selected = Color(1, 1, 1, 1)
+Tree/colors/guide_color = Color(1, 1, 1, 0.05)
+Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1)
+Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8)
+Tree/colors/title_button_color = Color(0.848039, 0.848039, 0.848039, 1)
Tree/constants/button_margin = 4
Tree/constants/draw_guides = 0
Tree/constants/draw_relationship_lines = 1
@@ -1880,63 +863,39 @@ Tree/constants/item_margin = 12
Tree/constants/scroll_border = 40
Tree/constants/scroll_speed = 12
Tree/constants/vseparation = 4
-Tree/fonts/font = ExtResource( 1 )
-Tree/fonts/title_button_font = ExtResource( 1 )
-Tree/icons/arrow = SubResource( 143 )
-Tree/icons/arrow_collapsed = SubResource( 145 )
-Tree/icons/checked = SubResource( 8 )
-Tree/icons/select_arrow = SubResource( 152 )
-Tree/icons/unchecked = SubResource( 14 )
-Tree/icons/updown = SubResource( 154 )
-Tree/styles/bg = SubResource( 51 )
-Tree/styles/bg_focus = SubResource( 92 )
-Tree/styles/button_pressed = SubResource( 155 )
-Tree/styles/cursor = SubResource( 156 )
-Tree/styles/cursor_unfocused = SubResource( 156 )
-Tree/styles/custom_button = SubResource( 157 )
-Tree/styles/custom_button_hover = SubResource( 5 )
-Tree/styles/custom_button_pressed = SubResource( 158 )
-Tree/styles/hover = SubResource( 159 )
-Tree/styles/selected = SubResource( 94 )
-Tree/styles/selected_focus = SubResource( 95 )
-Tree/styles/title_button_hover = SubResource( 160 )
-Tree/styles/title_button_normal = SubResource( 160 )
-Tree/styles/title_button_pressed = SubResource( 160 )
+Tree/styles/bg = SubResource("51")
+Tree/styles/bg_focus = SubResource("92")
+Tree/styles/button_pressed = SubResource("155")
+Tree/styles/cursor = SubResource("156")
+Tree/styles/cursor_unfocused = SubResource("156")
+Tree/styles/custom_button = SubResource("157")
+Tree/styles/custom_button_hover = SubResource("5")
+Tree/styles/custom_button_pressed = SubResource("158")
+Tree/styles/hover = SubResource("159")
+Tree/styles/selected = SubResource("94")
+Tree/styles/selected_focus = SubResource("95")
+Tree/styles/title_button_hover = SubResource("160")
+Tree/styles/title_button_normal = SubResource("160")
+Tree/styles/title_button_pressed = SubResource("160")
VBoxContainer/constants/separation = 4
-VScrollBar/icons/decrement = SubResource( 66 )
-VScrollBar/icons/decrement_highlight = SubResource( 66 )
-VScrollBar/icons/increment = SubResource( 66 )
-VScrollBar/icons/increment_highlight = SubResource( 66 )
-VScrollBar/styles/grabber = SubResource( 161 )
-VScrollBar/styles/grabber_highlight = SubResource( 162 )
-VScrollBar/styles/grabber_pressed = SubResource( 163 )
-VScrollBar/styles/scroll = SubResource( 164 )
-VScrollBar/styles/scroll_focus = SubResource( 165 )
VSeparator/constants/separation = 4
-VSeparator/styles/separator = SubResource( 166 )
-VSlider/icons/grabber = SubResource( 82 )
-VSlider/icons/grabber_highlight = SubResource( 84 )
-VSlider/styles/grabber_area = SubResource( 167 )
-VSlider/styles/grabber_area_highlight = SubResource( 168 )
-VSlider/styles/slider = SubResource( 169 )
+VSeparator/styles/separator = SubResource("166")
+VSlider/styles/grabber_area = SubResource("167")
+VSlider/styles/grabber_area_highlight = SubResource("168")
+VSlider/styles/slider = SubResource("169")
VSplitContainer/constants/autohide = 1
VSplitContainer/constants/separation = 8
-VSplitContainer/icons/grabber = SubResource( 171 )
-VSplitContainer/styles/bg = SubResource( 174 )
-ValueSlider/colors/progress_color = Color( 0.545098, 0.545098, 0.545098, 1 )
-ValueSlider/colors/under_color = Color( 0.235294, 0.235294, 0.235294, 1 )
-ValueSlider/icons/arrow_hover = ExtResource( 4 )
-ValueSlider/icons/arrow_normal = ExtResource( 6 )
-ValueSlider/icons/arrow_pressed = ExtResource( 5 )
+ValueSlider/colors/progress_color = Color(0.545098, 0.545098, 0.545098, 1)
+ValueSlider/colors/under_color = Color(0.235294, 0.235294, 0.235294, 1)
+ValueSlider/icons/arrow_hover = ExtResource("4")
+ValueSlider/icons/arrow_normal = ExtResource("6")
+ValueSlider/icons/arrow_pressed = ExtResource("5")
ValueSlider/icons/texture_over = null
-ValueSlider/icons/texture_progress = ExtResource( 3 )
-ValueSlider/icons/texture_under = ExtResource( 3 )
-WindowDialog/colors/title_color = Color( 0.848039, 0.848039, 0.848039, 1 )
-WindowDialog/constants/close_h_ofs = 22
-WindowDialog/constants/close_v_ofs = 20
-WindowDialog/constants/scaleborder_size = 4
-WindowDialog/constants/title_height = 24
-WindowDialog/fonts/title_font = ExtResource( 1 )
-WindowDialog/icons/close = SubResource( 98 )
-WindowDialog/icons/close_highlight = SubResource( 98 )
-WindowDialog/styles/panel = SubResource( 175 )
+ValueSlider/icons/texture_progress = ExtResource("3")
+ValueSlider/icons/texture_under = ExtResource("3")
+Window/colors/title_color = Color(0.848039, 0.848039, 0.848039, 1)
+Window/constants/close_h_ofs = 22
+Window/constants/close_v_ofs = 20
+Window/constants/scaleborder_size = 4
+Window/constants/title_height = 24
+Window/styles/panel = SubResource("175")
diff --git a/assets/themes/light/theme.tres b/assets/themes/light/theme.tres
index a8976c1ce2e..902630e1b76 100644
--- a/assets/themes/light/theme.tres
+++ b/assets/themes/light/theme.tres
@@ -1,1880 +1,860 @@
-[gd_resource type="Theme" load_steps=182 format=2]
+[gd_resource type="Theme" load_steps=64 format=3 uid="uid://jase72axwunw"]
-[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=1]
-[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=4]
-[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=5]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
+[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="2"]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="3"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_avskt"]
+[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="4"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"]
-[sub_resource type="StyleBoxFlat" id=2]
+[sub_resource type="StyleBoxFlat" id="23"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.690196, 0.690196, 0.690196, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 1, 1, 1, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=3]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0, 0.356863, 1, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=4]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.75, 0.75, 0.75, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=5]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.88, 0.88, 0.88, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=6]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0, 0.356863, 1, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="Image" id=176]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 80, 80, 80, 60, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 105, 89, 89, 89, 243, 87, 87, 87, 105, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 105, 89, 89, 89, 248, 90, 90, 90, 255, 89, 89, 89, 186, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 104, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 193, 85, 85, 85, 51, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 79, 79, 79, 48, 85, 85, 85, 66, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 103, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 193, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 79, 79, 79, 48, 87, 87, 87, 178, 88, 88, 88, 231, 86, 86, 86, 74, 87, 87, 87, 102, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 194, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 83, 83, 83, 64, 89, 89, 89, 225, 90, 90, 90, 255, 88, 88, 88, 233, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 195, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 224, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 196, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 68, 88, 88, 88, 224, 88, 88, 88, 196, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 66, 81, 81, 81, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=8]
-flags = 0
-flags = 0
-image = SubResource( 176 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=177]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 184, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 184, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 68, 88, 88, 88, 238, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 238, 86, 86, 86, 68, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 21, 85, 85, 85, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 179, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 179, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 230, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 234, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 33, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 181, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 180, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 238, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 238, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 184, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 184, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=10]
-flags = 0
-flags = 0
-image = SubResource( 177 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=178]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 21, 85, 85, 85, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 33, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=12]
-flags = 0
-flags = 0
-image = SubResource( 178 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=179]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=14]
-flags = 0
-flags = 0
-image = SubResource( 179 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=15]
-content_margin_left = 4.0
-content_margin_right = 4.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
+bg_color = Color(0.92, 0.92, 0.92, 1)
draw_center = false
-border_color = Color( 0.88, 0.88, 0.88, 1 )
+border_color = Color(0.88, 0.88, 0.88, 1)
-[sub_resource type="StyleBoxFlat" id=16]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
-
-[sub_resource type="Image" id=180]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 88, 88, 88, 95, 88, 88, 88, 191, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 191, 88, 88, 88, 95, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 88, 88, 88, 144, 89, 89, 89, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 254, 88, 88, 88, 144, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 85, 85, 85, 95, 89, 89, 89, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 253, 86, 86, 86, 94, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 89, 89, 89, 189, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 189, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 88, 88, 88, 230, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 88, 88, 88, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 89, 89, 89, 189, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 189, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 85, 85, 85, 95, 89, 89, 89, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 253, 85, 85, 85, 95, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 88, 88, 88, 144, 89, 89, 89, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 254, 88, 88, 88, 144, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 88, 88, 88, 95, 88, 88, 88, 191, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 191, 88, 88, 88, 95, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=18]
-flags = 0
-flags = 0
-image = SubResource( 180 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="Image" id=181]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=20]
-flags = 4
-flags = 4
-image = SubResource( 181 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=182]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 85, 85, 85, 12, 89, 89, 89, 123, 88, 88, 88, 178, 89, 89, 89, 229, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 123, 85, 85, 85, 12, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 88, 88, 88, 66, 89, 89, 89, 223, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 223, 88, 88, 88, 66, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 86, 86, 86, 65, 89, 89, 89, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 194, 87, 87, 87, 76, 81, 81, 81, 25, 81, 81, 81, 25, 87, 87, 87, 76, 89, 89, 89, 194, 90, 90, 90, 255, 89, 89, 89, 254, 87, 87, 87, 64, 86, 86, 86, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 12, 89, 89, 89, 222, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 132, 88, 88, 88, 0, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 0, 87, 87, 87, 0, 88, 88, 88, 0, 88, 88, 88, 132, 90, 90, 90, 255, 89, 89, 89, 222, 85, 85, 85, 12, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 120, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 194, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 194, 90, 90, 90, 255, 89, 89, 89, 120, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 75, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 75, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 81, 81, 81, 25, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 226, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 20, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 71, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 121, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 89, 89, 89, 193, 90, 90, 90, 255, 88, 88, 88, 121, 88, 88, 88, 0, 78, 78, 78, 0, 78, 78, 78, 13, 89, 89, 89, 223, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 132, 88, 88, 88, 0, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 0, 87, 87, 87, 0, 88, 88, 88, 0, 88, 88, 88, 132, 90, 90, 90, 255, 89, 89, 89, 223, 78, 78, 78, 13, 78, 78, 78, 0, 0, 0, 0, 0, 83, 83, 83, 0, 88, 88, 88, 66, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 193, 87, 87, 87, 76, 81, 81, 81, 25, 81, 81, 81, 25, 87, 87, 87, 76, 89, 89, 89, 193, 90, 90, 90, 255, 89, 89, 89, 254, 88, 88, 88, 66, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 66, 89, 89, 89, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 224, 88, 88, 88, 66, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 85, 85, 85, 12, 89, 89, 89, 123, 88, 88, 88, 178, 89, 89, 89, 229, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 123, 85, 85, 85, 12, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=22]
-flags = 0
-flags = 0
-image = SubResource( 182 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="StyleBoxFlat" id=23]
-content_margin_left = 6.0
-content_margin_right = 6.0
+[sub_resource type="StyleBoxFlat" id="15"]
+content_margin_left = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
+bg_color = Color(0.92, 0.92, 0.92, 1)
draw_center = false
-border_color = Color( 0.88, 0.88, 0.88, 1 )
-
-[sub_resource type="Image" id=183]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.88, 0.88, 0.88, 1)
-[sub_resource type="ImageTexture" id=25]
-flags = 0
-flags = 0
-image = SubResource( 183 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="16"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
-[sub_resource type="Image" id=184]
-data = {
-"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=27]
-flags = 0
-flags = 0
-image = SubResource( 184 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=185]
-data = {
-"data": PoolByteArray( 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=29]
-flags = 0
-flags = 0
-image = SubResource( 185 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=186]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 88, 88, 88, 0, 88, 88, 88, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 218, 87, 87, 87, 70, 87, 87, 87, 70, 88, 88, 88, 218, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 86, 86, 86, 65, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 65, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=31]
-flags = 0
-flags = 0
-image = SubResource( 186 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=32]
-bg_color = Color( 0.768627, 0.768627, 0.768627, 1 )
+[sub_resource type="StyleBoxFlat" id="32"]
+bg_color = Color(0.768627, 0.768627, 0.768627, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=33]
+[sub_resource type="StyleBoxFlat" id="33"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=34]
-bg_color = Color( 0.2, 0.2, 0.2, 1 )
+[sub_resource type="StyleBoxFlat" id="34"]
+bg_color = Color(0.2, 0.2, 0.2, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
-border_color = Color( 0.686275, 0.686275, 0.686275, 1 )
+border_color = Color(0.686275, 0.686275, 0.686275, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=187]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 180, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 88, 88, 88, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 180, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 180, 89, 89, 89, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=36]
-flags = 0
-flags = 0
-image = SubResource( 187 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=188]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 89, 89, 89, 199, 88, 88, 88, 198, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 89, 89, 89, 211, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 85, 85, 85, 21, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 85, 85, 85, 21, 89, 89, 89, 210, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 89, 89, 89, 20, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 20, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 206, 89, 89, 89, 254, 89, 89, 89, 251, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 209, 80, 80, 80, 19, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 193, 89, 89, 89, 254, 89, 89, 89, 206, 80, 80, 80, 19, 89, 89, 89, 254, 89, 89, 89, 249, 80, 80, 80, 19, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 193, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 88, 88, 88, 192, 80, 80, 80, 19, 83, 83, 83, 0, 89, 89, 89, 254, 89, 89, 89, 249, 83, 83, 83, 0, 80, 80, 80, 19, 88, 88, 88, 192, 89, 89, 89, 176, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 80, 80, 80, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 249, 89, 89, 89, 0, 80, 80, 80, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 249, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 89, 89, 89, 176, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=38]
-flags = 0
-flags = 0
-image = SubResource( 188 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=189]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 98, 89, 89, 89, 177, 89, 89, 89, 228, 89, 89, 89, 228, 89, 89, 89, 177, 88, 88, 88, 98, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 23, 89, 89, 89, 185, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 185, 88, 88, 88, 23, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 185, 89, 89, 89, 254, 89, 89, 89, 225, 89, 89, 89, 83, 85, 85, 85, 24, 85, 85, 85, 24, 88, 88, 88, 84, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 185, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 94, 89, 89, 89, 254, 89, 89, 89, 225, 90, 90, 90, 17, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 0, 89, 89, 89, 0, 90, 90, 90, 17, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 94, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 174, 89, 89, 89, 254, 87, 87, 87, 87, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 87, 87, 87, 87, 89, 89, 89, 254, 89, 89, 89, 174, 89, 89, 89, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 224, 89, 89, 89, 254, 85, 85, 85, 24, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 224, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 147, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 161, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 224, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 6, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 214, 76, 76, 76, 10, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 85, 89, 89, 89, 254, 88, 88, 88, 178, 88, 88, 88, 0, 0, 0, 0, 0, 87, 87, 87, 0, 90, 90, 90, 34, 89, 89, 89, 240, 89, 89, 89, 245, 85, 85, 85, 42, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 90, 90, 90, 17, 89, 89, 89, 224, 89, 89, 89, 254, 87, 87, 87, 96, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 84, 89, 89, 89, 97, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 83, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 186, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 185, 88, 88, 88, 23, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 228, 89, 89, 89, 177, 87, 87, 87, 99, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=40]
-flags = 0
-flags = 0
-image = SubResource( 189 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=190]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 88, 88, 88, 0, 88, 88, 88, 92, 89, 89, 89, 185, 89, 89, 89, 231, 89, 89, 89, 231, 89, 89, 89, 186, 88, 88, 88, 95, 88, 88, 88, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 35, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 87, 87, 87, 41, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 32, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 225, 89, 89, 89, 83, 85, 85, 85, 24, 85, 85, 85, 24, 88, 88, 88, 84, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 228, 87, 87, 87, 35, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 213, 89, 89, 89, 254, 89, 89, 89, 225, 90, 90, 90, 17, 88, 88, 88, 0, 87, 87, 87, 0, 87, 87, 87, 0, 88, 88, 88, 0, 90, 90, 90, 17, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 217, 85, 85, 85, 3, 85, 85, 85, 0, 88, 88, 88, 0, 88, 88, 88, 89, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 87, 87, 87, 87, 0, 86, 86, 86, 59, 89, 89, 89, 200, 89, 89, 89, 200, 86, 86, 86, 59, 87, 87, 87, 0, 87, 87, 87, 87, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 93, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 254, 85, 85, 85, 24, 86, 86, 86, 0, 88, 88, 88, 198, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 198, 86, 86, 86, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 254, 80, 80, 80, 19, 84, 84, 84, 0, 89, 89, 89, 199, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 199, 87, 87, 87, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 94, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 84, 88, 88, 88, 0, 86, 86, 86, 59, 88, 88, 88, 201, 89, 89, 89, 200, 86, 86, 86, 59, 88, 88, 88, 0, 90, 90, 90, 85, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 94, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 3, 89, 89, 89, 222, 89, 89, 89, 254, 89, 89, 89, 224, 90, 90, 90, 17, 88, 88, 88, 0, 86, 86, 86, 0, 87, 87, 87, 0, 88, 88, 88, 0, 90, 90, 90, 17, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 222, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 86, 86, 86, 0, 87, 87, 87, 41, 89, 89, 89, 232, 89, 89, 89, 254, 89, 89, 89, 225, 89, 89, 89, 83, 85, 85, 85, 24, 85, 85, 85, 24, 89, 89, 89, 83, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 232, 87, 87, 87, 41, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 86, 86, 86, 44, 89, 89, 89, 216, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 216, 86, 86, 86, 44, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 0, 0, 0, 2, 88, 88, 88, 98, 89, 89, 89, 190, 89, 89, 89, 232, 89, 89, 89, 232, 89, 89, 89, 190, 88, 88, 88, 98, 0, 0, 0, 2, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=42]
-flags = 0
-flags = 0
-image = SubResource( 190 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=191]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=44]
-flags = 0
-flags = 0
-image = SubResource( 191 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=192]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=46]
-flags = 0
-flags = 0
-image = SubResource( 192 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=193]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=48]
-flags = 0
-flags = 0
-image = SubResource( 193 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=194]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 64, 64, 64, 0, 63, 63, 63, 0, 63, 63, 63, 0, 64, 64, 64, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 58, 58, 58, 0, 56, 56, 56, 18, 64, 64, 64, 115, 63, 63, 63, 156, 63, 63, 63, 156, 64, 64, 64, 114, 56, 56, 56, 18, 58, 58, 58, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 160, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 63, 63, 63, 160, 60, 60, 60, 17, 60, 60, 60, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 64, 64, 64, 0, 64, 64, 64, 110, 64, 64, 64, 174, 64, 64, 64, 131, 58, 58, 58, 35, 58, 58, 58, 35, 64, 64, 64, 131, 64, 64, 64, 174, 64, 64, 64, 110, 64, 64, 64, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 65, 65, 65, 0, 65, 65, 65, 153, 64, 64, 64, 174, 60, 60, 60, 34, 59, 59, 59, 0, 59, 59, 59, 0, 60, 60, 60, 34, 64, 64, 64, 174, 65, 65, 65, 153, 65, 65, 65, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 64, 64, 64, 0, 64, 64, 64, 174, 64, 64, 64, 174, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 64, 64, 64, 0, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=50]
-flags = 0
-flags = 0
-image = SubResource( 194 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=51]
+[sub_resource type="StyleBoxFlat" id="51"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
+bg_color = Color(0.92, 0.92, 0.92, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.84, 0.84, 0.84, 1 )
-
-[sub_resource type="Image" id=195]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.84, 0.84, 0.84, 1)
-[sub_resource type="ImageTexture" id=53]
-flags = 0
-flags = 0
-image = SubResource( 195 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=196]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 10,
-"mipmaps": false,
-"width": 10
-}
-
-[sub_resource type="ImageTexture" id=55]
-flags = 0
-flags = 0
-image = SubResource( 196 )
-size = Vector2( 10, 10 )
-
-[sub_resource type="Image" id=197]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=57]
-flags = 0
-flags = 0
-image = SubResource( 197 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=58]
+[sub_resource type="StyleBoxFlat" id="58"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.65, 0.5655, 0.26, 1 )
-shadow_color = Color( 0.65, 0.5655, 0.26, 0.1 )
+border_color = Color(0.65, 0.5655, 0.26, 1)
+shadow_color = Color(0.65, 0.5655, 0.26, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=59]
+[sub_resource type="StyleBoxFlat" id="59"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.3 )
+bg_color = Color(1, 1, 1, 0.3)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=60]
+[sub_resource type="StyleBoxFlat" id="60"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.4 )
+bg_color = Color(1, 1, 1, 0.4)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=61]
+[sub_resource type="StyleBoxFlat" id="61"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.7 )
+bg_color = Color(1, 1, 1, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=62]
+[sub_resource type="StyleBoxFlat" id="62"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.75, 0.3525, 0.315, 1 )
-shadow_color = Color( 0.75, 0.3525, 0.315, 0.2 )
+border_color = Color(0.75, 0.3525, 0.315, 1)
+shadow_color = Color(0.75, 0.3525, 0.315, 0.2)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=63]
+[sub_resource type="StyleBoxFlat" id="63"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0.356863, 1, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(0, 0.356863, 1, 0.9)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=64]
+[sub_resource type="StyleBoxFlat" id="64"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.7 )
+bg_color = Color(1, 1, 1, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.9 )
+border_color = Color(0, 0, 0, 0.9)
-[sub_resource type="StyleBoxFlat" id=65]
+[sub_resource type="StyleBoxFlat" id="65"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0.356863, 1, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(0, 0.356863, 1, 0.9)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 8
-[sub_resource type="ImageTexture" id=66]
-
-[sub_resource type="Image" id=198]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 16, 64, 64, 64, 55, 64, 64, 64, 55, 63, 63, 63, 16, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 54, 61, 61, 61, 70, 61, 61, 61, 70, 61, 61, 61, 54, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 54, 61, 61, 61, 70, 61, 61, 61, 70, 61, 61, 61, 54, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 16, 64, 64, 64, 55, 64, 64, 64, 55, 63, 63, 63, 16, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=68]
-flags = 0
-flags = 0
-image = SubResource( 198 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=69]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 68 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=199]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 93, 93, 93, 0, 94, 94, 94, 0, 94, 94, 94, 0, 93, 93, 93, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 4, 93, 93, 93, 98, 94, 94, 94, 167, 94, 94, 94, 167, 93, 93, 93, 98, 63, 63, 63, 4, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 97, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 97, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 164, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 164, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 164, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 164, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 97, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 97, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 4, 93, 93, 93, 98, 94, 94, 94, 167, 94, 94, 94, 167, 93, 93, 93, 98, 63, 63, 63, 4, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 93, 93, 93, 0, 94, 94, 94, 0, 94, 94, 94, 0, 93, 93, 93, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=71]
-flags = 0
-flags = 0
-image = SubResource( 199 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=72]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 71 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="Image" id=200]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxLine" id="80"]
+color = Color(0, 0, 0, 0.1)
-[sub_resource type="ImageTexture" id=74]
-flags = 0
-flags = 0
-image = SubResource( 200 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=75]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 74 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=201]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=77]
-flags = 0
-flags = 0
-image = SubResource( 201 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=78]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=79]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=80]
-color = Color( 0, 0, 0, 0.1 )
-
-[sub_resource type="Image" id=202]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 87, 87, 87, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 87, 87, 87, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 3, 87, 87, 87, 35, 86, 86, 86, 50, 86, 86, 86, 65, 86, 86, 86, 65, 86, 86, 86, 50, 87, 87, 87, 35, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 85, 85, 85, 18, 89, 89, 89, 63, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 89, 89, 89, 63, 85, 85, 85, 18, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 90, 90, 90, 17, 88, 88, 88, 72, 87, 87, 87, 73, 88, 88, 88, 49, 85, 85, 85, 18, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 18, 88, 88, 88, 49, 87, 87, 87, 73, 88, 88, 88, 72, 90, 90, 90, 17, 87, 87, 87, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 3, 86, 86, 86, 62, 87, 87, 87, 73, 87, 87, 87, 32, 67, 67, 67, 0, 74, 74, 74, 0, 64, 64, 64, 0, 63, 63, 63, 0, 74, 74, 74, 0, 58, 58, 58, 0, 87, 87, 87, 32, 87, 87, 87, 73, 86, 86, 86, 62, 85, 85, 85, 3, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 33, 87, 87, 87, 73, 88, 88, 88, 49, 67, 67, 67, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 63, 63, 63, 145, 0, 0, 0, 4, 58, 58, 58, 0, 88, 88, 88, 49, 87, 87, 87, 73, 85, 85, 85, 33, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 50, 87, 87, 87, 73, 90, 90, 90, 17, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 90, 90, 90, 17, 87, 87, 87, 73, 86, 86, 86, 50, 86, 86, 86, 0, 87, 87, 87, 0, 87, 87, 87, 64, 87, 87, 87, 73, 0, 0, 0, 2, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 31, 31, 31, 0, 0, 0, 0, 2, 87, 87, 87, 73, 87, 87, 87, 64, 87, 87, 87, 0, 86, 86, 86, 0, 86, 86, 86, 65, 87, 87, 87, 73, 0, 0, 0, 2, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 31, 31, 31, 0, 0, 0, 0, 2, 87, 87, 87, 73, 87, 87, 87, 64, 87, 87, 87, 0, 90, 90, 90, 0, 90, 90, 90, 51, 87, 87, 87, 73, 90, 90, 90, 17, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 90, 90, 90, 17, 87, 87, 87, 73, 90, 90, 90, 51, 90, 90, 90, 0, 87, 87, 87, 0, 87, 87, 87, 35, 87, 87, 87, 73, 88, 88, 88, 49, 67, 67, 67, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 62, 62, 62, 146, 0, 0, 0, 4, 58, 58, 58, 0, 88, 88, 88, 49, 87, 87, 87, 73, 87, 87, 87, 35, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 3, 89, 89, 89, 63, 87, 87, 87, 73, 87, 87, 87, 32, 67, 67, 67, 0, 74, 74, 74, 0, 64, 64, 64, 0, 63, 63, 63, 0, 73, 73, 73, 0, 58, 58, 58, 0, 87, 87, 87, 32, 87, 87, 87, 73, 89, 89, 89, 63, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 88, 88, 88, 72, 87, 87, 87, 73, 88, 88, 88, 49, 85, 85, 85, 18, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 18, 88, 88, 88, 49, 87, 87, 87, 73, 88, 88, 88, 72, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 89, 89, 89, 63, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 89, 89, 89, 63, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 3, 87, 87, 87, 35, 86, 86, 86, 50, 86, 86, 86, 65, 86, 86, 86, 65, 86, 86, 86, 50, 87, 87, 87, 35, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 87, 87, 87, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 87, 87, 87, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=82]
-flags = 0
-flags = 0
-image = SubResource( 202 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=203]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 0, 69, 69, 69, 11, 88, 88, 88, 124, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 88, 88, 88, 124, 69, 69, 69, 11, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 89, 89, 89, 63, 90, 90, 90, 221, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 221, 89, 89, 89, 63, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 86, 86, 86, 62, 89, 89, 89, 254, 90, 90, 90, 255, 89, 89, 89, 174, 88, 88, 88, 66, 0, 0, 0, 1, 59, 59, 59, 0, 88, 88, 88, 66, 89, 89, 89, 174, 90, 90, 90, 255, 89, 89, 89, 254, 86, 86, 86, 62, 77, 77, 77, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 220, 90, 90, 90, 255, 89, 89, 89, 114, 68, 68, 68, 0, 75, 75, 75, 0, 32, 32, 32, 0, 63, 63, 63, 0, 75, 75, 75, 0, 59, 59, 59, 0, 89, 89, 89, 114, 90, 90, 90, 255, 89, 89, 89, 219, 69, 69, 69, 11, 69, 69, 69, 0, 88, 88, 88, 0, 88, 88, 88, 118, 90, 90, 90, 255, 88, 88, 88, 172, 68, 68, 68, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 63, 63, 63, 145, 0, 0, 0, 4, 59, 59, 59, 0, 88, 88, 88, 172, 90, 90, 90, 255, 88, 88, 88, 118, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 89, 89, 89, 60, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 89, 89, 89, 60, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 72, 72, 72, 7, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 67, 67, 67, 0, 72, 72, 72, 7, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 230, 90, 90, 90, 255, 72, 72, 72, 7, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 67, 67, 67, 0, 72, 72, 72, 7, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 89, 89, 89, 60, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 89, 89, 89, 60, 90, 90, 90, 255, 89, 89, 89, 179, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 123, 90, 90, 90, 255, 88, 88, 88, 172, 68, 68, 68, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 62, 62, 62, 146, 0, 0, 0, 4, 59, 59, 59, 0, 88, 88, 88, 172, 90, 90, 90, 255, 89, 89, 89, 123, 89, 89, 89, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 222, 90, 90, 90, 255, 88, 88, 88, 112, 68, 68, 68, 0, 75, 75, 75, 0, 64, 64, 64, 0, 31, 31, 31, 0, 75, 75, 75, 0, 59, 59, 59, 0, 89, 89, 89, 114, 90, 90, 90, 255, 90, 90, 90, 221, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 78, 78, 78, 0, 87, 87, 87, 64, 89, 89, 89, 254, 90, 90, 90, 255, 89, 89, 89, 174, 88, 88, 88, 66, 59, 59, 59, 0, 0, 0, 0, 1, 88, 88, 88, 66, 89, 89, 89, 174, 90, 90, 90, 255, 89, 89, 89, 254, 87, 87, 87, 64, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 64, 89, 89, 89, 222, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 221, 89, 89, 89, 63, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78, 0, 69, 69, 69, 11, 88, 88, 88, 124, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 88, 88, 88, 124, 69, 69, 69, 11, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=84]
-flags = 0
-flags = 0
-image = SubResource( 203 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=85]
+[sub_resource type="StyleBoxFlat" id="85"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.75, 0.75, 0.75, 1 )
+bg_color = Color(0.75, 0.75, 0.75, 1)
-[sub_resource type="StyleBoxFlat" id=86]
+[sub_resource type="StyleBoxFlat" id="86"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.75, 0.75, 0.75, 1 )
+bg_color = Color(0.75, 0.75, 0.75, 1)
-[sub_resource type="StyleBoxFlat" id=87]
+[sub_resource type="StyleBoxFlat" id="87"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.84, 0.84, 0.84, 1 )
-
-[sub_resource type="Image" id=204]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 49, 62, 62, 62, 49, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 49, 62, 62, 62, 49, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 64,
-"mipmaps": false,
-"width": 8
-}
+bg_color = Color(0.84, 0.84, 0.84, 1)
-[sub_resource type="ImageTexture" id=89]
-flags = 0
-flags = 0
-image = SubResource( 204 )
-size = Vector2( 8, 64 )
-
-[sub_resource type="StyleBoxTexture" id=90]
-texture = SubResource( 20 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=91]
+[sub_resource type="StyleBoxFlat" id="91"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
+bg_color = Color(0.92, 0.92, 0.92, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.84, 0.84, 0.84, 1 )
+border_color = Color(0.84, 0.84, 0.84, 1)
-[sub_resource type="StyleBoxFlat" id=92]
+[sub_resource type="StyleBoxFlat" id="92"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.625, 0.625, 0.625, 1 )
+border_color = Color(0.625, 0.625, 0.625, 1)
-[sub_resource type="StyleBoxFlat" id=93]
+[sub_resource type="StyleBoxFlat" id="93"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 0.2 )
+border_color = Color(0, 0, 0, 0.2)
-[sub_resource type="StyleBoxFlat" id=94]
+[sub_resource type="StyleBoxFlat" id="94"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0, 0, 0, 0.2 )
-border_color = Color( 1, 1, 1, 1 )
+bg_color = Color(0, 0, 0, 0.2)
+border_color = Color(1, 1, 1, 1)
-[sub_resource type="StyleBoxFlat" id=95]
+[sub_resource type="StyleBoxFlat" id="95"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0, 0, 0, 0.2 )
-border_color = Color( 1, 1, 1, 1 )
+bg_color = Color(0, 0, 0, 0.2)
+border_color = Color(1, 1, 1, 1)
-[sub_resource type="StyleBoxEmpty" id=96]
+[sub_resource type="StyleBoxEmpty" id="96"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id=205]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 76, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 76, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 76, 64, 64, 64, 228, 63, 63, 63, 188, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 188, 64, 64, 64, 228, 63, 63, 63, 76, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 56, 56, 56, 18, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 187, 60, 60, 60, 17, 60, 60, 60, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 187, 64, 64, 64, 229, 63, 63, 63, 188, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 53, 53, 53, 19, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 185, 60, 60, 60, 17, 60, 60, 60, 17, 64, 64, 64, 186, 64, 64, 64, 229, 63, 63, 63, 188, 53, 53, 53, 19, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 185, 64, 64, 64, 185, 64, 64, 64, 229, 64, 64, 64, 189, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 191, 64, 64, 64, 229, 64, 64, 64, 229, 64, 64, 64, 190, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 229, 63, 63, 63, 188, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 188, 64, 64, 64, 229, 63, 63, 63, 188, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 187, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 187, 64, 64, 64, 229, 63, 63, 63, 188, 56, 56, 56, 18, 53, 53, 53, 19, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 186, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 185, 64, 64, 64, 229, 64, 64, 64, 189, 53, 53, 53, 19, 54, 54, 54, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 185, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 76, 64, 64, 64, 229, 64, 64, 64, 190, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 190, 64, 64, 64, 229, 63, 63, 63, 76, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 77, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 62, 62, 62, 77, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="3"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.92, 0.92, 0.92, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0, 0.356863, 1, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=98]
-flags = 0
-flags = 0
-image = SubResource( 205 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.92, 0.92, 0.92, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.88, 0.88, 0.88, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="Image" id=206]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 121, 64, 64, 64, 151, 51, 51, 51, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 14, 63, 63, 63, 149, 63, 63, 63, 125, 63, 63, 63, 0, 64, 64, 64, 0, 64, 64, 64, 142, 64, 64, 64, 199, 64, 64, 64, 163, 51, 51, 51, 15, 51, 51, 51, 0, 54, 54, 54, 0, 54, 54, 54, 14, 63, 63, 63, 160, 64, 64, 64, 199, 63, 63, 63, 144, 63, 63, 63, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 163, 64, 64, 64, 199, 64, 64, 64, 161, 51, 51, 51, 15, 54, 54, 54, 14, 64, 64, 64, 159, 64, 64, 64, 199, 64, 64, 64, 166, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 165, 64, 64, 64, 199, 64, 64, 64, 161, 64, 64, 64, 159, 64, 64, 64, 199, 64, 64, 64, 167, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 166, 64, 64, 64, 199, 64, 64, 64, 199, 64, 64, 64, 167, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 155, 64, 64, 64, 157, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 64, 64, 64, 0, 64, 64, 64, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxFlat" id="2"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.690196, 0.690196, 0.690196, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(1, 1, 1, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=100]
-flags = 0
-flags = 0
-image = SubResource( 206 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxFlat" id="4"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.92, 0.92, 0.92, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.75, 0.75, 0.75, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=102]
+[sub_resource type="StyleBoxFlat" id="6"]
content_margin_left = 6.0
+content_margin_top = 4.0
content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.92, 0.92, 0.92, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0, 0.356863, 1, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[sub_resource type="StyleBoxFlat" id="102"]
+content_margin_left = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.6786, 0.80301, 0.87, 1 )
+bg_color = Color(0.6786, 0.80301, 0.87, 1)
-[sub_resource type="StyleBoxFlat" id=103]
+[sub_resource type="StyleBoxFlat" id="103"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 2.0
+content_margin_right = 2.0
content_margin_bottom = 2.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=104]
+[sub_resource type="StyleBoxFlat" id="104"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.75, 0.75, 0.75, 1 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(0.75, 0.75, 0.75, 1)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
-[sub_resource type="Image" id=207]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 197, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 190, 89, 89, 89, 254, 89, 89, 89, 210, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 209, 85, 85, 85, 21, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 83, 83, 83, 0, 80, 80, 80, 19, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 209, 80, 80, 80, 19, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 196, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 197, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 86, 86, 86, 0, 80, 80, 80, 19, 89, 89, 89, 206, 89, 89, 89, 254, 89, 89, 89, 212, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 206, 89, 89, 89, 254, 89, 89, 89, 212, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 189, 89, 89, 89, 254, 89, 89, 89, 212, 81, 81, 81, 22, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 88, 88, 88, 198, 88, 88, 88, 23, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=106]
-flags = 0
-flags = 0
-image = SubResource( 207 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=208]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 82, 82, 82, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 82, 82, 82, 31, 85, 85, 85, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 178, 89, 89, 89, 254, 88, 88, 88, 81, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 88, 88, 88, 81, 89, 89, 89, 254, 89, 89, 89, 177, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 84, 89, 89, 89, 254, 90, 90, 90, 204, 51, 51, 51, 5, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 51, 51, 51, 5, 90, 90, 90, 204, 89, 89, 89, 254, 88, 88, 88, 84, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 176, 51, 51, 51, 5, 70, 70, 70, 0, 81, 81, 81, 0, 81, 81, 81, 0, 70, 70, 70, 0, 51, 51, 51, 5, 89, 89, 89, 176, 89, 89, 89, 254, 89, 89, 89, 209, 0, 0, 0, 1, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 210, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 213, 89, 89, 89, 88, 81, 81, 81, 22, 81, 81, 81, 22, 89, 89, 89, 88, 89, 89, 89, 214, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 210, 80, 80, 80, 19, 80, 80, 80, 0, 85, 85, 85, 0, 85, 85, 85, 9, 89, 89, 89, 194, 89, 89, 89, 214, 88, 88, 88, 215, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 215, 89, 89, 89, 214, 89, 89, 89, 194, 85, 85, 85, 9, 85, 85, 85, 0, 0, 0, 0, 0, 80, 80, 80, 0, 76, 76, 76, 10, 89, 89, 89, 20, 51, 51, 51, 5, 89, 89, 89, 105, 90, 90, 90, 187, 89, 89, 89, 254, 89, 89, 89, 254, 90, 90, 90, 187, 89, 89, 89, 105, 51, 51, 51, 5, 89, 89, 89, 20, 76, 76, 76, 10, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 0, 89, 89, 89, 0, 51, 51, 51, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 249, 89, 89, 89, 0, 89, 89, 89, 0, 51, 51, 51, 0, 89, 89, 89, 0, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=108]
-flags = 0
-flags = 0
-image = SubResource( 208 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=209]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 88, 88, 88, 0, 89, 89, 89, 0, 87, 87, 87, 0, 87, 87, 87, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 86, 86, 86, 115, 88, 88, 88, 204, 89, 89, 89, 236, 87, 87, 87, 90, 87, 87, 87, 73, 89, 89, 89, 37, 88, 88, 88, 0, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 0, 81, 81, 81, 47, 89, 89, 89, 222, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 251, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 82, 79, 79, 79, 16, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 42, 0, 85, 85, 85, 42, 88, 88, 88, 236, 89, 89, 89, 254, 88, 88, 88, 235, 88, 88, 88, 104, 79, 79, 79, 32, 85, 85, 85, 9, 85, 85, 85, 33, 89, 89, 89, 88, 89, 89, 89, 100, 88, 88, 88, 89, 72, 72, 72, 14, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 226, 89, 89, 89, 254, 88, 88, 88, 235, 77, 77, 77, 23, 84, 84, 84, 0, 83, 83, 83, 0, 86, 86, 86, 0, 81, 81, 81, 0, 72, 72, 72, 7, 89, 89, 89, 88, 89, 89, 89, 100, 90, 90, 90, 85, 0, 0, 0, 1, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 111, 89, 89, 89, 254, 89, 89, 89, 254, 86, 86, 86, 109, 83, 83, 83, 0, 87, 87, 87, 76, 88, 88, 88, 216, 88, 88, 88, 78, 88, 88, 88, 23, 83, 83, 83, 0, 90, 90, 90, 34, 89, 89, 89, 100, 89, 89, 89, 100, 85, 85, 85, 36, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 223, 89, 89, 89, 254, 89, 89, 89, 254, 79, 79, 79, 32, 83, 83, 83, 0, 88, 88, 88, 215, 89, 89, 89, 254, 89, 89, 89, 100, 88, 88, 88, 78, 86, 86, 86, 0, 85, 85, 85, 9, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 82, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 223, 89, 89, 89, 254, 89, 89, 89, 254, 71, 71, 71, 25, 79, 79, 79, 0, 88, 88, 88, 216, 89, 89, 89, 254, 89, 89, 89, 100, 88, 88, 88, 78, 86, 86, 86, 0, 85, 85, 85, 9, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 82, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 117, 89, 89, 89, 254, 89, 89, 89, 254, 86, 86, 86, 106, 83, 83, 83, 0, 87, 87, 87, 76, 88, 88, 88, 217, 88, 88, 88, 78, 88, 88, 88, 23, 81, 81, 81, 0, 85, 85, 85, 33, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 37, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 3, 88, 88, 88, 233, 89, 89, 89, 254, 89, 89, 89, 234, 77, 77, 77, 23, 84, 84, 84, 0, 83, 83, 83, 0, 86, 86, 86, 0, 82, 82, 82, 0, 72, 72, 72, 7, 89, 89, 89, 88, 89, 89, 89, 100, 87, 87, 87, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 54, 88, 88, 88, 240, 89, 89, 89, 254, 88, 88, 88, 235, 88, 88, 88, 104, 79, 79, 79, 32, 85, 85, 85, 9, 87, 87, 87, 32, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 91, 79, 79, 79, 16, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 0, 83, 83, 83, 58, 89, 89, 89, 229, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 251, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 90, 90, 90, 85, 90, 90, 90, 17, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 0, 0, 0, 0, 2, 88, 88, 88, 121, 89, 89, 89, 208, 89, 89, 89, 237, 89, 89, 89, 91, 89, 89, 89, 74, 87, 87, 87, 38, 0, 0, 0, 1, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=110]
-flags = 0
-flags = 0
-image = SubResource( 209 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=111]
+[sub_resource type="StyleBoxFlat" id="111"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
-border_color = Color( 0.88, 0.88, 0.88, 1 )
+bg_color = Color(0.92, 0.92, 0.92, 1)
+border_color = Color(0.88, 0.88, 0.88, 1)
-[sub_resource type="StyleBoxLine" id=112]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="112"]
+color = Color(0, 0, 0, 0.1)
grow_begin = 7.0
-[sub_resource type="StyleBoxLine" id=113]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="113"]
+color = Color(0, 0, 0, 0.1)
grow_end = 7.0
-[sub_resource type="StyleBoxLine" id=114]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="114"]
+color = Color(0, 0, 0, 0.1)
grow_begin = 7.0
grow_end = 7.0
-[sub_resource type="Image" id=210]
-data = {
-"data": PoolByteArray( 88, 88, 88, 23, 88, 88, 88, 78, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 88, 88, 88, 23, 89, 89, 89, 77, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 77, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 88, 88, 88, 23, 88, 88, 88, 78, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 88, 88, 88, 23 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=116]
-flags = 0
-flags = 0
-image = SubResource( 210 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=117]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 116 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 4.0
-margin_right = 4.0
-margin_top = 4.0
-margin_bottom = 4.0
-
-[sub_resource type="Image" id=211]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 70, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 70, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=119]
-flags = 0
-flags = 0
-image = SubResource( 211 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=120]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 1.0
-content_margin_bottom = 1.0
-texture = SubResource( 119 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxFlat" id=121]
+[sub_resource type="StyleBoxFlat" id="121"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.88, 0.88, 0.88, 1 )
+bg_color = Color(0.88, 0.88, 0.88, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.88, 0.88, 0.88, 1 )
+border_color = Color(0.88, 0.88, 0.88, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.1 )
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
-[sub_resource type="StyleBoxEmpty" id=122]
+[sub_resource type="StyleBoxEmpty" id="122"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 0.5382, 0.63687, 0.69, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(0.5382, 0.63687, 0.69, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=212]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 88, 88, 88, 0, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 88, 88, 88, 152, 88, 88, 88, 152, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 162, 89, 89, 89, 199, 89, 89, 89, 163, 79, 79, 79, 16, 79, 79, 79, 16, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 161, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 143, 89, 89, 89, 199, 88, 88, 88, 164, 90, 90, 90, 17, 84, 84, 84, 0, 84, 84, 84, 0, 90, 90, 90, 17, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 143, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 138, 89, 89, 89, 145, 90, 90, 90, 17, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 145, 88, 88, 88, 138, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 124, 88, 88, 88, 152, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 90, 90, 90, 153, 89, 89, 89, 125, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 142, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 142, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 0, 79, 79, 79, 16, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 79, 79, 79, 16, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 0, 90, 90, 90, 17, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 161, 89, 89, 89, 162, 89, 89, 89, 199, 89, 89, 89, 163, 90, 90, 90, 17, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 165, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 164, 90, 90, 90, 17, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 154, 89, 89, 89, 154, 90, 90, 90, 17, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 89, 89, 89, 0, 89, 89, 89, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=124]
-flags = 0
-flags = 0
-image = SubResource( 212 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=213]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 77, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 89, 89, 89, 77, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 86, 86, 86, 44, 89, 89, 89, 54, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 74, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 87, 87, 87, 0, 88, 88, 88, 43, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 74, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 136, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 85, 85, 85, 33, 86, 86, 86, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 90, 90, 90, 136, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 44, 86, 86, 86, 0, 87, 87, 87, 32, 89, 89, 89, 180, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 179, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 43, 87, 87, 87, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 140, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 86, 86, 86, 0, 85, 85, 85, 33, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 139, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 76, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 180, 87, 87, 87, 32, 85, 85, 85, 0, 86, 86, 86, 44, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 75, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 180, 85, 85, 85, 42, 89, 89, 89, 54, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 88, 88, 88, 0, 88, 88, 88, 78, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 88, 88, 88, 78, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=126]
-flags = 0
-flags = 0
-image = SubResource( 213 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=214]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 88, 88, 88, 0, 87, 87, 87, 99, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 87, 87, 87, 99, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 89, 89, 89, 57, 87, 87, 87, 70, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 95, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 85, 85, 85, 42, 86, 86, 86, 0, 86, 86, 86, 56, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 95, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 88, 88, 88, 43, 85, 85, 85, 0, 85, 85, 85, 42, 89, 89, 89, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 57, 87, 87, 87, 0, 85, 85, 85, 42, 89, 89, 89, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 230, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 56, 85, 85, 85, 0, 85, 85, 85, 42, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 232, 85, 85, 85, 42, 85, 85, 85, 0, 88, 88, 88, 43, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 98, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 231, 85, 85, 85, 42, 87, 87, 87, 0, 89, 89, 89, 57, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 97, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 187, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 231, 89, 89, 89, 54, 87, 87, 87, 70, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 187, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 89, 89, 89, 0, 89, 89, 89, 100, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 100, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=128]
-flags = 0
-flags = 0
-image = SubResource( 214 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=215]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 77, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 89, 89, 89, 77, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 54, 86, 86, 86, 44, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 74, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 43, 87, 87, 87, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 74, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 136, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 86, 86, 86, 0, 85, 85, 85, 33, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 90, 90, 90, 136, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 180, 87, 87, 87, 32, 86, 86, 86, 0, 86, 86, 86, 44, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 179, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 87, 87, 87, 0, 88, 88, 88, 43, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 140, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 139, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 76, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 44, 86, 86, 86, 0, 87, 87, 87, 32, 89, 89, 89, 180, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 75, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 54, 85, 85, 85, 42, 89, 89, 89, 180, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 88, 88, 88, 0, 88, 88, 88, 78, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 88, 88, 88, 78, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=130]
-flags = 0
-flags = 0
-image = SubResource( 215 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=216]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 88, 88, 88, 0, 87, 87, 87, 99, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 87, 87, 87, 99, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 89, 89, 89, 57, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 95, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 56, 86, 86, 86, 0, 85, 85, 85, 42, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 95, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 232, 85, 85, 85, 42, 85, 85, 85, 0, 88, 88, 88, 43, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 231, 85, 85, 85, 42, 87, 87, 87, 0, 89, 89, 89, 57, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 230, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 85, 85, 85, 42, 85, 85, 85, 0, 86, 86, 86, 56, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 85, 85, 85, 42, 85, 85, 85, 0, 85, 85, 85, 42, 89, 89, 89, 232, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 98, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 57, 86, 86, 86, 0, 85, 85, 85, 42, 89, 89, 89, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 97, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 187, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 88, 88, 88, 55, 89, 89, 89, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 187, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 89, 89, 89, 0, 89, 89, 89, 100, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 100, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=132]
-flags = 0
-flags = 0
-image = SubResource( 216 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=217]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 62, 62, 62, 78, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 64, 64, 64, 79, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 64, 64, 64, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 62, 62, 62, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 62, 62, 62, 78, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 64, 64, 64, 79, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 64, 64, 64, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 62, 62, 62, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 62, 62, 62, 78, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 64, 64, 64, 79, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=134]
-flags = 0
-flags = 0
-image = SubResource( 217 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=218]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 88, 88, 88, 201, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 199, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 200, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 88, 88, 88, 201, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 199, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 200, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 88, 88, 88, 201, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 199, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 200, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=136]
-flags = 0
-flags = 0
-image = SubResource( 218 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="141"]
+bg_color = Color(0.627451, 0.627451, 0.627451, 1)
+border_width_left = 5
+border_width_top = 10
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color(0.627451, 0.627451, 0.627451, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=137]
-content_margin_left = 5.0
-content_margin_right = 5.0
+[sub_resource type="StyleBoxFlat" id="138"]
+content_margin_left = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(0.92, 0.92, 0.92, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.84, 0.84, 0.84, 1 )
+border_color = Color(0.88, 0.88, 0.88, 1)
+expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=138]
+[sub_resource type="StyleBoxFlat" id="139"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.92, 0.92, 0.92, 1 )
+bg_color = Color(1, 1, 1, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.88, 0.88, 0.88, 1 )
+border_color = Color(1, 1, 1, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=139]
+[sub_resource type="StyleBoxFlat" id="140"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 1, 1, 1, 1 )
+border_color = Color(0.84, 0.84, 0.84, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=140]
-content_margin_left = 10.0
-content_margin_right = 10.0
+[sub_resource type="StyleBoxFlat" id="137"]
+content_margin_left = 5.0
content_margin_top = 5.0
+content_margin_right = 5.0
content_margin_bottom = 5.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.84, 0.84, 0.84, 1 )
-expand_margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=141]
-bg_color = Color( 0.627451, 0.627451, 0.627451, 1 )
-border_width_left = 5
-border_width_top = 10
-border_width_right = 5
-border_width_bottom = 5
-border_color = Color( 0.627451, 0.627451, 0.627451, 1 )
-corner_radius_top_left = 4
-corner_radius_top_right = 4
-corner_radius_bottom_right = 4
-corner_radius_bottom_left = 4
-anti_aliasing = false
-
-[sub_resource type="Image" id=219]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 56, 63, 63, 63, 72, 36, 36, 36, 7, 36, 36, 36, 0, 36, 36, 36, 0, 36, 36, 36, 7, 63, 63, 63, 72, 63, 63, 63, 56, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 66, 63, 63, 63, 100, 62, 62, 62, 82, 36, 36, 36, 7, 36, 36, 36, 7, 62, 62, 62, 82, 63, 63, 63, 100, 61, 61, 61, 66, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 62, 62, 62, 81, 62, 62, 62, 81, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 63, 63, 63, 72, 63, 63, 63, 72, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=143]
-flags = 0
-flags = 0
-image = SubResource( 219 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=220]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 56, 63, 63, 63, 72, 36, 36, 36, 7, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 66, 63, 63, 63, 100, 62, 62, 62, 82, 36, 36, 36, 7, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 62, 62, 62, 81, 36, 36, 36, 7, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 61, 61, 61, 66, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0, 36, 36, 36, 7, 62, 62, 62, 82, 63, 63, 63, 100, 61, 61, 61, 66, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0, 36, 36, 36, 7, 62, 62, 62, 81, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 66, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 56, 63, 63, 63, 72, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=145]
-flags = 0
-flags = 0
-image = SubResource( 220 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=221]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 54, 54, 54, 14, 54, 54, 54, 14, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 58, 0, 58, 58, 58, 13, 62, 62, 62, 49, 62, 62, 62, 49, 58, 58, 58, 13, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 14, 62, 62, 62, 49, 62, 62, 62, 49, 58, 58, 58, 13, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 14, 54, 54, 54, 14, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=147]
-flags = 0
-flags = 0
-image = SubResource( 221 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="Image" id=222]
-data = {
-"data": PoolByteArray( 58, 58, 58, 35, 60, 60, 60, 38, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 60, 60, 60, 38, 61, 61, 61, 50, 62, 62, 62, 41, 0, 0, 0, 3, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 63, 63, 63, 4, 62, 62, 62, 41, 61, 61, 61, 50, 63, 63, 63, 40, 0, 0, 0, 3, 30, 30, 30, 0, 61, 61, 61, 50, 61, 61, 61, 50, 63, 63, 63, 0, 63, 63, 63, 4, 62, 62, 62, 41, 61, 61, 61, 50, 62, 62, 62, 37, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 0, 0, 0, 0, 3, 62, 62, 62, 41, 61, 61, 61, 50, 60, 60, 60, 38, 60, 60, 60, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 3, 62, 62, 62, 41, 61, 61, 61, 50, 62, 62, 62, 41, 63, 63, 63, 4, 62, 62, 62, 0, 61, 61, 61, 50, 61, 61, 61, 50, 62, 62, 62, 37, 61, 61, 61, 50, 62, 62, 62, 41, 63, 63, 63, 4, 63, 63, 63, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 58, 58, 58, 35, 60, 60, 60, 38, 63, 63, 63, 4, 63, 63, 63, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=149]
-flags = 0
-flags = 0
-image = SubResource( 222 )
-size = Vector2( 8, 8 )
+border_width_bottom = 1
+border_color = Color(0.84, 0.84, 0.84, 1)
-[sub_resource type="StyleBoxFlat" id=150]
+[sub_resource type="StyleBoxFlat" id="150"]
content_margin_left = 1.0
-content_margin_right = 1.0
content_margin_top = 1.0
+content_margin_right = 1.0
content_margin_bottom = 1.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0, 0, 0, 1 )
-shadow_color = Color( 0, 0, 0, 0.1 )
+border_color = Color(0, 0, 0, 1)
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
-[sub_resource type="StyleBoxFlat" id=101]
-bg_color = Color( 0.776471, 0.776471, 0.776471, 1 )
-
-[sub_resource type="Image" id=223]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 84, 63, 63, 63, 108, 46, 46, 46, 11, 46, 46, 46, 0, 46, 46, 46, 0, 46, 46, 46, 11, 63, 63, 63, 108, 63, 63, 63, 84, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 64, 64, 64, 150, 64, 64, 64, 123, 46, 46, 46, 11, 46, 46, 46, 11, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 122, 64, 64, 64, 122, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 63, 63, 63, 109, 63, 63, 63, 108, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=152]
-flags = 0
-flags = 0
-image = SubResource( 223 )
-size = Vector2( 14, 14 )
+[sub_resource type="StyleBoxFlat" id="101"]
+bg_color = Color(0.776471, 0.776471, 0.776471, 1)
-[sub_resource type="Image" id=224]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 64, 64, 64, 0, 64, 64, 64, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 115, 64, 64, 64, 114, 46, 46, 46, 11, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 46, 46, 46, 11, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 122, 64, 64, 64, 150, 64, 64, 64, 123, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 122, 46, 46, 46, 11, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 113, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 113, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 105, 64, 64, 64, 115, 63, 63, 63, 12, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 115, 63, 63, 63, 105, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 105, 64, 64, 64, 114, 46, 46, 46, 11, 46, 46, 46, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 115, 63, 63, 63, 105, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 114, 64, 64, 64, 150, 64, 64, 64, 123, 46, 46, 46, 11, 46, 46, 46, 11, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 114, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 122, 64, 64, 64, 122, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 63, 63, 63, 116, 64, 64, 64, 115, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=154]
-flags = 0
-flags = 0
-image = SubResource( 224 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="StyleBoxFlat" id=155]
+[sub_resource type="StyleBoxFlat" id="155"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.75, 0.75, 0.75, 1 )
-border_color = Color( 1, 1, 1, 1 )
+bg_color = Color(0.75, 0.75, 0.75, 1)
+border_color = Color(1, 1, 1, 1)
-[sub_resource type="StyleBoxFlat" id=156]
+[sub_resource type="StyleBoxFlat" id="156"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.75, 0.75, 0.75, 1 )
+border_color = Color(0.75, 0.75, 0.75, 1)
-[sub_resource type="StyleBoxEmpty" id=157]
+[sub_resource type="StyleBoxEmpty" id="157"]
-[sub_resource type="StyleBoxEmpty" id=158]
+[sub_resource type="StyleBoxEmpty" id="158"]
-[sub_resource type="StyleBoxFlat" id=159]
+[sub_resource type="StyleBoxFlat" id="159"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0, 0, 0, 0.08 )
-border_color = Color( 1, 1, 1, 1 )
+bg_color = Color(0, 0, 0, 0.08)
+border_color = Color(1, 1, 1, 1)
-[sub_resource type="StyleBoxFlat" id=160]
+[sub_resource type="StyleBoxFlat" id="160"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.84, 0.84, 0.84, 1 )
-border_color = Color( 1, 1, 1, 1 )
-
-[sub_resource type="StyleBoxTexture" id=161]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 68 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=162]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 71 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=163]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 74 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=164]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
+bg_color = Color(0.84, 0.84, 0.84, 1)
+border_color = Color(1, 1, 1, 1)
-[sub_resource type="StyleBoxTexture" id=165]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 77 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=166]
-color = Color( 0, 0, 0, 0.1 )
+[sub_resource type="StyleBoxLine" id="166"]
+color = Color(0, 0, 0, 0.1)
grow_begin = 0.0
grow_end = 0.0
vertical = true
-[sub_resource type="StyleBoxFlat" id=167]
+[sub_resource type="StyleBoxFlat" id="167"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.74902, 0.74902, 0.74902, 1 )
+bg_color = Color(0.74902, 0.74902, 0.74902, 1)
-[sub_resource type="StyleBoxFlat" id=168]
+[sub_resource type="StyleBoxFlat" id="168"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.75, 0.75, 0.75, 1 )
+bg_color = Color(0.75, 0.75, 0.75, 1)
-[sub_resource type="StyleBoxFlat" id=169]
+[sub_resource type="StyleBoxFlat" id="169"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.839216, 0.839216, 0.839216, 1 )
-
-[sub_resource type="Image" id=225]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 62, 62, 62, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 49, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 49, 62, 62, 62, 0, 62, 62, 62, 0, 62, 62, 62, 49, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 49, 62, 62, 62, 0, 0, 0, 0, 0, 62, 62, 62, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 64
-}
+bg_color = Color(0.839216, 0.839216, 0.839216, 1)
-[sub_resource type="ImageTexture" id=171]
-flags = 0
-flags = 0
-image = SubResource( 225 )
-size = Vector2( 64, 8 )
-
-[sub_resource type="Image" id=226]
-data = {
-"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=173]
-flags = 0
-flags = 0
-image = SubResource( 226 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="StyleBoxTexture" id=174]
-texture = SubResource( 173 )
-region_rect = Rect2( 0, 0, 8, 8 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=175]
+[sub_resource type="StyleBoxFlat" id="175"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 1, 1, 1, 1 )
+bg_color = Color(1, 1, 1, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 1 )
+border_color = Color(1, 1, 1, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.1 )
+shadow_color = Color(0, 0, 0, 0.1)
shadow_size = 4
[resource]
resource_name = "Light"
-default_font = ExtResource( 5 )
+default_font = ExtResource("3_avskt")
+default_font_size = 16
BoxContainer/constants/separation = 4
-Button/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-Button/colors/font_color_disabled = Color( 0.2, 0.2, 0.2, 0.662745 )
-Button/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-Button/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 )
-Button/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
-Button/colors/icon_color_pressed = Color( 0, 1.24902, 3.5, 1 )
-Button/constants/hseparation = 2
-Button/fonts/font = ExtResource( 5 )
-Button/styles/disabled = SubResource( 2 )
-Button/styles/focus = SubResource( 3 )
-Button/styles/hover = SubResource( 4 )
-Button/styles/normal = SubResource( 5 )
-Button/styles/pressed = SubResource( 6 )
-CheckBox/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-CheckBox/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 )
-CheckBox/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 )
-CheckBox/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
+Button/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+Button/colors/font_color_disabled = Color(0.9, 0.95, 1, 0.3)
+Button/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
+Button/colors/font_color_pressed = Color(0, 0.356863, 1, 1)
+Button/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
+Button/colors/icon_color_pressed = Color(0, 1.24902, 3.5, 1)
+Button/constants/hseparation = 3
+Button/styles/disabled = SubResource("23")
+Button/styles/focus = SubResource("23")
+Button/styles/hover = SubResource("23")
+Button/styles/normal = SubResource("23")
+Button/styles/pressed = SubResource("23")
+CheckBox/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+CheckBox/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+CheckBox/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
+CheckBox/colors/font_color_hover_pressed = Color(0, 0, 0, 1)
+CheckBox/colors/font_color_pressed = Color(0, 0.356863, 1, 1)
+CheckBox/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
CheckBox/constants/check_vadjust = 0
CheckBox/constants/hseparation = 4
-CheckBox/fonts/font = ExtResource( 5 )
-CheckBox/icons/checked = SubResource( 8 )
-CheckBox/icons/radio_checked = SubResource( 10 )
-CheckBox/icons/radio_unchecked = SubResource( 12 )
-CheckBox/icons/unchecked = SubResource( 14 )
-CheckBox/styles/disabled = SubResource( 15 )
+CheckBox/styles/disabled = SubResource("15")
CheckBox/styles/focus = null
-CheckBox/styles/hover = SubResource( 15 )
-CheckBox/styles/hover_pressed = SubResource( 16 )
-CheckBox/styles/normal = SubResource( 15 )
-CheckBox/styles/pressed = SubResource( 15 )
-CheckButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-CheckButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-CheckButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-CheckButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 )
-CheckButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
+CheckBox/styles/hover = SubResource("15")
+CheckBox/styles/hover_pressed = SubResource("16")
+CheckBox/styles/normal = SubResource("15")
+CheckBox/styles/pressed = SubResource("15")
+CheckButton/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+CheckButton/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+CheckButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
+CheckButton/colors/font_color_pressed = Color(0, 0.356863, 1, 1)
+CheckButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
CheckButton/constants/check_vadjust = 0
CheckButton/constants/hseparation = 4
-CheckButton/icons/off = SubResource( 18 )
-CheckButton/icons/off_disabled = SubResource( 20 )
-CheckButton/icons/on = SubResource( 22 )
-CheckButton/icons/on_disabled = SubResource( 20 )
-CheckButton/styles/disabled = SubResource( 23 )
-CheckButton/styles/hover = SubResource( 23 )
-CheckButton/styles/normal = SubResource( 23 )
-CheckButton/styles/pressed = SubResource( 23 )
-CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
+CheckButton/styles/disabled = SubResource("23")
+CheckButton/styles/hover = SubResource("23")
+CheckButton/styles/normal = SubResource("23")
+CheckButton/styles/pressed = SubResource("23")
+CollapsibleContainer/icons/arrow_normal = ExtResource("6")
ColorPicker/constants/h_width = 30
ColorPicker/constants/label_width = 10
ColorPicker/constants/margin = 8
ColorPicker/constants/sv_height = 256
ColorPicker/constants/sv_width = 256
-ColorPicker/icons/add_preset = SubResource( 25 )
-ColorPicker/icons/color_hue = null
-ColorPicker/icons/color_sample = null
-ColorPicker/icons/overbright_indicator = SubResource( 27 )
-ColorPicker/icons/preset_bg = SubResource( 29 )
-ColorPicker/icons/screen_picker = SubResource( 31 )
-ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 )
-ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 )
-ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 )
+ColorPickerButton/colors/font_color = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3)
+ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1)
+ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1)
ColorPickerButton/constants/hseparation = 2
-ColorPickerButton/fonts/font = ExtResource( 5 )
-ColorPickerButton/icons/bg = SubResource( 29 )
ColorPickerButton/styles/disabled = null
ColorPickerButton/styles/focus = null
-ColorPickerButton/styles/hover = SubResource( 32 )
-ColorPickerButton/styles/normal = SubResource( 33 )
-ColorPickerButton/styles/pressed = SubResource( 34 )
+ColorPickerButton/styles/hover = SubResource("32")
+ColorPickerButton/styles/normal = SubResource("33")
+ColorPickerButton/styles/pressed = SubResource("34")
Dialogs/constants/button_margin = 32
Dialogs/constants/margin = 8
-FileDialog/colors/files_disabled = Color( 0, 0, 0, 0.3 )
-FileDialog/colors/folder_icon_modulate = Color( 1.275, 1.5248, 1.975, 1 )
-FileDialog/icons/folder = SubResource( 36 )
-FileDialog/icons/parent_folder = SubResource( 38 )
-FileDialog/icons/reload = SubResource( 40 )
-FileDialog/icons/toggle_hidden = SubResource( 42 )
-GraphEdit/colors/activity = Color( 0, 0.356863, 1, 1 )
-GraphEdit/colors/grid_major = Color( 0, 0, 0, 0.15 )
-GraphEdit/colors/grid_minor = Color( 0, 0, 0, 0.07 )
-GraphEdit/colors/selection_fill = Color( 0, 0.356863, 1, 0.3 )
-GraphEdit/colors/selection_stroke = Color( 0, 0.356863, 1, 0.8 )
+FileDialog/colors/files_disabled = Color(0, 0, 0, 0.3)
+FileDialog/colors/folder_icon_modulate = Color(1.275, 1.5248, 1.975, 1)
+GraphEdit/colors/activity = Color(0, 0.356863, 1, 1)
+GraphEdit/colors/grid_major = Color(0, 0, 0, 0.15)
+GraphEdit/colors/grid_minor = Color(0, 0, 0, 0.07)
+GraphEdit/colors/selection_fill = Color(0, 0.356863, 1, 0.3)
+GraphEdit/colors/selection_stroke = Color(0, 0.356863, 1, 0.8)
GraphEdit/constants/bezier_len_neg = 160
GraphEdit/constants/bezier_len_pos = 80
-GraphEdit/icons/minus = SubResource( 44 )
-GraphEdit/icons/more = SubResource( 46 )
-GraphEdit/icons/reset = SubResource( 48 )
-GraphEdit/icons/snap = SubResource( 50 )
-GraphEdit/styles/bg = SubResource( 51 )
-GraphNode/colors/close_color = Color( 0, 0, 0, 0.7 )
-GraphNode/colors/resizer_color = Color( 0, 0, 0, 0.7 )
-GraphNode/colors/title_color = Color( 0, 0, 0, 1 )
+GraphEdit/styles/bg = SubResource("51")
+GraphNode/colors/close_color = Color(0, 0, 0, 0.7)
+GraphNode/colors/resizer_color = Color(0, 0, 0, 0.7)
+GraphNode/colors/title_color = Color(0, 0, 0, 1)
GraphNode/constants/close_h_offset = 20
GraphNode/constants/close_offset = 20
GraphNode/constants/port_offset = 14
GraphNode/constants/separation = 1
GraphNode/constants/title_h_offset = -16
GraphNode/constants/title_offset = 20
-GraphNode/icons/close = SubResource( 53 )
-GraphNode/icons/port = SubResource( 55 )
-GraphNode/icons/resizer = SubResource( 57 )
-GraphNode/styles/breakpoint = SubResource( 58 )
-GraphNode/styles/comment = SubResource( 59 )
-GraphNode/styles/commentfocus = SubResource( 60 )
-GraphNode/styles/frame = SubResource( 61 )
-GraphNode/styles/position = SubResource( 62 )
-GraphNode/styles/selectedframe = SubResource( 63 )
-GraphNode/styles/state_machine_frame = SubResource( 64 )
-GraphNode/styles/state_machine_selectedframe = SubResource( 65 )
+GraphNode/styles/breakpoint = SubResource("58")
+GraphNode/styles/comment = SubResource("59")
+GraphNode/styles/commentfocus = SubResource("60")
+GraphNode/styles/frame = SubResource("61")
+GraphNode/styles/position = SubResource("62")
+GraphNode/styles/selectedframe = SubResource("63")
+GraphNode/styles/state_machine_frame = SubResource("64")
+GraphNode/styles/state_machine_selectedframe = SubResource("65")
GridContainer/constants/hseparation = 4
GridContainer/constants/vseparation = 4
HBoxContainer/constants/separation = 4
-HScrollBar/icons/decrement = SubResource( 66 )
-HScrollBar/icons/decrement_highlight = SubResource( 66 )
-HScrollBar/icons/increment = SubResource( 66 )
-HScrollBar/icons/increment_highlight = SubResource( 66 )
-HScrollBar/styles/grabber = SubResource( 69 )
-HScrollBar/styles/grabber_highlight = SubResource( 72 )
-HScrollBar/styles/grabber_pressed = SubResource( 75 )
-HScrollBar/styles/scroll = SubResource( 78 )
-HScrollBar/styles/scroll_focus = SubResource( 79 )
HSeparator/constants/separation = 4
-HSeparator/styles/separator = SubResource( 80 )
-HSlider/icons/grabber = SubResource( 82 )
-HSlider/icons/grabber_disabled = null
-HSlider/icons/grabber_highlight = SubResource( 84 )
-HSlider/icons/tick = null
+HSeparator/styles/separator = SubResource("80")
HSlider/styles/focus = null
-HSlider/styles/grabber_area = SubResource( 85 )
-HSlider/styles/grabber_area_highlight = SubResource( 86 )
+HSlider/styles/grabber_area = SubResource("85")
+HSlider/styles/grabber_area_highlight = SubResource("86")
HSlider/styles/grabber_disabled = null
HSlider/styles/grabber_highlight = null
-HSlider/styles/slider = SubResource( 87 )
+HSlider/styles/slider = SubResource("87")
HSplitContainer/constants/autohide = 1
HSplitContainer/constants/separation = 8
-HSplitContainer/icons/grabber = SubResource( 89 )
-HSplitContainer/styles/bg = SubResource( 90 )
-Header/base_type = "Label"
-Header/colors/font_color = Color( 0.18, 0.18, 0.18, 1 )
-Header/fonts/font = ExtResource( 1 )
-Icons/colors/modulate_color = Color( 0.2, 0.2, 0.2, 1 )
-ItemList/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-ItemList/colors/font_color_selected = Color( 0, 0, 0, 1 )
-ItemList/colors/guide_color = Color( 0, 0, 0, 0.05 )
+Header/base_type = &"Label"
+Header/colors/font_color = Color(0.18, 0.18, 0.18, 1)
+Icons/colors/modulate_color = Color(0.2, 0.2, 0.2, 1)
+ItemList/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+ItemList/colors/font_color_selected = Color(0, 0, 0, 1)
+ItemList/colors/guide_color = Color(0, 0, 0, 0.05)
ItemList/constants/hseparation = 3
ItemList/constants/icon_margin = 4
ItemList/constants/line_separation = 3
ItemList/constants/vseparation = 3
-ItemList/fonts/font = ExtResource( 5 )
-ItemList/styles/bg = SubResource( 91 )
-ItemList/styles/bg_focus = SubResource( 92 )
-ItemList/styles/cursor = SubResource( 93 )
-ItemList/styles/cursor_unfocused = SubResource( 93 )
-ItemList/styles/selected = SubResource( 94 )
-ItemList/styles/selected_focus = SubResource( 95 )
-Label/colors/font_color = Color( 0.25098, 0.25098, 0.25098, 1 )
-Label/colors/font_color_shadow = Color( 0, 0, 0, 0 )
-Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 )
+ItemList/styles/bg = SubResource("91")
+ItemList/styles/bg_focus = SubResource("92")
+ItemList/styles/cursor = SubResource("93")
+ItemList/styles/cursor_unfocused = SubResource("93")
+ItemList/styles/selected = SubResource("94")
+ItemList/styles/selected_focus = SubResource("95")
+Label/colors/font_color = Color(0.25098, 0.25098, 0.25098, 1)
+Label/colors/font_color_shadow = Color(0, 0, 0, 0)
+Label/colors/font_outline_modulate = Color(0, 0, 0, 1)
Label/constants/line_spacing = 3
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/fonts/font = ExtResource( 5 )
-Label/styles/normal = SubResource( 96 )
-LineEdit/colors/clear_button_color = Color( 0.25, 0.25, 0.25, 1 )
-LineEdit/colors/clear_button_color_pressed = Color( 0, 0.356863, 1, 1 )
-LineEdit/colors/cursor_color = Color( 0.25, 0.25, 0.25, 1 )
-LineEdit/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-LineEdit/colors/font_color_selected = Color( 0, 0, 0, 1 )
-LineEdit/colors/font_color_uneditable = Color( 0.5, 0.5, 0.5, 1 )
-LineEdit/colors/read_only = Color( 0, 0, 0, 0.3 )
-LineEdit/colors/selection_color = Color( 0, 0.356863, 1, 0.4 )
+Label/styles/normal = SubResource("96")
+LineEdit/colors/clear_button_color = Color(0.25, 0.25, 0.25, 1)
+LineEdit/colors/clear_button_color_pressed = Color(0, 0.356863, 1, 1)
+LineEdit/colors/cursor_color = Color(0.25, 0.25, 0.25, 1)
+LineEdit/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+LineEdit/colors/font_color_selected = Color(0, 0, 0, 1)
+LineEdit/colors/font_color_uneditable = Color(0.5, 0.5, 0.5, 1)
+LineEdit/colors/read_only = Color(0, 0, 0, 0.3)
+LineEdit/colors/selection_color = Color(0, 0.356863, 1, 0.4)
LineEdit/constants/minimum_spaces = 12
-LineEdit/fonts/font = ExtResource( 5 )
-LineEdit/icons/clear = SubResource( 98 )
-LineEdit/styles/focus = SubResource( 3 )
-LineEdit/styles/normal = SubResource( 5 )
-LineEdit/styles/read_only = SubResource( 2 )
-LinkButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-LinkButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-LinkButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-LinkButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 )
-LinkButton/styles/focus = SubResource( 96 )
+LineEdit/styles/focus = SubResource("3")
+LineEdit/styles/normal = SubResource("5")
+LineEdit/styles/read_only = SubResource("2")
+LinkButton/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+LinkButton/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+LinkButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
+LinkButton/colors/font_color_pressed = Color(0, 0.356863, 1, 1)
+LinkButton/styles/focus = SubResource("96")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
-MenuButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-MenuButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-MenuButton/colors/font_color_pressed = Color( 0, 0, 0, 1 )
+MenuButton/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+MenuButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
+MenuButton/colors/font_color_pressed = Color(0, 0, 0, 1)
MenuButton/constants/hseparation = 3
-MenuButton/fonts/font = ExtResource( 5 )
-MenuButton/styles/disabled = SubResource( 23 )
-MenuButton/styles/focus = SubResource( 23 )
-MenuButton/styles/hover = SubResource( 23 )
-MenuButton/styles/normal = SubResource( 23 )
-MenuButton/styles/pressed = SubResource( 23 )
-Misc/colors/clear_color = Color( 1, 1, 1, 1 )
-OptionButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-OptionButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-OptionButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-OptionButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 )
-OptionButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 )
+MenuButton/styles/disabled = SubResource("23")
+MenuButton/styles/focus = SubResource("23")
+MenuButton/styles/hover = SubResource("23")
+MenuButton/styles/normal = SubResource("23")
+MenuButton/styles/pressed = SubResource("23")
+Misc/colors/clear_color = Color(1, 1, 1, 1)
+OptionButton/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+OptionButton/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+OptionButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
+OptionButton/colors/font_color_pressed = Color(0, 0.356863, 1, 1)
+OptionButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/hseparation = 4
OptionButton/constants/modulate_arrow = 1
-OptionButton/fonts/font = ExtResource( 5 )
-OptionButton/icons/arrow = SubResource( 100 )
-OptionButton/styles/disabled = SubResource( 2 )
-OptionButton/styles/focus = SubResource( 3 )
-OptionButton/styles/hover = SubResource( 4 )
-OptionButton/styles/normal = SubResource( 5 )
-OptionButton/styles/pressed = SubResource( 6 )
-Panel/styles/panel = SubResource( 102 )
-PanelContainer/styles/panel = SubResource( 103 )
-PopupDialog/styles/panel = SubResource( 104 )
-PopupMenu/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-PopupMenu/colors/font_color_accel = Color( 0, 0, 0, 0.3 )
-PopupMenu/colors/font_color_disabled = Color( 0, 0, 0, 0.3 )
-PopupMenu/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
+OptionButton/styles/disabled = SubResource("2")
+OptionButton/styles/focus = SubResource("3")
+OptionButton/styles/hover = SubResource("4")
+OptionButton/styles/normal = SubResource("5")
+OptionButton/styles/pressed = SubResource("6")
+Panel/styles/panel = SubResource("102")
+PanelContainer/styles/panel = SubResource("103")
+Popup/styles/panel = SubResource("104")
+PopupMenu/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+PopupMenu/colors/font_color_accel = Color(0, 0, 0, 0.3)
+PopupMenu/colors/font_color_disabled = Color(0, 0, 0, 0.3)
+PopupMenu/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1)
PopupMenu/constants/hseparation = 4
PopupMenu/constants/vseparation = 5
-PopupMenu/fonts/font = ExtResource( 5 )
-PopupMenu/icons/checked = SubResource( 8 )
-PopupMenu/icons/radio_checked = SubResource( 10 )
-PopupMenu/icons/radio_unchecked = SubResource( 12 )
-PopupMenu/icons/submenu = SubResource( 106 )
-PopupMenu/icons/unchecked = SubResource( 14 )
-PopupMenu/icons/visibility_hidden = SubResource( 108 )
-PopupMenu/icons/visibility_visible = SubResource( 42 )
-PopupMenu/icons/visibility_xray = SubResource( 110 )
-PopupMenu/styles/disabled = SubResource( 23 )
-PopupMenu/styles/focus = SubResource( 23 )
-PopupMenu/styles/hover = SubResource( 111 )
-PopupMenu/styles/labeled_separator_left = SubResource( 112 )
-PopupMenu/styles/labeled_separator_right = SubResource( 113 )
-PopupMenu/styles/normal = SubResource( 23 )
-PopupMenu/styles/panel = SubResource( 104 )
+PopupMenu/styles/disabled = SubResource("23")
+PopupMenu/styles/focus = SubResource("23")
+PopupMenu/styles/hover = SubResource("111")
+PopupMenu/styles/labeled_separator_left = SubResource("112")
+PopupMenu/styles/labeled_separator_right = SubResource("113")
+PopupMenu/styles/normal = SubResource("23")
+PopupMenu/styles/panel = SubResource("104")
PopupMenu/styles/panel_disabled = null
-PopupMenu/styles/pressed = SubResource( 23 )
-PopupMenu/styles/separator = SubResource( 114 )
-PopupPanel/styles/panel = SubResource( 104 )
-ProgressBar/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-ProgressBar/styles/bg = SubResource( 117 )
-ProgressBar/styles/fg = SubResource( 120 )
-ProjectSettingsEditor/styles/panel = SubResource( 121 )
-RichTextLabel/colors/default_color = Color( 0.25, 0.25, 0.25, 1 )
-RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+PopupMenu/styles/pressed = SubResource("23")
+PopupMenu/styles/separator = SubResource("114")
+PopupPanel/styles/panel = SubResource("104")
+ProgressBar/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+ProjectSettingsEditor/styles/panel = SubResource("121")
+RichTextLabel/colors/default_color = Color(0.25, 0.25, 0.25, 1)
+RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0)
RichTextLabel/constants/shadow_as_outline = 0
RichTextLabel/constants/shadow_offset_x = 1
RichTextLabel/constants/shadow_offset_y = 1
-RichTextLabel/styles/focus = SubResource( 122 )
-RichTextLabel/styles/normal = SubResource( 51 )
-RulerButton/base_type = "Button"
-RulerButton/styles/focus = SubResource( 1 )
-RulerButton/styles/hover = SubResource( 1 )
-RulerButton/styles/normal = SubResource( 1 )
-RulerButton/styles/pressed = SubResource( 1 )
-SpinBox/icons/updown = SubResource( 124 )
-TabContainer/colors/font_color_bg = Color( 0, 0, 0, 0.3 )
-TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-TabContainer/colors/font_color_fg = Color( 0.25, 0.25, 0.25, 1 )
+RichTextLabel/styles/focus = SubResource("122")
+RichTextLabel/styles/normal = SubResource("51")
+RulerButton/base_type = &"Button"
+RulerButton/styles/focus = SubResource("1")
+RulerButton/styles/hover = SubResource("1")
+RulerButton/styles/normal = SubResource("1")
+RulerButton/styles/pressed = SubResource("1")
+TabBar/colors/font_color_bg = Color(0, 0, 0, 0.3)
+TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabBar/colors/font_color_fg = Color(0.25, 0.25, 0.25, 1)
+TabBar/constants/hseparation = 4
+TabBar/constants/label_valign_bg = 2
+TabBar/constants/label_valign_fg = 0
+TabBar/constants/top_margin = 24
+TabBar/styles/button = SubResource("23")
+TabBar/styles/button_pressed = SubResource("23")
+TabBar/styles/panel = SubResource("141")
+TabBar/styles/tab_bg = SubResource("138")
+TabBar/styles/tab_disabled = SubResource("139")
+TabBar/styles/tab_fg = SubResource("140")
+TabContainer/colors/font_color_bg = Color(0, 0, 0, 0.3)
+TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2)
+TabContainer/colors/font_color_fg = Color(0.25, 0.25, 0.25, 1)
TabContainer/constants/hseparation = 4
TabContainer/constants/label_valign_bg = 2
TabContainer/constants/label_valign_fg = 0
TabContainer/constants/side_margin = 0
TabContainer/constants/top_margin = 24
-TabContainer/fonts/font = ExtResource( 5 )
-TabContainer/icons/decrement = SubResource( 126 )
-TabContainer/icons/decrement_highlight = SubResource( 128 )
-TabContainer/icons/increment = SubResource( 130 )
-TabContainer/icons/increment_highlight = SubResource( 132 )
-TabContainer/icons/menu = SubResource( 134 )
-TabContainer/icons/menu_highlight = SubResource( 136 )
-TabContainer/styles/panel = SubResource( 137 )
-TabContainer/styles/tab_bg = SubResource( 138 )
-TabContainer/styles/tab_disabled = SubResource( 139 )
-TabContainer/styles/tab_fg = SubResource( 140 )
-Tabs/colors/font_color_bg = Color( 0, 0, 0, 0.3 )
-Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
-Tabs/colors/font_color_fg = Color( 0.25, 0.25, 0.25, 1 )
-Tabs/constants/hseparation = 4
-Tabs/constants/label_valign_bg = 2
-Tabs/constants/label_valign_fg = 0
-Tabs/constants/top_margin = 24
-Tabs/fonts/font = ExtResource( 5 )
-Tabs/icons/close = SubResource( 98 )
-Tabs/icons/decrement = SubResource( 126 )
-Tabs/icons/decrement_highlight = SubResource( 128 )
-Tabs/icons/increment = SubResource( 130 )
-Tabs/icons/increment_highlight = SubResource( 132 )
-Tabs/styles/button = SubResource( 23 )
-Tabs/styles/button_pressed = SubResource( 23 )
-Tabs/styles/panel = SubResource( 141 )
-Tabs/styles/tab_bg = SubResource( 138 )
-Tabs/styles/tab_disabled = SubResource( 139 )
-Tabs/styles/tab_fg = SubResource( 140 )
-TextEdit/colors/background_color = Color( 0, 0, 0, 0 )
-TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 )
-TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 )
-TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 )
-TextEdit/colors/caret_color = Color( 0.25, 0.25, 0.25, 1 )
-TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 )
-TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 )
-TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 )
-TextEdit/colors/completion_font_color = Color( 0.371094, 0.00724792, 0.00724792, 1 )
-TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 )
-TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 )
-TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 )
-TextEdit/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 )
-TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 )
-TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 )
-TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 )
-TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 )
-TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 )
-TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 )
-TextEdit/colors/selection_color = Color( 0, 0.356863, 1, 0.4 )
-TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 )
-TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 )
+TabContainer/styles/panel = SubResource("137")
+TabContainer/styles/tab_bg = SubResource("138")
+TabContainer/styles/tab_disabled = SubResource("139")
+TabContainer/styles/tab_fg = SubResource("140")
+TextEdit/colors/background_color = Color(0, 0, 0, 0)
+TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1)
+TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2)
+TextEdit/colors/caret_background_color = Color(0, 0, 0, 1)
+TextEdit/colors/caret_color = Color(0.25, 0.25, 0.25, 1)
+TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8)
+TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1)
+TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412)
+TextEdit/colors/completion_font_color = Color(0.371094, 0.00724792, 0.00724792, 1)
+TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1)
+TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1)
+TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8)
+TextEdit/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+TextEdit/colors/font_color_selected = Color(0, 0, 0, 1)
+TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1)
+TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4)
+TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4)
+TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1)
+TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1)
+TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6)
+TextEdit/colors/selection_color = Color(0, 0.356863, 1, 0.4)
+TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1)
+TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15)
TextEdit/constants/completion_lines = 7
TextEdit/constants/completion_max_width = 50
TextEdit/constants/completion_scroll_width = 3
TextEdit/constants/line_spacing = 4
-TextEdit/fonts/font = ExtResource( 5 )
-TextEdit/icons/fold = SubResource( 143 )
-TextEdit/icons/folded = SubResource( 145 )
-TextEdit/icons/space = SubResource( 147 )
-TextEdit/icons/tab = SubResource( 149 )
TextEdit/styles/completion = null
-TextEdit/styles/focus = SubResource( 4 )
-TextEdit/styles/normal = SubResource( 5 )
-TextEdit/styles/read_only = SubResource( 2 )
-ToolButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-ToolButton/colors/font_color_disabled = Color( 0.9, 0.95, 1, 0.3 )
-ToolButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 )
-ToolButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 )
-ToolButton/constants/hseparation = 3
-ToolButton/fonts/font = ExtResource( 5 )
-ToolButton/styles/disabled = SubResource( 23 )
-ToolButton/styles/focus = SubResource( 23 )
-ToolButton/styles/hover = SubResource( 23 )
-ToolButton/styles/normal = SubResource( 23 )
-ToolButton/styles/pressed = SubResource( 23 )
-TooltipLabel/colors/font_color = Color( 0.75, 0.75, 0.75, 1 )
-TooltipLabel/colors/font_color_shadow = Color( 1, 1, 1, 0.1 )
-TooltipPanel/styles/panel = SubResource( 150 )
-TopMenuPanel/base_type = "Panel"
-TopMenuPanel/styles/panel = SubResource( 101 )
-Tree/colors/cursor_color = Color( 0, 0, 0, 1 )
-Tree/colors/custom_button_font_highlight = Color( 0.15, 0.15, 0.15, 1 )
-Tree/colors/drop_position_color = Color( 0, 0.356863, 1, 1 )
-Tree/colors/font_color = Color( 0.25, 0.25, 0.25, 1 )
-Tree/colors/font_color_selected = Color( 0, 0, 0, 1 )
-Tree/colors/guide_color = Color( 0, 0, 0, 0.05 )
-Tree/colors/relationship_line_color = Color( 0, 0, 0, 0.1 )
-Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 )
-Tree/colors/title_button_color = Color( 0.25, 0.25, 0.25, 1 )
+TextEdit/styles/focus = SubResource("4")
+TextEdit/styles/normal = SubResource("5")
+TextEdit/styles/read_only = SubResource("2")
+TooltipLabel/colors/font_color = Color(0.75, 0.75, 0.75, 1)
+TooltipLabel/colors/font_color_shadow = Color(1, 1, 1, 0.1)
+TooltipPanel/styles/panel = SubResource("150")
+TopMenuPanel/base_type = &"Panel"
+TopMenuPanel/styles/panel = SubResource("101")
+Tree/colors/cursor_color = Color(0, 0, 0, 1)
+Tree/colors/custom_button_font_highlight = Color(0.15, 0.15, 0.15, 1)
+Tree/colors/drop_position_color = Color(0, 0.356863, 1, 1)
+Tree/colors/font_color = Color(0.25, 0.25, 0.25, 1)
+Tree/colors/font_color_selected = Color(0, 0, 0, 1)
+Tree/colors/guide_color = Color(0, 0, 0, 0.05)
+Tree/colors/relationship_line_color = Color(0, 0, 0, 0.1)
+Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8)
+Tree/colors/title_button_color = Color(0.25, 0.25, 0.25, 1)
Tree/constants/button_margin = 4
Tree/constants/draw_guides = 0
Tree/constants/draw_relationship_lines = 1
@@ -1884,63 +864,39 @@ Tree/constants/item_margin = 12
Tree/constants/scroll_border = 40
Tree/constants/scroll_speed = 12
Tree/constants/vseparation = 4
-Tree/fonts/font = ExtResource( 5 )
-Tree/fonts/title_button_font = ExtResource( 5 )
-Tree/icons/arrow = SubResource( 143 )
-Tree/icons/arrow_collapsed = SubResource( 145 )
-Tree/icons/checked = SubResource( 8 )
-Tree/icons/select_arrow = SubResource( 152 )
-Tree/icons/unchecked = SubResource( 14 )
-Tree/icons/updown = SubResource( 154 )
-Tree/styles/bg = SubResource( 51 )
-Tree/styles/bg_focus = SubResource( 92 )
-Tree/styles/button_pressed = SubResource( 155 )
-Tree/styles/cursor = SubResource( 156 )
-Tree/styles/cursor_unfocused = SubResource( 156 )
-Tree/styles/custom_button = SubResource( 157 )
-Tree/styles/custom_button_hover = SubResource( 5 )
-Tree/styles/custom_button_pressed = SubResource( 158 )
-Tree/styles/hover = SubResource( 159 )
-Tree/styles/selected = SubResource( 94 )
-Tree/styles/selected_focus = SubResource( 95 )
-Tree/styles/title_button_hover = SubResource( 160 )
-Tree/styles/title_button_normal = SubResource( 160 )
-Tree/styles/title_button_pressed = SubResource( 160 )
+Tree/styles/bg = SubResource("51")
+Tree/styles/bg_focus = SubResource("92")
+Tree/styles/button_pressed = SubResource("155")
+Tree/styles/cursor = SubResource("156")
+Tree/styles/cursor_unfocused = SubResource("156")
+Tree/styles/custom_button = SubResource("157")
+Tree/styles/custom_button_hover = SubResource("5")
+Tree/styles/custom_button_pressed = SubResource("158")
+Tree/styles/hover = SubResource("159")
+Tree/styles/selected = SubResource("94")
+Tree/styles/selected_focus = SubResource("95")
+Tree/styles/title_button_hover = SubResource("160")
+Tree/styles/title_button_normal = SubResource("160")
+Tree/styles/title_button_pressed = SubResource("160")
VBoxContainer/constants/separation = 4
-VScrollBar/icons/decrement = SubResource( 66 )
-VScrollBar/icons/decrement_highlight = SubResource( 66 )
-VScrollBar/icons/increment = SubResource( 66 )
-VScrollBar/icons/increment_highlight = SubResource( 66 )
-VScrollBar/styles/grabber = SubResource( 161 )
-VScrollBar/styles/grabber_highlight = SubResource( 162 )
-VScrollBar/styles/grabber_pressed = SubResource( 163 )
-VScrollBar/styles/scroll = SubResource( 164 )
-VScrollBar/styles/scroll_focus = SubResource( 165 )
VSeparator/constants/separation = 4
-VSeparator/styles/separator = SubResource( 166 )
-VSlider/icons/grabber = SubResource( 82 )
-VSlider/icons/grabber_highlight = SubResource( 84 )
-VSlider/styles/grabber_area = SubResource( 167 )
-VSlider/styles/grabber_area_highlight = SubResource( 168 )
-VSlider/styles/slider = SubResource( 169 )
+VSeparator/styles/separator = SubResource("166")
+VSlider/styles/grabber_area = SubResource("167")
+VSlider/styles/grabber_area_highlight = SubResource("168")
+VSlider/styles/slider = SubResource("169")
VSplitContainer/constants/autohide = 1
VSplitContainer/constants/separation = 8
-VSplitContainer/icons/grabber = SubResource( 171 )
-VSplitContainer/styles/bg = SubResource( 174 )
-ValueSlider/colors/progress_color = Color( 0.74902, 0.74902, 0.74902, 1 )
-ValueSlider/colors/under_color = Color( 0.839216, 0.839216, 0.839216, 1 )
-ValueSlider/icons/arrow_hover = ExtResource( 2 )
-ValueSlider/icons/arrow_normal = ExtResource( 6 )
-ValueSlider/icons/arrow_pressed = ExtResource( 4 )
+ValueSlider/colors/progress_color = Color(0.74902, 0.74902, 0.74902, 1)
+ValueSlider/colors/under_color = Color(0.839216, 0.839216, 0.839216, 1)
+ValueSlider/icons/arrow_hover = ExtResource("2")
+ValueSlider/icons/arrow_normal = ExtResource("6")
+ValueSlider/icons/arrow_pressed = ExtResource("4")
ValueSlider/icons/texture_over = null
-ValueSlider/icons/texture_progress = ExtResource( 3 )
-ValueSlider/icons/texture_under = ExtResource( 3 )
-WindowDialog/colors/title_color = Color( 0.25, 0.25, 0.25, 1 )
-WindowDialog/constants/close_h_ofs = 22
-WindowDialog/constants/close_v_ofs = 20
-WindowDialog/constants/scaleborder_size = 4
-WindowDialog/constants/title_height = 24
-WindowDialog/fonts/title_font = ExtResource( 5 )
-WindowDialog/icons/close = SubResource( 98 )
-WindowDialog/icons/close_highlight = SubResource( 98 )
-WindowDialog/styles/panel = SubResource( 175 )
+ValueSlider/icons/texture_progress = ExtResource("3")
+ValueSlider/icons/texture_under = ExtResource("3")
+Window/colors/title_color = Color(0.25, 0.25, 0.25, 1)
+Window/constants/close_h_ofs = 22
+Window/constants/close_v_ofs = 20
+Window/constants/scaleborder_size = 4
+Window/constants/title_height = 24
+Window/styles/panel = SubResource("175")
diff --git a/assets/themes/purple/theme.tres b/assets/themes/purple/theme.tres
index aa990853c31..e983b73ff26 100644
--- a/assets/themes/purple/theme.tres
+++ b/assets/themes/purple/theme.tres
@@ -1,1748 +1,747 @@
-[gd_resource type="Theme" load_steps=177 format=2]
+[gd_resource type="Theme" load_steps=59 format=3 uid="uid://ckl3tycfj62pb"]
-[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
-[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
-[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
+[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="3"]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"]
+[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="7_0f141"]
-[sub_resource type="StyleBoxFlat" id=2]
+[sub_resource type="StyleBoxFlat" id="22"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.176471, 0.109412, 0.254118, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.137255, 0.085098, 0.197647, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=3]
-content_margin_left = 6.0
content_margin_right = 6.0
-content_margin_top = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.662745, 0, 1, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=4]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.397059, 0.341176, 0.461765, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=5]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="StyleBoxFlat" id=6]
-content_margin_left = 6.0
-content_margin_right = 6.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.662745, 0, 1, 1 )
-corner_radius_top_left = 2
-corner_radius_top_right = 2
-corner_radius_bottom_right = 2
-corner_radius_bottom_left = 2
-
-[sub_resource type="Image" id=171]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 243, 223, 223, 223, 105, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 104, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 225, 225, 225, 51, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 48, 224, 224, 224, 66, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 103, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 217, 217, 217, 48, 223, 223, 223, 178, 222, 222, 222, 231, 220, 220, 220, 74, 222, 222, 222, 102, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 194, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 219, 219, 219, 64, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 233, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 195, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 224, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 66, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=8]
-flags = 0
-flags = 0
-image = SubResource( 171 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=172]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 221, 221, 221, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 217, 217, 217, 68, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 179, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 223, 223, 223, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=10]
-flags = 0
-flags = 0
-image = SubResource( 172 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=173]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=12]
-flags = 0
-flags = 0
-image = SubResource( 173 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=174]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=14]
-flags = 0
-flags = 0
-image = SubResource( 174 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=15]
-content_margin_left = 4.0
-content_margin_right = 4.0
-content_margin_top = 4.0
-content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
draw_center = false
-border_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
-
-[sub_resource type="Image" id=175]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 219, 219, 219, 94, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 220, 220, 220, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=17]
-flags = 0
-flags = 0
-image = SubResource( 175 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="Image" id=176]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+border_color = Color(0.122549, 0.0759804, 0.176471, 1)
-[sub_resource type="ImageTexture" id=19]
-flags = 4
-flags = 4
-image = SubResource( 176 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=177]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 66, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 223, 220, 220, 220, 66, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 223, 223, 223, 65, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 217, 217, 217, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 12, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 223, 223, 223, 222, 212, 212, 212, 12, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 120, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 120, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 75, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 0, 221, 221, 221, 75, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 214, 214, 214, 25, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 216, 216, 216, 20, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 71, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 121, 223, 223, 223, 0, 215, 215, 215, 0, 215, 215, 215, 13, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 222, 222, 222, 223, 215, 215, 215, 13, 215, 215, 215, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 66, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 254, 220, 220, 220, 66, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 220, 220, 220, 66, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 220, 220, 220, 66, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 38
-}
-
-[sub_resource type="ImageTexture" id=21]
-flags = 0
-flags = 0
-image = SubResource( 177 )
-size = Vector2( 38, 16 )
-
-[sub_resource type="StyleBoxFlat" id=22]
-content_margin_left = 6.0
-content_margin_right = 6.0
+[sub_resource type="StyleBoxFlat" id="15"]
+content_margin_left = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
draw_center = false
-border_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
-
-[sub_resource type="Image" id=178]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=24]
-flags = 0
-flags = 0
-image = SubResource( 178 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=179]
-data = {
-"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=26]
-flags = 0
-flags = 0
-image = SubResource( 179 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=180]
-data = {
-"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=28]
-flags = 0
-flags = 0
-image = SubResource( 180 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=181]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 218, 222, 222, 222, 70, 222, 222, 222, 70, 223, 223, 223, 218, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 65, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 65, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=30]
-flags = 0
-flags = 0
-image = SubResource( 181 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=182]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=32]
-flags = 0
-flags = 0
-image = SubResource( 182 )
-size = Vector2( 16, 16 )
+border_color = Color(0.122549, 0.0759804, 0.176471, 1)
-[sub_resource type="Image" id=183]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 199, 222, 222, 222, 198, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 218, 218, 218, 21, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 216, 216, 216, 20, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 216, 216, 216, 20, 223, 223, 223, 209, 223, 223, 223, 254, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 251, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 193, 223, 223, 223, 254, 222, 222, 222, 206, 214, 214, 214, 19, 223, 223, 223, 254, 223, 223, 223, 249, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 193, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 192, 214, 214, 214, 19, 217, 217, 217, 0, 223, 223, 223, 254, 223, 223, 223, 249, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 192, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=34]
-flags = 0
-flags = 0
-image = SubResource( 183 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=184]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 98, 223, 223, 223, 177, 223, 223, 223, 228, 223, 223, 223, 228, 223, 223, 223, 177, 223, 223, 223, 98, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 23, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 185, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 215, 215, 215, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 174, 223, 223, 223, 254, 222, 222, 222, 87, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 87, 223, 223, 223, 254, 222, 222, 222, 174, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 147, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 161, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 212, 212, 212, 0, 212, 212, 212, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 214, 204, 204, 204, 10, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 178, 223, 223, 223, 0, 0, 0, 0, 0, 214, 214, 214, 0, 217, 217, 217, 34, 223, 223, 223, 240, 223, 223, 223, 245, 218, 218, 218, 42, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 96, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 221, 221, 221, 84, 223, 223, 223, 97, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 186, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 228, 223, 223, 223, 177, 221, 221, 221, 99, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=36]
-flags = 0
-flags = 0
-image = SubResource( 184 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=185]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 221, 221, 221, 0, 221, 221, 221, 92, 223, 223, 223, 185, 222, 222, 222, 231, 222, 222, 222, 231, 223, 223, 223, 186, 222, 222, 222, 95, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 218, 218, 218, 35, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 41, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 0, 223, 223, 223, 32, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 228, 218, 218, 218, 35, 194, 194, 194, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 213, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 217, 170, 170, 170, 3, 170, 170, 170, 0, 223, 223, 223, 0, 223, 223, 223, 89, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 87, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 200, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 87, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 93, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 24, 222, 222, 222, 0, 222, 222, 222, 198, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 198, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 19, 218, 218, 218, 0, 222, 222, 222, 199, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 199, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 254, 221, 221, 221, 84, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 201, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 224, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 222, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 196, 196, 196, 0, 223, 223, 223, 41, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 232, 223, 223, 223, 41, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 44, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 220, 220, 220, 44, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 127, 127, 127, 2, 223, 223, 223, 98, 222, 222, 222, 190, 223, 223, 223, 232, 223, 223, 223, 232, 222, 222, 222, 190, 223, 223, 223, 98, 127, 127, 127, 2, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=38]
-flags = 0
-flags = 0
-image = SubResource( 185 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=186]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=40]
-flags = 0
-flags = 0
-image = SubResource( 186 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=187]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=42]
-flags = 0
-flags = 0
-image = SubResource( 187 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=188]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=44]
-flags = 0
-flags = 0
-image = SubResource( 188 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=189]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 115, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 114, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 160, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 160, 255, 255, 255, 17, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 110, 255, 255, 255, 174, 255, 255, 255, 131, 255, 255, 255, 35, 255, 255, 255, 35, 255, 255, 255, 131, 255, 255, 255, 174, 255, 255, 255, 110, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 153, 255, 255, 255, 174, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 174, 255, 255, 255, 153, 255, 255, 255, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=46]
-flags = 0
-flags = 0
-image = SubResource( 189 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=47]
+[sub_resource type="StyleBoxFlat" id="47"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 )
-
-[sub_resource type="Image" id=190]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=49]
-flags = 0
-flags = 0
-image = SubResource( 190 )
-size = Vector2( 16, 16 )
+border_color = Color(0.0980392, 0.0607843, 0.141176, 1)
-[sub_resource type="Image" id=191]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 10,
-"mipmaps": false,
-"width": 10
-}
-
-[sub_resource type="ImageTexture" id=51]
-flags = 0
-flags = 0
-image = SubResource( 191 )
-size = Vector2( 10, 10 )
-
-[sub_resource type="Image" id=192]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=53]
-flags = 0
-flags = 0
-image = SubResource( 192 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=54]
+[sub_resource type="StyleBoxFlat" id="54"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.87, 0.4, 1 )
-shadow_color = Color( 1, 0.87, 0.4, 0.1 )
+border_color = Color(1, 0.87, 0.4, 1)
+shadow_color = Color(1, 0.87, 0.4, 0.1)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=55]
+[sub_resource type="StyleBoxFlat" id="55"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.3 )
+bg_color = Color(0, 0, 0, 0.3)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=56]
+[sub_resource type="StyleBoxFlat" id="56"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.4 )
+bg_color = Color(0, 0, 0, 0.4)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=57]
+[sub_resource type="StyleBoxFlat" id="57"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=58]
+[sub_resource type="StyleBoxFlat" id="58"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 0.47, 0.42, 1 )
-shadow_color = Color( 1, 0.47, 0.42, 0.2 )
+border_color = Color(1, 0.47, 0.42, 1)
+shadow_color = Color(1, 0.47, 0.42, 0.2)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=59]
+[sub_resource type="StyleBoxFlat" id="59"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.662745, 0, 1, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.662745, 0, 1, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="StyleBoxFlat" id=60]
+[sub_resource type="StyleBoxFlat" id="60"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.7 )
+bg_color = Color(0, 0, 0, 0.7)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.9 )
+border_color = Color(1, 1, 1, 0.9)
-[sub_resource type="StyleBoxFlat" id=61]
+[sub_resource type="StyleBoxFlat" id="61"]
content_margin_left = 28.0
-content_margin_right = 28.0
content_margin_top = 24.0
+content_margin_right = 28.0
content_margin_bottom = 5.0
-bg_color = Color( 0, 0, 0, 0.9 )
+bg_color = Color(0, 0, 0, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.662745, 0, 1, 0.9 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.662745, 0, 1, 0.9)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 8
-[sub_resource type="ImageTexture" id=62]
-
-[sub_resource type="Image" id=193]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=64]
-flags = 0
-flags = 0
-image = SubResource( 193 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=65]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 64 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=194]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=67]
-flags = 0
-flags = 0
-image = SubResource( 194 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxLine" id="76"]
+color = Color(1, 1, 1, 0.1)
-[sub_resource type="StyleBoxTexture" id=68]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 67 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="Image" id=195]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=70]
-flags = 0
-flags = 0
-image = SubResource( 195 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=71]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 70 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="Image" id=196]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=73]
-flags = 0
-flags = 0
-image = SubResource( 196 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="StyleBoxTexture" id=74]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=75]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=76]
-color = Color( 1, 1, 1, 0.1 )
-
-[sub_resource type="Image" id=197]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 190, 190, 0, 210, 210, 210, 17, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 210, 210, 210, 17, 190, 190, 190, 0, 0, 0, 0, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 62, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 62, 170, 170, 170, 3, 170, 170, 170, 0, 216, 216, 216, 0, 216, 216, 216, 33, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 216, 216, 216, 33, 216, 216, 216, 0, 219, 219, 219, 0, 219, 219, 219, 50, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 219, 219, 219, 50, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 65, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 51, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 220, 220, 220, 51, 220, 220, 220, 0, 218, 218, 218, 0, 218, 218, 218, 35, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 218, 218, 218, 35, 218, 218, 218, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 63, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 191, 191, 191, 0, 212, 212, 212, 18, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 212, 212, 212, 18, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=78]
-flags = 0
-flags = 0
-image = SubResource( 197 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=198]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 63, 223, 223, 223, 221, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 222, 222, 222, 62, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 0, 0, 0, 1, 148, 148, 148, 0, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 222, 222, 222, 62, 215, 215, 215, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 220, 224, 224, 224, 255, 223, 223, 223, 114, 233, 233, 233, 0, 237, 237, 237, 0, 127, 127, 127, 0, 255, 255, 255, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 219, 208, 208, 208, 11, 208, 208, 208, 0, 222, 222, 222, 0, 222, 222, 222, 118, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 222, 222, 222, 118, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 123, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 223, 223, 223, 123, 223, 223, 223, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 222, 224, 224, 224, 255, 223, 223, 223, 112, 233, 233, 233, 0, 237, 237, 237, 0, 255, 255, 255, 0, 127, 127, 127, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 221, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 215, 215, 215, 0, 223, 223, 223, 64, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 148, 148, 148, 0, 0, 0, 0, 1, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=80]
-flags = 0
-flags = 0
-image = SubResource( 198 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=81]
+[sub_resource type="StyleBoxFlat" id="81"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.397059, 0.341176, 0.461765, 1 )
+bg_color = Color(0.397059, 0.341176, 0.461765, 1)
-[sub_resource type="StyleBoxFlat" id=82]
+[sub_resource type="StyleBoxFlat" id="82"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.397059, 0.341176, 0.461765, 1 )
+bg_color = Color(0.397059, 0.341176, 0.461765, 1)
-[sub_resource type="StyleBoxFlat" id=83]
+[sub_resource type="StyleBoxFlat" id="83"]
content_margin_left = 0.0
-content_margin_right = 0.0
content_margin_top = 2.0
+content_margin_right = 0.0
content_margin_bottom = 2.0
-bg_color = Color( 0.0980392, 0.0607843, 0.141176, 1 )
+bg_color = Color(0.0980392, 0.0607843, 0.141176, 1)
-[sub_resource type="Image" id=199]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 64,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=85]
-flags = 0
-flags = 0
-image = SubResource( 199 )
-size = Vector2( 8, 64 )
-
-[sub_resource type="StyleBoxTexture" id=86]
-texture = SubResource( 19 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=87]
+[sub_resource type="StyleBoxFlat" id="87"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 )
+border_color = Color(0.0980392, 0.0607843, 0.141176, 1)
-[sub_resource type="StyleBoxFlat" id=88]
+[sub_resource type="StyleBoxFlat" id="88"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.497549, 0.45098, 0.551471, 1 )
+border_color = Color(0.497549, 0.45098, 0.551471, 1)
-[sub_resource type="StyleBoxFlat" id=89]
+[sub_resource type="StyleBoxFlat" id="89"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 0.2 )
+border_color = Color(1, 1, 1, 0.2)
-[sub_resource type="StyleBoxFlat" id=90]
+[sub_resource type="StyleBoxFlat" id="90"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.196078, 0.121569, 0.282353, 1)
-[sub_resource type="StyleBoxFlat" id=91]
+[sub_resource type="StyleBoxFlat" id="91"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.2 )
-border_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(1, 1, 1, 0.2)
+border_color = Color(0.196078, 0.121569, 0.282353, 1)
-[sub_resource type="StyleBoxEmpty" id=92]
+[sub_resource type="StyleBoxEmpty" id="92"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id=200]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
+[sub_resource type="StyleBoxFlat" id="3"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.662745, 0, 1, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=94]
-flags = 0
-flags = 0
-image = SubResource( 200 )
-size = Vector2( 16, 16 )
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.122549, 0.0759804, 0.176471, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="Image" id=201]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 121, 255, 255, 255, 151, 255, 255, 255, 15, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 149, 255, 255, 255, 125, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 142, 255, 255, 255, 199, 255, 255, 255, 163, 255, 255, 255, 15, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 144, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 163, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 15, 255, 255, 255, 14, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 166, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 155, 255, 255, 255, 157, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
+[sub_resource type="StyleBoxFlat" id="2"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.176471, 0.109412, 0.254118, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.137255, 0.085098, 0.197647, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="ImageTexture" id=96]
-flags = 0
-flags = 0
-image = SubResource( 201 )
-size = Vector2( 12, 12 )
+[sub_resource type="StyleBoxFlat" id="4"]
+content_margin_left = 6.0
+content_margin_top = 4.0
+content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.397059, 0.341176, 0.461765, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=98]
+[sub_resource type="StyleBoxFlat" id="6"]
content_margin_left = 6.0
+content_margin_top = 4.0
content_margin_right = 6.0
+content_margin_bottom = 4.0
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.662745, 0, 1, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[sub_resource type="StyleBoxFlat" id="98"]
+content_margin_left = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.14902, 0.0901961, 0.211765, 1 )
+bg_color = Color(0.14902, 0.0901961, 0.211765, 1)
-[sub_resource type="StyleBoxFlat" id=99]
+[sub_resource type="StyleBoxFlat" id="99"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 2.0
+content_margin_right = 2.0
content_margin_bottom = 2.0
-bg_color = Color( 0.101961, 0.054902, 0.168627, 1 )
+bg_color = Color(0.101961, 0.054902, 0.168627, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="StyleBoxFlat" id=100]
+[sub_resource type="StyleBoxFlat" id="100"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.397059, 0.341176, 0.461765, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(0.397059, 0.341176, 0.461765, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="Image" id=202]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 197, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 190, 223, 223, 223, 254, 223, 223, 223, 210, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 214, 214, 214, 19, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 189, 223, 223, 223, 254, 223, 223, 223, 212, 220, 220, 220, 22, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 222, 222, 222, 198, 221, 221, 221, 23, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=102]
-flags = 0
-flags = 0
-image = SubResource( 202 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=203]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 222, 222, 222, 31, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 178, 223, 223, 223, 254, 223, 223, 223, 81, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 213, 0, 223, 223, 223, 81, 223, 223, 223, 254, 223, 223, 223, 177, 223, 223, 223, 0, 221, 221, 221, 0, 221, 221, 221, 84, 223, 223, 223, 254, 223, 223, 223, 204, 204, 204, 204, 5, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 204, 5, 223, 223, 223, 204, 223, 223, 223, 254, 221, 221, 221, 84, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 176, 204, 204, 204, 5, 213, 213, 213, 0, 220, 220, 220, 0, 220, 220, 220, 0, 213, 213, 213, 0, 204, 204, 204, 5, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 209, 0, 0, 0, 1, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 213, 223, 223, 223, 88, 220, 220, 220, 22, 220, 220, 220, 22, 223, 223, 223, 88, 222, 222, 222, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 214, 214, 214, 19, 214, 214, 214, 0, 198, 198, 198, 0, 198, 198, 198, 9, 223, 223, 223, 194, 222, 222, 222, 214, 222, 222, 222, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 215, 222, 222, 222, 214, 223, 223, 223, 194, 198, 198, 198, 9, 198, 198, 198, 0, 0, 0, 0, 0, 201, 201, 201, 0, 204, 204, 204, 10, 216, 216, 216, 20, 204, 204, 204, 5, 223, 223, 223, 105, 223, 223, 223, 187, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 187, 223, 223, 223, 105, 204, 204, 204, 5, 216, 216, 216, 20, 204, 204, 204, 10, 201, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 223, 223, 223, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=104]
-flags = 0
-flags = 0
-image = SubResource( 203 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=204]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 0, 219, 219, 219, 115, 223, 223, 223, 204, 223, 223, 223, 236, 223, 223, 223, 90, 223, 223, 223, 73, 220, 220, 220, 37, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 217, 217, 217, 47, 222, 222, 222, 222, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 16, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 218, 218, 218, 42, 222, 222, 222, 236, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 216, 216, 216, 33, 223, 223, 223, 88, 221, 221, 221, 100, 223, 223, 223, 89, 218, 218, 218, 14, 109, 109, 109, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 235, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 218, 218, 218, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 85, 0, 0, 0, 1, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 111, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 109, 217, 217, 217, 0, 221, 221, 221, 76, 223, 223, 223, 216, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 217, 217, 217, 34, 221, 221, 221, 100, 221, 221, 221, 100, 219, 219, 219, 36, 219, 219, 219, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 32, 218, 218, 218, 0, 222, 222, 222, 215, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 25, 217, 217, 217, 0, 221, 221, 221, 216, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 117, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 106, 216, 216, 216, 0, 221, 221, 221, 76, 223, 223, 223, 217, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 216, 216, 216, 33, 221, 221, 221, 100, 221, 221, 221, 100, 220, 220, 220, 37, 220, 220, 220, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 233, 223, 223, 223, 254, 223, 223, 223, 234, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 220, 220, 220, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 0, 221, 221, 221, 54, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 223, 223, 223, 32, 223, 223, 223, 88, 221, 221, 221, 100, 221, 221, 221, 91, 223, 223, 223, 16, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 215, 215, 215, 58, 222, 222, 222, 229, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 127, 127, 127, 2, 223, 223, 223, 121, 223, 223, 223, 208, 223, 223, 223, 237, 221, 221, 221, 91, 223, 223, 223, 74, 221, 221, 221, 38, 0, 0, 0, 1, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=106]
-flags = 0
-flags = 0
-image = SubResource( 204 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=107]
+[sub_resource type="StyleBoxFlat" id="107"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
-border_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
+border_color = Color(0.122549, 0.0759804, 0.176471, 1)
-[sub_resource type="StyleBoxLine" id=108]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="108"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
-[sub_resource type="StyleBoxLine" id=109]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="109"]
+color = Color(1, 1, 1, 0.1)
grow_end = 7.0
-[sub_resource type="StyleBoxLine" id=110]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="110"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 7.0
grow_end = 7.0
-[sub_resource type="Image" id=205]
-data = {
-"data": PoolByteArray( 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=112]
-flags = 0
-flags = 0
-image = SubResource( 205 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=113]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 112 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 4.0
-margin_right = 4.0
-margin_top = 4.0
-margin_bottom = 4.0
-
-[sub_resource type="Image" id=206]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=115]
-flags = 0
-flags = 0
-image = SubResource( 206 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxTexture" id=116]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 1.0
-content_margin_bottom = 1.0
-texture = SubResource( 115 )
-region_rect = Rect2( 0, 0, 16, 16 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxFlat" id=117]
+[sub_resource type="StyleBoxFlat" id="117"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
+bg_color = Color(0.122549, 0.0759804, 0.176471, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
+border_color = Color(0.122549, 0.0759804, 0.176471, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxEmpty" id=118]
+[sub_resource type="StyleBoxEmpty" id="118"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 0.204595, 0.1247, 0.29, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(0.204595, 0.1247, 0.29, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
-[sub_resource type="Image" id=207]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 152, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 143, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 216, 216, 216, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 143, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 138, 223, 223, 223, 145, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 145, 223, 223, 223, 138, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 124, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 153, 222, 222, 222, 125, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 142, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 142, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 154, 223, 223, 223, 154, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=120]
-flags = 0
-flags = 0
-image = SubResource( 207 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=208]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 220, 220, 220, 44, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 216, 216, 216, 33, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 219, 219, 219, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 218, 218, 218, 42, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=122]
-flags = 0
-flags = 0
-image = SubResource( 208 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=209]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 223, 223, 223, 57, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 219, 219, 219, 43, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 219, 219, 219, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 221, 221, 221, 54, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=124]
-flags = 0
-flags = 0
-image = SubResource( 209 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=210]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 220, 220, 220, 44, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 221, 221, 221, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 218, 218, 218, 42, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=126]
-flags = 0
-flags = 0
-image = SubResource( 210 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=211]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 57, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 220, 220, 220, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 219, 219, 219, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 222, 222, 222, 55, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=128]
-flags = 0
-flags = 0
-image = SubResource( 211 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=212]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=130]
-flags = 0
-flags = 0
-image = SubResource( 212 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="Image" id=213]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=132]
-flags = 0
-flags = 0
-image = SubResource( 213 )
-size = Vector2( 16, 16 )
-
-[sub_resource type="StyleBoxFlat" id=133]
-content_margin_left = 5.0
-content_margin_right = 5.0
+[sub_resource type="StyleBoxFlat" id="134"]
+content_margin_left = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.147059, 0.0911765, 0.211765, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 )
+border_color = Color(0.122549, 0.0759804, 0.176471, 1)
+expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=134]
+[sub_resource type="StyleBoxFlat" id="135"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 )
+bg_color = Color(0.176471, 0.109412, 0.254118, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.122549, 0.0759804, 0.176471, 1 )
+border_color = Color(0.137255, 0.085098, 0.197647, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=135]
+[sub_resource type="StyleBoxFlat" id="136"]
content_margin_left = 10.0
-content_margin_right = 10.0
content_margin_top = 5.0
+content_margin_right = 10.0
content_margin_bottom = 5.0
-bg_color = Color( 0.176471, 0.109412, 0.254118, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.137255, 0.085098, 0.197647, 1 )
+border_color = Color(0.0980392, 0.0607843, 0.141176, 1)
expand_margin_bottom = 1.0
-[sub_resource type="StyleBoxFlat" id=136]
-content_margin_left = 10.0
-content_margin_right = 10.0
+[sub_resource type="StyleBoxFlat" id="133"]
+content_margin_left = 5.0
content_margin_top = 5.0
+content_margin_right = 5.0
content_margin_bottom = 5.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
-border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 )
-expand_margin_bottom = 1.0
-
-[sub_resource type="Image" id=214]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 72, 255, 255, 255, 56, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 72, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=138]
-flags = 0
-flags = 0
-image = SubResource( 214 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=215]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 7, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 12,
-"mipmaps": false,
-"width": 12
-}
-
-[sub_resource type="ImageTexture" id=140]
-flags = 0
-flags = 0
-image = SubResource( 215 )
-size = Vector2( 12, 12 )
-
-[sub_resource type="Image" id=216]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 13, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=142]
-flags = 0
-flags = 0
-image = SubResource( 216 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="Image" id=217]
-data = {
-"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=144]
-flags = 0
-flags = 0
-image = SubResource( 217 )
-size = Vector2( 8, 8 )
+border_width_bottom = 1
+border_color = Color(0.0980392, 0.0607843, 0.141176, 1)
-[sub_resource type="StyleBoxFlat" id=145]
+[sub_resource type="StyleBoxFlat" id="145"]
content_margin_left = 1.0
-content_margin_right = 1.0
content_margin_top = 1.0
+content_margin_right = 1.0
content_margin_bottom = 1.0
-bg_color = Color( 1, 1, 1, 0.9 )
+bg_color = Color(1, 1, 1, 0.9)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 1, 1, 1, 1 )
-shadow_color = Color( 0, 0, 0, 0.3 )
+border_color = Color(1, 1, 1, 1)
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
-[sub_resource type="StyleBoxFlat" id=97]
+[sub_resource type="StyleBoxFlat" id="97"]
content_margin_left = 6.0
-content_margin_right = 6.0
content_margin_top = 4.0
+content_margin_right = 6.0
content_margin_bottom = 4.0
-bg_color = Color( 0.04202, 0.0252, 0.06, 1 )
-
-[sub_resource type="Image" id=218]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 84, 255, 255, 255, 108, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 108, 255, 255, 255, 84, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 109, 255, 255, 255, 108, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=147]
-flags = 0
-flags = 0
-image = SubResource( 218 )
-size = Vector2( 14, 14 )
-
-[sub_resource type="Image" id=219]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 113, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 113, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 116, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 14,
-"mipmaps": false,
-"width": 14
-}
-
-[sub_resource type="ImageTexture" id=149]
-flags = 0
-flags = 0
-image = SubResource( 219 )
-size = Vector2( 14, 14 )
+bg_color = Color(0.04202, 0.0252, 0.06, 1)
-[sub_resource type="StyleBoxFlat" id=150]
+[sub_resource type="StyleBoxFlat" id="150"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.397059, 0.341176, 0.461765, 1 )
-border_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.397059, 0.341176, 0.461765, 1)
+border_color = Color(0.196078, 0.121569, 0.282353, 1)
-[sub_resource type="StyleBoxFlat" id=151]
+[sub_resource type="StyleBoxFlat" id="151"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
draw_center = false
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.397059, 0.341176, 0.461765, 1 )
+border_color = Color(0.397059, 0.341176, 0.461765, 1)
-[sub_resource type="StyleBoxEmpty" id=152]
+[sub_resource type="StyleBoxEmpty" id="152"]
-[sub_resource type="StyleBoxEmpty" id=153]
+[sub_resource type="StyleBoxEmpty" id="153"]
-[sub_resource type="StyleBoxFlat" id=154]
+[sub_resource type="StyleBoxFlat" id="154"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 1, 1, 1, 0.08 )
-border_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(1, 1, 1, 0.08)
+border_color = Color(0.196078, 0.121569, 0.282353, 1)
-[sub_resource type="StyleBoxFlat" id=155]
+[sub_resource type="StyleBoxFlat" id="155"]
content_margin_left = 4.0
-content_margin_right = 4.0
content_margin_top = 4.0
+content_margin_right = 4.0
content_margin_bottom = 4.0
-bg_color = Color( 0.0980392, 0.0607843, 0.141176, 1 )
-border_color = Color( 0.196078, 0.121569, 0.282353, 1 )
-
-[sub_resource type="StyleBoxTexture" id=156]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 64 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
-
-[sub_resource type="StyleBoxTexture" id=157]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 67 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=158]
-content_margin_left = 2.0
-content_margin_right = 2.0
-content_margin_top = 2.0
-content_margin_bottom = 2.0
-texture = SubResource( 70 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 6.0
-margin_right = 6.0
-margin_top = 6.0
-margin_bottom = 6.0
+bg_color = Color(0.0980392, 0.0607843, 0.141176, 1)
+border_color = Color(0.196078, 0.121569, 0.282353, 1)
-[sub_resource type="StyleBoxTexture" id=159]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxTexture" id=160]
-content_margin_left = 0.0
-content_margin_right = 0.0
-content_margin_top = 0.0
-content_margin_bottom = 0.0
-texture = SubResource( 73 )
-region_rect = Rect2( 0, 0, 12, 12 )
-margin_left = 5.0
-margin_right = 5.0
-margin_top = 5.0
-margin_bottom = 5.0
-
-[sub_resource type="StyleBoxLine" id=161]
-color = Color( 1, 1, 1, 0.1 )
+[sub_resource type="StyleBoxLine" id="161"]
+color = Color(1, 1, 1, 0.1)
grow_begin = 0.0
grow_end = 0.0
vertical = true
-[sub_resource type="StyleBoxFlat" id=162]
+[sub_resource type="StyleBoxFlat" id="162"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.396078, 0.341176, 0.462745, 1 )
+bg_color = Color(0.396078, 0.341176, 0.462745, 1)
-[sub_resource type="StyleBoxFlat" id=163]
+[sub_resource type="StyleBoxFlat" id="163"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.397059, 0.341176, 0.461765, 1 )
+bg_color = Color(0.397059, 0.341176, 0.461765, 1)
-[sub_resource type="StyleBoxFlat" id=164]
+[sub_resource type="StyleBoxFlat" id="164"]
content_margin_left = 2.0
-content_margin_right = 2.0
content_margin_top = 0.0
+content_margin_right = 2.0
content_margin_bottom = 0.0
-bg_color = Color( 0.0980392, 0.0588235, 0.141176, 1 )
-
-[sub_resource type="Image" id=220]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 64
-}
-
-[sub_resource type="ImageTexture" id=166]
-flags = 0
-flags = 0
-image = SubResource( 220 )
-size = Vector2( 64, 8 )
+bg_color = Color(0.0980392, 0.0588235, 0.141176, 1)
-[sub_resource type="Image" id=221]
-data = {
-"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ),
-"format": "RGBA8",
-"height": 8,
-"mipmaps": false,
-"width": 8
-}
-
-[sub_resource type="ImageTexture" id=168]
-flags = 0
-flags = 0
-image = SubResource( 221 )
-size = Vector2( 8, 8 )
-
-[sub_resource type="StyleBoxTexture" id=169]
-texture = SubResource( 168 )
-region_rect = Rect2( 0, 0, 8, 8 )
-margin_left = 1.0
-margin_right = 1.0
-margin_top = 1.0
-margin_bottom = 1.0
-
-[sub_resource type="StyleBoxFlat" id=170]
+[sub_resource type="StyleBoxFlat" id="170"]
content_margin_left = 8.0
-content_margin_right = 8.0
content_margin_top = 8.0
+content_margin_right = 8.0
content_margin_bottom = 8.0
-bg_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+bg_color = Color(0.196078, 0.121569, 0.282353, 1)
border_width_left = 1
border_width_top = 24
border_width_right = 1
border_width_bottom = 1
-border_color = Color( 0.196078, 0.121569, 0.282353, 1 )
+border_color = Color(0.196078, 0.121569, 0.282353, 1)
expand_margin_top = 24.0
-shadow_color = Color( 0, 0, 0, 0.3 )
+shadow_color = Color(0, 0, 0, 0.3)
shadow_size = 4
[resource]
resource_name = "Purple"
-default_font = ExtResource( 1 )
+default_font = ExtResource("7_0f141")
+default_font_size = 16
BoxContainer/constants/separation = 4
-Button/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-Button/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-Button/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 )
-Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
-Button/colors/icon_color_pressed = Color( 0.762157, 0, 1.15, 1 )
-Button/styles/disabled = SubResource( 2 )
-Button/styles/focus = SubResource( 3 )
-Button/styles/hover = SubResource( 4 )
-Button/styles/normal = SubResource( 5 )
-Button/styles/pressed = SubResource( 6 )
-CheckBox/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckBox/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-CheckBox/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 )
-CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+Button/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+Button/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+Button/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
+Button/colors/font_color_pressed = Color(0.662745, 0, 1, 1)
+Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
+Button/colors/icon_color_pressed = Color(0.762157, 0, 1.15, 1)
+Button/styles/disabled = SubResource("22")
+Button/styles/focus = SubResource("22")
+Button/styles/hover = SubResource("22")
+Button/styles/normal = SubResource("22")
+Button/styles/pressed = SubResource("22")
+CheckBox/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckBox/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
+CheckBox/colors/font_color_pressed = Color(0.662745, 0, 1, 1)
+CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckBox/constants/check_vadjust = 0
CheckBox/constants/hseparation = 4
-CheckBox/icons/checked = SubResource( 8 )
-CheckBox/icons/radio_checked = SubResource( 10 )
-CheckBox/icons/radio_unchecked = SubResource( 12 )
-CheckBox/icons/unchecked = SubResource( 14 )
-CheckBox/styles/disabled = SubResource( 15 )
-CheckBox/styles/hover = SubResource( 15 )
-CheckBox/styles/normal = SubResource( 15 )
-CheckBox/styles/pressed = SubResource( 15 )
-CheckButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-CheckButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-CheckButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 )
-CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+CheckBox/styles/disabled = SubResource("15")
+CheckBox/styles/hover = SubResource("15")
+CheckBox/styles/normal = SubResource("15")
+CheckBox/styles/pressed = SubResource("15")
+CheckButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+CheckButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
+CheckButton/colors/font_color_pressed = Color(0.662745, 0, 1, 1)
+CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
CheckButton/constants/check_vadjust = 0
CheckButton/constants/hseparation = 4
-CheckButton/icons/off = SubResource( 17 )
-CheckButton/icons/off_disabled = SubResource( 19 )
-CheckButton/icons/on = SubResource( 21 )
-CheckButton/icons/on_disabled = SubResource( 19 )
-CheckButton/styles/disabled = SubResource( 22 )
-CheckButton/styles/hover = SubResource( 22 )
-CheckButton/styles/normal = SubResource( 22 )
-CheckButton/styles/pressed = SubResource( 22 )
-CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
+CheckButton/styles/disabled = SubResource("22")
+CheckButton/styles/hover = SubResource("22")
+CheckButton/styles/normal = SubResource("22")
+CheckButton/styles/pressed = SubResource("22")
+CollapsibleContainer/icons/arrow_normal = ExtResource("6")
ColorPicker/constants/h_width = 30
ColorPicker/constants/label_width = 10
ColorPicker/constants/margin = 8
ColorPicker/constants/sv_height = 256
ColorPicker/constants/sv_width = 256
-ColorPicker/icons/add_preset = SubResource( 24 )
-ColorPicker/icons/overbright_indicator = SubResource( 26 )
-ColorPicker/icons/preset_bg = SubResource( 28 )
-ColorPicker/icons/screen_picker = SubResource( 30 )
-ColorPickerButton/icons/bg = SubResource( 28 )
-FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 )
-FileDialog/colors/folder_icon_modulate = Color( 0.763922, 0.3, 1, 1 )
-FileDialog/icons/folder = SubResource( 32 )
-FileDialog/icons/parent_folder = SubResource( 34 )
-FileDialog/icons/reload = SubResource( 36 )
-FileDialog/icons/toggle_hidden = SubResource( 38 )
-GraphEdit/colors/activity = Color( 0.662745, 0, 1, 1 )
-GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 )
-GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 )
-GraphEdit/colors/selection_fill = Color( 0.662745, 0, 1, 0.3 )
-GraphEdit/colors/selection_stroke = Color( 0.662745, 0, 1, 0.8 )
+FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3)
+FileDialog/colors/folder_icon_modulate = Color(0.763922, 0.3, 1, 1)
+GraphEdit/colors/activity = Color(0.662745, 0, 1, 1)
+GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15)
+GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07)
+GraphEdit/colors/selection_fill = Color(0.662745, 0, 1, 0.3)
+GraphEdit/colors/selection_stroke = Color(0.662745, 0, 1, 0.8)
GraphEdit/constants/bezier_len_neg = 160
GraphEdit/constants/bezier_len_pos = 80
-GraphEdit/icons/minus = SubResource( 40 )
-GraphEdit/icons/more = SubResource( 42 )
-GraphEdit/icons/reset = SubResource( 44 )
-GraphEdit/icons/snap = SubResource( 46 )
-GraphEdit/styles/bg = SubResource( 47 )
-GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 )
-GraphNode/colors/title_color = Color( 1, 1, 1, 1 )
+GraphEdit/styles/bg = SubResource("47")
+GraphNode/colors/close_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7)
+GraphNode/colors/title_color = Color(1, 1, 1, 1)
GraphNode/constants/close_h_offset = 20
GraphNode/constants/close_offset = 20
GraphNode/constants/port_offset = 14
GraphNode/constants/separation = 1
GraphNode/constants/title_h_offset = -16
GraphNode/constants/title_offset = 20
-GraphNode/icons/close = SubResource( 49 )
-GraphNode/icons/port = SubResource( 51 )
-GraphNode/icons/resizer = SubResource( 53 )
-GraphNode/styles/breakpoint = SubResource( 54 )
-GraphNode/styles/comment = SubResource( 55 )
-GraphNode/styles/commentfocus = SubResource( 56 )
-GraphNode/styles/frame = SubResource( 57 )
-GraphNode/styles/position = SubResource( 58 )
-GraphNode/styles/selectedframe = SubResource( 59 )
-GraphNode/styles/state_machine_frame = SubResource( 60 )
-GraphNode/styles/state_machine_selectedframe = SubResource( 61 )
+GraphNode/styles/breakpoint = SubResource("54")
+GraphNode/styles/comment = SubResource("55")
+GraphNode/styles/commentfocus = SubResource("56")
+GraphNode/styles/frame = SubResource("57")
+GraphNode/styles/position = SubResource("58")
+GraphNode/styles/selectedframe = SubResource("59")
+GraphNode/styles/state_machine_frame = SubResource("60")
+GraphNode/styles/state_machine_selectedframe = SubResource("61")
GridContainer/constants/hseparation = 4
GridContainer/constants/vseparation = 4
HBoxContainer/constants/separation = 4
-HScrollBar/icons/decrement = SubResource( 62 )
-HScrollBar/icons/decrement_highlight = SubResource( 62 )
-HScrollBar/icons/increment = SubResource( 62 )
-HScrollBar/icons/increment_highlight = SubResource( 62 )
-HScrollBar/styles/grabber = SubResource( 65 )
-HScrollBar/styles/grabber_highlight = SubResource( 68 )
-HScrollBar/styles/grabber_pressed = SubResource( 71 )
-HScrollBar/styles/scroll = SubResource( 74 )
-HScrollBar/styles/scroll_focus = SubResource( 75 )
-HSeparator/styles/separator = SubResource( 76 )
-HSlider/icons/grabber = SubResource( 78 )
-HSlider/icons/grabber_highlight = SubResource( 80 )
-HSlider/styles/grabber_area = SubResource( 81 )
-HSlider/styles/grabber_area_highlight = SubResource( 82 )
-HSlider/styles/slider = SubResource( 83 )
+HSeparator/styles/separator = SubResource("76")
+HSlider/styles/grabber_area = SubResource("81")
+HSlider/styles/grabber_area_highlight = SubResource("82")
+HSlider/styles/slider = SubResource("83")
HSplitContainer/constants/separation = 8
-HSplitContainer/icons/grabber = SubResource( 85 )
-HSplitContainer/styles/bg = SubResource( 86 )
-Header/base_type = "Label"
-Header/colors/font_color = Color( 0.85098, 0.85098, 0.85098, 1 )
-Header/fonts/font = ExtResource( 2 )
-Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 )
-ItemList/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 )
-ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 )
+Header/base_type = &"Label"
+Header/colors/font_color = Color(0.85098, 0.85098, 0.85098, 1)
+Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1)
+ItemList/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+ItemList/colors/font_color_selected = Color(1, 1, 1, 1)
+ItemList/colors/guide_color = Color(1, 1, 1, 0.05)
ItemList/constants/hseparation = 3
ItemList/constants/icon_margin = 4
ItemList/constants/line_separation = 3
ItemList/constants/vseparation = 3
-ItemList/styles/bg = SubResource( 87 )
-ItemList/styles/bg_focus = SubResource( 88 )
-ItemList/styles/cursor = SubResource( 89 )
-ItemList/styles/cursor_unfocused = SubResource( 89 )
-ItemList/styles/selected = SubResource( 90 )
-ItemList/styles/selected_focus = SubResource( 91 )
-Label/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-Label/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+ItemList/styles/bg = SubResource("87")
+ItemList/styles/bg_focus = SubResource("88")
+ItemList/styles/cursor = SubResource("89")
+ItemList/styles/cursor_unfocused = SubResource("89")
+ItemList/styles/selected = SubResource("90")
+ItemList/styles/selected_focus = SubResource("91")
+Label/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+Label/colors/font_color_shadow = Color(0, 0, 0, 0)
Label/constants/line_spacing = 3
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/styles/normal = SubResource( 92 )
-LineEdit/colors/clear_button_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-LineEdit/colors/clear_button_color_pressed = Color( 0.662745, 0, 1, 1 )
-LineEdit/colors/cursor_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-LineEdit/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 )
-LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 )
-LineEdit/colors/selection_color = Color( 0.662745, 0, 1, 0.4 )
-LineEdit/icons/clear = SubResource( 94 )
-LineEdit/styles/focus = SubResource( 3 )
-LineEdit/styles/normal = SubResource( 5 )
-LineEdit/styles/read_only = SubResource( 2 )
-LinkButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-LinkButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-LinkButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-LinkButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 )
-LinkButton/styles/focus = SubResource( 92 )
+Label/styles/normal = SubResource("92")
+LineEdit/colors/clear_button_color = Color(0.79902, 0.780392, 0.820588, 1)
+LineEdit/colors/clear_button_color_pressed = Color(0.662745, 0, 1, 1)
+LineEdit/colors/cursor_color = Color(0.79902, 0.780392, 0.820588, 1)
+LineEdit/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+LineEdit/colors/font_color_selected = Color(1, 1, 1, 1)
+LineEdit/colors/read_only = Color(1, 1, 1, 0.3)
+LineEdit/colors/selection_color = Color(0.662745, 0, 1, 0.4)
+LineEdit/styles/focus = SubResource("3")
+LineEdit/styles/normal = SubResource("5")
+LineEdit/styles/read_only = SubResource("2")
+LinkButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+LinkButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+LinkButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
+LinkButton/colors/font_color_pressed = Color(0.662745, 0, 1, 1)
+LinkButton/styles/focus = SubResource("92")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
-MenuButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-MenuButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-MenuButton/styles/disabled = SubResource( 22 )
-MenuButton/styles/focus = SubResource( 22 )
-MenuButton/styles/hover = SubResource( 22 )
-MenuButton/styles/normal = SubResource( 22 )
-MenuButton/styles/pressed = SubResource( 22 )
-Misc/colors/clear_color = Color( 0.101961, 0.054902, 0.168627, 1 )
-OptionButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-OptionButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-OptionButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 )
-OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
+MenuButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+MenuButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
+MenuButton/styles/disabled = SubResource("22")
+MenuButton/styles/focus = SubResource("22")
+MenuButton/styles/hover = SubResource("22")
+MenuButton/styles/normal = SubResource("22")
+MenuButton/styles/pressed = SubResource("22")
+Misc/colors/clear_color = Color(0.101961, 0.054902, 0.168627, 1)
+OptionButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+OptionButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
+OptionButton/colors/font_color_pressed = Color(0.662745, 0, 1, 1)
+OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/hseparation = 4
OptionButton/constants/modulate_arrow = 1
-OptionButton/icons/arrow = SubResource( 96 )
-OptionButton/styles/disabled = SubResource( 2 )
-OptionButton/styles/focus = SubResource( 3 )
-OptionButton/styles/hover = SubResource( 4 )
-OptionButton/styles/normal = SubResource( 5 )
-OptionButton/styles/pressed = SubResource( 6 )
-Panel/styles/panel = SubResource( 98 )
-PanelContainer/styles/panel = SubResource( 99 )
-PopupDialog/styles/panel = SubResource( 100 )
-PopupMenu/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
-PopupMenu/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
+OptionButton/styles/disabled = SubResource("2")
+OptionButton/styles/focus = SubResource("3")
+OptionButton/styles/hover = SubResource("4")
+OptionButton/styles/normal = SubResource("5")
+OptionButton/styles/pressed = SubResource("6")
+Panel/styles/panel = SubResource("98")
+PanelContainer/styles/panel = SubResource("99")
+Popup/styles/panel = SubResource("100")
+PopupMenu/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3)
+PopupMenu/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1)
PopupMenu/constants/vseparation = 5
-PopupMenu/icons/checked = SubResource( 8 )
-PopupMenu/icons/radio_checked = SubResource( 10 )
-PopupMenu/icons/radio_unchecked = SubResource( 12 )
-PopupMenu/icons/submenu = SubResource( 102 )
-PopupMenu/icons/unchecked = SubResource( 14 )
-PopupMenu/icons/visibility_hidden = SubResource( 104 )
-PopupMenu/icons/visibility_visible = SubResource( 38 )
-PopupMenu/icons/visibility_xray = SubResource( 106 )
-PopupMenu/styles/disabled = SubResource( 22 )
-PopupMenu/styles/focus = SubResource( 22 )
-PopupMenu/styles/hover = SubResource( 107 )
-PopupMenu/styles/labeled_separator_left = SubResource( 108 )
-PopupMenu/styles/labeled_separator_right = SubResource( 109 )
-PopupMenu/styles/normal = SubResource( 22 )
-PopupMenu/styles/panel = SubResource( 100 )
-PopupMenu/styles/pressed = SubResource( 22 )
-PopupMenu/styles/separator = SubResource( 110 )
-PopupPanel/styles/panel = SubResource( 100 )
-ProgressBar/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-ProgressBar/styles/bg = SubResource( 113 )
-ProgressBar/styles/fg = SubResource( 116 )
-ProjectSettingsEditor/styles/panel = SubResource( 117 )
-RichTextLabel/colors/default_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 )
+PopupMenu/styles/disabled = SubResource("22")
+PopupMenu/styles/focus = SubResource("22")
+PopupMenu/styles/hover = SubResource("107")
+PopupMenu/styles/labeled_separator_left = SubResource("108")
+PopupMenu/styles/labeled_separator_right = SubResource("109")
+PopupMenu/styles/normal = SubResource("22")
+PopupMenu/styles/panel = SubResource("100")
+PopupMenu/styles/pressed = SubResource("22")
+PopupMenu/styles/separator = SubResource("110")
+PopupPanel/styles/panel = SubResource("100")
+ProgressBar/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+ProjectSettingsEditor/styles/panel = SubResource("117")
+RichTextLabel/colors/default_color = Color(0.79902, 0.780392, 0.820588, 1)
+RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0)
RichTextLabel/constants/shadow_as_outline = 0
RichTextLabel/constants/shadow_offset_x = 1
RichTextLabel/constants/shadow_offset_y = 1
-RichTextLabel/styles/focus = SubResource( 118 )
-RichTextLabel/styles/normal = SubResource( 47 )
-RulerButton/base_type = "Button"
-RulerButton/styles/focus = SubResource( 1 )
-RulerButton/styles/hover = SubResource( 1 )
-RulerButton/styles/normal = SubResource( 1 )
-RulerButton/styles/pressed = SubResource( 1 )
-SpinBox/icons/updown = SubResource( 120 )
-TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-TabContainer/colors/font_color_fg = Color( 0.79902, 0.780392, 0.820588, 1 )
+RichTextLabel/styles/focus = SubResource("118")
+RichTextLabel/styles/normal = SubResource("47")
+RulerButton/base_type = &"Button"
+RulerButton/styles/focus = SubResource("1")
+RulerButton/styles/hover = SubResource("1")
+RulerButton/styles/normal = SubResource("1")
+RulerButton/styles/pressed = SubResource("1")
+TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabBar/colors/font_color_fg = Color(0.79902, 0.780392, 0.820588, 1)
+TabBar/constants/hseparation = 4
+TabBar/styles/button = SubResource("22")
+TabBar/styles/button_pressed = SubResource("22")
+TabBar/styles/tab_bg = SubResource("134")
+TabBar/styles/tab_disabled = SubResource("135")
+TabBar/styles/tab_fg = SubResource("136")
+TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3)
+TabContainer/colors/font_color_fg = Color(0.79902, 0.780392, 0.820588, 1)
TabContainer/constants/side_margin = 0
-TabContainer/icons/decrement = SubResource( 122 )
-TabContainer/icons/decrement_highlight = SubResource( 124 )
-TabContainer/icons/increment = SubResource( 126 )
-TabContainer/icons/increment_highlight = SubResource( 128 )
-TabContainer/icons/menu = SubResource( 130 )
-TabContainer/icons/menu_highlight = SubResource( 132 )
-TabContainer/styles/panel = SubResource( 133 )
-TabContainer/styles/tab_bg = SubResource( 134 )
-TabContainer/styles/tab_disabled = SubResource( 135 )
-TabContainer/styles/tab_fg = SubResource( 136 )
-Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 )
-Tabs/colors/font_color_fg = Color( 0.79902, 0.780392, 0.820588, 1 )
-Tabs/constants/hseparation = 4
-Tabs/icons/close = SubResource( 94 )
-Tabs/icons/decrement = SubResource( 122 )
-Tabs/icons/decrement_highlight = SubResource( 124 )
-Tabs/icons/increment = SubResource( 126 )
-Tabs/icons/increment_highlight = SubResource( 128 )
-Tabs/styles/button = SubResource( 22 )
-Tabs/styles/button_pressed = SubResource( 22 )
-Tabs/styles/tab_bg = SubResource( 134 )
-Tabs/styles/tab_disabled = SubResource( 135 )
-Tabs/styles/tab_fg = SubResource( 136 )
-TextEdit/colors/caret_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-TextEdit/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-TextEdit/colors/selection_color = Color( 0.662745, 0, 1, 0.4 )
-TextEdit/icons/fold = SubResource( 138 )
-TextEdit/icons/folded = SubResource( 140 )
-TextEdit/icons/space = SubResource( 142 )
-TextEdit/icons/tab = SubResource( 144 )
-TextEdit/styles/focus = SubResource( 4 )
-TextEdit/styles/normal = SubResource( 5 )
-TextEdit/styles/read_only = SubResource( 2 )
-ToolButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-ToolButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 )
-ToolButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 )
-ToolButton/styles/disabled = SubResource( 22 )
-ToolButton/styles/focus = SubResource( 22 )
-ToolButton/styles/hover = SubResource( 22 )
-ToolButton/styles/normal = SubResource( 22 )
-ToolButton/styles/pressed = SubResource( 22 )
-TooltipLabel/colors/font_color = Color( 0.20098, 0.219608, 0.179412, 1 )
-TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 )
-TooltipPanel/styles/panel = SubResource( 145 )
-TopMenuPanel/base_type = "Panel"
-TopMenuPanel/styles/panel = SubResource( 97 )
-Tree/colors/custom_button_font_highlight = Color( 0.879412, 0.868235, 0.892353, 1 )
-Tree/colors/drop_position_color = Color( 0.662745, 0, 1, 1 )
-Tree/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-Tree/colors/font_color_selected = Color( 1, 1, 1, 1 )
-Tree/colors/guide_color = Color( 1, 1, 1, 0.05 )
-Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 )
-Tree/colors/title_button_color = Color( 0.79902, 0.780392, 0.820588, 1 )
+TabContainer/styles/panel = SubResource("133")
+TabContainer/styles/tab_bg = SubResource("134")
+TabContainer/styles/tab_disabled = SubResource("135")
+TabContainer/styles/tab_fg = SubResource("136")
+TextEdit/colors/caret_color = Color(0.79902, 0.780392, 0.820588, 1)
+TextEdit/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+TextEdit/colors/selection_color = Color(0.662745, 0, 1, 0.4)
+TextEdit/styles/focus = SubResource("4")
+TextEdit/styles/normal = SubResource("5")
+TextEdit/styles/read_only = SubResource("2")
+TooltipLabel/colors/font_color = Color(0.20098, 0.219608, 0.179412, 1)
+TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1)
+TooltipPanel/styles/panel = SubResource("145")
+TopMenuPanel/base_type = &"Panel"
+TopMenuPanel/styles/panel = SubResource("97")
+Tree/colors/custom_button_font_highlight = Color(0.879412, 0.868235, 0.892353, 1)
+Tree/colors/drop_position_color = Color(0.662745, 0, 1, 1)
+Tree/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1)
+Tree/colors/font_color_selected = Color(1, 1, 1, 1)
+Tree/colors/guide_color = Color(1, 1, 1, 0.05)
+Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1)
+Tree/colors/title_button_color = Color(0.79902, 0.780392, 0.820588, 1)
Tree/constants/button_margin = 4
Tree/constants/draw_guides = 0
Tree/constants/draw_relationship_lines = 1
@@ -1751,58 +750,37 @@ Tree/constants/item_margin = 12
Tree/constants/scroll_border = 40
Tree/constants/scroll_speed = 12
Tree/constants/vseparation = 4
-Tree/icons/arrow = SubResource( 138 )
-Tree/icons/arrow_collapsed = SubResource( 140 )
-Tree/icons/checked = SubResource( 8 )
-Tree/icons/select_arrow = SubResource( 147 )
-Tree/icons/unchecked = SubResource( 14 )
-Tree/icons/updown = SubResource( 149 )
-Tree/styles/bg = SubResource( 47 )
-Tree/styles/bg_focus = SubResource( 88 )
-Tree/styles/button_pressed = SubResource( 150 )
-Tree/styles/cursor = SubResource( 151 )
-Tree/styles/cursor_unfocused = SubResource( 151 )
-Tree/styles/custom_button = SubResource( 152 )
-Tree/styles/custom_button_hover = SubResource( 5 )
-Tree/styles/custom_button_pressed = SubResource( 153 )
-Tree/styles/hover = SubResource( 154 )
-Tree/styles/selected = SubResource( 90 )
-Tree/styles/selected_focus = SubResource( 91 )
-Tree/styles/title_button_hover = SubResource( 155 )
-Tree/styles/title_button_normal = SubResource( 155 )
-Tree/styles/title_button_pressed = SubResource( 155 )
+Tree/styles/bg = SubResource("47")
+Tree/styles/bg_focus = SubResource("88")
+Tree/styles/button_pressed = SubResource("150")
+Tree/styles/cursor = SubResource("151")
+Tree/styles/cursor_unfocused = SubResource("151")
+Tree/styles/custom_button = SubResource("152")
+Tree/styles/custom_button_hover = SubResource("5")
+Tree/styles/custom_button_pressed = SubResource("153")
+Tree/styles/hover = SubResource("154")
+Tree/styles/selected = SubResource("90")
+Tree/styles/selected_focus = SubResource("91")
+Tree/styles/title_button_hover = SubResource("155")
+Tree/styles/title_button_normal = SubResource("155")
+Tree/styles/title_button_pressed = SubResource("155")
VBoxContainer/constants/separation = 4
-VScrollBar/icons/decrement = SubResource( 62 )
-VScrollBar/icons/decrement_highlight = SubResource( 62 )
-VScrollBar/icons/increment = SubResource( 62 )
-VScrollBar/icons/increment_highlight = SubResource( 62 )
-VScrollBar/styles/grabber = SubResource( 156 )
-VScrollBar/styles/grabber_highlight = SubResource( 157 )
-VScrollBar/styles/grabber_pressed = SubResource( 158 )
-VScrollBar/styles/scroll = SubResource( 159 )
-VScrollBar/styles/scroll_focus = SubResource( 160 )
-VSeparator/styles/separator = SubResource( 161 )
-VSlider/icons/grabber = SubResource( 78 )
-VSlider/icons/grabber_highlight = SubResource( 80 )
-VSlider/styles/grabber_area = SubResource( 162 )
-VSlider/styles/grabber_area_highlight = SubResource( 163 )
-VSlider/styles/slider = SubResource( 164 )
+VSeparator/styles/separator = SubResource("161")
+VSlider/styles/grabber_area = SubResource("162")
+VSlider/styles/grabber_area_highlight = SubResource("163")
+VSlider/styles/slider = SubResource("164")
VSplitContainer/constants/separation = 8
-VSplitContainer/icons/grabber = SubResource( 166 )
-VSplitContainer/styles/bg = SubResource( 169 )
-ValueSlider/colors/progress_color = Color( 0.396078, 0.341176, 0.462745, 1 )
-ValueSlider/colors/under_color = Color( 0.0980392, 0.0588235, 0.141176, 1 )
-ValueSlider/icons/arrow_hover = ExtResource( 3 )
-ValueSlider/icons/arrow_normal = ExtResource( 6 )
-ValueSlider/icons/arrow_pressed = ExtResource( 5 )
+ValueSlider/colors/progress_color = Color(0.396078, 0.341176, 0.462745, 1)
+ValueSlider/colors/under_color = Color(0.0980392, 0.0588235, 0.141176, 1)
+ValueSlider/icons/arrow_hover = ExtResource("3")
+ValueSlider/icons/arrow_normal = ExtResource("6")
+ValueSlider/icons/arrow_pressed = ExtResource("5")
ValueSlider/icons/texture_over = null
-ValueSlider/icons/texture_progress = ExtResource( 4 )
-ValueSlider/icons/texture_under = ExtResource( 4 )
-WindowDialog/colors/title_color = Color( 0.79902, 0.780392, 0.820588, 1 )
-WindowDialog/constants/close_h_ofs = 22
-WindowDialog/constants/close_v_ofs = 20
-WindowDialog/constants/title_height = 24
-WindowDialog/fonts/title_font = ExtResource( 1 )
-WindowDialog/icons/close = SubResource( 94 )
-WindowDialog/icons/close_highlight = SubResource( 94 )
-WindowDialog/styles/panel = SubResource( 170 )
+ValueSlider/icons/texture_progress = ExtResource("4")
+ValueSlider/icons/texture_under = ExtResource("4")
+Window/colors/title_color = Color(0.79902, 0.780392, 0.820588, 1)
+Window/constants/close_h_ofs = 22
+Window/constants/close_v_ofs = 20
+Window/constants/title_height = 24
+Window/fonts/title_font = ExtResource("7_0f141")
+Window/styles/panel = SubResource("170")
diff --git a/export_presets.cfg b/export_presets.cfg
index d5cb9db4649..4e4c2be3ab0 100644
--- a/export_presets.cfg
+++ b/export_presets.cfg
@@ -1,171 +1,138 @@
[preset.0]
-name="Windows Desktop 64-bit"
-platform="Windows Desktop"
+name="Linux/X11 64-bit"
+platform="Linux/X11"
runnable=true
+dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
[preset.0.options]
custom_template/debug=""
custom_template/release=""
-binary_format/64_bits=true
+debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
+binary_format/architecture="x86_64"
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="#!/usr/bin/env bash
+export DISPLAY=:0
+unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
+\"{temp_dir}/{exe_name}\" {cmd_args}"
+ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
+kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
+rm -rf \"{temp_dir}\""
+binary_format/64_bits=true
texture_format/no_bptc_fallbacks=true
-codesign/enable=false
-codesign/identity_type=0
-codesign/identity=""
-codesign/password=""
-codesign/timestamp=true
-codesign/timestamp_server_url=""
-codesign/digest_algorithm=1
-codesign/description=""
-codesign/custom_options=PoolStringArray( )
-application/modify_resources=true
-application/icon="res://assets/graphics/icons/icon.ico"
-application/file_version="0.11.2.0"
-application/product_version="0.11.2.0"
-application/company_name="Orama Interactive"
-application/product_name="Pixelorama"
-application/file_description="Pixelorama - Your free & open-source sprite editor"
-application/copyright="Orama Interactive and contributors 2019-present"
-application/trademarks=""
[preset.1]
-name="Linux/X11 64-bit"
-platform="Linux/X11"
+name="Windows Desktop 64-bit"
+platform="Windows Desktop"
runnable=true
+dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
[preset.1.options]
custom_template/debug=""
custom_template/release=""
-binary_format/64_bits=true
+debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
+binary_format/architecture="x86_64"
+codesign/enable=false
+codesign/timestamp=true
+codesign/timestamp_server_url=""
+codesign/digest_algorithm=1
+codesign/description=""
+codesign/custom_options=PackedStringArray()
+application/modify_resources=true
+application/icon="res://assets/graphics/icons/icon.ico"
+application/console_wrapper_icon=""
+application/icon_interpolation=4
+application/file_version="1.0.0.0"
+application/product_version="1.0.0.0"
+application/company_name="Orama Interactive"
+application/product_name="Pixelorama"
+application/file_description="Pixelorama - Your free & open-source sprite editor"
+application/copyright="Orama Interactive and contributors 2019-present"
+application/trademarks=""
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
+$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
+$trigger = New-ScheduledTaskTrigger -Once -At 00:00
+$settings = New-ScheduledTaskSettingsSet
+$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
+Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
+Start-ScheduledTask -TaskName godot_remote_debug
+while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
+ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
+Remove-Item -Recurse -Force '{temp_dir}'"
+binary_format/64_bits=true
texture_format/no_bptc_fallbacks=true
[preset.2]
-name="Mac OSX"
-platform="Mac OSX"
+name="Web"
+platform="Web"
runnable=true
+dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
[preset.2.options]
custom_template/debug=""
custom_template/release=""
-application/name="Pixelorama"
-application/info="Pixelorama - Your free and open-source sprite editor"
-application/icon="res://assets/graphics/icons/icon.icns"
-application/identifier="com.orama-interactive.pixelorama"
-application/signature=""
-application/app_category="Graphics-design"
-application/short_version="0.11.2"
-application/version="0.11.2"
-application/copyright="Orama Interactive and contributors 2019-present"
-display/high_res=false
-privacy/microphone_usage_description=""
-privacy/camera_usage_description=""
-privacy/location_usage_description=""
-privacy/address_book_usage_description=""
-privacy/calendar_usage_description=""
-privacy/photos_library_usage_description=""
-privacy/desktop_folder_usage_description=""
-privacy/documents_folder_usage_description=""
-privacy/downloads_folder_usage_description=""
-privacy/network_volumes_usage_description=""
-privacy/removable_volumes_usage_description=""
-codesign/enable=true
-codesign/identity=""
-codesign/timestamp=true
-codesign/hardened_runtime=true
-codesign/replace_existing_signature=true
-codesign/entitlements/custom_file=""
-codesign/entitlements/allow_jit_code_execution=false
-codesign/entitlements/allow_unsigned_executable_memory=false
-codesign/entitlements/allow_dyld_environment_variables=false
-codesign/entitlements/disable_library_validation=false
-codesign/entitlements/audio_input=false
-codesign/entitlements/camera=false
-codesign/entitlements/location=false
-codesign/entitlements/address_book=false
-codesign/entitlements/calendars=false
-codesign/entitlements/photos_library=false
-codesign/entitlements/apple_events=false
-codesign/entitlements/debugging=false
-codesign/entitlements/app_sandbox/enabled=false
-codesign/entitlements/app_sandbox/network_server=false
-codesign/entitlements/app_sandbox/network_client=false
-codesign/entitlements/app_sandbox/device_usb=false
-codesign/entitlements/app_sandbox/device_bluetooth=false
-codesign/entitlements/app_sandbox/files_downloads=0
-codesign/entitlements/app_sandbox/files_pictures=0
-codesign/entitlements/app_sandbox/files_music=0
-codesign/entitlements/app_sandbox/files_movies=0
-codesign/custom_options=PoolStringArray( )
-notarization/enable=false
-notarization/apple_id_name=""
-notarization/apple_id_password=""
-notarization/apple_team_id=""
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
-
-[preset.3]
-
-name="HTML5"
-platform="HTML5"
-runnable=true
-custom_features=""
-export_filter="all_resources"
-include_filter=""
-exclude_filter=""
-export_path=""
-script_export_mode=1
-script_encryption_key=""
-
-[preset.3.options]
-
-custom_template/debug=""
-custom_template/release=""
-variant/export_type=0
+variant/extensions_support=false
vram_texture_compression/for_desktop=true
-vram_texture_compression/for_mobile=true
+vram_texture_compression/for_mobile=false
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
-html/experimental_virtual_keyboard=true
+html/experimental_virtual_keyboard=false
progressive_web_app/enabled=false
progressive_web_app/offline_page=""
progressive_web_app/display=1
@@ -173,122 +140,255 @@ progressive_web_app/orientation=0
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
-progressive_web_app/background_color=Color( 0, 0, 0, 1 )
+progressive_web_app/background_color=Color(0, 0, 0, 1)
-[preset.4]
+[preset.3]
name="Windows Desktop 32-bit"
platform="Windows Desktop"
runnable=false
+dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
-[preset.4.options]
+[preset.3.options]
custom_template/debug=""
custom_template/release=""
-binary_format/64_bits=false
+debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
-texture_format/no_bptc_fallbacks=true
+binary_format/architecture="x86_32"
codesign/enable=false
-codesign/identity_type=0
-codesign/identity=""
-codesign/password=""
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
-codesign/custom_options=PoolStringArray( )
+codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon="res://assets/graphics/icons/icon.ico"
-application/file_version="0.11.2.0"
-application/product_version="0.11.2.0"
+application/console_wrapper_icon=""
+application/icon_interpolation=4
+application/file_version="1.0.0.0"
+application/product_version="1.0.0.0"
application/company_name="Orama Interactive"
application/product_name="Pixelorama"
application/file_description="Pixelorama - Your free & open-source sprite editor"
application/copyright="Orama Interactive and contributors 2019-present"
application/trademarks=""
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
+$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
+$trigger = New-ScheduledTaskTrigger -Once -At 00:00
+$settings = New-ScheduledTaskSettingsSet
+$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
+Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
+Start-ScheduledTask -TaskName godot_remote_debug
+while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
+ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
+Remove-Item -Recurse -Force '{temp_dir}'"
+binary_format/64_bits=false
+texture_format/no_bptc_fallbacks=true
-[preset.5]
+[preset.4]
name="Linux/X11 32-bit"
platform="Linux/X11"
runnable=false
+dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
-[preset.5.options]
+[preset.4.options]
custom_template/debug=""
custom_template/release=""
-binary_format/64_bits=false
+debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
+binary_format/architecture="x86_32"
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="#!/usr/bin/env bash
+export DISPLAY=:0
+unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
+\"{temp_dir}/{exe_name}\" {cmd_args}"
+ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
+kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
+rm -rf \"{temp_dir}\""
+binary_format/64_bits=false
texture_format/no_bptc_fallbacks=true
-[preset.6]
+[preset.5]
-name="Clickable (Package Only)"
+name="Linux/X11 ARM64"
platform="Linux/X11"
runnable=false
-custom_features="clickable,mobile"
+dedicated_server=false
+custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
-[preset.6.options]
+[preset.5.options]
custom_template/debug=""
custom_template/release=""
-binary_format/64_bits=false
+debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
+binary_format/architecture="arm64"
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="#!/usr/bin/env bash
+export DISPLAY=:0
+unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
+\"{temp_dir}/{exe_name}\" {cmd_args}"
+ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
+kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
+rm -rf \"{temp_dir}\""
+binary_format/64_bits=false
texture_format/no_bptc_fallbacks=true
-[preset.7]
+[preset.6]
-name="Raspberry Pi 4"
-platform="Linux/X11"
-runnable=false
+name="macOS"
+platform="macOS"
+runnable=true
+dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
-script_export_mode=1
-script_encryption_key=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
-[preset.7.options]
+[preset.6.options]
+export/distribution_type=1
+binary_format/architecture="universal"
custom_template/debug=""
-custom_template/release="./godot_3.5.2-stable_rpi4/godot_3.5.2-stable_rpi4_export-template_lto.bin"
-binary_format/64_bits=false
-binary_format/embed_pck=false
-texture_format/bptc=false
-texture_format/s3tc=true
-texture_format/etc=false
-texture_format/etc2=false
-texture_format/no_bptc_fallbacks=true
+custom_template/release=""
+debug/export_console_wrapper=1
+application/icon="res://assets/graphics/icons/icon.icns"
+application/icon_interpolation=4
+application/bundle_identifier="com.orama-interactive.pixelorama"
+application/signature=""
+application/app_category="Graphics-design"
+application/short_version="1.0"
+application/version="1.0"
+application/copyright="Orama Interactive and contributors 2019-present"
+application/copyright_localized={}
+application/min_macos_version="10.12"
+display/high_res=true
+xcode/platform_build="14C18"
+xcode/sdk_version="13.1"
+xcode/sdk_build="22C55"
+xcode/sdk_name="macosx13.1"
+xcode/xcode_version="1420"
+xcode/xcode_build="14C18"
+codesign/codesign=1
+codesign/installer_identity=""
+codesign/apple_team_id=""
+codesign/identity=""
+codesign/entitlements/custom_file=""
+codesign/entitlements/allow_jit_code_execution=false
+codesign/entitlements/allow_unsigned_executable_memory=false
+codesign/entitlements/allow_dyld_environment_variables=false
+codesign/entitlements/disable_library_validation=false
+codesign/entitlements/audio_input=false
+codesign/entitlements/camera=false
+codesign/entitlements/location=false
+codesign/entitlements/address_book=false
+codesign/entitlements/calendars=false
+codesign/entitlements/photos_library=false
+codesign/entitlements/apple_events=false
+codesign/entitlements/debugging=false
+codesign/entitlements/app_sandbox/enabled=false
+codesign/entitlements/app_sandbox/network_server=false
+codesign/entitlements/app_sandbox/network_client=false
+codesign/entitlements/app_sandbox/device_usb=false
+codesign/entitlements/app_sandbox/device_bluetooth=false
+codesign/entitlements/app_sandbox/files_downloads=0
+codesign/entitlements/app_sandbox/files_pictures=0
+codesign/entitlements/app_sandbox/files_music=0
+codesign/entitlements/app_sandbox/files_movies=0
+codesign/entitlements/app_sandbox/helper_executables=[]
+codesign/custom_options=PackedStringArray()
+notarization/notarization=0
+privacy/microphone_usage_description=""
+privacy/microphone_usage_description_localized={}
+privacy/camera_usage_description=""
+privacy/camera_usage_description_localized={}
+privacy/location_usage_description=""
+privacy/location_usage_description_localized={}
+privacy/address_book_usage_description=""
+privacy/address_book_usage_description_localized={}
+privacy/calendar_usage_description=""
+privacy/calendar_usage_description_localized={}
+privacy/photos_library_usage_description=""
+privacy/photos_library_usage_description_localized={}
+privacy/desktop_folder_usage_description=""
+privacy/desktop_folder_usage_description_localized={}
+privacy/documents_folder_usage_description=""
+privacy/documents_folder_usage_description_localized={}
+privacy/downloads_folder_usage_description=""
+privacy/downloads_folder_usage_description_localized={}
+privacy/network_volumes_usage_description=""
+privacy/network_volumes_usage_description_localized={}
+privacy/removable_volumes_usage_description=""
+privacy/removable_volumes_usage_description_localized={}
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="#!/usr/bin/env bash
+unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
+open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
+ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
+kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
+rm -rf \"{temp_dir}\""
diff --git a/project.godot b/project.godot
index a17d787aef7..610636e26a2 100644
--- a/project.godot
+++ b/project.godot
@@ -6,329 +6,7 @@
; [section] ; section goes between []
; param=value ; assign values to parameters
-config_version=4
-
-_global_script_classes=[ {
-"base": "AImgIOBaseExporter",
-"class": "AImgIOAPNGExporter",
-"language": "GDScript",
-"path": "res://addons/aimg_io/apng_exporter.gd"
-}, {
-"base": "EditorImportPlugin",
-"class": "AImgIOAPNGImportPlugin",
-"language": "GDScript",
-"path": "res://addons/aimg_io/apng_import_plugin.gd"
-}, {
-"base": "Reference",
-"class": "AImgIOAPNGImporter",
-"language": "GDScript",
-"path": "res://addons/aimg_io/apng_importer.gd"
-}, {
-"base": "Reference",
-"class": "AImgIOAPNGStream",
-"language": "GDScript",
-"path": "res://addons/aimg_io/apng_stream.gd"
-}, {
-"base": "Reference",
-"class": "AImgIOBaseExporter",
-"language": "GDScript",
-"path": "res://addons/aimg_io/base_exporter.gd"
-}, {
-"base": "Resource",
-"class": "AImgIOCRC32",
-"language": "GDScript",
-"path": "res://addons/aimg_io/crc32.gd"
-}, {
-"base": "Reference",
-"class": "AImgIOFrame",
-"language": "GDScript",
-"path": "res://addons/aimg_io/frame.gd"
-}, {
-"base": "PanelContainer",
-"class": "AnimatePanel",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/AnimatePanel.gd"
-}, {
-"base": "Reference",
-"class": "AnimationTag",
-"language": "GDScript",
-"path": "res://src/Classes/AnimationTag.gd"
-}, {
-"base": "Reference",
-"class": "BaseCel",
-"language": "GDScript",
-"path": "res://src/Classes/BaseCel.gd"
-}, {
-"base": "Reference",
-"class": "BaseLayer",
-"language": "GDScript",
-"path": "res://src/Classes/BaseLayer.gd"
-}, {
-"base": "VBoxContainer",
-"class": "BaseTool",
-"language": "GDScript",
-"path": "res://src/Tools/BaseTool.gd"
-}, {
-"base": "Popup",
-"class": "Brushes",
-"language": "GDScript",
-"path": "res://src/UI/Buttons/BrushesPopup.gd"
-}, {
-"base": "Node2D",
-"class": "Canvas",
-"language": "GDScript",
-"path": "res://src/UI/Canvas/Canvas.gd"
-}, {
-"base": "BaseCel",
-"class": "Cel3D",
-"language": "GDScript",
-"path": "res://src/Classes/Cel3D.gd"
-}, {
-"base": "Spatial",
-"class": "Cel3DObject",
-"language": "GDScript",
-"path": "res://src/Classes/Cel3DObject.gd"
-}, {
-"base": "VBoxContainer",
-"class": "CollapsibleContainer",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/CollapsibleContainer.gd"
-}, {
-"base": "Node2D",
-"class": "CropRect",
-"language": "GDScript",
-"path": "res://src/UI/Canvas/CropRect.gd"
-}, {
-"base": "Reference",
-"class": "Drawer",
-"language": "GDScript",
-"path": "res://src/Classes/Drawers.gd"
-}, {
-"base": "Reference",
-"class": "Frame",
-"language": "GDScript",
-"path": "res://src/Classes/Frame.gd"
-}, {
-"base": "AImgIOBaseExporter",
-"class": "GIFAnimationExporter",
-"language": "GDScript",
-"path": "res://src/Classes/AnimationExporters/GIFAnimationExporter.gd"
-}, {
-"base": "Control",
-"class": "GradientEditNode",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/GradientEdit.gd"
-}, {
-"base": "BaseCel",
-"class": "GroupCel",
-"language": "GDScript",
-"path": "res://src/Classes/GroupCel.gd"
-}, {
-"base": "BaseLayer",
-"class": "GroupLayer",
-"language": "GDScript",
-"path": "res://src/Classes/GroupLayer.gd"
-}, {
-"base": "Line2D",
-"class": "Guide",
-"language": "GDScript",
-"path": "res://src/UI/Canvas/Rulers/Guide.gd"
-}, {
-"base": "ConfirmationDialog",
-"class": "ImageEffect",
-"language": "GDScript",
-"path": "res://src/Classes/ImageEffect.gd"
-}, {
-"base": "BaseLayer",
-"class": "Layer3D",
-"language": "GDScript",
-"path": "res://src/Classes/Layer3D.gd"
-}, {
-"base": "Button",
-"class": "LayerButton",
-"language": "GDScript",
-"path": "res://src/UI/Timeline/LayerButton.gd"
-}, {
-"base": "Control",
-"class": "MaxMinEdit",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/MaxMinEdit.gd"
-}, {
-"base": "Label",
-"class": "NotificationLabel",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/NotificationLabel.gd"
-}, {
-"base": "Reference",
-"class": "ObjParse",
-"language": "GDScript",
-"path": "res://src/Classes/ObjParse.gd"
-}, {
-"base": "Resource",
-"class": "Palette",
-"language": "GDScript",
-"path": "res://src/Palette/Palette.gd"
-}, {
-"base": "Resource",
-"class": "PaletteColor",
-"language": "GDScript",
-"path": "res://src/Palette/PaletteColor.gd"
-}, {
-"base": "GridContainer",
-"class": "PaletteGrid",
-"language": "GDScript",
-"path": "res://src/Palette/PaletteGrid.gd"
-}, {
-"base": "PanelContainer",
-"class": "PalettePanel",
-"language": "GDScript",
-"path": "res://src/Palette/PalettePanel.gd"
-}, {
-"base": "ColorRect",
-"class": "PaletteSwatch",
-"language": "GDScript",
-"path": "res://src/Palette/PaletteSwatch.gd"
-}, {
-"base": "PopupPanel",
-"class": "Patterns",
-"language": "GDScript",
-"path": "res://src/UI/Buttons/PatternsPopup.gd"
-}, {
-"base": "Line2D",
-"class": "PerspectiveLine",
-"language": "GDScript",
-"path": "res://src/UI/PerspectiveEditor/PerspectiveLine.gd"
-}, {
-"base": "BaseCel",
-"class": "PixelCel",
-"language": "GDScript",
-"path": "res://src/Classes/PixelCel.gd"
-}, {
-"base": "BaseLayer",
-"class": "PixelLayer",
-"language": "GDScript",
-"path": "res://src/Classes/PixelLayer.gd"
-}, {
-"base": "Reference",
-"class": "Project",
-"language": "GDScript",
-"path": "res://src/Classes/Project.gd"
-}, {
-"base": "Sprite",
-"class": "ReferenceImage",
-"language": "GDScript",
-"path": "res://src/UI/ReferenceImages/ReferenceImage.gd"
-}, {
-"base": "VBoxContainer",
-"class": "ReferencesPanel",
-"language": "GDScript",
-"path": "res://src/UI/ReferenceImages/ReferencesPanel.gd"
-}, {
-"base": "Reference",
-"class": "RegionUnpacker",
-"language": "GDScript",
-"path": "res://addons/SmartSlicer/Classes/RegionUnpacker.gd"
-}, {
-"base": "Image",
-"class": "SelectionMap",
-"language": "GDScript",
-"path": "res://src/Classes/SelectionMap.gd"
-}, {
-"base": "BaseTool",
-"class": "SelectionTool",
-"language": "GDScript",
-"path": "res://src/Tools/SelectionTools/SelectionTool.gd"
-}, {
-"base": "Reference",
-"class": "ShaderImageEffect",
-"language": "GDScript",
-"path": "res://src/Classes/ShaderImageEffect.gd"
-}, {
-"base": "Resource",
-"class": "ShortcutProfile",
-"language": "GDScript",
-"path": "res://addons/keychain/ShortcutProfile.gd"
-}, {
-"base": "Guide",
-"class": "SymmetryGuide",
-"language": "GDScript",
-"path": "res://src/UI/Canvas/Rulers/SymmetryGuide.gd"
-}, {
-"base": "Reference",
-"class": "Tiles",
-"language": "GDScript",
-"path": "res://src/Classes/Tiles.gd"
-}, {
-"base": "TextureProgress",
-"class": "ValueSlider",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/ValueSlider.gd"
-}, {
-"base": "HBoxContainer",
-"class": "ValueSliderV2",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/ValueSliderV2.gd"
-}, {
-"base": "HBoxContainer",
-"class": "ValueSliderV3",
-"language": "GDScript",
-"path": "res://src/UI/Nodes/ValueSliderV3.gd"
-} ]
-_global_script_class_icons={
-"AImgIOAPNGExporter": "",
-"AImgIOAPNGImportPlugin": "",
-"AImgIOAPNGImporter": "",
-"AImgIOAPNGStream": "",
-"AImgIOBaseExporter": "",
-"AImgIOCRC32": "",
-"AImgIOFrame": "",
-"AnimatePanel": "",
-"AnimationTag": "",
-"BaseCel": "",
-"BaseLayer": "",
-"BaseTool": "",
-"Brushes": "",
-"Canvas": "",
-"Cel3D": "",
-"Cel3DObject": "",
-"CollapsibleContainer": "",
-"CropRect": "",
-"Drawer": "",
-"Frame": "",
-"GIFAnimationExporter": "",
-"GradientEditNode": "",
-"GroupCel": "",
-"GroupLayer": "",
-"Guide": "",
-"ImageEffect": "",
-"Layer3D": "",
-"LayerButton": "",
-"MaxMinEdit": "",
-"NotificationLabel": "",
-"ObjParse": "",
-"Palette": "",
-"PaletteColor": "",
-"PaletteGrid": "",
-"PalettePanel": "",
-"PaletteSwatch": "",
-"Patterns": "",
-"PerspectiveLine": "",
-"PixelCel": "",
-"PixelLayer": "",
-"Project": "",
-"ReferenceImage": "",
-"ReferencesPanel": "",
-"RegionUnpacker": "",
-"SelectionMap": "",
-"SelectionTool": "",
-"ShaderImageEffect": "",
-"ShortcutProfile": "",
-"SymmetryGuide": "",
-"Tiles": "",
-"ValueSlider": "",
-"ValueSliderV2": "",
-"ValueSliderV3": ""
-}
+config_version=5
[application]
@@ -336,15 +14,16 @@ config/name="Pixelorama"
config/description="A free & open-source 2D sprite editor"
run/main_scene="res://src/Main.tscn"
config/use_custom_user_dir=true
+config/custom_user_dir_name="pixelorama"
+config/features=PackedStringArray("4.1")
run/low_processor_mode=true
+boot_splash/bg_color=Color(0.145098, 0.145098, 0.164706, 1)
boot_splash/image="res://assets/graphics/splash.png"
-boot_splash/bg_color=Color( 0.145098, 0.145098, 0.164706, 1 )
config/icon="res://assets/graphics/icons/icon.png"
config/macos_native_icon="res://assets/graphics/icons/icon.icns"
config/windows_native_icon="res://assets/graphics/icons/icon.ico"
-config/custom_user_dir_name.X11="pixelorama"
-config/Version="v0.11.2-stable"
-config/ExtensionsAPI_Version=3
+config/Version="v1.0-dev"
+config/ExtensionsAPI_Version=4
config/Pxo_Version=2
[audio]
@@ -363,28 +42,23 @@ Export="*res://src/Autoload/Export.gd"
Palettes="*res://src/Autoload/Palettes.gd"
Keychain="*res://addons/keychain/Keychain.gd"
ExtensionsApi="*res://src/Autoload/ExtensionsAPI.gd"
-ErrorManager="*res://src/Autoload/ErrorManager.gd"
[debug]
-gdscript/warnings/narrowing_conversion=false
gdscript/warnings/return_value_discarded=false
+gdscript/warnings/narrowing_conversion=false
[display]
-window/size/width=1280
-window/size/height=720
-window/dpi/allow_hidpi=true
+window/size/viewport_width=1280
+window/size/viewport_height=720
window/per_pixel_transparency/allowed=true
-window/per_pixel_transparency/enabled=true
-window/per_pixel_transparency/allowed.HTML5=false
-window/per_pixel_transparency/enabled.HTML5=false
-window/per_pixel_transparency/allowed.Android=false
-window/per_pixel_transparency/enabled.Android=false
+window/per_pixel_transparency/allowed.android=false
+window/per_pixel_transparency/allowed.web=false
[editor_plugins]
-enabled=PoolStringArray( "res://addons/aimg_io/plugin.cfg", "res://addons/dockable_container/plugin.cfg", "res://addons/keychain/plugin.cfg" )
+enabled=PackedStringArray("res://addons/aimg_io/plugin.cfg", "res://addons/dockable_container/plugin.cfg", "res://addons/keychain/plugin.cfg")
[importer_defaults]
@@ -413,648 +87,738 @@ texture={
zoom_in={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":61,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777349,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":61,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194437,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
zoom_out={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":45,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777347,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":45,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194435,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
middle_mouse={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null)
+]
}
left_mouse={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
+]
}
right_mouse={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
+]
}
left_pencil_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":80,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_pencil_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":80,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_eraser_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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,"echo":false,"script":null)
+]
}
right_eraser_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_fill_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":66,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_fill_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":66,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_rectangle_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_rectangle_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
copy={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
cut={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":88,"physical_keycode":88,"key_label":88,"unicode":0,"echo":false,"script":null)
+]
}
paste={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":86,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
paste_in_place={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":86,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":true,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
delete={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777224,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194312,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_shading_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":85,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_shading_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":85,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
toggle_fullscreen={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777254,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194342,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_colorpicker_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":79,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_colorpicker_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":79,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
shift={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
ctrl={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
pan={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null)
+]
}
new_file={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":78,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":78,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
open_file={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":79,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
save_file={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
save_file_as={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
export_file={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
export_file_as={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
quit={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
undo={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
redo={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":89,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
show_grid={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":71,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":71,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
show_rulers={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
show_guides={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_zoom_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_zoom_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
switch_colors={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
go_to_first_frame={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777229,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194317,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
go_to_last_frame={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777230,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194318,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
go_to_previous_frame={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
go_to_next_frame={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
play_backwards={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777247,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194335,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
play_forward={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777248,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194336,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
zen_mode={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777253,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194341,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
open_docs={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777244,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194332,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
mirror_view={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_pan_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_pan_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
show_pixel_grid={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":72,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":72,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
clear_selection={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_rectangletool_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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,"echo":false,"script":null)
+]
}
right_rectangletool_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_ellipsetool_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_ellipsetool_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_move_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":84,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_move_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":84,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
select_all={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
invert_selection={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":73,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_color_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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,"echo":false,"script":null)
+]
}
right_color_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_magic_wand_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_magic_wand_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
transformation_confirm={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777222,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
transformation_cancel={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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,"echo":false,"script":null)
+]
}
left_linetool_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":76,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_linetool_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":76,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_ellipse_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":89,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_ellipse_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":89,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_lasso_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_lasso_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
left_polygon_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":75,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_polygon_select_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":75,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
new_brush={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":66,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
moveable_panels={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777252,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194340,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
change_tool_mode={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"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":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
draw_create_line={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
draw_snap_angle={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"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":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
shape_perfect={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
shape_center={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"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":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
shape_displace={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
selection_add={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
selection_subtract={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
selection_intersect={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":4194326,"key_label":4194326,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
transform_snap_axis={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
transform_snap_grid={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
transform_move_selection_only={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
transform_copy_selection_content={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
draw_color_picker={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
camera_left={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":-1.0,"script":null)
- ]
+]
}
camera_right={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":1.0,"script":null)
- ]
+]
}
camera_up={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":-1.0,"script":null)
- ]
+]
}
camera_down={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":1.0,"script":null)
- ]
+]
}
move_mouse_left={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777354,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194442,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
- ]
+]
}
move_mouse_right={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777356,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194444,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
- ]
+]
}
move_mouse_up={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777358,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194446,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
- ]
+]
}
move_mouse_down={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777352,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194440,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
- ]
+]
}
activate_left_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":4,"pressure":0.0,"pressed":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":9,"pressure":0.0,"pressed":false,"script":null)
+]
}
activate_right_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null)
-, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null)
- ]
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":10,"pressure":0.0,"pressed":false,"script":null)
+]
}
open_last_project={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
preferences={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
resize_canvas={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
offset_image={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
scale_image={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
crop_image={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
mirror_image={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
rotate_image={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
invert_colors={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
desaturation={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
outline={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
drop_shadow={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
adjust_hsv={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
gradient={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
gradient_map={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
posterize={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
view_splash_screen={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
issue_tracker={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
open_logs_folder={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
changelog={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
about_pixelorama={
"deadzone": 0.5,
-"events": [ ]
+"events": []
}
left_paint_selection_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":73,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
}
right_paint_selection_tool={
"deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":73,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
- ]
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+brush_size_increment={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
+]
+}
+brush_size_decrement={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"button_mask":16,"position":Vector2(83, 19),"global_position":Vector2(87, 62),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null)
+]
+}
+new_layer={
+"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":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+remove_layer={
+"deadzone": 0.5,
+"events": []
+}
+move_layer_up={
+"deadzone": 0.5,
+"events": []
+}
+move_layer_down={
+"deadzone": 0.5,
+"events": []
+}
+clone_layer={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+merge_down_layer={
+"deadzone": 0.5,
+"events": []
+}
+add_frame={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+remove_frame={
+"deadzone": 0.5,
+"events": []
+}
+clone_frame={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+manage_frame_tags={
+"deadzone": 0.5,
+"events": []
+}
+move_frame_left={
+"deadzone": 0.5,
+"events": []
+}
+move_frame_right={
+"deadzone": 0.5,
+"events": []
+}
+reset_colors_default={
+"deadzone": 0.5,
+"events": []
+}
+horizontal_mirror={
+"deadzone": 0.5,
+"events": []
+}
+vertical_mirror={
+"deadzone": 0.5,
+"events": []
+}
+pixel_perfect={
+"deadzone": 0.5,
+"events": []
+}
+new_palette={
+"deadzone": 0.5,
+"events": []
+}
+edit_palette={
+"deadzone": 0.5,
+"events": []
+}
+onion_skinning_toggle={
+"deadzone": 0.5,
+"events": []
+}
+loop_toggle={
+"deadzone": 0.5,
+"events": []
+}
+onion_skinning_settings={
+"deadzone": 0.5,
+"events": []
}
-[locale]
-
-translations=PoolStringArray( "res://Translations/zh_TW.po", "res://Translations/pt_BR.po", "res://Translations/de_DE.po", "res://Translations/el_GR.po", "res://Translations/en_US.po", "res://Translations/fr_FR.po", "res://Translations/it_IT.po", "res://Translations/pl_PL.po", "res://Translations/ru_RU.po", "res://Translations/es_ES.po", "res://Translations/zh_CN.po", "res://Translations/lv_LV.po", "res://Translations/eo_UY.po", "res://Translations/cs_CZ.po", "res://Translations/id_ID.po", "res://Translations/hu_HU.po", "res://Translations/ro_RO.po", "res://Translations/ko_KR.po", "res://Translations/tr_TR.po", "res://Translations/ja_JP.po", "res://Translations/nb_NO.po", "res://Translations/uk_UA.po", "res://Translations/pt_PT.po", "res://Translations/da_DK.po" )
-locale_filter=[ 0, [ ] ]
-
-[logging]
+[internationalization]
-file_logging/enable_file_logging=true
+locale/translations=PackedStringArray("res://Translations/en_US.po")
[rendering]
-quality/driver/driver_name="GLES2"
-quality/driver/fallback_to_gles2=true
-quality/intended_usage/framebuffer_allocation=0
-quality/intended_usage/framebuffer_allocation.mobile=0
+textures/canvas_textures/default_texture_filter=0
+renderer/rendering_method="gl_compatibility"
threads/thread_model=2
vram_compression/import_etc=true
-vram_compression/import_etc2=false
diff --git a/src/Autoload/DrawingAlgos.gd b/src/Autoload/DrawingAlgos.gd
index 7ed930d5fcf..0b7ae43db9f 100644
--- a/src/Autoload/DrawingAlgos.gd
+++ b/src/Autoload/DrawingAlgos.gd
@@ -1,26 +1,21 @@
extends Node
enum GradientDirection { TOP, BOTTOM, LEFT, RIGHT }
-# Continuation from Image.Interpolation
+## Continuation from Image.Interpolation
enum Interpolation { SCALE3X = 5, CLEANEDGE = 6, OMNISCALE = 7 }
var clean_edge_shader: Shader
-var omniscale_shader: Shader
-
-
-func _ready() -> void:
- if OS.get_current_video_driver() == OS.VIDEO_DRIVER_GLES3:
- omniscale_shader = load("res://src/Shaders/Rotation/OmniScale.gdshader")
-
-
-# Algorithm based on http://members.chello.at/easyfilter/bresenham.html
-func get_ellipse_points(pos: Vector2, size: Vector2) -> Array:
- var array := []
- var x0 := int(pos.x)
- var x1 := pos.x + int(size.x - 1)
- var y0 := int(pos.y)
- var y1 := int(pos.y) + int(size.y - 1)
- var a := int(abs(x1 - x0))
- var b := int(abs(y1 - x0))
+var omniscale_shader := preload("res://src/Shaders/Rotation/OmniScale.gdshader")
+
+
+## Algorithm based on http://members.chello.at/easyfilter/bresenham.html
+func get_ellipse_points(pos: Vector2i, size: Vector2i) -> Array[Vector2i]:
+ var array: Array[Vector2i] = []
+ var x0 := pos.x
+ var x1 := pos.x + (size.x - 1)
+ var y0 := pos.y
+ var y1 := pos.y + (size.y - 1)
+ var a := absi(x1 - x0)
+ var b := absi(y1 - x0)
var b1 := b & 1
var dx := 4 * (1 - a) * b * b
var dy := 4 * (b1 + 1) * a * a
@@ -34,17 +29,16 @@ func get_ellipse_points(pos: Vector2, size: Vector2) -> Array:
if y0 > y1:
y0 = y1
-# warning-ignore:integer_division
y0 += (b + 1) / 2
y1 = y0 - b1
a *= 8 * a
b1 = 8 * b * b
while x0 <= x1:
- var v1 := Vector2(x1, y0)
- var v2 := Vector2(x0, y0)
- var v3 := Vector2(x0, y1)
- var v4 := Vector2(x1, y1)
+ var v1 := Vector2i(x1, y0)
+ var v2 := Vector2i(x0, y0)
+ var v3 := Vector2i(x0, y1)
+ var v4 := Vector2i(x1, y1)
array.append(v1)
array.append(v2)
array.append(v3)
@@ -64,10 +58,10 @@ func get_ellipse_points(pos: Vector2, size: Vector2) -> Array:
err += dx
while y0 - y1 < b:
- var v1 := Vector2(x0 - 1, y0)
- var v2 := Vector2(x1 + 1, y0)
- var v3 := Vector2(x0 - 1, y1)
- var v4 := Vector2(x1 + 1, y1)
+ var v1 := Vector2i(x0 - 1, y0)
+ var v2 := Vector2i(x1 + 1, y0)
+ var v3 := Vector2i(x0 - 1, y1)
+ var v4 := Vector2i(x1 + 1, y1)
array.append(v1)
array.append(v2)
array.append(v3)
@@ -78,16 +72,16 @@ func get_ellipse_points(pos: Vector2, size: Vector2) -> Array:
return array
-func get_ellipse_points_filled(pos: Vector2, size: Vector2, thickness := 1) -> PoolVector2Array:
- var offsetted_size := size + Vector2.ONE * (thickness - 1)
+func get_ellipse_points_filled(pos: Vector2i, size: Vector2i, thickness := 1) -> Array[Vector2i]:
+ var offsetted_size := size + Vector2i.ONE * (thickness - 1)
var border := get_ellipse_points(pos, offsetted_size)
- var filling := []
+ var filling: Array[Vector2i] = []
- for x in range(1, ceil(offsetted_size.x / 2)):
+ for x in range(1, ceili(offsetted_size.x / 2.0)):
var fill := false
var prev_is_true := false
- for y in range(0, ceil(offsetted_size.y / 2)):
- var top_l_p := Vector2(x, y)
+ for y in range(0, ceili(offsetted_size.y / 2.0)):
+ var top_l_p := Vector2i(x, y)
var bit := border.has(pos + top_l_p)
if bit and not fill:
@@ -96,9 +90,9 @@ func get_ellipse_points_filled(pos: Vector2, size: Vector2, thickness := 1) -> P
if not bit and (fill or prev_is_true):
filling.append(pos + top_l_p)
- filling.append(pos + Vector2(x, offsetted_size.y - y - 1))
- filling.append(pos + Vector2(offsetted_size.x - x - 1, y))
- filling.append(pos + Vector2(offsetted_size.x - x - 1, offsetted_size.y - y - 1))
+ filling.append(pos + Vector2i(x, offsetted_size.y - y - 1))
+ filling.append(pos + Vector2i(offsetted_size.x - x - 1, y))
+ filling.append(pos + Vector2i(offsetted_size.x - x - 1, offsetted_size.y - y - 1))
if prev_is_true:
fill = true
@@ -106,14 +100,13 @@ func get_ellipse_points_filled(pos: Vector2, size: Vector2, thickness := 1) -> P
elif bit and fill:
break
- return PoolVector2Array(border + filling)
+ return border + filling
-func scale_3x(sprite: Image, tol: float = 50) -> Image:
- var scaled := Image.new()
- scaled.create(sprite.get_width() * 3, sprite.get_height() * 3, false, Image.FORMAT_RGBA8)
- scaled.lock()
- sprite.lock()
+func scale_3x(sprite: Image, tol := 50.0) -> Image:
+ var scaled := Image.create(
+ sprite.get_width() * 3, sprite.get_height() * 3, false, Image.FORMAT_RGBA8
+ )
var a: Color
var b: Color
var c: Color
@@ -126,23 +119,23 @@ func scale_3x(sprite: Image, tol: float = 50) -> Image:
for x in range(0, sprite.get_width()):
for y in range(0, sprite.get_height()):
- var xs: float = 3 * x
- var ys: float = 3 * y
-
- a = sprite.get_pixel(max(x - 1, 0), max(y - 1, 0))
- b = sprite.get_pixel(min(x, sprite.get_width() - 1), max(y - 1, 0))
- c = sprite.get_pixel(min(x + 1, sprite.get_width() - 1), max(y - 1, 0))
- d = sprite.get_pixel(max(x - 1, 0), min(y, sprite.get_height() - 1))
- e = sprite.get_pixel(min(x, sprite.get_width() - 1), min(y, sprite.get_height() - 1))
+ var xs := 3 * x
+ var ys := 3 * y
+
+ a = sprite.get_pixel(maxi(x - 1, 0), maxi(y - 1, 0))
+ b = sprite.get_pixel(mini(x, sprite.get_width() - 1), maxi(y - 1, 0))
+ c = sprite.get_pixel(mini(x + 1, sprite.get_width() - 1), maxi(y - 1, 0))
+ d = sprite.get_pixel(maxi(x - 1, 0), mini(y, sprite.get_height() - 1))
+ e = sprite.get_pixel(mini(x, sprite.get_width() - 1), mini(y, sprite.get_height() - 1))
f = sprite.get_pixel(
- min(x + 1, sprite.get_width() - 1), min(y, sprite.get_height() - 1)
+ mini(x + 1, sprite.get_width() - 1), mini(y, sprite.get_height() - 1)
)
- g = sprite.get_pixel(max(x - 1, 0), min(y + 1, sprite.get_height() - 1))
+ g = sprite.get_pixel(maxi(x - 1, 0), mini(y + 1, sprite.get_height() - 1))
h = sprite.get_pixel(
- min(x, sprite.get_width() - 1), min(y + 1, sprite.get_height() - 1)
+ mini(x, sprite.get_width() - 1), mini(y + 1, sprite.get_height() - 1)
)
i = sprite.get_pixel(
- min(x + 1, sprite.get_width() - 1), min(y + 1, sprite.get_height() - 1)
+ mini(x + 1, sprite.get_width() - 1), mini(y + 1, sprite.get_height() - 1)
)
var db: bool = similar_colors(d, b, tol)
@@ -154,15 +147,15 @@ func scale_3x(sprite: Image, tol: float = 50) -> Image:
var eg: bool = similar_colors(e, g, tol)
var ei: bool = similar_colors(e, i, tol)
- scaled.set_pixel(max(xs - 1, 0), max(ys - 1, 0), d if (db and !dh and !bf) else e)
+ scaled.set_pixel(maxi(xs - 1, 0), maxi(ys - 1, 0), d if (db and !dh and !bf) else e)
scaled.set_pixel(
xs,
- max(ys - 1, 0),
+ maxi(ys - 1, 0),
b if (db and !dh and !bf and !ec) or (bf and !db and !fh and !ea) else e
)
- scaled.set_pixel(xs + 1, max(ys - 1, 0), f if (bf and !db and !fh) else e)
+ scaled.set_pixel(xs + 1, maxi(ys - 1, 0), f if (bf and !db and !fh) else e)
scaled.set_pixel(
- max(xs - 1, 0),
+ maxi(xs - 1, 0),
ys,
d if (dh and !fh and !db and !ea) or (db and !dh and !bf and !eg) else e
)
@@ -170,14 +163,12 @@ func scale_3x(sprite: Image, tol: float = 50) -> Image:
scaled.set_pixel(
xs + 1, ys, f if (bf and !db and !fh and !ei) or (fh and !bf and !dh and !ec) else e
)
- scaled.set_pixel(max(xs - 1, 0), ys + 1, d if (dh and !fh and !db) else e)
+ scaled.set_pixel(maxi(xs - 1, 0), ys + 1, d if (dh and !fh and !db) else e)
scaled.set_pixel(
xs, ys + 1, h if (fh and !bf and !dh and !eg) or (dh and !fh and !db and !ei) else e
)
scaled.set_pixel(xs + 1, ys + 1, f if (fh and !bf and !dh) else e)
- scaled.unlock()
- sprite.unlock()
return scaled
@@ -187,27 +178,24 @@ func rotxel(sprite: Image, angle: float, pivot: Vector2) -> void:
nn_rotate(sprite, angle, pivot)
return
- var aux: Image = Image.new()
+ var aux := Image.new()
aux.copy_from(sprite)
var ox: int
var oy: int
var p: Color
- aux.lock()
- sprite.lock()
for x in sprite.get_size().x:
for y in sprite.get_size().y:
- var dx = 3 * (x - pivot.x)
- var dy = 3 * (y - pivot.y)
- var found_pixel: bool = false
+ var dx := 3 * (x - pivot.x)
+ var dy := 3 * (y - pivot.y)
+ var found_pixel := false
for k in range(9):
- var i = -1 + k % 3
-# warning-ignore:integer_division
- var j = -1 + int(k / 3)
- var dir = atan2(dy + j, dx + i)
- var mag = sqrt(pow(dx + i, 2) + pow(dy + j, 2))
+ var modk := -1 + k % 3
+ var divk := -1 + int(k / 3)
+ var dir := atan2(dy + divk, dx + modk)
+ var mag := sqrt(pow(dx + modk, 2) + pow(dy + divk, 2))
dir -= angle
- ox = round(pivot.x * 3 + 1 + mag * cos(dir))
- oy = round(pivot.y * 3 + 1 + mag * sin(dir))
+ ox = roundi(pivot.x * 3 + 1 + mag * cos(dir))
+ oy = roundi(pivot.y * 3 + 1 + mag * sin(dir))
if sprite.get_width() % 2 != 0:
ox += 1
@@ -230,8 +218,8 @@ func rotxel(sprite: Image, angle: float, pivot: Vector2) -> void:
var col: int = ox % 3
var index: int = col + 3 * fil
- ox = round((ox - 1) / 3.0)
- oy = round((oy - 1) / 3.0)
+ ox = roundi((ox - 1) / 3.0)
+ oy = roundi((oy - 1) / 3.0)
var a: Color
var b: Color
var c: Color
@@ -374,8 +362,6 @@ func rotxel(sprite: Image, angle: float, pivot: Vector2) -> void:
else e
)
sprite.set_pixel(x, y, p)
- sprite.unlock()
- aux.unlock()
func fake_rotsprite(sprite: Image, angle: float, pivot: Vector2) -> void:
@@ -383,17 +369,15 @@ func fake_rotsprite(sprite: Image, angle: float, pivot: Vector2) -> void:
selected_sprite.copy_from(sprite)
selected_sprite.copy_from(scale_3x(selected_sprite))
nn_rotate(selected_sprite, angle, pivot * 3)
-# warning-ignore:integer_division
-# warning-ignore:integer_division
- selected_sprite.resize(selected_sprite.get_width() / 3, selected_sprite.get_height() / 3, 0)
+ selected_sprite.resize(
+ selected_sprite.get_width() / 3, selected_sprite.get_height() / 3, Image.INTERPOLATE_NEAREST
+ )
sprite.blit_rect(selected_sprite, Rect2(Vector2.ZERO, selected_sprite.get_size()), Vector2.ZERO)
func nn_rotate(sprite: Image, angle: float, pivot: Vector2) -> void:
- var aux: Image = Image.new()
+ var aux := Image.new()
aux.copy_from(sprite)
- sprite.lock()
- aux.lock()
var ox: int
var oy: int
for x in range(sprite.get_width()):
@@ -404,12 +388,10 @@ func nn_rotate(sprite: Image, angle: float, pivot: Vector2) -> void:
sprite.set_pixel(x, y, aux.get_pixel(ox, oy))
else:
sprite.set_pixel(x, y, Color(0, 0, 0, 0))
- sprite.unlock()
- aux.unlock()
-func similar_colors(c1: Color, c2: Color, tol: float = 100) -> bool:
- var dist = color_distance(c1, c2)
+func similar_colors(c1: Color, c2: Color, tol := 100.0) -> bool:
+ var dist := color_distance(c1, c2)
return dist <= tol
@@ -435,23 +417,21 @@ func scale_image(width: int, height: int, interpolation: int) -> void:
if not f.cels[i] is PixelCel:
continue
var sprite := Image.new()
- sprite.copy_from(f.cels[i].image)
+ sprite.copy_from(f.cels[i].get_image())
if interpolation == Interpolation.SCALE3X:
- var times: Vector2 = Vector2(
- ceil(width / (3.0 * sprite.get_width())),
- ceil(height / (3.0 * sprite.get_height()))
+ var times := Vector2i(
+ ceili(width / (3.0 * sprite.get_width())),
+ ceili(height / (3.0 * sprite.get_height()))
)
- for _j in range(max(times.x, times.y)):
+ for _j in range(maxi(times.x, times.y)):
sprite.copy_from(scale_3x(sprite))
- sprite.resize(width, height, 0)
+ sprite.resize(width, height, Image.INTERPOLATE_NEAREST)
elif interpolation == Interpolation.CLEANEDGE:
- var params := {"angle": 0, "slope": true, "cleanup": true, "preview": false}
var gen := ShaderImageEffect.new()
- gen.generate_image(sprite, clean_edge_shader, params, Vector2(width, height))
+ gen.generate_image(sprite, clean_edge_shader, {}, Vector2i(width, height))
elif interpolation == Interpolation.OMNISCALE and omniscale_shader:
- var params := {"angle": 0, "preview": false}
var gen := ShaderImageEffect.new()
- gen.generate_image(sprite, omniscale_shader, params, Vector2(width, height))
+ gen.generate_image(sprite, omniscale_shader, {}, Vector2i(width, height))
else:
sprite.resize(width, height, interpolation)
Global.current_project.undo_redo.add_do_property(f.cels[i].image, "data", sprite.data)
@@ -463,56 +443,54 @@ func scale_image(width: int, height: int, interpolation: int) -> void:
func center(indices: Array) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
Global.canvas.selection.transform_content_confirm()
project.undos += 1
project.undo_redo.create_action("Center Frames")
for frame in indices:
# Find used rect of the current frame (across all of the layers)
- var used_rect := Rect2()
+ var used_rect := Rect2i()
for cel in project.frames[frame].cels:
if not cel is PixelCel:
continue
- var cel_rect: Rect2 = cel.image.get_used_rect()
- if not cel_rect.has_no_area():
- used_rect = cel_rect if used_rect.has_no_area() else used_rect.merge(cel_rect)
- if used_rect.has_no_area():
+ var cel_rect := cel.get_image().get_used_rect()
+ if cel_rect.has_area():
+ used_rect = used_rect.merge(cel_rect) if used_rect.has_area() else cel_rect
+ if not used_rect.has_area():
continue
# Now apply centering
- var offset: Vector2 = (0.5 * (project.size - used_rect.size)).floor()
+ var offset: Vector2i = (0.5 * (project.size - used_rect.size)).floor()
for cel in project.frames[frame].cels:
if not cel is PixelCel:
continue
- var sprite := Image.new()
- sprite.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ var sprite := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
sprite.blend_rect(cel.image, used_rect, offset)
project.undo_redo.add_do_property(cel.image, "data", sprite.data)
project.undo_redo.add_undo_property(cel.image, "data", cel.image.data)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
func crop_image() -> void:
Global.canvas.selection.transform_content_confirm()
- var used_rect := Rect2()
+ var used_rect := Rect2i()
for f in Global.current_project.frames:
for cel in f.cels:
if not cel is PixelCel:
continue
- cel.image.unlock() # May be unneeded now, but keep it just in case
- var cel_used_rect: Rect2 = cel.image.get_used_rect()
- if cel_used_rect == Rect2(0, 0, 0, 0): # If the cel has no content
+ var cel_used_rect := cel.get_image().get_used_rect()
+ if cel_used_rect == Rect2i(0, 0, 0, 0): # If the cel has no content
continue
- if used_rect == Rect2(0, 0, 0, 0): # If we still haven't found the first cel with content
+ if used_rect == Rect2i(0, 0, 0, 0): # If we still haven't found the first cel with content
used_rect = cel_used_rect
else:
used_rect = used_rect.merge(cel_used_rect)
# If no layer has any content, just return
- if used_rect == Rect2(0, 0, 0, 0):
+ if used_rect == Rect2i(0, 0, 0, 0):
return
var width := used_rect.size.x
@@ -523,7 +501,7 @@ func crop_image() -> void:
for cel in f.cels:
if not cel is PixelCel:
continue
- var sprite: Image = cel.image.get_rect(used_rect)
+ var sprite := cel.get_image().get_region(used_rect)
Global.current_project.undo_redo.add_do_property(cel.image, "data", sprite.data)
Global.current_project.undo_redo.add_undo_property(cel.image, "data", cel.image.data)
@@ -536,12 +514,11 @@ func resize_canvas(width: int, height: int, offset_x: int, offset_y: int) -> voi
for c in f.cels:
if not c is PixelCel:
continue
- var sprite := Image.new()
- sprite.create(width, height, false, Image.FORMAT_RGBA8)
+ var sprite := Image.create(width, height, false, Image.FORMAT_RGBA8)
sprite.blend_rect(
- c.image,
- Rect2(Vector2.ZERO, Global.current_project.size),
- Vector2(offset_x, offset_y)
+ c.get_image(),
+ Rect2i(Vector2i.ZERO, Global.current_project.size),
+ Vector2i(offset_x, offset_y)
)
Global.current_project.undo_redo.add_do_property(c.image, "data", sprite.data)
Global.current_project.undo_redo.add_undo_property(c.image, "data", c.image.data)
@@ -550,19 +527,19 @@ func resize_canvas(width: int, height: int, offset_x: int, offset_y: int) -> voi
func general_do_scale(width: int, height: int) -> void:
- var project: Project = Global.current_project
- var size := Vector2(width, height).floor()
- var x_ratio = project.size.x / width
- var y_ratio = project.size.y / height
+ var project := Global.current_project
+ var size := Vector2i(width, height)
+ var x_ratio := float(project.size.x) / width
+ var y_ratio := float(project.size.y) / height
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
selection_map_copy.crop(size.x, size.y)
- var new_x_symmetry_point = project.x_symmetry_point / x_ratio
- var new_y_symmetry_point = project.y_symmetry_point / y_ratio
- var new_x_symmetry_axis_points = project.x_symmetry_axis.points
- var new_y_symmetry_axis_points = project.y_symmetry_axis.points
+ var new_x_symmetry_point := project.x_symmetry_point / x_ratio
+ var new_y_symmetry_point := project.y_symmetry_point / y_ratio
+ var new_x_symmetry_axis_points := project.x_symmetry_axis.points
+ var new_y_symmetry_axis_points := project.y_symmetry_axis.points
new_x_symmetry_axis_points[0].y /= y_ratio
new_x_symmetry_axis_points[1].y /= y_ratio
new_y_symmetry_axis_points[0].x /= x_ratio
@@ -579,7 +556,7 @@ func general_do_scale(width: int, height: int) -> void:
func general_undo_scale() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
project.undo_redo.add_undo_property(project, "size", project.size)
project.undo_redo.add_undo_property(project, "selection_map", project.selection_map)
project.undo_redo.add_undo_property(project, "x_symmetry_point", project.x_symmetry_point)
@@ -590,180 +567,6 @@ func general_undo_scale() -> void:
project.undo_redo.add_undo_property(
project.y_symmetry_axis, "points", project.y_symmetry_axis.points
)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
-
-
-func generate_outline(
- image: Image,
- affect_selection: bool,
- project: Project,
- outline_color: Color,
- thickness: int,
- diagonal: bool,
- inside_image: bool
-) -> void:
- if image.is_invisible():
- return
- var new_image := Image.new()
- new_image.copy_from(image)
- new_image.lock()
- image.lock()
-
- for x in project.size.x:
- for y in project.size.y:
- var pos := Vector2(x, y)
- var current_pixel := image.get_pixelv(pos)
- if affect_selection and !project.can_pixel_get_drawn(pos):
- continue
- if current_pixel.a == 0:
- continue
-
- for i in range(1, thickness + 1):
- if inside_image:
- var outline_pos: Vector2 = pos + Vector2.LEFT # Left
- if outline_pos.x < 0 || image.get_pixelv(outline_pos).a == 0:
- var new_pos: Vector2 = pos + Vector2.RIGHT * (i - 1)
- if new_pos.x < Global.current_project.size.x:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- outline_pos = pos + Vector2.RIGHT # Right
- if (
- outline_pos.x >= Global.current_project.size.x
- || image.get_pixelv(outline_pos).a == 0
- ):
- var new_pos: Vector2 = pos + Vector2.LEFT * (i - 1)
- if new_pos.x >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- outline_pos = pos + Vector2.UP # Up
- if outline_pos.y < 0 || image.get_pixelv(outline_pos).a == 0:
- var new_pos: Vector2 = pos + Vector2.DOWN * (i - 1)
- if new_pos.y < Global.current_project.size.y:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- outline_pos = pos + Vector2.DOWN # Down
- if (
- outline_pos.y >= Global.current_project.size.y
- || image.get_pixelv(outline_pos).a == 0
- ):
- var new_pos: Vector2 = pos + Vector2.UP * (i - 1)
- if new_pos.y >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- if diagonal:
- outline_pos = pos + (Vector2.LEFT + Vector2.UP) # Top left
- if (
- (outline_pos.x < 0 && outline_pos.y < 0)
- || image.get_pixelv(outline_pos).a == 0
- ):
- var new_pos: Vector2 = pos + (Vector2.RIGHT + Vector2.DOWN) * (i - 1)
- if (
- new_pos.x < Global.current_project.size.x
- && new_pos.y < Global.current_project.size.y
- ):
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- outline_pos = pos + (Vector2.LEFT + Vector2.DOWN) # Bottom left
- if (
- (outline_pos.x < 0 && outline_pos.y >= Global.current_project.size.y)
- || image.get_pixelv(outline_pos).a == 0
- ):
- var new_pos: Vector2 = pos + (Vector2.RIGHT + Vector2.UP) * (i - 1)
- if new_pos.x < Global.current_project.size.x && new_pos.y >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- outline_pos = pos + (Vector2.RIGHT + Vector2.UP) # Top right
- if (
- (outline_pos.x >= Global.current_project.size.x && outline_pos.y < 0)
- || image.get_pixelv(outline_pos).a == 0
- ):
- var new_pos: Vector2 = pos + (Vector2.LEFT + Vector2.DOWN) * (i - 1)
- if new_pos.x >= 0 && new_pos.y < Global.current_project.size.y:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- outline_pos = pos + (Vector2.RIGHT + Vector2.DOWN) # Bottom right
- if (
- (
- outline_pos.x >= Global.current_project.size.x
- && outline_pos.y >= Global.current_project.size.y
- )
- || image.get_pixelv(outline_pos).a == 0
- ):
- var new_pos: Vector2 = pos + (Vector2.LEFT + Vector2.UP) * (i - 1)
- if new_pos.x >= 0 && new_pos.y >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a > 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- else:
- var new_pos: Vector2 = pos + Vector2.LEFT * i # Left
- if new_pos.x >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- new_pos = pos + Vector2.RIGHT * i # Right
- if new_pos.x < Global.current_project.size.x:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- new_pos = pos + Vector2.UP * i # Up
- if new_pos.y >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- new_pos = pos + Vector2.DOWN * i # Down
- if new_pos.y < Global.current_project.size.y:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- if diagonal:
- new_pos = pos + (Vector2.LEFT + Vector2.UP) * i # Top left
- if new_pos.x >= 0 && new_pos.y >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- new_pos = pos + (Vector2.LEFT + Vector2.DOWN) * i # Bottom left
- if new_pos.x >= 0 && new_pos.y < Global.current_project.size.y:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- new_pos = pos + (Vector2.RIGHT + Vector2.UP) * i # Top right
- if new_pos.x < Global.current_project.size.x && new_pos.y >= 0:
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- new_pos = pos + (Vector2.RIGHT + Vector2.DOWN) * i # Bottom right
- if (
- new_pos.x < Global.current_project.size.x
- && new_pos.y < Global.current_project.size.y
- ):
- var new_pixel = image.get_pixelv(new_pos)
- if new_pixel.a == 0:
- new_image.set_pixelv(new_pos, outline_color)
-
- image.unlock()
- new_image.unlock()
- image.copy_from(new_image)
diff --git a/src/Autoload/ErrorManager.gd b/src/Autoload/ErrorManager.gd
deleted file mode 100644
index 619440bf85e..00000000000
--- a/src/Autoload/ErrorManager.gd
+++ /dev/null
@@ -1,108 +0,0 @@
-extends Node
-
-
-func parse(error: int, start := "", end := ""):
- var message: String
- match error:
- OK:
- message = "everything is fine"
- FAILED:
- message = "Generic error."
- ERR_UNAVAILABLE:
- message = "Unavailable error."
- ERR_UNCONFIGURED:
- message = "Unconfigured error."
- ERR_UNAUTHORIZED:
- message = "Unauthorized error."
- ERR_PARAMETER_RANGE_ERROR:
- message = "Parameter range error."
- ERR_OUT_OF_MEMORY:
- message = "Out of memory (OOM) error."
- ERR_FILE_NOT_FOUND:
- message = "File: Not found error."
- ERR_FILE_BAD_DRIVE:
- message = "File: Bad drive error."
- ERR_FILE_BAD_PATH:
- message = "File: Bad path error."
- ERR_FILE_NO_PERMISSION:
- message = "File: No permission error."
- ERR_FILE_ALREADY_IN_USE:
- message = "File: Already in use error."
- ERR_FILE_CANT_OPEN:
- message = "File: Can't open error."
- ERR_FILE_CANT_WRITE:
- message = "File: Can't write error."
- ERR_FILE_CANT_READ:
- message = "File: Can't read error."
- ERR_FILE_UNRECOGNIZED:
- message = "File: Unrecognized error."
- ERR_FILE_CORRUPT:
- message = "File: Corrupt error."
- ERR_FILE_MISSING_DEPENDENCIES:
- message = "File: Missing dependencies error."
- ERR_FILE_EOF:
- message = "File: End of file (EOF) error."
- ERR_CANT_OPEN:
- message = "Can't open error."
- ERR_CANT_CREATE:
- message = "Can't create error."
- ERR_QUERY_FAILED:
- message = "Query failed error."
- ERR_ALREADY_IN_USE:
- message = "Already in use error."
- ERR_LOCKED:
- message = "Locked error."
- ERR_TIMEOUT:
- message = "Timeout error."
- ERR_CANT_CONNECT:
- message = "Can't connect error."
- ERR_CANT_RESOLVE:
- message = "Can't resolve error."
- ERR_CONNECTION_ERROR:
- message = "Connection error."
- ERR_CANT_ACQUIRE_RESOURCE:
- message = "Can't acquire resource error."
- ERR_CANT_FORK:
- message = "Can't fork process error."
- ERR_INVALID_DATA:
- message = "Invalid data error."
- ERR_INVALID_PARAMETER:
- message = "Invalid parameter error."
- ERR_ALREADY_EXISTS:
- message = "Already exists error."
- ERR_DOES_NOT_EXIST:
- message = "Does not exist error."
- ERR_DATABASE_CANT_READ:
- message = "Database: Read error."
- ERR_DATABASE_CANT_WRITE:
- message = "Database: Write error."
- ERR_COMPILATION_FAILED:
- message = "Compilation failed error."
- ERR_METHOD_NOT_FOUND:
- message = "Method not found error."
- ERR_LINK_FAILED:
- message = "Linking failed error."
- ERR_SCRIPT_FAILED:
- message = "Script failed error."
- ERR_CYCLIC_LINK:
- message = "Cycling link (import cycle) error."
- ERR_INVALID_DECLARATION:
- message = "Invalid declaration error."
- ERR_DUPLICATE_SYMBOL:
- message = "Duplicate symbol error."
- ERR_PARSE_ERROR:
- message = "Parse error."
- ERR_BUSY:
- message = "Busy error."
- ERR_SKIP:
- message = "Skip error."
- ERR_HELP:
- message = "Help error."
- ERR_BUG:
- message = "Bug error."
- ERR_PRINTER_ON_FIRE:
-# gdlint: ignore=max-line-length
- message = "Printer on fire error. (This is an easter egg, no engine methods return this error code.)"
- _:
- message = "Unknown error"
- return str(start, message, end)
diff --git a/src/Autoload/Export.gd b/src/Autoload/Export.gd
index f91a129cb85..837cffd37ac 100644
--- a/src/Autoload/Export.gd
+++ b/src/Autoload/Export.gd
@@ -3,62 +3,64 @@ extends Node
enum ExportTab { IMAGE = 0, SPRITESHEET = 1 }
enum Orientation { ROWS = 0, COLUMNS = 1 }
enum AnimationDirection { FORWARD = 0, BACKWARDS = 1, PING_PONG = 2 }
-# See file_format_string, file_format_description, and ExportDialog.gd
+## See file_format_string, file_format_description, and ExportDialog.gd
enum FileFormat { PNG = 0, GIF = 1, APNG = 2 }
-# list of animated formats
+## List of animated formats
var animated_formats := [FileFormat.GIF, FileFormat.APNG]
-# A dictionary of custom exporter generators (received from extensions)
+## A dictionary of custom exporter generators (received from extensions)
var custom_exporter_generators := {}
-var current_tab: int = ExportTab.IMAGE
-# All frames and their layers processed/blended into images
-var processed_images := [] # Image[]
-var durations := [] # Array of floats
+var current_tab := ExportTab.IMAGE
+## All frames and their layers processed/blended into images
+var processed_images: Array[Image] = []
+var durations: PackedFloat32Array = []
# Spritesheet options
-var orientation: int = Orientation.ROWS
-var lines_count := 1 # How many rows/columns before new line is added
+var orientation := Orientation.ROWS
+var lines_count := 1 ## How many rows/columns before new line is added
# General options
-var frame_current_tag := 0 # Export only current frame tag
+var frame_current_tag := 0 ## Export only current frame tag
var export_layers := 0
var number_of_frames := 1
-var direction: int = AnimationDirection.FORWARD
+var direction := AnimationDirection.FORWARD
var resize := 100
-var interpolation := 0 # Image.Interpolation
+var interpolation := Image.INTERPOLATE_NEAREST
var include_tag_in_filename := false
-var new_dir_for_each_frame_tag := false # we don't need to store this after export
+var new_dir_for_each_frame_tag := false ## We don't need to store this after export
var number_of_digits := 4
var separator_character := "_"
-
-# Export coroutine signal
-var stop_export := false
+var stop_export := false ## Export coroutine signal
var file_exists_alert := "The following files already exist. Do you wish to overwrite them?\n%s"
# Export progress variables
var export_progress_fraction := 0.0
var export_progress := 0.0
-onready var gif_export_thread := Thread.new()
+@onready var gif_export_thread := Thread.new()
func _exit_tree() -> void:
- if gif_export_thread.is_active():
+ if gif_export_thread.is_started():
gif_export_thread.wait_to_finish()
-func add_file_format(name: String) -> int:
+func _multithreading_enabled() -> bool:
+ return ProjectSettings.get_setting("rendering/driver/threads/thread_model") == 2
+
+
+func add_file_format(_format: String) -> int:
var id := FileFormat.size()
- FileFormat.merge({name: id})
+# FileFormat.merge({format: id})
return id
func remove_file_format(id: int) -> void:
for key in Export.FileFormat.keys():
if Export.FileFormat[key] == id:
- Export.FileFormat.erase(key)
+# Export.FileFormat.erase(key)
return
@@ -78,28 +80,23 @@ func process_data(project := Global.current_project) -> void:
func process_spritesheet(project := Global.current_project) -> void:
processed_images.clear()
# Range of frames determined by tags
- var frames := calculate_frames(project)
+ var frames := _calculate_frames(project)
# Then store the size of frames for other functions
number_of_frames = frames.size()
# If rows mode selected calculate columns count and vice versa
var spritesheet_columns := (
- lines_count
- if orientation == Orientation.ROWS
- else frames_divided_by_spritesheet_lines()
+ lines_count if orientation == Orientation.ROWS else frames_divided_by_spritesheet_lines()
)
var spritesheet_rows := (
- lines_count
- if orientation == Orientation.COLUMNS
- else frames_divided_by_spritesheet_lines()
+ lines_count if orientation == Orientation.COLUMNS else frames_divided_by_spritesheet_lines()
)
var width := project.size.x * spritesheet_columns
var height := project.size.y * spritesheet_rows
- var whole_image := Image.new()
- whole_image.create(width, height, false, Image.FORMAT_RGBA8)
- var origin := Vector2.ZERO
+ var whole_image := Image.create(width, height, false, Image.FORMAT_RGBA8)
+ var origin := Vector2i.ZERO
var hh := 0
var vv := 0
@@ -122,7 +119,7 @@ func process_spritesheet(project := Global.current_project) -> void:
origin.y = 0
hh = 1
origin.x = project.size.x * vv
- blend_layers(whole_image, frame, origin)
+ _blend_layers(whole_image, frame, origin)
processed_images.append(whole_image)
@@ -130,17 +127,16 @@ func process_spritesheet(project := Global.current_project) -> void:
func process_animation(project := Global.current_project) -> void:
processed_images.clear()
durations.clear()
- var frames := calculate_frames(project)
+ var frames := _calculate_frames(project)
for frame in frames:
- var image := Image.new()
- image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
- blend_layers(image, frame)
+ var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ _blend_layers(image, frame)
processed_images.append(image)
durations.append(frame.duration * (1.0 / project.fps))
-func calculate_frames(project := Global.current_project) -> Array:
- var frames := []
+func _calculate_frames(project := Global.current_project) -> Array[Frame]:
+ var frames: Array[Frame] = []
if frame_current_tag > 1: # Specific tag
var frame_start: int = project.animation_tags[frame_current_tag - 2].from
var frame_end: int = project.animation_tags[frame_current_tag - 2].to
@@ -152,11 +148,11 @@ func calculate_frames(project := Global.current_project) -> Array:
frames = project.frames.duplicate()
if direction == AnimationDirection.BACKWARDS:
- frames.invert()
+ frames.reverse()
elif direction == AnimationDirection.PING_PONG:
var inverted_frames := frames.duplicate()
- inverted_frames.invert()
- inverted_frames.remove(0)
+ inverted_frames.reverse()
+ inverted_frames.remove_at(0)
frames.append_array(inverted_frames)
return frames
@@ -165,7 +161,7 @@ func export_processed_images(
ignore_overwrites: bool, export_dialog: ConfirmationDialog, project := Global.current_project
) -> bool:
# Stop export if directory path or file name are not valid
- var dir := Directory.new()
+ var dir := DirAccess.open(project.directory_path)
if not dir.dir_exists(project.directory_path) or not project.file_name.is_valid_filename():
if not dir.dir_exists(project.directory_path) and project.file_name.is_valid_filename():
export_dialog.open_path_validation_alert_popup(0)
@@ -179,23 +175,22 @@ func export_processed_images(
if current_tab == ExportTab.IMAGE and not is_single_file_format(project):
multiple_files = true if processed_images.size() > 1 else false
# Check export paths
- var export_paths := []
+ var export_paths: PackedStringArray = []
var paths_of_existing_files := ""
for i in range(processed_images.size()):
stop_export = false
- var export_path := create_export_path(multiple_files, project, i + 1)
+ var export_path := _create_export_path(multiple_files, project, i + 1)
# If the user wants to create a new directory for each animation tag then check
# if directories exist, and create them if not
if multiple_files and new_dir_for_each_frame_tag:
- var frame_tag_directory := Directory.new()
+ var frame_tag_directory := DirAccess.open(export_path.get_base_dir())
if not frame_tag_directory.dir_exists(export_path.get_base_dir()):
- frame_tag_directory.open(project.directory_path)
+ frame_tag_directory = DirAccess.open(project.directory_path)
frame_tag_directory.make_dir(export_path.get_base_dir().get_file())
if not ignore_overwrites: # Check if the files already exist
- var file_check: File = File.new()
- if file_check.file_exists(export_path):
- if not paths_of_existing_files.empty():
+ if FileAccess.file_exists(export_path):
+ if not paths_of_existing_files.is_empty():
paths_of_existing_files += "\n"
paths_of_existing_files += export_path
export_paths.append(export_path)
@@ -203,15 +198,15 @@ func export_processed_images(
if is_single_file_format(project):
break
- if not paths_of_existing_files.empty(): # If files already exist
+ if not paths_of_existing_files.is_empty(): # If files already exist
# Ask user if they want to overwrite the files
export_dialog.open_file_exists_alert_popup(tr(file_exists_alert) % paths_of_existing_files)
# Stops the function until the user decides if they want to overwrite
- yield(export_dialog, "resume_export_function")
+ await export_dialog.resume_export_function
if stop_export: # User decided to stop export
- return
+ return false
- scale_processed_images()
+ _scale_processed_images()
# override if a custom export is chosen
if project.file_format in custom_exporter_generators.keys():
@@ -226,10 +221,12 @@ func export_processed_images(
"export_paths": export_paths,
"project": project
}
- if OS.get_name() != "HTML5" and is_single_file_format(project):
- if gif_export_thread.is_active():
+ if _multithreading_enabled() and is_single_file_format(project):
+ if gif_export_thread.is_started():
gif_export_thread.wait_to_finish()
- var error = gif_export_thread.start(custom_exporter, "override_export", details)
+ var error = gif_export_thread.start(
+ Callable(custom_exporter, "override_export").bind(details)
+ )
if error == OK:
result = gif_export_thread.wait_to_finish()
else:
@@ -248,29 +245,26 @@ func export_processed_images(
"export_paths": export_paths,
"project": project
}
- if OS.get_name() == "HTML5":
+ if not _multithreading_enabled():
export_animated(details)
else:
- if gif_export_thread.is_active():
+ if gif_export_thread.is_started():
gif_export_thread.wait_to_finish()
- gif_export_thread.start(self, "export_animated", details)
+ gif_export_thread.start(export_animated.bind(details))
else:
var succeeded := true
for i in range(processed_images.size()):
- if OS.get_name() == "HTML5":
- JavaScript.download_buffer(
+ if OS.has_feature("web"):
+ JavaScriptBridge.download_buffer(
processed_images[i].save_png_to_buffer(),
export_paths[i].get_file(),
"image/png"
)
else:
- var err: int = processed_images[i].save_png(export_paths[i])
+ var err := processed_images[i].save_png(export_paths[i])
if err != OK:
Global.error_dialog.set_text(
- (
- tr("File failed to save. Error code %s")
- % str(err, ErrorManager.parse(err, " (", ")"))
- )
+ tr("File failed to save. Error code %s (%s)") % [err, error_string(err)]
)
Global.error_dialog.popup_centered()
Global.dialog_open(true)
@@ -300,14 +294,14 @@ func export_animated(args: Dictionary) -> void:
# Export progress popup
# One fraction per each frame, one fraction for write to disk
- export_progress_fraction = 100.0 / len(processed_images)
+ export_progress_fraction = 100.0 / processed_images.size()
export_progress = 0.0
export_dialog.set_export_progress_bar(export_progress)
export_dialog.toggle_export_progress_popup(true)
# Transform into AImgIO form
var frames := []
- for i in range(len(processed_images)):
+ for i in range(processed_images.size()):
var frame: AImgIOFrame = AImgIOFrame.new()
frame.content = processed_images[i]
frame.duration = durations[i]
@@ -315,29 +309,27 @@ func export_animated(args: Dictionary) -> void:
# Export and save GIF/APNG
var file_data := exporter.export_animation(
- frames, project.fps, self, "increase_export_progress", [export_dialog]
+ frames, project.fps, self, "_increase_export_progress", [export_dialog]
)
- if OS.get_name() == "HTML5":
- JavaScript.download_buffer(file_data, args["export_paths"][0], exporter.mime_type)
+ if OS.has_feature("web"):
+ JavaScriptBridge.download_buffer(file_data, args["export_paths"][0], exporter.mime_type)
else:
- var file: File = File.new()
- file.open(args["export_paths"][0], File.WRITE)
+ var file := FileAccess.open(args["export_paths"][0], FileAccess.WRITE)
file.store_buffer(file_data)
file.close()
export_dialog.toggle_export_progress_popup(false)
Global.notification_label("File(s) exported")
-func increase_export_progress(export_dialog: Node) -> void:
+func _increase_export_progress(export_dialog: Node) -> void:
export_progress += export_progress_fraction
export_dialog.set_export_progress_bar(export_progress)
-func scale_processed_images() -> void:
+func _scale_processed_images() -> void:
for processed_image in processed_images:
if resize != 100:
- processed_image.unlock()
processed_image.resize(
processed_image.get_size().x * resize / 100,
processed_image.get_size().y * resize / 100,
@@ -362,8 +354,8 @@ func file_format_string(format_enum: int) -> String:
func file_format_description(format_enum: int) -> String:
match format_enum:
- # these are overrides
- # (if they are not given, they will generate themselves based on the enum key name)
+ # these are overrides
+ # (if they are not given, they will generate themselves based on the enum key name)
FileFormat.PNG:
return "PNG Image"
FileFormat.GIF:
@@ -378,18 +370,18 @@ func file_format_description(format_enum: int) -> String:
return ""
+## True when exporting to .gif and .apng (and potentially video formats in the future)
+## False when exporting to .png, and other non-animated formats in the future
func is_single_file_format(project := Global.current_project) -> bool:
- # True when exporting to .gif and .apng (and potentially video formats in the future)
- # False when exporting to .png, and other non-animated formats in the future
return animated_formats.has(project.file_format)
-func create_export_path(multifile: bool, project: Project, frame: int = 0) -> String:
+func _create_export_path(multifile: bool, project: Project, frame := 0) -> String:
var path := project.file_name
# Only append frame number when there are multiple files exported
if multifile:
- var path_extras := separator_character + String(frame).pad_zeros(number_of_digits)
- var frame_tag_and_start_id := get_proccessed_image_animation_tag_and_start_id(
+ var path_extras := separator_character + str(frame).pad_zeros(number_of_digits)
+ var frame_tag_and_start_id := _get_proccessed_image_animation_tag_and_start_id(
project, frame - 1
)
# Check if exported frame is in frame tag
@@ -402,24 +394,21 @@ func create_export_path(multifile: bool, project: Project, frame: int = 0) -> St
var frame_tag_dir := regex.sub(frame_tag, "", true)
if include_tag_in_filename:
# (frame - start_id + 1) makes frames id to start from 1
- var tag_frame_number := String(frame - start_id + 1).pad_zeros(number_of_digits)
+ var tag_frame_number := str(frame - start_id + 1).pad_zeros(number_of_digits)
path_extras = (
- separator_character
- + frame_tag_dir
- + separator_character
- + tag_frame_number
+ separator_character + frame_tag_dir + separator_character + tag_frame_number
)
if new_dir_for_each_frame_tag:
path += path_extras
- return project.directory_path.plus_file(frame_tag_dir).plus_file(
+ return project.directory_path.path_join(frame_tag_dir).path_join(
path + file_format_string(project.file_format)
)
path += path_extras
- return project.directory_path.plus_file(path + file_format_string(project.file_format))
+ return project.directory_path.path_join(path + file_format_string(project.file_format))
-func get_proccessed_image_animation_tag_and_start_id(
+func _get_proccessed_image_animation_tag_and_start_id(
project: Project, processed_image_id: int
) -> Array:
var result_animation_tag_and_start_id = null
@@ -435,26 +424,26 @@ func get_proccessed_image_animation_tag_and_start_id(
return result_animation_tag_and_start_id
-func blend_layers(
- image: Image, frame: Frame, origin := Vector2.ZERO, project := Global.current_project
+func _blend_layers(
+ image: Image, frame: Frame, origin := Vector2i.ZERO, project := Global.current_project
) -> void:
if export_layers == 0:
blend_all_layers(image, frame, origin, project)
elif export_layers == 1:
blend_selected_cels(image, frame, origin, project)
else:
- var layer: BaseLayer = project.layers[export_layers - 2]
+ var layer := project.layers[export_layers - 2]
var layer_image := Image.new()
if layer is GroupLayer:
- layer_image.copy_from(layer.blend_children(frame, Vector2.ZERO))
+ layer_image.copy_from(layer.blend_children(frame, Vector2i.ZERO))
else:
layer_image.copy_from(frame.cels[export_layers - 2].get_image())
- image.blend_rect(layer_image, Rect2(Vector2.ZERO, project.size), origin)
+ image.blend_rect(layer_image, Rect2i(Vector2i.ZERO, project.size), origin)
-# Blends canvas layers into passed image starting from the origin position
+## Blends canvas layers into passed image starting from the origin position
func blend_all_layers(
- image: Image, frame: Frame, origin := Vector2.ZERO, project := Global.current_project
+ image: Image, frame: Frame, origin := Vector2i.ZERO, project := Global.current_project
) -> void:
var layer_i := 0
for cel in frame.cels:
@@ -467,7 +456,6 @@ func blend_all_layers(
var cel_image := Image.new()
cel_image.copy_from(cel.get_image())
if cel.opacity < 1: # If we have cel transparency
- cel_image.lock()
for xx in cel_image.get_size().x:
for yy in cel_image.get_size().y:
var pixel_color := cel_image.get_pixel(xx, yy)
@@ -475,14 +463,13 @@ func blend_all_layers(
cel_image.set_pixel(
xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)
)
- cel_image.unlock()
- image.blend_rect(cel_image, Rect2(Vector2.ZERO, project.size), origin)
+ image.blend_rect(cel_image, Rect2i(Vector2i.ZERO, project.size), origin)
layer_i += 1
-# Blends selected cels of the given frame into passed image starting from the origin position
+## Blends selected cels of the given frame into passed image starting from the origin position
func blend_selected_cels(
- image: Image, frame: Frame, origin := Vector2(0, 0), project := Global.current_project
+ image: Image, frame: Frame, origin := Vector2i.ZERO, project := Global.current_project
) -> void:
for cel_ind in frame.cels.size():
var test_array := [project.current_frame, cel_ind]
@@ -496,7 +483,6 @@ func blend_selected_cels(
var cel_image := Image.new()
cel_image.copy_from(cel.get_image())
if cel.opacity < 1: # If we have cel transparency
- cel_image.lock()
for xx in cel_image.get_size().x:
for yy in cel_image.get_size().y:
var pixel_color := cel_image.get_pixel(xx, yy)
@@ -504,9 +490,8 @@ func blend_selected_cels(
cel_image.set_pixel(
xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)
)
- cel_image.unlock()
- image.blend_rect(cel_image, Rect2(Vector2.ZERO, project.size), origin)
+ image.blend_rect(cel_image, Rect2i(Vector2i.ZERO, project.size), origin)
func frames_divided_by_spritesheet_lines() -> int:
- return int(ceil(number_of_frames / float(lines_count)))
+ return ceili(number_of_frames / float(lines_count))
diff --git a/src/Autoload/ExtensionsAPI.gd b/src/Autoload/ExtensionsAPI.gd
index 355237f9353..c3c88ffaa04 100644
--- a/src/Autoload/ExtensionsAPI.gd
+++ b/src/Autoload/ExtensionsAPI.gd
@@ -1,6 +1,6 @@
extends Node
-# use these variables in your extension to access the api
+# Use these variables in your extension to access the api
var general := GeneralAPI.new()
var menu := MenuAPI.new()
var dialog := DialogAPI.new()
@@ -12,7 +12,7 @@ var project := ProjectAPI.new()
var exports := ExportAPI.new()
var signals := SignalsAPI.new()
-# This fail-safe below is designed to work ONLY if Pixelorama is launched in Godot Editor
+## This fail-safe below is designed to work ONLY if Pixelorama is launched in Godot Editor
var _action_history: Dictionary = {}
@@ -54,12 +54,12 @@ func remove_action(action: String):
func wait_frame(): # as yield is not available to classes below, so this is the solution
# use by yield(ExtensionsApi.wait_frame(), "completed")
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
func _get_caller_extension_name() -> String:
- var stack = get_stack()
+ var stack := get_stack()
for trace in stack:
# Get extension name that called the action
var arr: Array = trace["source"].split("/")
@@ -197,13 +197,13 @@ class PanelAPI:
# we must make tabs_visible = true for a few moments if it is false
if dockable.tabs_visible == false:
dockable.tabs_visible = true
- yield(ExtensionsApi.wait_frame(), "completed")
+ await ExtensionsApi.wait_frame()
dockable.tabs_visible = false
ExtensionsApi.add_action("add_tab")
func remove_node_from_tab(node: Node) -> void:
var top_menu_container = Global.top_menu_container
- var dockable = Global.control.find_node("DockableContainer")
+ var dockable = Global.control.find_child("DockableContainer")
var panels_submenu: PopupMenu = top_menu_container.panels_submenu
# find the tab that contains the node
if node == null:
@@ -227,13 +227,13 @@ class PanelAPI:
# we must make tabs_visible = true for a few moments if it is false
if dockable.tabs_visible == false:
dockable.tabs_visible = true
- yield(ExtensionsApi.wait_frame(), "completed")
+ await ExtensionsApi.wait_frame()
dockable.tabs_visible = false
ExtensionsApi.remove_action("add_tab")
# PRIVATE METHODS
func _get_dockable_container_ui() -> Node:
- return Global.control.find_node("DockableContainer")
+ return Global.control.find_child("DockableContainer")
func _find_tab_with_node(node_name: String, dockable_container):
var root = dockable_container.layout.root
@@ -290,22 +290,22 @@ class PanelAPI:
class ThemeAPI:
func add_theme(theme: Theme) -> void:
- var themes: BoxContainer = Global.preferences_dialog.find_node("Themes")
+ var themes: BoxContainer = Global.preferences_dialog.find_child("Themes")
themes.themes.append(theme)
themes.add_theme(theme)
ExtensionsApi.add_action("add_theme")
func find_theme_index(theme: Theme) -> int:
- var themes: BoxContainer = Global.preferences_dialog.find_node("Themes")
+ var themes: BoxContainer = Global.preferences_dialog.find_child("Themes")
return themes.themes.find(theme)
func get_theme() -> Theme:
return Global.control.theme
func set_theme(idx: int) -> bool:
- var themes: BoxContainer = Global.preferences_dialog.find_node("Themes")
+ var themes: BoxContainer = Global.preferences_dialog.find_child("Themes")
if idx >= 0 and idx < themes.themes.size():
- themes.buttons_container.get_child(idx).emit_signal("pressed")
+ themes.buttons_container.get_child(idx).pressed.emit()
return true
else:
return false
@@ -321,10 +321,10 @@ class ToolAPI:
tool_name: String,
display_name: String,
shortcut: String,
- scene: PackedScene,
+ scene: String,
extra_hint := "",
extra_shortucts := [],
- layer_types: PoolIntArray = []
+ layer_types: PackedInt32Array = []
) -> void:
var tool_class := Tools.Tool.new(
tool_name, display_name, shortcut, scene, layer_types, extra_hint, extra_shortucts
@@ -335,8 +335,8 @@ class ToolAPI:
func remove_tool(tool_name: String) -> void:
# Re-assigning the tools in case the tool to be removed is also active
- Tools.assign_tool("Pencil", BUTTON_LEFT)
- Tools.assign_tool("Eraser", BUTTON_RIGHT)
+ Tools.assign_tool("Pencil", MOUSE_BUTTON_LEFT)
+ Tools.assign_tool("Eraser", MOUSE_BUTTON_RIGHT)
var tool_class: Tools.Tool = Tools.tools[tool_name]
if tool_class:
Tools.remove_tool(tool_class)
@@ -350,11 +350,11 @@ class SelectionAPI:
func select_all() -> void:
Global.canvas.selection.select_all()
- func select_rect(select_rect: Rect2, operation := 0) -> void:
+ func select_rect(rect: Rect2i, operation := 0) -> void:
# 0 for adding, 1 for subtracting, 2 for intersection
Global.canvas.selection.transform_content_confirm()
var undo_data_tmp = Global.canvas.selection.get_undo_data(false)
- Global.canvas.selection.select_rect(select_rect, operation)
+ Global.canvas.selection.select_rect(rect, operation)
Global.canvas.selection.commit_undo("Select", undo_data_tmp)
func move_selection(destination: Vector2, with_content := true, transform_standby := false):
@@ -402,19 +402,19 @@ class ProjectAPI:
frames := [],
name := tr("untitled"),
size := Vector2(64, 64),
- fill_color := Color.transparent
+ fill_color := Color.TRANSPARENT
) -> Project:
if !name.is_valid_filename():
name = tr("untitled")
if size.x <= 0 or size.y <= 0:
size.x = 1
size.y = 1
- var new_project := Project.new(frames, name, size.floor())
- new_project.layers.append(PixelLayer.new(new_project))
- new_project.fill_color = fill_color
- new_project.frames.append(new_project.new_empty_frame())
- Global.projects.append(new_project)
- return new_project
+ var new_proj := Project.new(frames, name, size.floor())
+ new_proj.layers.append(PixelLayer.new(new_proj))
+ new_proj.fill_color = fill_color
+ new_proj.frames.append(new_proj.new_empty_frame())
+ Global.projects.append(new_proj)
+ return new_proj
func switch_to(project: Project):
Global.tabs.current_tab = Global.projects.find(project)
@@ -442,7 +442,7 @@ class ProjectAPI:
print("cel at frame ", frame, ", layer ", layer, " is not a PixelCel")
func add_new_frame(after_frame: int):
- var project = Global.current_project
+ var project := Global.current_project
if after_frame < project.frames.size() and after_frame >= 0:
var old_current = project.current_frame
project.current_frame = after_frame # temporary assignment
@@ -498,7 +498,7 @@ class ExportAPI:
for i in Export.FileFormat.size(): # use an empty id if it's available
if !Export.FileFormat.values().has(i):
id = i
- Export.FileFormat.merge({format_name: id})
+# Export.FileFormat.merge({format_name: id})
# add exporter generator
Export.custom_exporter_generators.merge({id: [exporter_generator, extension]})
# add to animated (or not)
@@ -536,50 +536,50 @@ class SignalsAPI:
var _last_cel: BaseCel
func _init() -> void:
- Global.connect("project_changed", self, "_update_texture_signal")
- Global.connect("cel_changed", self, "_update_texture_signal")
+ Global.project_changed.connect(_update_texture_signal)
+ Global.cel_changed.connect(_update_texture_signal)
func _update_texture_signal():
if _last_cel:
- _last_cel.disconnect("texture_changed", self, "_on_texture_changed")
+ _last_cel.texture_changed.disconnect(_on_texture_changed)
if Global.current_project:
_last_cel = Global.current_project.get_current_cel()
- _last_cel.connect("texture_changed", self, "_on_texture_changed")
+ _last_cel.texture_changed.connect(_on_texture_changed)
func _on_texture_changed():
- emit_signal("texture_changed")
+ texture_changed.emit()
# Global signals
func connect_project_changed(target: Object, method: String):
- Global.connect("project_changed", target, method)
+ Global.project_changed.connect(Callable(target, method))
ExtensionsApi.add_action("project_changed")
func disconnect_project_changed(target: Object, method: String):
- Global.disconnect("project_changed", target, method)
+ Global.project_changed.disconnect(Callable(target, method))
ExtensionsApi.remove_action("project_changed")
func connect_cel_changed(target: Object, method: String):
- Global.connect("cel_changed", target, method)
+ Global.cel_changed.connect(Callable(target, method))
ExtensionsApi.add_action("cel_changed")
func disconnect_cel_changed(target: Object, method: String):
- Global.disconnect("cel_changed", target, method)
+ Global.cel_changed.disconnect(Callable(target, method))
ExtensionsApi.remove_action("cel_changed")
# Tool Signal
func connect_tool_color_changed(target: Object, method: String):
- Tools.connect("color_changed", target, method)
+ Tools.color_changed.connect(Callable(target, method))
ExtensionsApi.add_action("color_changed")
func disconnect_tool_color_changed(target: Object, method: String):
- Tools.disconnect("color_changed", target, method)
+ Tools.color_changed.disconnect(Callable(target, method))
ExtensionsApi.remove_action("color_changed")
# updater signals
func connect_current_cel_texture_changed(target: Object, method: String):
- connect("texture_changed", target, method)
+ texture_changed.connect(Callable(target, method))
ExtensionsApi.add_action("texture_changed")
func disconnect_current_cel_texture_changed(target: Object, method: String):
- disconnect("texture_changed", target, method)
+ texture_changed.disconnect(Callable(target, method))
ExtensionsApi.remove_action("texture_changed")
diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd
index 116c46899f3..006de6ba98a 100644
--- a/src/Autoload/Global.gd
+++ b/src/Autoload/Global.gd
@@ -42,27 +42,31 @@ enum ImageMenu {
}
enum SelectMenu { SELECT_ALL, CLEAR_SELECTION, INVERT, TILE_MODE }
enum HelpMenu {
- VIEW_SPLASH_SCREEN,
- ONLINE_DOCS,
- ISSUE_TRACKER,
- OPEN_LOGS_FOLDER,
- CHANGELOG,
- ABOUT_PIXELORAMA
+ VIEW_SPLASH_SCREEN, ONLINE_DOCS, ISSUE_TRACKER, OPEN_LOGS_FOLDER, CHANGELOG, ABOUT_PIXELORAMA
}
const OVERRIDE_FILE := "override.cfg"
+const HOME_SUBDIR_NAME := "pixelorama"
+const CONFIG_SUBDIR_NAME := "pixelorama_data"
var root_directory := "."
-var window_title := "" setget _title_changed # Why doesn't Godot have get_window_title()?
+var home_data_directory := OS.get_data_dir().path_join(HOME_SUBDIR_NAME)
+var data_directories: PackedStringArray = [home_data_directory] ## Only read from these directories
var config_cache := ConfigFile.new()
-var XDGDataPaths = preload("res://src/XDGDataPaths.gd")
-var directory_module: Reference
-var projects := [] # Array of Projects
+var projects: Array[Project] = []
var current_project: Project
-var current_project_index := 0 setget _project_changed
-
-var ui_tooltips := {}
+var current_project_index := 0:
+ set(value):
+ if value >= projects.size():
+ return
+ canvas.selection.transform_content_confirm()
+ current_project_index = value
+ current_project = projects[value]
+ project_changed.connect(current_project.change_project)
+ project_changed.emit()
+ project_changed.disconnect(current_project.change_project)
+ cel_changed.emit()
# Canvas related stuff
var can_draw := false
@@ -77,62 +81,210 @@ var show_y_symmetry_axis := false
var open_last_project := false
var quit_confirmation := false
var smooth_zoom := true
-var integer_zoom := false setget set_integer_zoom
+var integer_zoom := false:
+ set(value):
+ integer_zoom = value
+ var zoom_slider: ValueSlider = top_menu_container.get_node("%ZoomSlider")
+ if value:
+ zoom_slider.min_value = 100
+ zoom_slider.snap_step = 100
+ zoom_slider.step = 100
+ else:
+ zoom_slider.min_value = 1
+ zoom_slider.snap_step = 1
+ zoom_slider.step = 1
+ zoom_slider.value = zoom_slider.value # to trigger signal emission
var shrink := 1.0
+var font_size := 16:
+ set(value):
+ font_size = value
+ control.theme.default_font_size = value
+ control.theme.set_font_size("font_size", "HeaderSmall", value + 2)
var dim_on_popup := true
-var modulate_icon_color := Color.gray
-var icon_color_from: int = ColorFrom.THEME
-var modulate_clear_color := Color.gray
-var clear_color_from: int = ColorFrom.THEME
-var custom_icon_color := Color.gray
-var tool_button_size: int = ButtonSize.SMALL
-var left_tool_color := Color("0086cf")
-var right_tool_color := Color("fd6d14")
+var modulate_icon_color := Color.GRAY
+var icon_color_from := ColorFrom.THEME:
+ set(value):
+ icon_color_from = value
+ var themes = preferences_dialog.themes
+ if icon_color_from == ColorFrom.THEME:
+ var current_theme: Theme = themes.themes[themes.theme_index]
+ modulate_icon_color = current_theme.get_color("modulate_color", "Icons")
+ else:
+ modulate_icon_color = custom_icon_color
+ themes.change_icon_colors()
+var custom_icon_color := Color.GRAY:
+ set(value):
+ custom_icon_color = value
+ if icon_color_from == ColorFrom.CUSTOM:
+ modulate_icon_color = custom_icon_color
+ preferences_dialog.themes.change_icon_colors()
+var modulate_clear_color := Color.GRAY:
+ set(value):
+ modulate_clear_color = value
+ preferences_dialog.themes.change_clear_color()
+var clear_color_from := ColorFrom.THEME:
+ set(value):
+ clear_color_from = value
+ preferences_dialog.themes.change_clear_color()
+var tool_button_size := ButtonSize.SMALL:
+ set(value):
+ tool_button_size = value
+ Tools.set_button_size(tool_button_size)
+var left_tool_color := Color("0086cf"):
+ set(value):
+ left_tool_color = value
+ for child in Tools._tool_buttons.get_children():
+ var background: NinePatchRect = child.get_node("BackgroundLeft")
+ background.modulate = value
+ Tools._slots[MOUSE_BUTTON_LEFT].tool_node.color_rect.color = value
+var right_tool_color := Color("fd6d14"):
+ set(value):
+ right_tool_color = value
+ for child in Tools._tool_buttons.get_children():
+ var background: NinePatchRect = child.get_node("BackgroundRight")
+ background.modulate = value
+ Tools._slots[MOUSE_BUTTON_RIGHT].tool_node.color_rect.color = value
var default_width := 64
var default_height := 64
var default_fill_color := Color(0, 0, 0, 0)
var snapping_distance := 32.0
-var grid_type = GridTypes.CARTESIAN
-var grid_size := Vector2(2, 2)
-var isometric_grid_size := Vector2(16, 8)
-var grid_offset := Vector2.ZERO
-var grid_draw_over_tile_mode := false
-var grid_color := Color.black
-var pixel_grid_show_at_zoom := 1500.0 # percentage
-var pixel_grid_color := Color("91212121")
-var guide_color := Color.purple
-var checker_size := 10
-var checker_color_1 := Color(0.47, 0.47, 0.47, 1)
-var checker_color_2 := Color(0.34, 0.35, 0.34, 1)
-var checker_follow_movement := false
-var checker_follow_scale := false
+var grid_type := GridTypes.CARTESIAN:
+ set(value):
+ grid_type = value
+ canvas.grid.queue_redraw()
+var grid_size := Vector2i(2, 2):
+ set(value):
+ grid_size = value
+ canvas.grid.queue_redraw()
+var isometric_grid_size := Vector2i(16, 8):
+ set(value):
+ isometric_grid_size = value
+ canvas.grid.queue_redraw()
+var grid_offset := Vector2i.ZERO:
+ set(value):
+ grid_offset = value
+ canvas.grid.queue_redraw()
+var grid_draw_over_tile_mode := false:
+ set(value):
+ grid_draw_over_tile_mode = value
+ canvas.grid.queue_redraw()
+var grid_color := Color.BLACK:
+ set(value):
+ grid_color = value
+ canvas.grid.queue_redraw()
+var pixel_grid_show_at_zoom := 1500.0: # percentage
+ set(value):
+ pixel_grid_show_at_zoom = value
+ canvas.pixel_grid.queue_redraw()
+var pixel_grid_color := Color("21212191"):
+ set(value):
+ pixel_grid_color = value
+ canvas.pixel_grid.queue_redraw()
+var guide_color := Color.PURPLE:
+ set(value):
+ guide_color = value
+ for guide in canvas.get_children():
+ if guide is Guide:
+ guide.set_color(guide_color)
+var checker_size := 10:
+ set(value):
+ checker_size = value
+ transparent_checker.update_rect()
+var checker_color_1 := Color(0.47, 0.47, 0.47, 1):
+ set(value):
+ checker_color_1 = value
+ transparent_checker.update_rect()
+var checker_color_2 := Color(0.34, 0.35, 0.34, 1):
+ set(value):
+ checker_color_2 = value
+ transparent_checker.update_rect()
+var checker_follow_movement := false:
+ set(value):
+ checker_follow_movement = value
+ transparent_checker.update_rect()
+var checker_follow_scale := false:
+ set(value):
+ checker_follow_scale = value
+ transparent_checker.update_rect()
var tilemode_opacity := 1.0
var select_layer_on_button_click := false
-var onion_skinning_past_color := Color.red
-var onion_skinning_future_color := Color.blue
-
-var selection_animated_borders := true
-var selection_border_color_1 := Color.white
-var selection_border_color_2 := Color.black
+var onion_skinning_past_color := Color.RED:
+ set(value):
+ onion_skinning_past_color = value
+ canvas.onion_past.blue_red_color = value
+ canvas.onion_past.queue_redraw()
+var onion_skinning_future_color := Color.BLUE:
+ set(value):
+ onion_skinning_future_color = value
+ canvas.onion_future.blue_red_color = value
+ canvas.onion_future.queue_redraw()
+
+var selection_animated_borders := true:
+ set(value):
+ selection_animated_borders = value
+ var marching_ants: Sprite2D = canvas.selection.marching_ants_outline
+ marching_ants.material.set_shader_parameter("animated", selection_animated_borders)
+var selection_border_color_1 := Color.WHITE:
+ set(value):
+ selection_border_color_1 = value
+ var marching_ants: Sprite2D = canvas.selection.marching_ants_outline
+ marching_ants.material.set_shader_parameter("first_color", selection_border_color_1)
+ canvas.selection.queue_redraw()
+var selection_border_color_2 := Color.BLACK:
+ set(value):
+ selection_border_color_2 = value
+ var marching_ants: Sprite2D = canvas.selection.marching_ants_outline
+ marching_ants.material.set_shader_parameter("second_color", selection_border_color_2)
+ canvas.selection.queue_redraw()
var pause_when_unfocused := true
-var fps_limit := 0
-
-var autosave_interval := 1.0
-var enable_autosave := true
-var renderer := OS.get_current_video_driver() setget _renderer_changed
-var tablet_driver := 0 setget _tablet_driver_changed
+var fps_limit := 0:
+ set(value):
+ fps_limit = value
+ Engine.max_fps = fps_limit
+
+var autosave_interval := 1.0:
+ set(value):
+ autosave_interval = value
+ OpenSave.update_autosave()
+var enable_autosave := true:
+ set(value):
+ enable_autosave = value
+ OpenSave.update_autosave()
+ preferences_dialog.autosave_interval.editable = enable_autosave
+var renderer := 0:
+ set = _renderer_changed
+var tablet_driver := 0:
+ set(value):
+ tablet_driver = value
+ if OS.has_feature("editor"):
+ return
+ var tablet_driver_name := DisplayServer.tablet_get_current_driver()
+ ProjectSettings.set_setting("display/window/tablet_driver", tablet_driver_name)
+ ProjectSettings.save_custom(OVERRIDE_FILE)
# Tools & options
var show_left_tool_icon := true
var show_right_tool_icon := true
var left_square_indicator_visible := true
var right_square_indicator_visible := true
-var native_cursors := false
-var cross_cursor := true
+var native_cursors := false:
+ set(value):
+ native_cursors = value
+ if native_cursors:
+ Input.set_custom_mouse_cursor(null, Input.CURSOR_CROSS, Vector2(15, 15))
+ else:
+ control.set_custom_cursor()
+var cross_cursor := true:
+ set(value):
+ cross_cursor = value
+ if cross_cursor:
+ main_viewport.mouse_default_cursor_shape = Control.CURSOR_CROSS
+ else:
+ main_viewport.mouse_default_cursor_shape = Control.CURSOR_ARROW
# View menu options
var greyscale_view := false
@@ -163,85 +315,93 @@ var crop_left := 0
var crop_right := 0
# Nodes
-var base_layer_button_node: PackedScene = preload("res://src/UI/Timeline/BaseLayerButton.tscn")
-var pixel_layer_button_node: PackedScene = preload("res://src/UI/Timeline/PixelLayerButton.tscn")
-var group_layer_button_node: PackedScene = preload("res://src/UI/Timeline/GroupLayerButton.tscn")
-var pixel_cel_button_node: PackedScene = preload("res://src/UI/Timeline/PixelCelButton.tscn")
-var group_cel_button_node: PackedScene = preload("res://src/UI/Timeline/GroupCelButton.tscn")
-var cel_3d_button_node: PackedScene = preload("res://src/UI/Timeline/Cel3DButton.tscn")
-
-onready var control: Node = get_tree().current_scene
-
-onready var canvas: Canvas = control.find_node("Canvas")
-onready var tabs: Tabs = control.find_node("Tabs")
-onready var main_viewport: ViewportContainer = control.find_node("ViewportContainer")
-onready var second_viewport: ViewportContainer = control.find_node("Second Canvas")
-onready var canvas_preview_container: Container = control.find_node("Canvas Preview")
-onready var global_tool_options: PanelContainer = control.find_node("Global Tool Options")
-onready var small_preview_viewport: ViewportContainer = canvas_preview_container.find_node(
+var base_layer_button_node: PackedScene = load("res://src/UI/Timeline/BaseLayerButton.tscn")
+var pixel_layer_button_node: PackedScene = load("res://src/UI/Timeline/PixelLayerButton.tscn")
+var group_layer_button_node: PackedScene = load("res://src/UI/Timeline/GroupLayerButton.tscn")
+var pixel_cel_button_node: PackedScene = load("res://src/UI/Timeline/PixelCelButton.tscn")
+var group_cel_button_node: PackedScene = load("res://src/UI/Timeline/GroupCelButton.tscn")
+var cel_3d_button_node: PackedScene = load("res://src/UI/Timeline/Cel3DButton.tscn")
+
+@onready var main_window := get_window()
+@onready var control := get_tree().current_scene
+
+@onready var canvas: Canvas = control.find_child("Canvas")
+@onready var tabs: TabBar = control.find_child("TabBar")
+@onready var main_viewport: SubViewportContainer = control.find_child("SubViewportContainer")
+@onready var second_viewport: SubViewportContainer = control.find_child("Second Canvas")
+@onready var canvas_preview_container: Container = control.find_child("Canvas Preview")
+@onready var global_tool_options: PanelContainer = control.find_child("Global Tool Options")
+@onready var small_preview_viewport: SubViewportContainer = canvas_preview_container.find_child(
"PreviewViewportContainer"
)
-onready var camera: Camera2D = main_viewport.find_node("Camera2D")
-onready var camera2: Camera2D = second_viewport.find_node("Camera2D2")
-onready var camera_preview: Camera2D = control.find_node("CameraPreview")
-onready var cameras := [camera, camera2, camera_preview]
-onready var horizontal_ruler: BaseButton = control.find_node("HorizontalRuler")
-onready var vertical_ruler: BaseButton = control.find_node("VerticalRuler")
-onready var transparent_checker: ColorRect = control.find_node("TransparentChecker")
-onready var preview_zoom_slider: VSlider = control.find_node("PreviewZoomSlider")
-
-onready var brushes_popup: Popup = control.find_node("BrushesPopup")
-onready var patterns_popup: Popup = control.find_node("PatternsPopup")
-onready var palette_panel: PalettePanel = control.find_node("Palettes")
-
-onready var references_panel: ReferencesPanel = control.find_node("Reference Images")
-onready var perspective_editor := control.find_node("Perspective Editor")
-
-onready var top_menu_container: Panel = control.find_node("TopMenuContainer")
-onready var cursor_position_label: Label = control.find_node("CursorPosition")
-onready var current_frame_mark_label: Label = control.find_node("CurrentFrameMark")
-
-onready var animation_timeline: Panel = control.find_node("Animation Timeline")
-onready var animation_timer: Timer = animation_timeline.find_node("AnimationTimer")
-onready var frame_hbox: HBoxContainer = animation_timeline.find_node("FrameHBox")
-onready var layer_vbox: VBoxContainer = animation_timeline.find_node("LayerVBox")
-onready var cel_vbox: VBoxContainer = animation_timeline.find_node("CelVBox")
-onready var tag_container: Control = animation_timeline.find_node("TagContainer")
-onready var play_forward: BaseButton = animation_timeline.find_node("PlayForward")
-onready var play_backwards: BaseButton = animation_timeline.find_node("PlayBackwards")
-onready var remove_frame_button: BaseButton = animation_timeline.find_node("DeleteFrame")
-onready var move_left_frame_button: BaseButton = animation_timeline.find_node("MoveLeft")
-onready var move_right_frame_button: BaseButton = animation_timeline.find_node("MoveRight")
-onready var remove_layer_button: BaseButton = animation_timeline.find_node("RemoveLayer")
-onready var move_up_layer_button: BaseButton = animation_timeline.find_node("MoveUpLayer")
-onready var move_down_layer_button: BaseButton = animation_timeline.find_node("MoveDownLayer")
-onready var merge_down_layer_button: BaseButton = animation_timeline.find_node("MergeDownLayer")
-onready var layer_opacity_slider: ValueSlider = animation_timeline.find_node("OpacitySlider")
-
-onready var tile_mode_offset_dialog: AcceptDialog = control.find_node("TileModeOffsetsDialog")
-onready var open_sprites_dialog: FileDialog = control.find_node("OpenSprite")
-onready var save_sprites_dialog: FileDialog = control.find_node("SaveSprite")
-onready var save_sprites_html5_dialog: ConfirmationDialog = control.find_node("SaveSpriteHTML5")
-onready var export_dialog: AcceptDialog = control.find_node("ExportDialog")
-onready var preferences_dialog: AcceptDialog = control.find_node("PreferencesDialog")
-onready var error_dialog: AcceptDialog = control.find_node("ErrorDialog")
-
-onready var current_version: String = ProjectSettings.get_setting("application/config/Version")
+@onready var camera: Camera2D = main_viewport.find_child("Camera2D")
+@onready var camera2: Camera2D = second_viewport.find_child("Camera2D2")
+@onready var camera_preview: Camera2D = control.find_child("CameraPreview")
+@onready var cameras := [camera, camera2, camera_preview]
+@onready var horizontal_ruler: BaseButton = control.find_child("HorizontalRuler")
+@onready var vertical_ruler: BaseButton = control.find_child("VerticalRuler")
+@onready var transparent_checker: ColorRect = control.find_child("TransparentChecker")
+
+@onready var brushes_popup: Popup = control.find_child("BrushesPopup")
+@onready var patterns_popup: Popup = control.find_child("PatternsPopup")
+@onready var palette_panel: PalettePanel = control.find_child("Palettes")
+
+@onready var references_panel: ReferencesPanel = control.find_child("Reference Images")
+@onready var perspective_editor := control.find_child("Perspective Editor")
+
+@onready var top_menu_container: Panel = control.find_child("TopMenuContainer")
+@onready var cursor_position_label: Label = control.find_child("CursorPosition")
+@onready var current_frame_mark_label: Label = control.find_child("CurrentFrameMark")
+
+@onready var animation_timeline: Panel = control.find_child("Animation Timeline")
+@onready var animation_timer: Timer = animation_timeline.find_child("AnimationTimer")
+@onready var frame_hbox: HBoxContainer = animation_timeline.find_child("FrameHBox")
+@onready var layer_vbox: VBoxContainer = animation_timeline.find_child("LayerVBox")
+@onready var cel_vbox: VBoxContainer = animation_timeline.find_child("CelVBox")
+@onready var tag_container: Control = animation_timeline.find_child("TagContainer")
+@onready var play_forward: BaseButton = animation_timeline.find_child("PlayForward")
+@onready var play_backwards: BaseButton = animation_timeline.find_child("PlayBackwards")
+@onready var remove_frame_button: BaseButton = animation_timeline.find_child("DeleteFrame")
+@onready var move_left_frame_button: BaseButton = animation_timeline.find_child("MoveLeft")
+@onready var move_right_frame_button: BaseButton = animation_timeline.find_child("MoveRight")
+@onready var remove_layer_button: BaseButton = animation_timeline.find_child("RemoveLayer")
+@onready var move_up_layer_button: BaseButton = animation_timeline.find_child("MoveUpLayer")
+@onready var move_down_layer_button: BaseButton = animation_timeline.find_child("MoveDownLayer")
+@onready var merge_down_layer_button: BaseButton = animation_timeline.find_child("MergeDownLayer")
+@onready var layer_opacity_slider: ValueSlider = animation_timeline.find_child("OpacitySlider")
+
+@onready var tile_mode_offset_dialog: AcceptDialog = control.find_child("TileModeOffsetsDialog")
+@onready var open_sprites_dialog: FileDialog = control.find_child("OpenSprite")
+@onready var save_sprites_dialog: FileDialog = control.find_child("SaveSprite")
+@onready var save_sprites_html5_dialog: ConfirmationDialog = control.find_child("SaveSpriteHTML5")
+@onready var export_dialog: AcceptDialog = control.find_child("ExportDialog")
+@onready var preferences_dialog: AcceptDialog = control.find_child("PreferencesDialog")
+@onready var error_dialog: AcceptDialog = control.find_child("ErrorDialog")
+
+@onready var current_version: String = ProjectSettings.get_setting("application/config/Version")
func _init() -> void:
+ if OS.has_feature("standalone"):
+ root_directory = OS.get_executable_path().get_base_dir()
+ data_directories.append(root_directory.path_join(CONFIG_SUBDIR_NAME))
+ if OS.get_name() in ["Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD"]:
+ # Checks the list of files var, and processes them.
+ if OS.has_environment("XDG_DATA_DIRS"):
+ var raw_env_var := OS.get_environment("XDG_DATA_DIRS") # includes empties.
+ var unappended_subdirs := raw_env_var.split(":", true)
+ for unapp_subdir in unappended_subdirs:
+ data_directories.append(unapp_subdir.path_join(HOME_SUBDIR_NAME))
+ else:
+ # Create defaults
+ for default_loc in ["/usr/local/share", "/usr/share"]:
+ data_directories.append(default_loc.path_join(HOME_SUBDIR_NAME))
if ProjectSettings.get_setting("display/window/tablet_driver") == "winink":
tablet_driver = 1
func _ready() -> void:
_initialize_keychain()
-
- if OS.has_feature("standalone"):
- root_directory = OS.get_executable_path().get_base_dir()
- # root_directory must be set earlier than this is because XDGDataDirs depends on it
- directory_module = XDGDataPaths.new()
-
# Load settings from the config file
config_cache.load("user://cache.ini")
@@ -255,125 +415,61 @@ func _ready() -> void:
current_project = projects[0]
current_project.fill_color = default_fill_color
- for node in get_tree().get_nodes_in_group("UIButtons"):
- var tooltip: String = node.hint_tooltip
- if !tooltip.empty() and node.shortcut:
- ui_tooltips[node] = tooltip
- yield(get_tree(), "idle_frame")
- emit_signal("project_changed")
-
-
-func set_integer_zoom(enabled: bool):
- integer_zoom = enabled
- var zoom_slider: ValueSlider = top_menu_container.get_node("%ZoomSlider")
- if enabled:
- zoom_slider.snap_step = 100
- zoom_slider.step = 100
- else:
- zoom_slider.snap_step = 1
- zoom_slider.step = 1
- zoom_slider.value = zoom_slider.value # to trigger signal emmission
+ await get_tree().process_frame
+ project_changed.emit()
func _initialize_keychain() -> void:
Keychain.config_file = config_cache
Keychain.actions = {
- "new_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.NEW),
- "open_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.OPEN),
- "open_last_project":
- Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.OPEN_LAST_PROJECT),
- "save_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.SAVE),
- "save_file_as":
- Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.SAVE_AS),
- "export_file":
- Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.EXPORT),
- "export_file_as":
- Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.EXPORT_AS),
- "quit": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.QUIT),
- "redo":
- Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.REDO, true),
- "undo":
- Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.UNDO, true),
- "cut": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.CUT),
- "copy": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.COPY),
- "paste": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PASTE),
- "paste_in_place":
- Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PASTE_IN_PLACE),
- "delete": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.DELETE),
- "new_brush":
- Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.NEW_BRUSH),
- "preferences":
- Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PREFERENCES),
- "scale_image":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.SCALE_IMAGE),
- "crop_image":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.CROP_IMAGE),
- "resize_canvas":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.RESIZE_CANVAS),
- "offset_image":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.OFFSET_IMAGE),
- "mirror_image":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.FLIP),
- "rotate_image":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.ROTATE),
- "invert_colors":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.INVERT_COLORS),
- "desaturation":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.DESATURATION),
- "outline":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.OUTLINE),
- "drop_shadow":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.DROP_SHADOW),
- "adjust_hsv":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.HSV),
- "gradient":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.GRADIENT),
- "gradient_map":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.GRADIENT_MAP),
- "posterize":
- Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.POSTERIZE),
- "mirror_view":
- Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.MIRROR_VIEW),
- "show_grid":
- Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_GRID),
- "show_pixel_grid":
- Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_PIXEL_GRID),
- "show_guides":
- Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_GUIDES),
- "show_rulers":
- Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_RULERS),
- "moveable_panels":
- Keychain.MenuInputAction.new(
- "", "Window menu", true, "WindowMenu", WindowMenu.MOVABLE_PANELS
- ),
- "zen_mode":
- Keychain.MenuInputAction.new("", "Window menu", true, "WindowMenu", WindowMenu.ZEN_MODE),
- "toggle_fullscreen":
- Keychain.MenuInputAction.new(
- "", "Window menu", true, "WindowMenu", WindowMenu.FULLSCREEN_MODE
- ),
- "clear_selection":
- Keychain.MenuInputAction.new(
- "", "Select menu", true, "SelectMenu", SelectMenu.CLEAR_SELECTION
- ),
- "select_all":
- Keychain.MenuInputAction.new("", "Select menu", true, "SelectMenu", SelectMenu.SELECT_ALL),
- "invert_selection":
- Keychain.MenuInputAction.new("", "Select menu", true, "SelectMenu", SelectMenu.INVERT),
- "view_splash_screen":
- Keychain.MenuInputAction.new(
- "", "Help menu", true, "HelpMenu", HelpMenu.VIEW_SPLASH_SCREEN
- ),
- "open_docs":
- Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ONLINE_DOCS),
- "issue_tracker":
- Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ISSUE_TRACKER),
- "open_logs_folder":
- Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.OPEN_LOGS_FOLDER),
- "changelog":
- Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.CHANGELOG),
- "about_pixelorama":
- Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ABOUT_PIXELORAMA),
+ "new_file": Keychain.InputAction.new("", "File menu", true),
+ "open_file": Keychain.InputAction.new("", "File menu", true),
+ "open_last_project": Keychain.InputAction.new("", "File menu", true),
+ "save_file": Keychain.InputAction.new("", "File menu", true),
+ "save_file_as": Keychain.InputAction.new("", "File menu", true),
+ "export_file": Keychain.InputAction.new("", "File menu", true),
+ "export_file_as": Keychain.InputAction.new("", "File menu", true),
+ "quit": Keychain.InputAction.new("", "File menu", true),
+ "redo": Keychain.InputAction.new("", "Edit menu", true),
+ "undo": Keychain.InputAction.new("", "Edit menu", true),
+ "cut": Keychain.InputAction.new("", "Edit menu", true),
+ "copy": Keychain.InputAction.new("", "Edit menu", true),
+ "paste": Keychain.InputAction.new("", "Edit menu", true),
+ "paste_in_place": Keychain.InputAction.new("", "Edit menu", true),
+ "delete": Keychain.InputAction.new("", "Edit menu", true),
+ "new_brush": Keychain.InputAction.new("", "Edit menu", true),
+ "preferences": Keychain.InputAction.new("", "Edit menu", true),
+ "scale_image": Keychain.InputAction.new("", "Image menu", true),
+ "crop_image": Keychain.InputAction.new("", "Image menu", true),
+ "resize_canvas": Keychain.InputAction.new("", "Image menu", true),
+ "offset_image": Keychain.InputAction.new("", "Image menu", true),
+ "mirror_image": Keychain.InputAction.new("", "Image menu", true),
+ "rotate_image": Keychain.InputAction.new("", "Image menu", true),
+ "invert_colors": Keychain.InputAction.new("", "Image menu", true),
+ "desaturation": Keychain.InputAction.new("", "Image menu", true),
+ "outline": Keychain.InputAction.new("", "Image menu", true),
+ "drop_shadow": Keychain.InputAction.new("", "Image menu", true),
+ "adjust_hsv": Keychain.InputAction.new("", "Image menu", true),
+ "gradient": Keychain.InputAction.new("", "Image menu", true),
+ "gradient_map": Keychain.InputAction.new("", "Image menu", true),
+ "posterize": Keychain.InputAction.new("", "Image menu", true),
+ "mirror_view": Keychain.InputAction.new("", "View menu", true),
+ "show_grid": Keychain.InputAction.new("", "View menu", true),
+ "show_pixel_grid": Keychain.InputAction.new("", "View menu", true),
+ "show_guides": Keychain.InputAction.new("", "View menu", true),
+ "show_rulers": Keychain.InputAction.new("", "View menu", true),
+ "moveable_panels": Keychain.InputAction.new("", "Window menu", true),
+ "zen_mode": Keychain.InputAction.new("", "Window menu", true),
+ "toggle_fullscreen": Keychain.InputAction.new("", "Window menu", true),
+ "clear_selection": Keychain.InputAction.new("", "Select menu", true),
+ "select_all": Keychain.InputAction.new("", "Select menu", true),
+ "invert_selection": Keychain.InputAction.new("", "Select menu", true),
+ "view_splash_screen": Keychain.InputAction.new("", "Help menu", true),
+ "open_docs": Keychain.InputAction.new("", "Help menu", true),
+ "issue_tracker": Keychain.InputAction.new("", "Help menu", true),
+ "open_logs_folder": Keychain.InputAction.new("", "Help menu", true),
+ "changelog": Keychain.InputAction.new("", "Help menu", true),
+ "about_pixelorama": Keychain.InputAction.new("", "Help menu", true),
"zoom_in": Keychain.InputAction.new("", "Canvas"),
"zoom_out": Keychain.InputAction.new("", "Canvas"),
"camera_left": Keychain.InputAction.new("", "Canvas"),
@@ -387,13 +483,36 @@ func _initialize_keychain() -> void:
"move_mouse_right": Keychain.InputAction.new("", "Cursor movement"),
"move_mouse_up": Keychain.InputAction.new("", "Cursor movement"),
"move_mouse_down": Keychain.InputAction.new("", "Cursor movement"),
+ "reset_colors_default": Keychain.InputAction.new("", "Buttons"),
"switch_colors": Keychain.InputAction.new("", "Buttons"),
+ "horizontal_mirror": Keychain.InputAction.new("", "Buttons"),
+ "vertical_mirror": Keychain.InputAction.new("", "Buttons"),
+ "pixel_perfect": Keychain.InputAction.new("", "Buttons"),
+ "new_layer": Keychain.InputAction.new("", "Buttons"),
+ "remove_layer": Keychain.InputAction.new("", "Buttons"),
+ "move_layer_up": Keychain.InputAction.new("", "Buttons"),
+ "move_layer_down": Keychain.InputAction.new("", "Buttons"),
+ "clone_layer": Keychain.InputAction.new("", "Buttons"),
+ "merge_down_layer": Keychain.InputAction.new("", "Buttons"),
+ "add_frame": Keychain.InputAction.new("", "Buttons"),
+ "remove_frame": Keychain.InputAction.new("", "Buttons"),
+ "clone_frame": Keychain.InputAction.new("", "Buttons"),
+ "manage_frame_tags": Keychain.InputAction.new("", "Buttons"),
+ "move_frame_left": Keychain.InputAction.new("", "Buttons"),
+ "move_frame_right": Keychain.InputAction.new("", "Buttons"),
"go_to_first_frame": Keychain.InputAction.new("", "Buttons"),
"go_to_last_frame": Keychain.InputAction.new("", "Buttons"),
"go_to_previous_frame": Keychain.InputAction.new("", "Buttons"),
"go_to_next_frame": Keychain.InputAction.new("", "Buttons"),
"play_backwards": Keychain.InputAction.new("", "Buttons"),
"play_forward": Keychain.InputAction.new("", "Buttons"),
+ "onion_skinning_toggle": Keychain.InputAction.new("", "Buttons"),
+ "loop_toggle": Keychain.InputAction.new("", "Buttons"),
+ "onion_skinning_settings": Keychain.InputAction.new("", "Buttons"),
+ "new_palette": Keychain.InputAction.new("", "Buttons"),
+ "edit_palette": Keychain.InputAction.new("", "Buttons"),
+ "brush_size_increment": Keychain.InputAction.new("", "Buttons"),
+ "brush_size_decrement": Keychain.InputAction.new("", "Buttons"),
"change_tool_mode": Keychain.InputAction.new("", "Tool modifiers", false),
"draw_create_line": Keychain.InputAction.new("", "Draw tools", false),
"draw_snap_angle": Keychain.InputAction.new("", "Draw tools", false),
@@ -436,20 +555,19 @@ func _initialize_keychain() -> void:
"Transformation tools": Keychain.InputGroup.new("Tool modifiers"),
}
Keychain.ignore_actions = ["left_mouse", "right_mouse", "middle_mouse", "shift", "ctrl"]
- Keychain.multiple_menu_accelerators = true
func notification_label(text: String) -> void:
- var notification := NotificationLabel.new()
- notification.text = tr(text)
- notification.rect_position = main_viewport.rect_global_position
- notification.rect_position.y += main_viewport.rect_size.y
- control.add_child(notification)
+ var notif := NotificationLabel.new()
+ notif.text = tr(text)
+ notif.position = main_viewport.global_position
+ notif.position.y += main_viewport.size.y
+ control.add_child(notif)
func general_undo(project: Project = current_project) -> void:
project.undos -= 1
- var action_name: String = project.undo_redo.get_current_action_name()
+ var action_name := project.undo_redo.get_current_action_name()
notification_label("Undo: %s" % action_name)
@@ -457,7 +575,7 @@ func general_redo(project: Project = current_project) -> void:
if project.undos < project.undo_redo.get_version(): # If we did undo and then redo
project.undos = project.undo_redo.get_version()
if control.redone:
- var action_name: String = project.undo_redo.get_current_action_name()
+ var action_name := project.undo_redo.get_current_action_name()
notification_label("Redo: %s" % action_name)
@@ -490,7 +608,7 @@ func undo_or_redo(
for j in project.layers.size():
canvas.update_texture(j, i, project)
- canvas.selection.update()
+ canvas.selection.queue_redraw()
if action_name == "Scale":
for i in project.frames.size():
for j in project.layers.size():
@@ -498,61 +616,41 @@ func undo_or_redo(
if current_cel is Cel3D:
current_cel.size_changed(project.size)
else:
- current_cel.image_texture.create_from_image(current_cel.get_image(), 0)
+ current_cel.image_texture = ImageTexture.create_from_image(
+ current_cel.get_image()
+ )
canvas.camera_zoom()
- canvas.grid.update()
- canvas.pixel_grid.update()
+ canvas.grid.queue_redraw()
+ canvas.pixel_grid.queue_redraw()
project.selection_map_changed()
cursor_position_label.text = "[%sร%s]" % [project.size.x, project.size.y]
- canvas.update()
- second_viewport.get_child(0).get_node("CanvasPreview").update()
- canvas_preview_container.canvas_preview.update()
+ canvas.queue_redraw()
+ second_viewport.get_child(0).get_node("CanvasPreview").queue_redraw()
+ canvas_preview_container.canvas_preview.queue_redraw()
if !project.has_changed:
project.has_changed = true
if project == current_project:
- self.window_title = window_title + "(*)"
-
-
-func _title_changed(value: String) -> void:
- window_title = value
- OS.set_window_title(value)
-
-
-func _project_changed(value: int) -> void:
- canvas.selection.transform_content_confirm()
- current_project_index = value
- current_project = projects[value]
- connect("project_changed", current_project, "change_project")
- emit_signal("project_changed")
- disconnect("project_changed", current_project, "change_project")
- emit_signal("cel_changed")
+ main_window.title = main_window.title + "(*)"
func _renderer_changed(value: int) -> void:
renderer = value
- if OS.has_feature("editor"):
- return
-
- # Sets GLES2 as the default value in `override.cfg`.
- # Without this, switching to GLES3 does not work, because it will default to GLES2.
- ProjectSettings.set_initial_value("rendering/quality/driver/driver_name", "GLES2")
- var renderer_name := OS.get_video_driver_name(renderer)
- ProjectSettings.set_setting("rendering/quality/driver/driver_name", renderer_name)
- ProjectSettings.save_custom(OVERRIDE_FILE)
-func _tablet_driver_changed(value: int) -> void:
- tablet_driver = value
- if OS.has_feature("editor"):
- return
- var tablet_driver_name := OS.get_tablet_driver_name(tablet_driver)
- ProjectSettings.set_setting("display/window/tablet_driver", tablet_driver_name)
- ProjectSettings.save_custom(OVERRIDE_FILE)
+# if OS.has_feature("editor"):
+# return
+#
+# # Sets GLES2 as the default value in `override.cfg`.
+# # Without this, switching to GLES3 does not work, because it will default to GLES2.
+# ProjectSettings.set_initial_value("rendering/quality/driver/driver_name", "GLES2")
+# var renderer_name := OS.get_video_driver_name(renderer)
+# ProjectSettings.set_setting("rendering/quality/driver/driver_name", renderer_name)
+# ProjectSettings.save_custom(OVERRIDE_FILE)
func dialog_open(open: bool) -> void:
- var dim_color := Color.white
+ var dim_color := Color.WHITE
if open:
can_draw = false
if dim_on_popup:
@@ -583,37 +681,11 @@ func change_button_texturerect(texture_button: TextureRect, new_file_name: Strin
return
var file_name := texture_button.texture.resource_path.get_basename().get_file()
var directory_path := texture_button.texture.resource_path.get_basename().replace(file_name, "")
- texture_button.texture = load(directory_path.plus_file(new_file_name))
-
-
-func update_hint_tooltips() -> void:
- yield(get_tree(), "idle_frame")
- Tools.update_hint_tooltips()
-
- for tip in ui_tooltips:
- var hint := "None"
- var event_type: InputEvent = tip.shortcut.shortcut
- if event_type is InputEventKey:
- hint = event_type.as_text()
- elif event_type is InputEventAction:
- var first_key: InputEventKey = Keychain.action_get_first_key(event_type.action)
- hint = first_key.as_text() if first_key else "None"
- tip.hint_tooltip = tr(ui_tooltips[tip]) % hint
-
-
-# Used in case some of the values in a dictionary are Strings, when they should be something else
-func convert_dictionary_values(dict: Dictionary) -> void:
- for key in dict:
- if key == "id" or key == "type":
- dict[key] = int(dict[key])
- if typeof(dict[key]) != TYPE_STRING:
- continue
- if "transform" in key: # Convert a String to a Transform
- var transform_string: String = dict[key].replace(" - ", ", ")
- dict[key] = str2var("Transform(" + transform_string + ")")
- elif "color" in key: # Convert a String to a Color
- dict[key] = str2var("Color(" + dict[key] + ")")
- elif "v2" in key: # Convert a String to a Vector2
- dict[key] = str2var("Vector2" + dict[key])
- elif "size" in key or "center_offset" in key: # Convert a String to a Vector3
- dict[key] = str2var("Vector3" + dict[key])
+ texture_button.texture = load(directory_path.path_join(new_file_name))
+
+
+func path_join_array(basepaths: PackedStringArray, subpath: String) -> PackedStringArray:
+ var res := PackedStringArray()
+ for _path in basepaths:
+ res.append(_path.path_join(subpath))
+ return res
diff --git a/src/Autoload/HTML5FileExchange.gd b/src/Autoload/HTML5FileExchange.gd
index a2fdbd1f92b..e31a0ce927a 100644
--- a/src/Autoload/HTML5FileExchange.gd
+++ b/src/Autoload/HTML5FileExchange.gd
@@ -1,25 +1,26 @@
extends Node
-# Code taken and modified from https://github.com/Pukkah/HTML5-File-Exchange-for-Godot
-# Thanks to Pukkah from GitHub for providing the original code
+## Code taken and modified from https://github.com/Pukkah/HTML5-File-Exchange-for-Godot
+## Thanks to Pukkah from GitHub for providing the original code
signal in_focus
-signal image_loaded # emits a signal for returning loaded image info
+signal image_loaded ## Emits a signal for returning loaded image info
func _ready() -> void:
- if OS.get_name() == "HTML5" and OS.has_feature("JavaScript"):
+ if OS.has_feature("web"):
_define_js()
-func _notification(notification: int) -> void:
- if notification == MainLoop.NOTIFICATION_WM_FOCUS_IN:
- emit_signal("in_focus")
+func _notification(what: int) -> void:
+ if what == NOTIFICATION_WM_WINDOW_FOCUS_IN:
+ in_focus.emit()
func _define_js() -> void:
- # Define JS script
- JavaScript.eval(
- """
+ (
+ JavaScriptBridge
+ . eval(
+ """
var fileData;
var fileType;
var fileName;
@@ -67,36 +68,34 @@ func _define_js() -> void:
});
}
""",
- true
+ true
+ )
)
-# If (load_directly = false) then image info (image and its name)
-# will not be directly farwarded it to OpenSave
+## If (load_directly = false) then image info (image and its name)
+## will not be directly farwarded it to OpenSave
func load_image(load_directly := true):
- if OS.get_name() != "HTML5" or !OS.has_feature("JavaScript"):
+ if !OS.has_feature("web"):
return
-
# Execute JS function
- JavaScript.eval("upload_image();", true) # Opens prompt for choosing file
-
- yield(self, "in_focus") # Wait until JS prompt is closed
+ JavaScriptBridge.eval("upload_image();", true) # Opens prompt for choosing file
+ await in_focus # Wait until JS prompt is closed
+ await get_tree().create_timer(0.5).timeout # Give some time for async JS data load
- yield(get_tree().create_timer(0.5), "timeout") # Give some time for async JS data load
-
- if JavaScript.eval("canceled;", true): # If File Dialog closed w/o file
+ if JavaScriptBridge.eval("canceled;", true) == 1: # If File Dialog closed w/o file
return
# Use data from png data
var image_data
while true:
- image_data = JavaScript.eval("fileData;", true)
+ image_data = JavaScriptBridge.eval("fileData;", true)
if image_data != null:
break
- yield(get_tree().create_timer(1.0), "timeout") # Need more time to load data
+ await get_tree().create_timer(1.0).timeout # Need more time to load data
- var image_type = JavaScript.eval("fileType;", true)
- var image_name = JavaScript.eval("fileName;", true)
+ var image_type = JavaScriptBridge.eval("fileType;", true)
+ var image_name = JavaScriptBridge.eval("fileName;", true)
var image := Image.new()
var image_error
@@ -131,33 +130,32 @@ func load_image(load_directly := true):
image_info = {"image": image, "name": image_name}
if load_directly:
OpenSave.handle_loading_image(image_name, image)
- emit_signal("image_loaded", image_info)
+ image_loaded.emit(image_info)
func load_shader() -> void:
- if OS.get_name() != "HTML5" or !OS.has_feature("JavaScript"):
+ if !OS.has_feature("web"):
return
# Execute JS function
- JavaScript.eval("upload_shader();", true) # Opens prompt for choosing file
-
- yield(self, "in_focus") # Wait until JS prompt is closed
+ JavaScriptBridge.eval("upload_shader();", true) # Opens prompt for choosing file
- yield(get_tree().create_timer(0.5), "timeout") # Give some time for async JS data load
+ await in_focus # Wait until JS prompt is closed
+ await get_tree().create_timer(0.5).timeout # Give some time for async JS data load
- if JavaScript.eval("canceled;", true): # If File Dialog closed w/o file
+ if JavaScriptBridge.eval("canceled;", true): # If File Dialog closed w/o file
return
# Use data from png data
var file_data
while true:
- file_data = JavaScript.eval("fileData;", true)
+ file_data = JavaScriptBridge.eval("fileData;", true)
if file_data != null:
break
- yield(get_tree().create_timer(1.0), "timeout") # Need more time to load data
+ await get_tree().create_timer(1.0).timeout # Need more time to load data
-# var file_type = JavaScript.eval("fileType;", true)
- var file_name = JavaScript.eval("fileName;", true)
+# var file_type = JavaScriptBridge.eval("fileType;", true)
+ var file_name = JavaScriptBridge.eval("fileName;", true)
var shader := Shader.new()
shader.code = file_data
diff --git a/src/Autoload/Import.gd b/src/Autoload/Import.gd
index e8d5225dffe..aa2639810eb 100644
--- a/src/Autoload/Import.gd
+++ b/src/Autoload/Import.gd
@@ -28,14 +28,13 @@ func get_brush_files_from_directory(directory: String): # -> Array
var randomised_subdir_files_map: Dictionary = {}
var nonrandomised_subdir_files_map: Dictionary = {}
- var main_directory: Directory = Directory.new()
- var err := main_directory.open(directory)
- if err != OK:
+ var main_directory := DirAccess.open(directory)
+ if DirAccess.get_open_error() != OK:
return null
# Build first the list of base png files and all subdirectories to
# scan later (skip navigational . and ..)
- main_directory.list_dir_begin(true)
+ main_directory.list_dir_begin()
var fname: String = main_directory.get_next()
while fname != "":
if main_directory.current_is_dir():
@@ -50,8 +49,6 @@ func get_brush_files_from_directory(directory: String): # -> Array
# Now we iterate over subdirectories!
for subdirectory in subdirectories:
- var the_directory: Directory = Directory.new()
-
# Holds names of files that make this
# a component of a randomised brush ^.^
var randomised_files := []
@@ -59,8 +56,9 @@ func get_brush_files_from_directory(directory: String): # -> Array
# Non-randomise-indicated image files
var non_randomised_files := []
- the_directory.open(directory.plus_file(subdirectory))
- the_directory.list_dir_begin(true)
+ var the_directory := DirAccess.open(directory.path_join(subdirectory))
+ the_directory.include_navigational = true
+ the_directory.list_dir_begin()
var curr_file := the_directory.get_next()
while curr_file != "":
@@ -158,7 +156,7 @@ func import_brushes(priority_ordered_search_path: Array) -> void:
for subfile in main_directory_file_paths:
if not (subfile in processed_basedir_paths):
add_plain_brush(
- current_main_directory.plus_file(subfile), subfile.get_basename()
+ current_main_directory.path_join(subfile), subfile.get_basename()
)
processed_basedir_paths[subfile] = true
@@ -171,7 +169,7 @@ func import_brushes(priority_ordered_search_path: Array) -> void:
# opened nya
for non_extended_path in randomised_brush_subdirectory_map[randomised_subdir]:
full_paths.append(
- current_main_directory.plus_file(randomised_subdir).plus_file(
+ current_main_directory.path_join(randomised_subdir).path_join(
non_extended_path
)
)
@@ -190,12 +188,14 @@ func import_brushes(priority_ordered_search_path: Array) -> void:
for relative_path in relpaths_of_nonrandom_brushes:
if not (relative_path in processed_subdir_paths[nonrandomised_subdir]):
# We are not yet processed
- var full_path: String = current_main_directory.plus_file(nonrandomised_subdir).plus_file(
- relative_path
+ var full_path: String = (
+ current_main_directory
+ . path_join(nonrandomised_subdir)
+ . path_join(relative_path)
)
# Add the path with the tooltip including the directory
add_plain_brush(
- full_path, nonrandomised_subdir.plus_file(relative_path).get_basename()
+ full_path, nonrandomised_subdir.path_join(relative_path).get_basename()
)
# Mark this as a processed relpath
processed_subdir_paths[nonrandomised_subdir][relative_path] = true
@@ -204,8 +204,9 @@ func import_brushes(priority_ordered_search_path: Array) -> void:
func import_patterns(priority_ordered_search_path: Array) -> void:
for path in priority_ordered_search_path:
var pattern_list := []
- var dir := Directory.new()
- dir.open(path)
+ var dir := DirAccess.open(path)
+ if not is_instance_valid(dir):
+ continue
dir.list_dir_begin()
var curr_file := dir.get_next()
while curr_file != "":
@@ -216,7 +217,7 @@ func import_patterns(priority_ordered_search_path: Array) -> void:
for pattern in pattern_list:
var image := Image.new()
- var err := image.load(path.plus_file(pattern))
+ var err := image.load(path.path_join(pattern))
if err == OK:
image.convert(Image.FORMAT_RGBA8)
var tooltip_name = pattern.get_basename()
diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd
index 6d435c0dc74..a1d3adad42b 100644
--- a/src/Autoload/OpenSave.gd
+++ b/src/Autoload/OpenSave.gd
@@ -1,33 +1,31 @@
# gdlint: ignore=max-public-methods
extends Node
-var current_save_paths := [] # Array of strings
-# Stores a filename of a backup file in user:// until user saves manually
-var backup_save_paths := [] # Array of strings
-var preview_dialog_tscn = preload("res://src/UI/Dialogs/PreviewDialog.tscn")
-var preview_dialogs := [] # Array of preview dialogs
-var last_dialog_option: int = 0
-
-onready var autosave_timer: Timer
+var current_save_paths: PackedStringArray = []
+## Stores a filename of a backup file in user:// until user saves manually
+var backup_save_paths: PackedStringArray = []
+var preview_dialog_tscn := preload("res://src/UI/Dialogs/PreviewDialog.tscn")
+var preview_dialogs := [] ## Array of preview dialogs
+var last_dialog_option := 0
+var autosave_timer: Timer
func _ready() -> void:
autosave_timer = Timer.new()
autosave_timer.one_shot = false
- autosave_timer.process_mode = Timer.TIMER_PROCESS_IDLE
- autosave_timer.connect("timeout", self, "_on_Autosave_timeout")
+ autosave_timer.timeout.connect(_on_Autosave_timeout)
add_child(autosave_timer)
update_autosave()
func handle_loading_file(file: String) -> void:
file = file.replace("\\", "/")
- var file_ext: String = file.get_extension().to_lower()
+ var file_ext := file.get_extension().to_lower()
if file_ext == "pxo": # Pixelorama project file
open_pxo_file(file)
elif file_ext == "tres": # Godot resource file
- var resource = load(file)
+ var resource := load(file)
if resource is Palette:
Palettes.import_palette(resource, file.get_file())
else:
@@ -35,6 +33,8 @@ func handle_loading_file(file: String) -> void:
Global.error_dialog.set_text(tr("Can't load file '%s'.") % [file_name])
Global.error_dialog.popup_centered()
Global.dialog_open(true)
+ elif file_ext == "tscn": # Godot scene file
+ return
elif file_ext == "gpl" or file_ext == "pal" or file_ext == "json":
Palettes.import_palette_from_path(file)
@@ -43,11 +43,11 @@ func handle_loading_file(file: String) -> void:
Global.preferences_dialog.extensions.install_extension(file)
elif file_ext == "shader" or file_ext == "gdshader": # Godot shader file
- var shader = load(file)
- if !shader is Shader:
+ var shader := load(file)
+ if not shader is Shader:
return
var file_name: String = file.get_file().get_basename()
- Global.control.find_node("ShaderEffect").change_shader(shader, file_name)
+ Global.control.find_child("ShaderEffect").change_shader(shader, file_name)
else: # Image files
# Attempt to load as APNG.
@@ -59,16 +59,10 @@ func handle_loading_file(file: String) -> void:
handle_loading_aimg(file, apng_res[1])
return
# Attempt to load as a regular image.
- var image := Image.new()
- var err := image.load(file)
- if err != OK: # An error occurred
+ var image := Image.load_from_file(file)
+ if not is_instance_valid(image): # An error occurred
var file_name: String = file.get_file()
- Global.error_dialog.set_text(
- (
- tr("Can't load file '%s'.\nError code: %s")
- % [file_name, str(err, ErrorManager.parse(err, " (", ")"))]
- )
- )
+ Global.error_dialog.set_text(tr("Can't load file '%s'.") % [file_name])
Global.error_dialog.popup_centered()
Global.dialog_open(true)
return
@@ -76,7 +70,7 @@ func handle_loading_file(file: String) -> void:
func handle_loading_image(file: String, image: Image) -> void:
- var preview_dialog: ConfirmationDialog = preview_dialog_tscn.instance()
+ var preview_dialog := preview_dialog_tscn.instantiate() as PreviewDialog
preview_dialogs.append(preview_dialog)
preview_dialog.path = file
preview_dialog.image = image
@@ -85,7 +79,7 @@ func handle_loading_image(file: String, image: Image) -> void:
Global.dialog_open(true)
-# For loading the output of AImgIO as a project
+## For loading the output of AImgIO as a project
func handle_loading_aimg(path: String, frames: Array) -> void:
var project := Project.new([], path.get_file(), frames[0].content.get_size())
project.layers.append(PixelLayer.new(project))
@@ -93,8 +87,8 @@ func handle_loading_aimg(path: String, frames: Array) -> void:
# Determine FPS as 1, unless all frames agree.
project.fps = 1
- var first_duration = frames[0].duration
- var frames_agree = true
+ var first_duration: float = frames[0].duration
+ var frames_agree := true
for v in frames:
var aimg_frame: AImgIOFrame = v
if aimg_frame.duration != first_duration:
@@ -116,22 +110,21 @@ func handle_loading_aimg(path: String, frames: Array) -> void:
set_new_imported_tab(project, path)
-func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: bool = true) -> void:
- var file := File.new()
- var err := file.open_compressed(path, File.READ, File.COMPRESSION_ZSTD)
- if err == ERR_FILE_UNRECOGNIZED:
- err = file.open(path, File.READ) # If the file is not compressed open it raw (pre-v0.7)
-
+func open_pxo_file(path: String, untitled_backup := false, replace_empty := true) -> void:
+ var file := FileAccess.open_compressed(path, FileAccess.READ, FileAccess.COMPRESSION_ZSTD)
+ if FileAccess.get_open_error() == ERR_FILE_UNRECOGNIZED:
+ # If the file is not compressed open it raw (pre-v0.7)
+ file = FileAccess.open(path, FileAccess.READ)
+ var err := FileAccess.get_open_error()
if err != OK:
Global.error_dialog.set_text(
- tr("File failed to open. Error code %s") % str(err, ErrorManager.parse(err, " (", ")"))
+ tr("File failed to open. Error code %s (%s)") % [err, error_string(err)]
)
Global.error_dialog.popup_centered()
Global.dialog_open(true)
- file.close()
return
- var empty_project: bool = Global.current_project.is_empty() and replace_empty
+ var empty_project := Global.current_project.is_empty() and replace_empty
var new_project: Project
if empty_project:
new_project = Global.current_project
@@ -143,39 +136,43 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b
new_project = Project.new([], path.get_file())
var first_line := file.get_line()
- var dict := JSON.parse(first_line)
- if dict.error != OK:
+ var test_json_conv := JSON.new()
+ var error := test_json_conv.parse(first_line)
+ if error != OK:
print("Error, corrupt pxo file")
file.close()
return
else:
- if typeof(dict.result) != TYPE_DICTIONARY:
- print("Error, json parsed result is: %s" % typeof(dict.result))
+ var result = test_json_conv.get_data()
+ if typeof(result) != TYPE_DICTIONARY:
+ print("Error, json parsed result is: %s" % typeof(result))
file.close()
return
- new_project.deserialize(dict.result)
+ new_project.deserialize(result)
for frame in new_project.frames:
for cel in frame.cels:
cel.load_image_data_from_pxo(file, new_project.size)
- if dict.result.has("brushes"):
- for brush in dict.result.brushes:
+ if result.has("brushes"):
+ for brush in result.brushes:
var b_width = brush.size_x
var b_height = brush.size_y
var buffer := file.get_buffer(b_width * b_height * 4)
- var image := Image.new()
- image.create_from_data(b_width, b_height, false, Image.FORMAT_RGBA8, buffer)
+ var image := Image.create_from_data(
+ b_width, b_height, false, Image.FORMAT_RGBA8, buffer
+ )
new_project.brushes.append(image)
Brushes.add_project_brush(image)
- if dict.result.has("tile_mask") and dict.result.has("has_mask"):
- if dict.result.has_mask:
- var t_width = dict.result.tile_mask.size_x
- var t_height = dict.result.tile_mask.size_y
+ if result.has("tile_mask") and result.has("has_mask"):
+ if result.has_mask:
+ var t_width = result.tile_mask.size_x
+ var t_height = result.tile_mask.size_y
var buffer := file.get_buffer(t_width * t_height * 4)
- var image := Image.new()
- image.create_from_data(t_width, t_height, false, Image.FORMAT_RGBA8, buffer)
+ var image := Image.create_from_data(
+ t_width, t_height, false, Image.FORMAT_RGBA8, buffer
+ )
new_project.tiles.tile_mask = image
else:
new_project.tiles.reset_mask()
@@ -183,8 +180,8 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b
file.close()
if empty_project:
new_project.change_project()
- Global.emit_signal("project_changed")
- Global.emit_signal("cel_changed")
+ Global.project_changed.emit()
+ Global.cel_changed.emit()
else:
Global.projects.append(new_project)
Global.tabs.current_tab = Global.tabs.get_tab_count() - 1
@@ -193,7 +190,7 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b
if not untitled_backup:
# Untitled backup should not change window title and save path
current_save_paths[Global.current_project_index] = path
- Global.window_title = path.get_file() + " - Pixelorama " + Global.current_version
+ Global.main_window.title = path.get_file() + " - Pixelorama " + Global.current_version
Global.save_sprites_dialog.current_path = path
# Set last opened project path and save
Global.config_cache.set_value("preferences", "last_project_path", path)
@@ -210,10 +207,7 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b
func save_pxo_file(
- path: String,
- autosave: bool,
- use_zstd_compression := true,
- project: Project = Global.current_project
+ path: String, autosave: bool, use_zstd := true, project := Global.current_project
) -> void:
if !autosave:
project.name = path.get_file()
@@ -225,7 +219,7 @@ func save_pxo_file(
Global.error_dialog.popup_centered()
Global.dialog_open(true)
return
- var to_save := JSON.print(serialized_data)
+ var to_save := JSON.stringify(serialized_data)
if !to_save:
Global.error_dialog.set_text(
tr("File failed to save. Converting dictionary to JSON failed.")
@@ -237,22 +231,22 @@ func save_pxo_file(
# Check if a file with the same name exists. If it does, rename the new file temporarily.
# Needed in case of a crash, so that the old file won't be replaced with an empty one.
var temp_path := path
- var dir := Directory.new()
+ var dir := DirAccess.open("user://")
if dir.file_exists(path):
temp_path = path + "1"
- var file := File.new()
- var err: int
- if use_zstd_compression:
- err = file.open_compressed(temp_path, File.WRITE, File.COMPRESSION_ZSTD)
+ var file: FileAccess
+ if use_zstd:
+ file = FileAccess.open_compressed(temp_path, FileAccess.WRITE, FileAccess.COMPRESSION_ZSTD)
else:
- err = file.open(temp_path, File.WRITE)
+ file = FileAccess.open(temp_path, FileAccess.WRITE)
+ var err := FileAccess.get_open_error()
if err != OK:
if temp_path.is_valid_filename():
return
Global.error_dialog.set_text(
- tr("File failed to save. Error code %s") % str(err, ErrorManager.parse(err, " (", ")"))
+ tr("File failed to save. Error code %s (%s)") % [err, error_string(err)]
)
Global.error_dialog.popup_centered()
Global.dialog_open(true)
@@ -277,14 +271,14 @@ func save_pxo_file(
# Rename the new file to its proper name and remove the old file, if it exists.
dir.rename(temp_path, path)
- if OS.get_name() == "HTML5" and OS.has_feature("JavaScript") and !autosave:
- err = file.open(path, File.READ)
- if err == OK:
- var file_data := Array(file.get_buffer(file.get_len()))
- JavaScript.download_buffer(file_data, path.get_file())
+ if OS.has_feature("web") and !autosave:
+ file = FileAccess.open(path, FileAccess.READ)
+ if FileAccess.get_open_error() == OK:
+ var file_data := Array(file.get_buffer(file.get_length()))
+ JavaScriptBridge.download_buffer(file_data, path.get_file())
file.close()
# Remove the .pxo file from memory, as we don't need it anymore
- var browser_dir := Directory.new()
+ var browser_dir := DirAccess.open(path)
browser_dir.remove(path)
if autosave:
@@ -295,7 +289,7 @@ func save_pxo_file(
project.has_changed = false
remove_backup(Global.current_project_index)
Global.notification_label("File saved")
- Global.window_title = path.get_file() + " - Pixelorama " + Global.current_version
+ Global.main_window.title = path.get_file() + " - Pixelorama " + Global.current_version
# Set last opened project path and save
Global.config_cache.set_value("preferences", "last_project_path", path)
@@ -324,29 +318,28 @@ func open_image_as_new_tab(path: String, image: Image) -> void:
func open_image_as_spritesheet_tab_smart(
- path: String, image: Image, sliced_rects: Array, frame_size: Vector2
+ path: String, image: Image, sliced_rects: Array[Rect2i], frame_size: Vector2i
) -> void:
if sliced_rects.size() == 0: # Image is empty sprite (manually set data to be consistent)
frame_size = image.get_size()
- sliced_rects.append(Rect2(Vector2.ZERO, frame_size))
+ sliced_rects.append(Rect2i(Vector2i.ZERO, frame_size))
var project := Project.new([], path.get_file(), frame_size)
project.layers.append(PixelLayer.new(project))
Global.projects.append(project)
for rect in sliced_rects:
var offset: Vector2 = (0.5 * (frame_size - rect.size)).floor()
var frame := Frame.new()
- var cropped_image := Image.new()
- cropped_image.create(frame_size.x, frame_size.y, false, Image.FORMAT_RGBA8)
+ var cropped_image := Image.create(frame_size.x, frame_size.y, false, Image.FORMAT_RGBA8)
+ image.convert(Image.FORMAT_RGBA8)
cropped_image.blit_rect(image, rect, offset)
- cropped_image.convert(Image.FORMAT_RGBA8)
frame.cels.append(PixelCel.new(cropped_image, 1))
project.frames.append(frame)
set_new_imported_tab(project, path)
func open_image_as_spritesheet_tab(path: String, image: Image, horiz: int, vert: int) -> void:
- horiz = min(horiz, image.get_size().x)
- vert = min(vert, image.get_size().y)
+ horiz = mini(horiz, image.get_size().x)
+ vert = mini(vert, image.get_size().y)
var frame_width := image.get_size().x / horiz
var frame_height := image.get_size().y / vert
var project := Project.new([], path.get_file(), Vector2(frame_width, frame_height))
@@ -355,9 +348,8 @@ func open_image_as_spritesheet_tab(path: String, image: Image, horiz: int, vert:
for yy in range(vert):
for xx in range(horiz):
var frame := Frame.new()
- var cropped_image := Image.new()
- cropped_image = image.get_rect(
- Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height)
+ var cropped_image := image.get_region(
+ Rect2i(frame_width * xx, frame_height * yy, frame_width, frame_height)
)
project.size = cropped_image.get_size()
cropped_image.convert(Image.FORMAT_RGBA8)
@@ -370,15 +362,15 @@ func open_image_as_spritesheet_layer_smart(
_path: String,
image: Image,
file_name: String,
- sliced_rects: Array,
+ sliced_rects: Array[Rect2i],
start_frame: int,
- frame_size: Vector2
+ frame_size: Vector2i
) -> void:
# Resize canvas to if "frame_size.x" or "frame_size.y" is too large
- var project: Project = Global.current_project
- var project_width: int = max(frame_size.x, project.size.x)
- var project_height: int = max(frame_size.y, project.size.y)
- if project.size < Vector2(project_width, project_height):
+ var project := Global.current_project
+ var project_width := maxi(frame_size.x, project.size.x)
+ var project_height := maxi(frame_size.y, project.size.y)
+ if project.size < Vector2i(project_width, project_height):
DrawingAlgos.resize_canvas(project_width, project_height, 0, 0)
# Initialize undo mechanism
@@ -386,11 +378,11 @@ func open_image_as_spritesheet_layer_smart(
project.undo_redo.create_action("Add Spritesheet Layer")
# Create new frames (if needed)
- var new_frames_size = max(project.frames.size(), start_frame + sliced_rects.size())
+ var new_frames_size := maxi(project.frames.size(), start_frame + sliced_rects.size())
var frames := []
var frame_indices := []
if new_frames_size > project.frames.size():
- var required_frames = new_frames_size - project.frames.size()
+ var required_frames := new_frames_size - project.frames.size()
frame_indices = range(
project.current_frame + 1, project.current_frame + required_frames + 1
)
@@ -399,14 +391,14 @@ func open_image_as_spritesheet_layer_smart(
for l in range(project.layers.size()): # Create as many cels as there are layers
new_frame.cels.append(project.layers[l].new_empty_cel())
if project.layers[l].new_cels_linked:
- var prev_cel: BaseCel = project.frames[project.current_frame].cels[l]
+ var prev_cel := project.frames[project.current_frame].cels[l]
if prev_cel.link_set == null:
prev_cel.link_set = {}
project.undo_redo.add_do_method(
- project.layers[l], "link_cel", prev_cel, prev_cel.link_set
+ project.layers[l].link_cel.bind(prev_cel, prev_cel.link_set)
)
project.undo_redo.add_undo_method(
- project.layers[l], "link_cel", prev_cel, null
+ project.layers[l].link_cel.bind(prev_cel, null)
)
new_frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture)
new_frame.cels[l].link_set = prev_cel.link_set
@@ -414,32 +406,35 @@ func open_image_as_spritesheet_layer_smart(
# Create new layer for spritesheet
var layer := PixelLayer.new(project, file_name)
- var cels := []
+ var cels: Array[PixelCel] = []
for f in new_frames_size:
if f >= start_frame and f < (start_frame + sliced_rects.size()):
# Slice spritesheet
var offset: Vector2 = (0.5 * (frame_size - sliced_rects[f - start_frame].size)).floor()
image.convert(Image.FORMAT_RGBA8)
- var cropped_image := Image.new()
- cropped_image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
+ var cropped_image := Image.create(
+ project_width, project_height, false, Image.FORMAT_RGBA8
+ )
cropped_image.blit_rect(image, sliced_rects[f - start_frame], offset)
cels.append(PixelCel.new(cropped_image))
else:
cels.append(layer.new_empty_cel())
- project.undo_redo.add_do_method(project, "add_frames", frames, frame_indices)
- project.undo_redo.add_do_method(project, "add_layers", [layer], [project.layers.size()], [cels])
+ project.undo_redo.add_do_method(project.add_frames.bind(frames, frame_indices))
+ project.undo_redo.add_do_method(
+ project.add_layers.bind([layer], [project.layers.size()], [cels])
+ )
project.undo_redo.add_do_method(
- project, "change_cel", new_frames_size - 1, project.layers.size()
+ project.change_cel.bind(new_frames_size - 1, project.layers.size())
)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
- project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()])
- project.undo_redo.add_undo_method(project, "remove_frames", frame_indices)
+ project.undo_redo.add_undo_method(project.remove_layers.bind([project.layers.size()]))
+ project.undo_redo.add_undo_method(project.remove_frames.bind(frame_indices))
project.undo_redo.add_undo_method(
- project, "change_cel", project.current_frame, project.current_layer
+ project.change_cel.bind(project.current_frame, project.current_layer)
)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
@@ -447,16 +442,16 @@ func open_image_as_spritesheet_layer(
_path: String, image: Image, file_name: String, horizontal: int, vertical: int, start_frame: int
) -> void:
# Data needed to slice images
- horizontal = min(horizontal, image.get_size().x)
- vertical = min(vertical, image.get_size().y)
+ horizontal = mini(horizontal, image.get_size().x)
+ vertical = mini(vertical, image.get_size().y)
var frame_width := image.get_size().x / horizontal
var frame_height := image.get_size().y / vertical
# Resize canvas to if "frame_width" or "frame_height" is too large
- var project: Project = Global.current_project
- var project_width: int = max(frame_width, project.size.x)
- var project_height: int = max(frame_height, project.size.y)
- if project.size < Vector2(project_width, project_height):
+ var project := Global.current_project
+ var project_width := maxi(frame_width, project.size.x)
+ var project_height := maxi(frame_height, project.size.y)
+ if project.size < Vector2i(project_width, project_height):
DrawingAlgos.resize_canvas(project_width, project_height, 0, 0)
# Initialize undo mechanism
@@ -464,11 +459,11 @@ func open_image_as_spritesheet_layer(
project.undo_redo.create_action("Add Spritesheet Layer")
# Create new frames (if needed)
- var new_frames_size = max(project.frames.size(), start_frame + (vertical * horizontal))
+ var new_frames_size := maxi(project.frames.size(), start_frame + (vertical * horizontal))
var frames := []
var frame_indices := []
if new_frames_size > project.frames.size():
- var required_frames = new_frames_size - project.frames.size()
+ var required_frames := new_frames_size - project.frames.size()
frame_indices = range(
project.current_frame + 1, project.current_frame + required_frames + 1
)
@@ -477,14 +472,14 @@ func open_image_as_spritesheet_layer(
for l in range(project.layers.size()): # Create as many cels as there are layers
new_frame.cels.append(project.layers[l].new_empty_cel())
if project.layers[l].new_cels_linked:
- var prev_cel: BaseCel = project.frames[project.current_frame].cels[l]
+ var prev_cel := project.frames[project.current_frame].cels[l]
if prev_cel.link_set == null:
prev_cel.link_set = {}
project.undo_redo.add_do_method(
- project.layers[l], "link_cel", prev_cel, prev_cel.link_set
+ project.layers[l].link_cel.bind(prev_cel, prev_cel.link_set)
)
project.undo_redo.add_undo_method(
- project.layers[l], "link_cel", prev_cel, null
+ project.layers[l].link_cel.bind(prev_cel, null)
)
new_frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture)
new_frame.cels[l].link_set = prev_cel.link_set
@@ -496,41 +491,44 @@ func open_image_as_spritesheet_layer(
for f in new_frames_size:
if f >= start_frame and f < (start_frame + (vertical * horizontal)):
# Slice spritesheet
- var xx: int = (f - start_frame) % horizontal
- var yy: int = (f - start_frame) / horizontal
+ var xx := (f - start_frame) % horizontal
+ var yy := (f - start_frame) / horizontal
image.convert(Image.FORMAT_RGBA8)
- var cropped_image := Image.new()
- cropped_image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
+ var cropped_image := Image.create(
+ project_width, project_height, false, Image.FORMAT_RGBA8
+ )
cropped_image.blit_rect(
image,
- Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height),
- Vector2.ZERO
+ Rect2i(frame_width * xx, frame_height * yy, frame_width, frame_height),
+ Vector2i.ZERO
)
cels.append(PixelCel.new(cropped_image))
else:
cels.append(layer.new_empty_cel())
- project.undo_redo.add_do_method(project, "add_frames", frames, frame_indices)
- project.undo_redo.add_do_method(project, "add_layers", [layer], [project.layers.size()], [cels])
+ project.undo_redo.add_do_method(project.add_frames.bind(frames, frame_indices))
+ project.undo_redo.add_do_method(
+ project.add_layers.bind([layer], [project.layers.size()], [cels])
+ )
project.undo_redo.add_do_method(
- project, "change_cel", new_frames_size - 1, project.layers.size()
+ project.change_cel.bind(new_frames_size - 1, project.layers.size())
)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
- project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()])
- project.undo_redo.add_undo_method(project, "remove_frames", frame_indices)
+ project.undo_redo.add_undo_method(project.remove_layers.bind([project.layers.size()]))
+ project.undo_redo.add_undo_method(project.remove_frames.bind(frame_indices))
project.undo_redo.add_undo_method(
- project, "change_cel", project.current_frame, project.current_layer
+ project.change_cel.bind(project.current_frame, project.current_layer)
)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
func open_image_at_cel(image: Image, layer_index := 0, frame_index := 0) -> void:
- var project: Project = Global.current_project
- var project_width: int = max(image.get_width(), project.size.x)
- var project_height: int = max(image.get_height(), project.size.y)
- if project.size < Vector2(project_width, project_height):
+ var project := Global.current_project
+ var project_width := maxi(image.get_width(), project.size.x)
+ var project_height := maxi(image.get_height(), project.size.y)
+ if project.size < Vector2i(project_width, project_height):
DrawingAlgos.resize_canvas(project_width, project_height, 0, 0)
project.undos += 1
project.undo_redo.create_action("Replaced Cel")
@@ -538,62 +536,62 @@ func open_image_at_cel(image: Image, layer_index := 0, frame_index := 0) -> void
for i in project.frames.size():
if i == frame_index:
image.convert(Image.FORMAT_RGBA8)
- var cel_image = Image.new()
- cel_image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
- cel_image.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO)
- var cel: PixelCel = project.frames[i].cels[layer_index]
+ var cel := project.frames[i].cels[layer_index]
+ if not cel is PixelCel:
+ continue
+ var cel_image := Image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
+ cel_image.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO)
project.undo_redo.add_do_property(cel, "image", cel_image)
- project.undo_redo.add_undo_property(cel, "image", cel.image)
+ project.undo_redo.add_undo_property(cel, "image", cel.get_image())
project.undo_redo.add_do_property(project, "selected_cels", [])
- project.undo_redo.add_do_method(project, "change_cel", frame_index, layer_index)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(project.change_cel.bind(frame_index, layer_index))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.add_undo_property(project, "selected_cels", [])
project.undo_redo.add_undo_method(
- project, "change_cel", project.current_frame, project.current_layer
+ project.change_cel.bind(project.current_frame, project.current_layer)
)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
func open_image_as_new_frame(image: Image, layer_index := 0) -> void:
- var project: Project = Global.current_project
- var project_width: int = max(image.get_width(), project.size.x)
- var project_height: int = max(image.get_height(), project.size.y)
- if project.size < Vector2(project_width, project_height):
+ var project := Global.current_project
+ var project_width := maxi(image.get_width(), project.size.x)
+ var project_height := maxi(image.get_height(), project.size.y)
+ if project.size < Vector2i(project_width, project_height):
DrawingAlgos.resize_canvas(project_width, project_height, 0, 0)
var frame := Frame.new()
for i in project.layers.size():
if i == layer_index:
image.convert(Image.FORMAT_RGBA8)
- var cel_image = Image.new()
- cel_image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
- cel_image.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO)
+ var cel_image := Image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
+ cel_image.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO)
frame.cels.append(PixelCel.new(cel_image, 1))
else:
frame.cels.append(project.layers[i].new_empty_cel())
project.undos += 1
project.undo_redo.create_action("Add Frame")
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_do_method(project, "add_frames", [frame], [project.frames.size()])
- project.undo_redo.add_do_method(project, "change_cel", project.frames.size(), layer_index)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_do_method(project.add_frames.bind([frame], [project.frames.size()]))
+ project.undo_redo.add_do_method(project.change_cel.bind(project.frames.size(), layer_index))
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_undo_method(project, "remove_frames", [project.frames.size()])
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_undo_method(project.remove_frames.bind([project.frames.size()]))
project.undo_redo.add_undo_method(
- project, "change_cel", project.current_frame, project.current_layer
+ project.change_cel.bind(project.current_frame, project.current_layer)
)
project.undo_redo.commit_action()
func open_image_as_new_layer(image: Image, file_name: String, frame_index := 0) -> void:
- var project: Project = Global.current_project
- var project_width: int = max(image.get_width(), project.size.x)
- var project_height: int = max(image.get_height(), project.size.y)
- if project.size < Vector2(project_width, project_height):
+ var project := Global.current_project
+ var project_width := maxi(image.get_width(), project.size.x)
+ var project_height := maxi(image.get_height(), project.size.y)
+ if project.size < Vector2i(project_width, project_height):
DrawingAlgos.resize_canvas(project_width, project_height, 0, 0)
var layer := PixelLayer.new(project, file_name)
var cels := []
@@ -603,28 +601,29 @@ func open_image_as_new_layer(image: Image, file_name: String, frame_index := 0)
for i in project.frames.size():
if i == frame_index:
image.convert(Image.FORMAT_RGBA8)
- var cel_image = Image.new()
- cel_image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
- cel_image.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO)
+ var cel_image := Image.create(project_width, project_height, false, Image.FORMAT_RGBA8)
+ cel_image.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO)
cels.append(PixelCel.new(cel_image, 1))
else:
cels.append(layer.new_empty_cel())
- project.undo_redo.add_do_method(project, "add_layers", [layer], [project.layers.size()], [cels])
- project.undo_redo.add_do_method(project, "change_cel", frame_index, project.layers.size())
+ project.undo_redo.add_do_method(
+ project.add_layers.bind([layer], [project.layers.size()], [cels])
+ )
+ project.undo_redo.add_do_method(project.change_cel.bind(frame_index, project.layers.size()))
- project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()])
+ project.undo_redo.add_undo_method(project.remove_layers.bind([project.layers.size()]))
project.undo_redo.add_undo_method(
- project, "change_cel", project.current_frame, project.current_layer
+ project.change_cel.bind(project.current_frame, project.current_layer)
)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
func import_reference_image_from_path(path: String) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var ri := ReferenceImage.new()
ri.project = project
ri.deserialize({"image_path": path})
@@ -632,9 +631,9 @@ func import_reference_image_from_path(path: String) -> void:
project.change_project()
-# Useful for HTML5
+## Useful for Web
func import_reference_image_from_image(image: Image) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var ri := ReferenceImage.new()
ri.project = project
ri.create_from_image(image)
@@ -643,18 +642,14 @@ func import_reference_image_from_image(image: Image) -> void:
func set_new_imported_tab(project: Project, path: String) -> void:
- var prev_project_empty: bool = Global.current_project.is_empty()
- var prev_project_pos: int = Global.current_project_index
-
- Global.window_title = (
- path.get_file()
- + " ("
- + tr("imported")
- + ") - Pixelorama "
- + Global.current_version
+ var prev_project_empty := Global.current_project.is_empty()
+ var prev_project_pos := Global.current_project_index
+
+ Global.main_window.title = (
+ path.get_file() + " (" + tr("imported") + ") - Pixelorama " + Global.current_version
)
if project.has_changed:
- Global.window_title = Global.window_title + "(*)"
+ Global.main_window.title = Global.main_window.title + "(*)"
var file_name := path.get_basename().get_file()
var directory_path := path.get_base_dir()
project.directory_path = directory_path
@@ -682,15 +677,17 @@ func _on_Autosave_timeout() -> void:
for i in range(backup_save_paths.size()):
if backup_save_paths[i] == "":
# Create a new backup file if it doesn't exist yet
- backup_save_paths[i] = "user://backup-" + String(OS.get_unix_time()) + "-%s" % i
+ backup_save_paths[i] = (
+ "user://backup-" + str(Time.get_unix_time_from_system()) + "-%s" % i
+ )
store_backup_path(i)
save_pxo_file(backup_save_paths[i], true, true, Global.projects[i])
-# Backup paths are stored in two ways:
-# 1) User already manually saved and defined a save path -> {current_save_path, backup_save_path}
-# 2) User didn't manually saved, "untitled" backup is stored -> {backup_save_path, backup_save_path}
+## Backup paths are stored in two ways:
+## 1) User already manually saved and defined a save path -> {current_save_path, backup_save_path}
+## 2) User didn't manually save, "untitled" backup is stored -> {backup_save_path, backup_save_path}
func store_backup_path(i: int) -> void:
if current_save_paths[i] != "":
# Remove "untitled" backup if it existed on this project instance
@@ -716,7 +713,7 @@ func remove_backup(i: int) -> void:
func remove_backup_by_path(project_path: String, backup_path: String) -> void:
- Directory.new().remove(backup_path)
+ DirAccess.open("user://").remove(backup_path)
if Global.config_cache.has_section_key("backups", project_path):
Global.config_cache.erase_section_key("backups", project_path)
elif Global.config_cache.has_section_key("backups", backup_path):
@@ -728,8 +725,8 @@ func reload_backup_file(project_paths: Array, backup_paths: Array) -> void:
assert(project_paths.size() == backup_paths.size())
# Clear non-existent backups
var existing_backups_count := 0
- var dir := Directory.new()
for i in range(backup_paths.size()):
+ var dir := DirAccess.open("user://")
if dir.file_exists(backup_paths[i]):
project_paths[existing_backups_count] = project_paths[i]
backup_paths[existing_backups_count] = backup_paths[i]
@@ -749,10 +746,8 @@ func reload_backup_file(project_paths: Array, backup_paths: Array) -> void:
# If project path is the same as backup save path -> the backup was untitled
if project_paths[i] != backup_paths[i]: # If the user has saved
current_save_paths[i] = project_paths[i]
- Global.window_title = (
- project_paths[i].get_file()
- + " - Pixelorama(*) "
- + Global.current_version
+ Global.main_window.title = (
+ project_paths[i].get_file() + " - Pixelorama(*) " + Global.current_version
)
Global.current_project.has_changed = true
@@ -760,7 +755,7 @@ func reload_backup_file(project_paths: Array, backup_paths: Array) -> void:
func save_project_to_recent_list(path: String) -> void:
- var top_menu_container: Panel = Global.top_menu_container
+ var top_menu_container := Global.top_menu_container
if path.get_file().substr(0, 7) == "backup-" or path == "":
return
diff --git a/src/Autoload/Palettes.gd b/src/Autoload/Palettes.gd
index ca1c3399dec..befd57fb6c6 100644
--- a/src/Autoload/Palettes.gd
+++ b/src/Autoload/Palettes.gd
@@ -3,20 +3,18 @@ extends Node
# Presets for creating a new palette
enum NewPalettePresetType {
- EMPTY = 0,
- FROM_CURRENT_PALETTE = 1,
- FROM_CURRENT_SPRITE = 2,
- FROM_CURRENT_SELECTION = 3
+ EMPTY = 0, FROM_CURRENT_PALETTE = 1, FROM_CURRENT_SPRITE = 2, FROM_CURRENT_SELECTION = 3
}
# Color options when user creates a new palette from current sprite or selection
enum GetColorsFrom { CURRENT_FRAME = 0, CURRENT_CEL = 1, ALL_FRAMES = 2 }
-const DEFAULT_PALETTE_NAME = "Default"
+const DEFAULT_PALETTE_NAME := "Default"
+var palettes_write_path := Global.home_data_directory.path_join("Palettes")
# All available palettes
var palettes := {}
# Currently displayed palette
-var current_palette = null
+var current_palette: Palette = null
# Indexes of colors that are selected in palette
# by left and right mouse button
@@ -64,23 +62,27 @@ func _current_palette_save() -> String:
return save_path
-func _save_palette(palette: Palette) -> String:
- Global.directory_module.ensure_xdg_user_dirs_exist()
- var palettes_write_path: String = Global.directory_module.get_palette_write_path()
+func _ensure_palette_directory_exists() -> void:
+ var dir := DirAccess.open(Global.home_data_directory)
+ if not dir.dir_exists(palettes_write_path):
+ dir.make_dir(palettes_write_path)
+
+func _save_palette(palette: Palette) -> String:
+ _ensure_palette_directory_exists()
# Save old resource name and set new resource name
- var old_resource_name = palette.resource_name
+ var old_resource_name := palette.resource_name
palette.set_resource_name(palette.name)
# If resource name changed remove the old palette file
if old_resource_name != palette.resource_name:
- var old_palette = palettes_write_path.plus_file(old_resource_name) + ".tres"
+ var old_palette := palettes_write_path.path_join(old_resource_name) + ".tres"
_delete_palette(old_palette)
# Save palette
- var save_path = palettes_write_path.plus_file(palette.resource_name) + ".tres"
+ var save_path := palettes_write_path.path_join(palette.resource_name) + ".tres"
palette.resource_path = save_path
- var err = ResourceSaver.save(save_path, palette)
+ var err := ResourceSaver.save(palette, save_path)
if err != OK:
Global.notification_label("Failed to save palette")
return save_path
@@ -88,93 +90,95 @@ func _save_palette(palette: Palette) -> String:
func create_new_palette(
preset: int,
- name: String,
+ palette_name: String,
comment: String,
width: int,
height: int,
add_alpha_colors: bool,
get_colors_from: int
) -> void:
- _check_palette_settings_values(name, width, height)
+ _check_palette_settings_values(palette_name, width, height)
match preset:
NewPalettePresetType.EMPTY:
- _create_new_empty_palette(name, comment, width, height)
+ _create_new_empty_palette(palette_name, comment, width, height)
NewPalettePresetType.FROM_CURRENT_PALETTE:
- _create_new_palette_from_current_palette(name, comment)
+ _create_new_palette_from_current_palette(palette_name, comment)
NewPalettePresetType.FROM_CURRENT_SPRITE:
_create_new_palette_from_current_sprite(
- name, comment, width, height, add_alpha_colors, get_colors_from
+ palette_name, comment, width, height, add_alpha_colors, get_colors_from
)
NewPalettePresetType.FROM_CURRENT_SELECTION:
_create_new_palette_from_current_selection(
- name, comment, width, height, add_alpha_colors, get_colors_from
+ palette_name, comment, width, height, add_alpha_colors, get_colors_from
)
-func _create_new_empty_palette(name: String, comment: String, width: int, height: int) -> void:
- var new_palette: Palette = Palette.new(name, width, height, comment)
+func _create_new_empty_palette(
+ palette_name: String, comment: String, width: int, height: int
+) -> void:
+ var new_palette: Palette = Palette.new(palette_name, width, height, comment)
var palette_path := _save_palette(new_palette)
palettes[palette_path] = new_palette
select_palette(palette_path)
-func _create_new_palette_from_current_palette(name: String, comment: String) -> void:
+func _create_new_palette_from_current_palette(palette_name: String, comment: String) -> void:
if !current_palette:
return
- var new_palette: Palette = current_palette.duplicate()
- new_palette.name = name
+ var new_palette := current_palette.duplicate() as Palette
+ new_palette.name = palette_name
new_palette.comment = comment
- new_palette.set_resource_name(name)
+ new_palette.set_resource_name(palette_name)
var palette_path := _save_palette(new_palette)
palettes[palette_path] = new_palette
select_palette(palette_path)
func _create_new_palette_from_current_selection(
- name: String,
+ palette_name: String,
comment: String,
width: int,
height: int,
add_alpha_colors: bool,
get_colors_from: int
):
- var new_palette: Palette = Palette.new(name, width, height, comment)
- var current_project = Global.current_project
- var pixels := []
+ var new_palette := Palette.new(palette_name, width, height, comment)
+ var current_project := Global.current_project
+ var pixels: Array[Vector2i] = []
for x in current_project.size.x:
for y in current_project.size.y:
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
if current_project.selection_map.is_pixel_selected(pos):
pixels.append(pos)
_fill_new_palette_with_colors(pixels, new_palette, add_alpha_colors, get_colors_from)
func _create_new_palette_from_current_sprite(
- name: String,
+ palette_name: String,
comment: String,
width: int,
height: int,
add_alpha_colors: bool,
get_colors_from: int
):
- var new_palette: Palette = Palette.new(name, width, height, comment)
- var current_project = Global.current_project
- var pixels := []
+ var new_palette := Palette.new(palette_name, width, height, comment)
+ var current_project := Global.current_project
+ var pixels: Array[Vector2i] = []
for x in current_project.size.x:
for y in current_project.size.y:
- pixels.append(Vector2(x, y))
+ pixels.append(Vector2i(x, y))
_fill_new_palette_with_colors(pixels, new_palette, add_alpha_colors, get_colors_from)
func _fill_new_palette_with_colors(
- pixels: Array, new_palette: Palette, add_alpha_colors: bool, get_colors_from: int
+ pixels: Array[Vector2i], new_palette: Palette, add_alpha_colors: bool, get_colors_from: int
):
- var current_project = Global.current_project
- var cels := []
+ var current_project := Global.current_project
+ var cels: Array[BaseCel] = []
match get_colors_from:
GetColorsFrom.CURRENT_CEL:
for cel_index in current_project.selected_cels:
- var cel = current_project.frames[cel_index[0]].cels[cel_index[1]]
+ var cel := current_project.frames[cel_index[0]].cels[cel_index[1]]
cels.append(cel)
GetColorsFrom.CURRENT_FRAME:
for cel in current_project.frames[current_project.current_frame].cels:
@@ -187,33 +191,30 @@ func _fill_new_palette_with_colors(
for cel in cels:
var cel_image := Image.new()
cel_image.copy_from(cel.get_image())
- cel_image.lock()
if cel_image.is_invisible():
continue
for i in pixels:
- var color: Color = cel_image.get_pixelv(i)
+ var color := cel_image.get_pixelv(i)
if color.a > 0:
if not add_alpha_colors:
color.a = 1
- if not new_palette.has_color(color):
+ if not new_palette.has_theme_color(color):
new_palette.add_color(color)
- cel_image.unlock()
var palette_path := _save_palette(new_palette)
palettes[palette_path] = new_palette
select_palette(palette_path)
-func current_palette_edit(name: String, comment: String, width: int, height: int) -> void:
- _check_palette_settings_values(name, width, height)
- current_palette.edit(name, width, height, comment)
- var palette_path = _current_palette_save()
+func current_palette_edit(palette_name: String, comment: String, width: int, height: int) -> void:
+ _check_palette_settings_values(palette_name, width, height)
+ current_palette.edit(palette_name, width, height, comment)
+ var palette_path := _current_palette_save()
palettes[palette_path] = current_palette
func _delete_palette(path: String) -> void:
- var dir = Directory.new()
- dir.remove(path)
+ DirAccess.open(path).remove(path)
palettes.erase(path)
@@ -229,10 +230,10 @@ func current_palete_delete() -> void:
func current_palette_add_color(mouse_button: int, start_index: int = 0) -> void:
if (
not current_palette.is_full()
- and (mouse_button == BUTTON_LEFT or mouse_button == BUTTON_RIGHT)
+ and (mouse_button == MOUSE_BUTTON_LEFT or mouse_button == MOUSE_BUTTON_RIGHT)
):
# Get color on left or right tool
- var color = Tools.get_assigned_color(mouse_button)
+ var color := Tools.get_assigned_color(mouse_button)
current_palette.add_color(color, start_index)
_current_palette_save()
@@ -253,7 +254,7 @@ func current_palette_delete_color(index: int) -> void:
func current_palette_swap_colors(source_index: int, target_index: int) -> void:
current_palette.swap_colors(source_index, target_index)
- _select_color(BUTTON_LEFT, target_index)
+ _select_color(MOUSE_BUTTON_LEFT, target_index)
_current_palette_save()
@@ -271,23 +272,23 @@ func current_palette_insert_color(from: int, to: int) -> void:
func current_palette_get_selected_color_index(mouse_button: int) -> int:
match mouse_button:
- BUTTON_LEFT:
+ MOUSE_BUTTON_LEFT:
return left_selected_color
- BUTTON_RIGHT:
+ MOUSE_BUTTON_RIGHT:
return right_selected_color
_:
return -1
func current_palette_select_color(mouse_button: int, index: int) -> void:
- var color = current_palette_get_color(index)
+ var color := current_palette_get_color(index)
if color == null:
return
match mouse_button:
- BUTTON_LEFT:
+ MOUSE_BUTTON_LEFT:
Tools.assign_color(color, mouse_button)
- BUTTON_RIGHT:
+ MOUSE_BUTTON_RIGHT:
Tools.assign_color(color, mouse_button)
_select_color(mouse_button, index)
@@ -295,9 +296,9 @@ func current_palette_select_color(mouse_button: int, index: int) -> void:
func _select_color(mouse_button: int, index: int) -> void:
match mouse_button:
- BUTTON_LEFT:
+ MOUSE_BUTTON_LEFT:
left_selected_color = index
- BUTTON_RIGHT:
+ MOUSE_BUTTON_RIGHT:
right_selected_color = index
@@ -314,37 +315,36 @@ func current_palette_is_full() -> bool:
return current_palette.is_full()
-func _check_palette_settings_values(name: String, width: int, height: int) -> bool:
+func _check_palette_settings_values(palette_name: String, width: int, height: int) -> bool:
# Just in case. These values should be not allowed in gui.
- if name.length() <= 0 or width <= 0 or height <= 0:
+ if palette_name.length() <= 0 or width <= 0 or height <= 0:
printerr("Palette width, height and name length must be greater than 0!")
return false
return true
func _load_palettes() -> void:
- Global.directory_module.ensure_xdg_user_dirs_exist()
- var search_locations = Global.directory_module.get_palette_search_path_in_order()
+ _ensure_palette_directory_exists()
+ var search_locations := Global.path_join_array(Global.data_directories, "Palettes")
var priority_ordered_files := _get_palette_priority_file_map(search_locations)
- var palettes_write_path: String = Global.directory_module.get_palette_write_path()
# Iterate backwards, so any palettes defined in default files
# get overwritten by those of the same name in user files
- search_locations.invert()
- priority_ordered_files.invert()
+ search_locations.reverse()
+ priority_ordered_files.reverse()
var default_palette_name = Global.config_cache.get_value(
"data", "last_palette", DEFAULT_PALETTE_NAME
)
- for i in range(len(search_locations)):
+ for i in range(search_locations.size()):
# If palette is not in palettes write path - make its copy in the write path
var make_copy := false
if search_locations[i] != palettes_write_path:
make_copy = true
- var base_directory: String = search_locations[i]
+ var base_directory := search_locations[i]
var palette_files: Array = priority_ordered_files[i]
for file_name in palette_files:
- var palette: Palette = load(base_directory.plus_file(file_name))
+ var palette := load(base_directory.path_join(file_name)) as Palette
if palette:
if make_copy:
_save_palette(palette) # Makes a copy of the palette
@@ -394,17 +394,16 @@ func _get_palette_priority_file_map(looking_paths: Array) -> Array:
# Get the palette files in a single directory.
# if it does not exist, return []
func _get_palette_files(path: String) -> Array:
- var dir := Directory.new()
- var results = []
+ var dir := DirAccess.open(path)
+ var results := []
- if not dir.dir_exists(path):
+ if not is_instance_valid(dir) or not dir.dir_exists(path):
return []
- dir.open(path)
dir.list_dir_begin()
while true:
- var file_name = dir.get_next()
+ var file_name := dir.get_next()
if file_name == "":
break
elif (
@@ -422,11 +421,11 @@ func _get_palette_files(path: String) -> Array:
# If none is found in the directories, then do nothing and return null
func _get_best_palette_file_location(looking_paths: Array, fname: String): # -> String:
var priority_fmap: Array = _get_palette_priority_file_map(looking_paths)
- for i in range(len(looking_paths)):
+ for i in range(looking_paths.size()):
var base_path: String = looking_paths[i]
var the_files: Array = priority_fmap[i]
if the_files.has(fname):
- return base_path.plus_file(fname)
+ return base_path.path_join(fname)
return null
@@ -438,18 +437,12 @@ func import_palette_from_path(path: String) -> void:
var palette: Palette = null
match path.to_lower().get_extension():
"gpl":
- var file = File.new()
- if file.file_exists(path):
- file.open(path, File.READ)
- var text = file.get_as_text()
- file.close()
+ if FileAccess.file_exists(path):
+ var text := FileAccess.open(path, FileAccess.READ).get_as_text()
palette = _import_gpl(path, text)
"pal":
- var file = File.new()
- if file.file_exists(path):
- file.open(path, File.READ)
- var text = file.get_as_text()
- file.close()
+ if FileAccess.file_exists(path):
+ var text := FileAccess.open(path, FileAccess.READ).get_as_text()
palette = _import_pal_palette(path, text)
"png", "bmp", "hdr", "jpg", "jpeg", "svg", "tga", "webp":
var image := Image.new()
@@ -457,11 +450,8 @@ func import_palette_from_path(path: String) -> void:
if !err:
palette = _import_image_palette(path, image)
"json":
- var file = File.new()
- if file.file_exists(path):
- file.open(path, File.READ)
- var text = file.get_as_text()
- file.close()
+ if FileAccess.file_exists(path):
+ var text := FileAccess.open(path, FileAccess.READ).get_as_text()
palette = _import_json_palette(text)
import_palette(palette, path.get_file())
@@ -488,11 +478,11 @@ func import_palette(palette: Palette, file_name: String) -> void:
func _import_gpl(path: String, text: String) -> Palette:
# Refer to app/core/gimppalette-load.c of the GIMP for the "living spec"
var result: Palette = null
- var lines = text.split("\n")
+ var lines := text.split("\n")
var line_number := 0
var palette_name := path.get_basename().get_file()
var comments := ""
- var colors := PoolColorArray()
+ var colors := PackedColorArray()
for line in lines:
# Check if valid Gimp Palette Library file
@@ -513,11 +503,11 @@ func _import_gpl(path: String, text: String) -> Palette:
continue
elif line_number > 0 && line.length() >= 9:
line = line.replace("\t", " ")
- var color_data: PoolStringArray = line.split(" ", false, 4)
+ var color_data: PackedStringArray = line.split(" ", false, 4)
var red: float = color_data[0].to_float() / 255.0
var green: float = color_data[1].to_float() / 255.0
var blue: float = color_data[2].to_float() / 255.0
- var color = Color(red, green, blue)
+ var color := Color(red, green, blue)
if color_data.size() >= 4:
# Ignore color name for now - result.add_color(color, color_data[3])
colors.append(color)
@@ -527,7 +517,7 @@ func _import_gpl(path: String, text: String) -> Palette:
line_number += 1
if line_number > 0:
- var height: int = ceil(colors.size() / 8.0)
+ var height := ceili(colors.size() / 8.0)
result = Palette.new(palette_name, 8, height, comments)
for color in colors:
result.add_color(color)
@@ -537,13 +527,13 @@ func _import_gpl(path: String, text: String) -> Palette:
func _import_pal_palette(path: String, text: String) -> Palette:
var result: Palette = null
- var colors := PoolColorArray()
- var lines = text.split("\n")
+ var colors := PackedColorArray()
+ var lines := text.split("\n")
if not "JASC-PAL" in lines[0] or not "0100" in lines[1]:
return result
- var num_colors = int(lines[2])
+ var num_colors := int(lines[2])
for i in range(3, num_colors + 3):
var color_data = lines[i].split(" ")
@@ -551,10 +541,10 @@ func _import_pal_palette(path: String, text: String) -> Palette:
var green: float = color_data[1].to_float() / 255.0
var blue: float = color_data[2].to_float() / 255.0
- var color = Color(red, green, blue)
+ var color := Color(red, green, blue)
colors.append(color)
- var height: int = ceil(colors.size() / 8.0)
+ var height := ceili(colors.size() / 8.0)
result = Palette.new(path.get_basename().get_file(), 8, height)
for color in colors:
result.add_color(color)
@@ -563,19 +553,17 @@ func _import_pal_palette(path: String, text: String) -> Palette:
func _import_image_palette(path: String, image: Image) -> Palette:
var colors := []
- var height: int = image.get_height()
- var width: int = image.get_width()
+ var height := image.get_height()
+ var width := image.get_width()
# Iterate all pixels and store unique colors to palette
- image.lock()
for y in range(0, height):
for x in range(0, width):
- var color: Color = image.get_pixel(x, y)
+ var color := image.get_pixel(x, y)
if !colors.has(color):
colors.append(color)
- image.unlock()
- var palette_height: int = ceil(colors.size() / 8.0)
+ var palette_height := ceili(colors.size() / 8.0)
var result: Palette = Palette.new(path.get_basename().get_file(), 8, palette_height)
for color in colors:
result.add_color(color)
@@ -583,10 +571,12 @@ func _import_image_palette(path: String, image: Image) -> Palette:
return result
-# Import of deprecated older json palette format
+## Import of deprecated older json palette format
func _import_json_palette(text: String) -> Palette:
- var result: Palette = Palette.new()
- var result_json = JSON.parse(text)
+ var result := Palette.new()
+ var test_json_conv := JSON.new()
+ test_json_conv.parse(text)
+ var result_json = test_json_conv.get_data()
if result_json.error != OK: # If parse has errors
printerr("JSON palette import error")
@@ -602,7 +592,7 @@ func _import_json_palette(text: String) -> Palette:
result.comment = data.comments
if data.has("colors"):
for color_data in data.colors:
- var color: Color = Color(color_data.data)
+ var color := Color(color_data.data)
result.add_color(color)
return result
diff --git a/src/Autoload/Tools.gd b/src/Autoload/Tools.gd
index 0672623a855..4fc1a9ce6b7 100644
--- a/src/Autoload/Tools.gd
+++ b/src/Autoload/Tools.gd
@@ -30,21 +30,21 @@ var tools := {
"RectSelect",
"Rectangular Selection",
"rectangle_select",
- preload("res://src/Tools/SelectionTools/RectSelect.tscn")
+ "res://src/Tools/SelectionTools/RectSelect.tscn"
),
"EllipseSelect":
Tool.new(
"EllipseSelect",
"Elliptical Selection",
"ellipse_select",
- preload("res://src/Tools/SelectionTools/EllipseSelect.tscn")
+ "res://src/Tools/SelectionTools/EllipseSelect.tscn"
),
"PolygonSelect":
Tool.new(
"PolygonSelect",
"Polygonal Selection",
"polygon_select",
- preload("res://src/Tools/SelectionTools/PolygonSelect.tscn"),
+ "res://src/Tools/SelectionTools/PolygonSelect.tscn",
[],
"Double-click to connect the last point to the starting point"
),
@@ -53,54 +53,44 @@ var tools := {
"ColorSelect",
"Select By Color",
"color_select",
- preload("res://src/Tools/SelectionTools/ColorSelect.tscn")
+ "res://src/Tools/SelectionTools/ColorSelect.tscn"
),
"MagicWand":
Tool.new(
- "MagicWand",
- "Magic Wand",
- "magic_wand",
- preload("res://src/Tools/SelectionTools/MagicWand.tscn")
+ "MagicWand", "Magic Wand", "magic_wand", "res://src/Tools/SelectionTools/MagicWand.tscn"
),
"Lasso":
Tool.new(
- "Lasso",
- "Lasso / Free Select Tool",
- "lasso",
- preload("res://src/Tools/SelectionTools/Lasso.tscn")
+ "Lasso", "Lasso / Free Select Tool", "lasso", "res://src/Tools/SelectionTools/Lasso.tscn"
),
"PaintSelect":
Tool.new(
"PaintSelect",
"Select by Drawing",
"paint_selection",
- preload("res://src/Tools/SelectionTools/PaintSelect.tscn")
+ "res://src/Tools/SelectionTools/PaintSelect.tscn"
),
"Move":
- Tool.new(
- "Move", "Move", "move", preload("res://src/Tools/Move.tscn"), [Global.LayerTypes.PIXEL]
- ),
- "Zoom": Tool.new("Zoom", "Zoom", "zoom", preload("res://src/Tools/Zoom.tscn")),
- "Pan": Tool.new("Pan", "Pan", "pan", preload("res://src/Tools/Pan.tscn")),
+ Tool.new("Move", "Move", "move", "res://src/Tools/Move.tscn", [Global.LayerTypes.PIXEL]),
+ "Zoom": Tool.new("Zoom", "Zoom", "zoom", "res://src/Tools/Zoom.tscn"),
+ "Pan": Tool.new("Pan", "Pan", "pan", "res://src/Tools/Pan.tscn"),
"ColorPicker":
Tool.new(
"ColorPicker",
"Color Picker",
"colorpicker",
- preload("res://src/Tools/ColorPicker.tscn"),
+ "res://src/Tools/ColorPicker.tscn",
[],
"Select a color from a pixel of the sprite"
),
"Crop":
- Tool.new(
- "Crop", "Crop", "crop", preload("res://src/Tools/CropTool.tscn"), [], "Resize the canvas"
- ),
+ Tool.new("Crop", "Crop", "crop", "res://src/Tools/CropTool.tscn", [], "Resize the canvas"),
"Pencil":
Tool.new(
"Pencil",
"Pencil",
"pencil",
- preload("res://src/Tools/Pencil.tscn"),
+ "res://src/Tools/Pencil.tscn",
[Global.LayerTypes.PIXEL],
"Hold %s to make a line",
["draw_create_line"]
@@ -110,77 +100,80 @@ var tools := {
"Eraser",
"Eraser",
"eraser",
- preload("res://src/Tools/Eraser.tscn"),
+ "res://src/Tools/Eraser.tscn",
[Global.LayerTypes.PIXEL],
"Hold %s to make a line",
["draw_create_line"]
),
"Bucket":
- Tool.new(
- "Bucket",
- "Bucket",
- "fill",
- preload("res://src/Tools/Bucket.tscn"),
- [Global.LayerTypes.PIXEL]
- ),
+ Tool.new("Bucket", "Bucket", "fill", "res://src/Tools/Bucket.tscn", [Global.LayerTypes.PIXEL]),
"Shading":
Tool.new(
"Shading",
"Shading Tool",
"shading",
- preload("res://src/Tools/Shading.tscn"),
+ "res://src/Tools/Shading.tscn",
[Global.LayerTypes.PIXEL]
),
"LineTool":
- Tool.new(
- "LineTool",
- "Line Tool",
- "linetool",
- preload("res://src/Tools/LineTool.tscn"),
- [Global.LayerTypes.PIXEL],
- """Hold %s to snap the angle of the line
+ (
+ Tool
+ . new(
+ "LineTool",
+ "Line Tool",
+ "linetool",
+ "res://src/Tools/LineTool.tscn",
+ [Global.LayerTypes.PIXEL],
+ """Hold %s to snap the angle of the line
Hold %s to center the shape on the click origin
Hold %s to displace the shape's origin""",
- ["shape_perfect", "shape_center", "shape_displace"]
+ ["shape_perfect", "shape_center", "shape_displace"]
+ )
),
"RectangleTool":
- Tool.new(
- "RectangleTool",
- "Rectangle Tool",
- "rectangletool",
- preload("res://src/Tools/RectangleTool.tscn"),
- [Global.LayerTypes.PIXEL],
- """Hold %s to create a 1:1 shape
+ (
+ Tool
+ . new(
+ "RectangleTool",
+ "Rectangle Tool",
+ "rectangletool",
+ "res://src/Tools/RectangleTool.tscn",
+ [Global.LayerTypes.PIXEL],
+ """Hold %s to create a 1:1 shape
Hold %s to center the shape on the click origin
Hold %s to displace the shape's origin""",
- ["shape_perfect", "shape_center", "shape_displace"]
+ ["shape_perfect", "shape_center", "shape_displace"]
+ )
),
"EllipseTool":
- Tool.new(
- "EllipseTool",
- "Ellipse Tool",
- "ellipsetool",
- preload("res://src/Tools/EllipseTool.tscn"),
- [Global.LayerTypes.PIXEL],
- """Hold %s to create a 1:1 shape
+ (
+ Tool
+ . new(
+ "EllipseTool",
+ "Ellipse Tool",
+ "ellipsetool",
+ "res://src/Tools/EllipseTool.tscn",
+ [Global.LayerTypes.PIXEL],
+ """Hold %s to create a 1:1 shape
Hold %s to center the shape on the click origin
Hold %s to displace the shape's origin""",
- ["shape_perfect", "shape_center", "shape_displace"]
+ ["shape_perfect", "shape_center", "shape_displace"]
+ )
),
"3DShapeEdit":
Tool.new(
"3DShapeEdit",
"3D Shape Edit",
"3dshapeedit",
- preload("res://src/Tools/3DShapeEdit.tscn"),
+ "res://src/Tools/3DShapeEdit.tscn",
[Global.LayerTypes.THREE_D]
),
}
-var _tool_button_scene: PackedScene = preload("res://src/Tools/ToolButton.tscn")
+var _tool_button_scene := preload("res://src/Tools/ToolButton.tscn")
var _slots := {}
var _panels := {}
-var _curr_layer_type: int = Global.LayerTypes.PIXEL
+var _curr_layer_type := Global.LayerTypes.PIXEL
var _left_tools_per_layer_type := {
Global.LayerTypes.PIXEL: "Pencil",
Global.LayerTypes.THREE_D: "3DShapeEdit",
@@ -191,75 +184,81 @@ var _right_tools_per_layer_type := {
}
var _tool_buttons: Node
var _active_button := -1
-var _last_position := Vector2.INF
+var _last_position := Vector2i(Vector2.INF)
class Tool:
var name := ""
var display_name := ""
+ var scene_path: String
var scene: PackedScene
- var icon: Texture
- var cursor_icon: Texture
+ var icon: Texture2D
+ var cursor_icon: Texture2D
var shortcut := ""
var extra_hint := ""
- var extra_shortcuts := [] # Array of String(s)
- var layer_types: PoolIntArray = []
+ var extra_shortcuts: PackedStringArray = []
+ var layer_types: PackedInt32Array = []
var button_node: BaseButton
func _init(
_name: String,
_display_name: String,
_shortcut: String,
- _scene: PackedScene,
- _layer_types: PoolIntArray = [],
+ _scene_path: String,
+ _layer_types: PackedInt32Array = [],
_extra_hint := "",
- _extra_shortucts := []
+ _extra_shortucts: PackedStringArray = []
) -> void:
name = _name
display_name = _display_name
shortcut = _shortcut
- scene = _scene
+ scene_path = _scene_path
layer_types = _layer_types
extra_hint = _extra_hint
extra_shortcuts = _extra_shortucts
icon = load("res://assets/graphics/tools/%s.png" % name.to_lower())
cursor_icon = load("res://assets/graphics/tools/cursors/%s.png" % name.to_lower())
+ func instantiate_scene() -> Node:
+ if not is_instance_valid(scene):
+ scene = load(scene_path)
+ return scene.instantiate()
+
func generate_hint_tooltip() -> String:
var hint := display_name
var shortcuts := []
var left_text := ""
var right_text := ""
if InputMap.has_action("left_" + shortcut + "_tool"):
- var left_list := InputMap.get_action_list("left_" + shortcut + "_tool")
+ var left_list := InputMap.action_get_events("left_" + shortcut + "_tool")
if left_list.size() > 0:
var left_shortcut: String = left_list[0].as_text()
shortcuts.append(left_shortcut)
left_text = "\n%s for left mouse button"
if InputMap.has_action("right_" + shortcut + "_tool"):
- var right_list := InputMap.get_action_list("right_" + shortcut + "_tool")
+ var right_list := InputMap.action_get_events("right_" + shortcut + "_tool")
if right_list.size() > 0:
var right_shortcut: String = right_list[0].as_text()
shortcuts.append(right_shortcut)
right_text = "\n%s for right mouse button"
- if !shortcuts.empty():
+ if !shortcuts.is_empty():
hint += "\n" + left_text + right_text
- if !extra_hint.empty():
+ if !extra_hint.is_empty():
hint += "\n\n" + extra_hint
var extra_shortcuts_mapped := []
- for event in extra_shortcuts:
- var key: InputEventKey = Keychain.action_get_first_key(event)
+ for action in extra_shortcuts:
var key_string := "None"
- if key:
- key_string = OS.get_scancode_string(key.get_scancode_with_modifiers())
+ var events := InputMap.action_get_events(action)
+ if events.size() > 0:
+ key_string = events[0].as_text()
extra_shortcuts_mapped.append(key_string)
shortcuts.append_array(extra_shortcuts_mapped)
- if shortcuts.empty():
+ if shortcuts.is_empty():
hint = tr(hint)
else:
hint = tr(hint) % shortcuts
@@ -279,8 +278,8 @@ class Slot:
func _ready() -> void:
- Global.connect("cel_changed", self, "_cel_changed")
- _tool_buttons = Global.control.find_node("ToolButtons")
+ Global.cel_changed.connect(_cel_changed)
+ _tool_buttons = Global.control.find_child("ToolButtons")
for t in tools:
add_tool_button(tools[t])
var tool_shortcut: String = tools[t].shortcut
@@ -289,25 +288,25 @@ func _ready() -> void:
Keychain.actions[left_tool_shortcut] = Keychain.InputAction.new("", "Left")
Keychain.actions[right_tool_shortcut] = Keychain.InputAction.new("", "Right")
- _slots[BUTTON_LEFT] = Slot.new("Left tool")
- _slots[BUTTON_RIGHT] = Slot.new("Right tool")
- _panels[BUTTON_LEFT] = Global.control.find_node("LeftPanelContainer", true, false)
- _panels[BUTTON_RIGHT] = Global.control.find_node("RightPanelContainer", true, false)
+ _slots[MOUSE_BUTTON_LEFT] = Slot.new("Left tool")
+ _slots[MOUSE_BUTTON_RIGHT] = Slot.new("Right tool")
+ _panels[MOUSE_BUTTON_LEFT] = Global.control.find_child("LeftPanelContainer", true, false)
+ _panels[MOUSE_BUTTON_RIGHT] = Global.control.find_child("RightPanelContainer", true, false)
var default_left_tool: String = _left_tools_per_layer_type[0]
var default_right_tool: String = _right_tools_per_layer_type[0]
var tool_name: String = Global.config_cache.get_value(
- _slots[BUTTON_LEFT].kname, "tool", default_left_tool
+ _slots[MOUSE_BUTTON_LEFT].kname, "tool", default_left_tool
)
if not tool_name in tools or not _is_tool_available(Global.LayerTypes.PIXEL, tools[tool_name]):
tool_name = default_left_tool
- set_tool(tool_name, BUTTON_LEFT)
+ set_tool(tool_name, MOUSE_BUTTON_LEFT)
tool_name = Global.config_cache.get_value(
- _slots[BUTTON_RIGHT].kname, "tool", default_right_tool
+ _slots[MOUSE_BUTTON_RIGHT].kname, "tool", default_right_tool
)
if not tool_name in tools or not _is_tool_available(Global.LayerTypes.PIXEL, tools[tool_name]):
tool_name = default_right_tool
- set_tool(tool_name, BUTTON_RIGHT)
+ set_tool(tool_name, MOUSE_BUTTON_RIGHT)
update_tool_buttons()
horizontal_mirror = Global.config_cache.get_value("preferences", "horizontal_mirror", false)
@@ -315,13 +314,15 @@ func _ready() -> void:
pixel_perfect = Global.config_cache.get_value("preferences", "pixel_perfect", false)
# Yield is necessary for the color picker nodes to update their color values
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
var color_value: Color = Global.config_cache.get_value(
- _slots[BUTTON_LEFT].kname, "color", Color.black
+ _slots[MOUSE_BUTTON_LEFT].kname, "color", Color.BLACK
+ )
+ assign_color(color_value, MOUSE_BUTTON_LEFT, false)
+ color_value = Global.config_cache.get_value(
+ _slots[MOUSE_BUTTON_RIGHT].kname, "color", Color.WHITE
)
- assign_color(color_value, BUTTON_LEFT, false)
- color_value = Global.config_cache.get_value(_slots[BUTTON_RIGHT].kname, "color", Color.white)
- assign_color(color_value, BUTTON_RIGHT, false)
+ assign_color(color_value, MOUSE_BUTTON_RIGHT, false)
update_tool_cursors()
var layer: BaseLayer = Global.current_project.layers[Global.current_project.current_layer]
var layer_type := layer.get_layer_type()
@@ -329,15 +330,15 @@ func _ready() -> void:
func add_tool_button(t: Tool) -> void:
- var tool_button: BaseButton = _tool_button_scene.instance()
+ var tool_button: BaseButton = _tool_button_scene.instantiate()
tool_button.name = t.name
tool_button.get_node("BackgroundLeft").modulate = Global.left_tool_color
tool_button.get_node("BackgroundRight").modulate = Global.right_tool_color
tool_button.get_node("ToolIcon").texture = t.icon
- tool_button.hint_tooltip = t.generate_hint_tooltip()
+ tool_button.tooltip_text = t.generate_hint_tooltip()
t.button_node = tool_button
_tool_buttons.add_child(tool_button)
- tool_button.connect("pressed", _tool_buttons, "_on_Tool_pressed", [tool_button])
+ tool_button.pressed.connect(_tool_buttons._on_Tool_pressed.bind(tool_button))
func remove_tool(t: Tool) -> void:
@@ -345,16 +346,16 @@ func remove_tool(t: Tool) -> void:
tools.erase(t.name)
-func set_tool(name: String, button: int) -> void:
+func set_tool(tool_name: String, button: int) -> void:
var slot: Slot = _slots[button]
var panel: Node = _panels[button]
- var node: Node = tools[name].scene.instance()
- if button == BUTTON_LEFT: # As guides are only moved with left mouse
- if name == "Pan": # tool you want to give more access at guides
+ var node: Node = tools[tool_name].instantiate_scene()
+ if button == MOUSE_BUTTON_LEFT: # As guides are only moved with left mouse
+ if tool_name == "Pan": # tool you want to give more access at guides
Global.move_guides_on_canvas = true
else:
Global.move_guides_on_canvas = false
- node.name = name
+ node.name = tool_name
node.tool_slot = slot
slot.tool_node = node
slot.button = button
@@ -362,38 +363,38 @@ func set_tool(name: String, button: int) -> void:
if _curr_layer_type == Global.LayerTypes.GROUP:
return
- if button == BUTTON_LEFT:
- _left_tools_per_layer_type[_curr_layer_type] = name
- elif button == BUTTON_RIGHT:
- _right_tools_per_layer_type[_curr_layer_type] = name
+ if button == MOUSE_BUTTON_LEFT:
+ _left_tools_per_layer_type[_curr_layer_type] = tool_name
+ elif button == MOUSE_BUTTON_RIGHT:
+ _right_tools_per_layer_type[_curr_layer_type] = tool_name
-func assign_tool(name: String, button: int) -> void:
+func assign_tool(tool_name: String, button: int) -> void:
var slot: Slot = _slots[button]
var panel: Node = _panels[button]
if slot.tool_node != null:
- if slot.tool_node.name == name:
+ if slot.tool_node.name == tool_name:
return
panel.remove_child(slot.tool_node)
slot.tool_node.queue_free()
- set_tool(name, button)
+ set_tool(tool_name, button)
update_tool_buttons()
update_tool_cursors()
- Global.config_cache.set_value(slot.kname, "tool", name)
+ Global.config_cache.set_value(slot.kname, "tool", tool_name)
func default_color() -> void:
- assign_color(Color.black, BUTTON_LEFT)
- assign_color(Color.white, BUTTON_RIGHT)
+ assign_color(Color.BLACK, MOUSE_BUTTON_LEFT)
+ assign_color(Color.WHITE, MOUSE_BUTTON_RIGHT)
func swap_color() -> void:
- var left = _slots[BUTTON_LEFT].color
- var right = _slots[BUTTON_RIGHT].color
- assign_color(right, BUTTON_LEFT, false)
- assign_color(left, BUTTON_RIGHT, false)
+ var left = _slots[MOUSE_BUTTON_LEFT].color
+ var right = _slots[MOUSE_BUTTON_RIGHT].color
+ assign_color(right, MOUSE_BUTTON_LEFT, false)
+ assign_color(left, MOUSE_BUTTON_RIGHT, false)
func assign_color(color: Color, button: int, change_alpha := true) -> void:
@@ -404,7 +405,7 @@ func assign_color(color: Color, button: int, change_alpha := true) -> void:
color.a = 1
_slots[button].color = color
Global.config_cache.set_value(_slots[button].kname, "color", color)
- emit_signal("color_changed", color, button)
+ color_changed.emit(color, button)
# If current palette has that color then select that color
Global.palette_panel.palette_grid.find_and_select_color(button, color)
@@ -416,47 +417,45 @@ func get_assigned_color(button: int) -> Color:
func set_button_size(button_size: int) -> void:
var size := Vector2(24, 24) if button_size == Global.ButtonSize.SMALL else Vector2(32, 32)
for t in _tool_buttons.get_children():
- t.rect_min_size = size
- t.get_node("BackgroundLeft").rect_size.x = size.x / 2
- t.get_node("BackgroundRight").rect_size.x = size.x / 2
- t.get_node("BackgroundRight").rect_position = size
+ t.custom_minimum_size = size
func update_tool_buttons() -> void:
for child in _tool_buttons.get_children():
var left_background: NinePatchRect = child.get_node("BackgroundLeft")
var right_background: NinePatchRect = child.get_node("BackgroundRight")
- left_background.visible = _slots[BUTTON_LEFT].tool_node.name == child.name
- right_background.visible = _slots[BUTTON_RIGHT].tool_node.name == child.name
+ left_background.visible = _slots[MOUSE_BUTTON_LEFT].tool_node.name == child.name
+ right_background.visible = _slots[MOUSE_BUTTON_RIGHT].tool_node.name == child.name
func update_hint_tooltips() -> void:
+ await get_tree().process_frame
for tool_name in tools:
var t: Tool = tools[tool_name]
- t.button_node.hint_tooltip = t.generate_hint_tooltip()
+ t.button_node.tooltip_text = t.generate_hint_tooltip()
func update_tool_cursors() -> void:
- var left_tool: Tool = tools[_slots[BUTTON_LEFT].tool_node.name]
+ var left_tool: Tool = tools[_slots[MOUSE_BUTTON_LEFT].tool_node.name]
Global.control.left_cursor.texture = left_tool.cursor_icon
- var right_tool: Tool = tools[_slots[BUTTON_RIGHT].tool_node.name]
+ var right_tool: Tool = tools[_slots[MOUSE_BUTTON_RIGHT].tool_node.name]
Global.control.right_cursor.texture = right_tool.cursor_icon
func draw_indicator() -> void:
if Global.right_square_indicator_visible:
- _slots[BUTTON_RIGHT].tool_node.draw_indicator(false)
+ _slots[MOUSE_BUTTON_RIGHT].tool_node.draw_indicator(false)
if Global.left_square_indicator_visible:
- _slots[BUTTON_LEFT].tool_node.draw_indicator(true)
+ _slots[MOUSE_BUTTON_LEFT].tool_node.draw_indicator(true)
func draw_preview() -> void:
- _slots[BUTTON_LEFT].tool_node.draw_preview()
- _slots[BUTTON_RIGHT].tool_node.draw_preview()
+ _slots[MOUSE_BUTTON_LEFT].tool_node.draw_preview()
+ _slots[MOUSE_BUTTON_RIGHT].tool_node.draw_preview()
-func handle_draw(position: Vector2, event: InputEvent) -> void:
- if not (Global.can_draw and Global.has_focus):
+func handle_draw(position: Vector2i, event: InputEvent) -> void:
+ if not Global.can_draw:
return
var draw_pos := position
@@ -464,15 +463,15 @@ func handle_draw(position: Vector2, event: InputEvent) -> void:
draw_pos.x = Global.current_project.size.x - position.x - 1
if event.is_action_pressed("activate_left_tool") and _active_button == -1:
- _active_button = BUTTON_LEFT
+ _active_button = MOUSE_BUTTON_LEFT
_slots[_active_button].tool_node.draw_start(draw_pos)
- elif event.is_action_released("activate_left_tool") and _active_button == BUTTON_LEFT:
+ elif event.is_action_released("activate_left_tool") and _active_button == MOUSE_BUTTON_LEFT:
_slots[_active_button].tool_node.draw_end(draw_pos)
_active_button = -1
elif event.is_action_pressed("activate_right_tool") and _active_button == -1:
- _active_button = BUTTON_RIGHT
+ _active_button = MOUSE_BUTTON_RIGHT
_slots[_active_button].tool_node.draw_start(draw_pos)
- elif event.is_action_released("activate_right_tool") and _active_button == BUTTON_RIGHT:
+ elif event.is_action_released("activate_right_tool") and _active_button == MOUSE_BUTTON_RIGHT:
_slots[_active_button].tool_node.draw_end(draw_pos)
_active_button = -1
@@ -484,44 +483,44 @@ func handle_draw(position: Vector2, event: InputEvent) -> void:
# correct the jumping to 1 error while also allowing values that
# are "supposed" to be 1.
if pen_pressure == 1 && pressure_buf[0] != 0:
- pen_pressure = min(1, pressure_buf[0] + pressure_buf[0] - pressure_buf[1])
+ pen_pressure = minf(1, pressure_buf[0] + pressure_buf[0] - pressure_buf[1])
pressure_buf.pop_back()
pressure_buf.push_front(pen_pressure)
- pen_pressure = range_lerp(pen_pressure, pen_pressure_min, pen_pressure_max, 0.0, 1.0)
- pen_pressure = clamp(pen_pressure, 0.0, 1.0)
+ pen_pressure = remap(pen_pressure, pen_pressure_min, pen_pressure_max, 0.0, 1.0)
+ pen_pressure = clampf(pen_pressure, 0.0, 1.0)
- mouse_velocity = event.speed.length() / mouse_velocity_max
- mouse_velocity = range_lerp(
+ mouse_velocity = event.velocity.length() / mouse_velocity_max
+ mouse_velocity = remap(
mouse_velocity, mouse_velocity_min_thres, mouse_velocity_max_thres, 0.0, 1.0
)
- mouse_velocity = clamp(mouse_velocity, 0.0, 1.0)
+ mouse_velocity = clampf(mouse_velocity, 0.0, 1.0)
if dynamics_alpha != Dynamics.PRESSURE and dynamics_size != Dynamics.PRESSURE:
pen_pressure = 1.0
if dynamics_alpha != Dynamics.VELOCITY and dynamics_size != Dynamics.VELOCITY:
mouse_velocity = 1.0
- if not position.is_equal_approx(_last_position):
+ if not position == _last_position:
_last_position = position
- _slots[BUTTON_LEFT].tool_node.cursor_move(position)
- _slots[BUTTON_RIGHT].tool_node.cursor_move(position)
+ _slots[MOUSE_BUTTON_LEFT].tool_node.cursor_move(position)
+ _slots[MOUSE_BUTTON_RIGHT].tool_node.cursor_move(position)
if _active_button != -1:
_slots[_active_button].tool_node.draw_move(draw_pos)
- var project: Project = Global.current_project
+ var project := Global.current_project
var text := "[%sร%s]" % [project.size.x, project.size.y]
if Global.has_focus:
text += " %s, %s" % [position.x, position.y]
- if not _slots[BUTTON_LEFT].tool_node.cursor_text.empty():
- text += " %s" % _slots[BUTTON_LEFT].tool_node.cursor_text
- if not _slots[BUTTON_RIGHT].tool_node.cursor_text.empty():
- text += " %s" % _slots[BUTTON_RIGHT].tool_node.cursor_text
+ if not _slots[MOUSE_BUTTON_LEFT].tool_node.cursor_text.is_empty():
+ text += " %s" % _slots[MOUSE_BUTTON_LEFT].tool_node.cursor_text
+ if not _slots[MOUSE_BUTTON_RIGHT].tool_node.cursor_text.is_empty():
+ text += " %s" % _slots[MOUSE_BUTTON_RIGHT].tool_node.cursor_text
Global.cursor_position_label.text = text
func get_alpha_dynamic(strength := 1.0) -> float:
if dynamics_alpha == Dynamics.PRESSURE:
- strength *= lerp(alpha_min, alpha_max, pen_pressure)
+ strength *= lerpf(alpha_min, alpha_max, pen_pressure)
elif dynamics_alpha == Dynamics.VELOCITY:
- strength *= lerp(alpha_min, alpha_max, mouse_velocity)
+ strength *= lerpf(alpha_min, alpha_max, mouse_velocity)
return strength
@@ -534,7 +533,7 @@ func _cel_changed() -> void:
_show_relevant_tools(layer_type)
-func _show_relevant_tools(layer_type: int) -> void:
+func _show_relevant_tools(layer_type: Global.LayerTypes) -> void:
# Hide tools that are not available in the current layer type
for button in _tool_buttons.get_children():
var tool_name: String = button.name
@@ -545,11 +544,11 @@ func _show_relevant_tools(layer_type: int) -> void:
# Assign new tools if the layer type has changed
_curr_layer_type = layer_type
var new_tool_name: String = _left_tools_per_layer_type[layer_type]
- assign_tool(new_tool_name, BUTTON_LEFT)
+ assign_tool(new_tool_name, MOUSE_BUTTON_LEFT)
new_tool_name = _right_tools_per_layer_type[layer_type]
- assign_tool(new_tool_name, BUTTON_RIGHT)
+ assign_tool(new_tool_name, MOUSE_BUTTON_RIGHT)
func _is_tool_available(layer_type: int, t: Tool) -> bool:
- return t.layer_types.empty() or layer_type in t.layer_types
+ return t.layer_types.is_empty() or layer_type in t.layer_types
diff --git a/src/Classes/AnimationExporters/GIFAnimationExporter.gd b/src/Classes/AnimationExporters/GIFAnimationExporter.gd
index d98477fc442..adf8cbc36a4 100644
--- a/src/Classes/AnimationExporters/GIFAnimationExporter.gd
+++ b/src/Classes/AnimationExporters/GIFAnimationExporter.gd
@@ -4,8 +4,8 @@ extends AImgIOBaseExporter
# Note that if the interface needs changing for new features, do just change it!
# Gif exporter
-const GIFExporter = preload("res://addons/gdgifexporter/exporter.gd")
-const MedianCutQuantization = preload("res://addons/gdgifexporter/quantization/median_cut.gd")
+const GIFExporter := preload("res://addons/gdgifexporter/exporter.gd")
+const MedianCutQuantization := preload("res://addons/gdgifexporter/quantization/median_cut.gd")
func _init():
@@ -18,10 +18,10 @@ func export_animation(
progress_report_obj: Object,
progress_report_method,
progress_report_args
-) -> PoolByteArray:
+) -> PackedByteArray:
var first_frame: AImgIOFrame = frames[0]
var first_img := first_frame.content
- var exporter = GIFExporter.new(first_img.get_width(), first_img.get_height())
+ var exporter := GIFExporter.new(first_img.get_width(), first_img.get_height())
for v in frames:
var frame: AImgIOFrame = v
exporter.add_frame(frame.content, frame.duration, MedianCutQuantization)
diff --git a/src/Classes/AnimationTag.gd b/src/Classes/AnimationTag.gd
index a6cfb697a51..04b70ecd9d6 100644
--- a/src/Classes/AnimationTag.gd
+++ b/src/Classes/AnimationTag.gd
@@ -1,5 +1,5 @@
class_name AnimationTag
-extends Reference
+extends RefCounted
# A class for frame tag properties
var name: String
diff --git a/src/Classes/BaseCel.gd b/src/Classes/BaseCel.gd
index 57c3c78c15e..3d5744000e0 100644
--- a/src/Classes/BaseCel.gd
+++ b/src/Classes/BaseCel.gd
@@ -1,26 +1,27 @@
class_name BaseCel
-extends Reference
+extends RefCounted
## Base class for cel properties.
## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel).
signal texture_changed
var opacity := 1.0
-var image_texture: Texture setget , _get_image_texture
-# If the cel is linked a ref to the link set Dictionary this cel is in, or null if not linked:
-var link_set = null # { "cels": Array, "hue": float } or null
-var transformed_content: Image # Used in transformations (moving, scaling etc with selections)
+var image_texture: Texture2D:
+ get = _get_image_texture
+## If the cel is linked a ref to the link set Dictionary this cel is in, or null if not linked:
+var link_set = null ## { "cels": Array, "hue": float } or null
+var transformed_content: Image ## Used in transformations (moving, scaling etc with selections)
# Methods to Override:
-func _get_image_texture() -> Texture:
+func _get_image_texture() -> Texture2D:
return image_texture
-# The content methods deal with the unique content of each cel type. For example, an Image for
-# PixelLayers, or a Dictionary of settings for a procedural layer type, and null for Groups.
-# Can be used for linking/unlinking cels, copying, and deleting content
+## The content methods deal with the unique content of each cel type. For example, an Image for
+## PixelLayers, or a Dictionary of settings for a procedural layer type, and null for Groups.
+## Can be used for linking/unlinking cels, copying, and deleting content
func get_content():
return null
@@ -29,31 +30,31 @@ func set_content(_content, _texture: ImageTexture = null) -> void:
return
-# Can be used to delete the content of the cel with set_content
-# (using the old content from get_content as undo data)
+## Can be used to delete the content of the cel with set_content
+## (using the old content from get_content as undo data)
func create_empty_content():
return []
-# Can be used for creating copy content for copying cels or unlinking cels
+## Can be used for creating copy content for copying cels or unlinking cels
func copy_content():
return []
-# Returns the image var for image based cel types, or a render for procedural types.
-# It's meant for read-only usage of image data, such as copying selections or color picking.
+## Returns the image var for image based cel types, or a render for procedural types.
+## It's meant for read-only usage of image data, such as copying selections or color picking.
func get_image() -> Image:
return null
func update_texture() -> void:
- emit_signal("texture_changed")
+ texture_changed.emit()
if link_set != null:
var frame: int = Global.current_project.current_frame
# This check is needed in case the user has selected multiple cels that are also linked
if self in Global.current_project.frames[frame].cels:
for cel in link_set["cels"]:
- cel.emit_signal("texture_changed")
+ cel.texture_changed.emit()
func serialize() -> Dictionary:
@@ -64,11 +65,11 @@ func deserialize(dict: Dictionary) -> void:
opacity = dict["opacity"]
-func save_image_data_to_pxo(_file: File) -> void:
+func save_image_data_to_pxo(_file: FileAccess) -> void:
return
-func load_image_data_from_pxo(_file: File, _project_size: Vector2) -> void:
+func load_image_data_from_pxo(_file: FileAccess, _project_size: Vector2i) -> void:
return
diff --git a/src/Classes/BaseLayer.gd b/src/Classes/BaseLayer.gd
index 37a0ce12622..70509a6ee3f 100644
--- a/src/Classes/BaseLayer.gd
+++ b/src/Classes/BaseLayer.gd
@@ -1,31 +1,31 @@
class_name BaseLayer
-extends Reference
-# Base class for layer properties. Different layer types extend from this class.
+extends RefCounted
+## Base class for layer properties. Different layer types extend from this class.
var name := ""
-var project
+var project: Project
var index: int
var parent: BaseLayer
var visible := true
var locked := false
var new_cels_linked := false
-var cel_link_sets := [] # Array of Dictionaries (Each Dictionary represents a cel's "link set")
+var cel_link_sets: Array[Dictionary] = [] ## Each Dictionary represents a cel's "link set"
-# Returns true if this is a direct or indirect parent of layer
-func is_a_parent_of(layer: BaseLayer) -> bool:
+## Returns true if this is a direct or indirect parent of layer
+func is_ancestor_of(layer: BaseLayer) -> bool:
if layer.parent == self:
return true
elif is_instance_valid(layer.parent):
- return is_a_parent_of(layer.parent)
+ return is_ancestor_of(layer.parent)
return false
-func get_children(recursive: bool) -> Array:
- var children := []
+func get_children(recursive: bool) -> Array[BaseLayer]:
+ var children: Array[BaseLayer] = []
if recursive:
for i in index:
- if is_a_parent_of(project.layers[i]):
+ if is_ancestor_of(project.layers[i]):
children.append(project.layers[i])
else:
for i in index:
@@ -38,7 +38,7 @@ func get_child_count(recursive: bool) -> int:
var count := 0
if recursive:
for i in index:
- if is_a_parent_of(project.layers[i]):
+ if is_ancestor_of(project.layers[i]):
count += 1
else:
for i in index:
@@ -83,14 +83,14 @@ func get_layer_path() -> String:
return name
-# Links a cel to link_set if its a Dictionary, or unlinks if null.
-# Content/image_texture are handled separately for undo related reasons
+## Links a cel to link_set if its a Dictionary, or unlinks if null.
+## Content/image_texture are handled separately for undo related reasons
func link_cel(cel: BaseCel, link_set = null) -> void:
# Erase from the cel's current link_set
if cel.link_set != null:
if cel.link_set.has("cels"):
cel.link_set["cels"].erase(cel)
- if cel.link_set["cels"].empty():
+ if cel.link_set["cels"].is_empty():
cel_link_sets.erase(cel.link_set)
else:
cel_link_sets.erase(cel.link_set)
@@ -102,11 +102,11 @@ func link_cel(cel: BaseCel, link_set = null) -> void:
link_set["cels"].append(cel)
if not cel_link_sets.has(link_set):
if not link_set.has("hue"):
- var hues := PoolRealArray()
+ var hues := PackedFloat32Array()
for other_link_set in cel_link_sets:
hues.append(other_link_set["hue"])
- if hues.empty():
- link_set["hue"] = Color.green.h
+ if hues.is_empty():
+ link_set["hue"] = Color.GREEN.h
else: # Calculate the largest gap in hue between existing link sets:
hues.sort()
# Start gap between the highest and lowest hues, otherwise its hard to include
@@ -132,7 +132,7 @@ func serialize() -> Dictionary:
"locked": locked,
"parent": parent.index if is_instance_valid(parent) else -1
}
- if not cel_link_sets.empty():
+ if not cel_link_sets.is_empty():
var cels := [] # Cels array for easy finding of the frame index for link_set saving
for frame in project.frames:
cels.append(frame.cels[index])
@@ -150,8 +150,8 @@ func deserialize(dict: Dictionary) -> void:
locked = dict.locked
if dict.get("parent", -1) != -1:
parent = project.layers[dict.parent]
- if dict.has("linked_cels") and not dict["linked_cels"].empty(): # Backwards compatibility
- dict["link_sets"] = [{"cels": dict["linked_cels"], "hue": Color.green.h}]
+ if dict.has("linked_cels") and not dict["linked_cels"].is_empty(): # Backwards compatibility
+ dict["link_sets"] = [{"cels": dict["linked_cels"], "hue": Color.GREEN.h}]
if dict.has("link_sets"):
for serialized_link_set in dict["link_sets"]:
var link_set := {"cels": [], "hue": serialized_link_set["hue"]}
diff --git a/src/Classes/Cel3D.gd b/src/Classes/Cel3D.gd
index 9f242c18d78..3de3e1d4721 100644
--- a/src/Classes/Cel3D.gd
+++ b/src/Classes/Cel3D.gd
@@ -5,36 +5,45 @@ signal selected_object(object)
signal scene_property_changed
signal objects_changed
-var size: Vector2
-var viewport: Viewport
-var parent_node: Spatial
-var camera: Camera
+var size: Vector2i
+var viewport: SubViewport
+var parent_node: Node3D
+var camera: Camera3D
var scene_properties := {}
-# Key = Cel3DObject's id, Value = Dictionary containing the properties of the Cel3DObject
+## Key = Cel3DObject's id, Value = Dictionary containing the properties of the Cel3DObject
var object_properties := {}
-var selected: Cel3DObject = null setget _set_selected
-var current_object_id := 0 # Its value never decreases
+var selected: Cel3DObject = null:
+ set(value):
+ if value == selected:
+ return
+ if is_instance_valid(selected): # Unselect previous object if we selected something else
+ selected.deselect()
+ selected = value
+ if is_instance_valid(selected): # Select new object
+ selected.select()
+ selected_object.emit(value)
+var current_object_id := 0 ## Its value never decreases
-func _init(_size: Vector2, from_pxo := false, _object_prop := {}, _scene_prop := {}) -> void:
+func _init(_size: Vector2i, from_pxo := false, _object_prop := {}, _scene_prop := {}) -> void:
size = _size
object_properties = _object_prop
scene_properties = _scene_prop
- if scene_properties.empty():
- var camera_transform := Transform()
+ if scene_properties.is_empty():
+ var camera_transform := Transform3D()
camera_transform.origin = Vector3(0, 0, 3)
scene_properties = {
"camera_transform": camera_transform,
- "camera_projection": Camera.PROJECTION_PERSPECTIVE,
+ "camera_projection": Camera3D.PROJECTION_PERSPECTIVE,
"camera_fov": 70.0,
"camera_size": 1.0,
- "ambient_light_color": Color.black,
+ "ambient_light_color": Color.BLACK,
"ambient_light_energy": 1,
}
_add_nodes()
if not from_pxo:
- if object_properties.empty():
- var transform := Transform()
+ if object_properties.is_empty():
+ var transform := Transform3D()
transform.origin = Vector3(-2.5, 0, 0)
object_properties[0] = {"type": Cel3DObject.Type.DIR_LIGHT, "transform": transform}
_add_object_node(0)
@@ -42,17 +51,16 @@ func _init(_size: Vector2, from_pxo := false, _object_prop := {}, _scene_prop :=
func _add_nodes() -> void:
- viewport = Viewport.new()
+ viewport = SubViewport.new()
viewport.size = size
- viewport.own_world = true
+ viewport.own_world_3d = true
viewport.transparent_bg = true
- viewport.render_target_v_flip = true
- var world := World.new()
- var environment := Environment.new()
- world.environment = environment
- viewport.world = world
- parent_node = Spatial.new()
- camera = Camera.new()
+ var world := World3D.new()
+ world.environment = Environment.new()
+ world.environment.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR
+ viewport.world_3d = world
+ parent_node = Node3D.new()
+ camera = Camera3D.new()
camera.current = true
deserialize_scene_properties()
viewport.add_child(camera)
@@ -64,7 +72,7 @@ func _add_nodes() -> void:
image_texture = viewport.get_texture()
-func _get_image_texture() -> Texture:
+func _get_image_texture() -> Texture2D:
if not is_instance_valid(viewport):
_add_nodes()
return image_texture
@@ -78,8 +86,8 @@ func serialize_scene_properties() -> Dictionary:
"camera_projection": camera.projection,
"camera_fov": camera.fov,
"camera_size": camera.size,
- "ambient_light_color": viewport.world.environment.ambient_light_color,
- "ambient_light_energy": viewport.world.environment.ambient_light_energy
+ "ambient_light_color": viewport.world_3d.environment.ambient_light_color,
+ "ambient_light_energy": viewport.world_3d.environment.ambient_light_energy
}
@@ -88,8 +96,8 @@ func deserialize_scene_properties() -> void:
camera.projection = scene_properties["camera_projection"]
camera.fov = scene_properties["camera_fov"]
camera.size = scene_properties["camera_size"]
- viewport.world.environment.ambient_light_color = scene_properties["ambient_light_color"]
- viewport.world.environment.ambient_light_energy = scene_properties["ambient_light_energy"]
+ viewport.world_3d.environment.ambient_light_color = scene_properties["ambient_light_color"]
+ viewport.world_3d.environment.ambient_light_energy = scene_properties["ambient_light_energy"]
func _update_objects_transform(id: int) -> void: # Called by undo/redo
@@ -110,7 +118,7 @@ func get_object_from_id(id: int) -> Cel3DObject:
return null
-func size_changed(new_size: Vector2) -> void:
+func size_changed(new_size: Vector2i) -> void:
size = new_size
viewport.size = size
image_texture = viewport.get_texture()
@@ -118,7 +126,7 @@ func size_changed(new_size: Vector2) -> void:
func _scene_property_changed() -> void: # Called by undo/redo
deserialize_scene_properties()
- emit_signal("scene_property_changed")
+ scene_property_changed.emit()
func _add_object_node(id: int) -> void:
@@ -139,57 +147,53 @@ func _add_object_node(id: int) -> void:
if object_properties[id].has("type"):
node3d.type = object_properties[id]["type"]
object_properties[id] = node3d.serialize()
- emit_signal("objects_changed")
+ objects_changed.emit()
-func _remove_object_node(id: int) -> void: # Called by undo/redo
+func _remove_object_node(id: int) -> void: ## Called by undo/redo
var object := get_object_from_id(id)
if is_instance_valid(object):
if selected == object:
- self.selected = null
+ selected = null
object.queue_free()
- emit_signal("objects_changed")
-
-
-func _set_selected(value: Cel3DObject) -> void:
- if value == selected:
- return
- if is_instance_valid(selected): # Unselect previous object if we selected something else
- selected.unselect()
- selected = value
- if is_instance_valid(selected): # Select new object
- selected.select()
- emit_signal("selected_object", value)
+ objects_changed.emit()
# Overridden methods
func get_image() -> Image:
- return viewport.get_texture().get_data()
+ return viewport.get_texture().get_image()
func serialize() -> Dictionary:
- var dict := .serialize()
- dict["scene_properties"] = scene_properties
- dict["object_properties"] = object_properties
+ var dict := super.serialize()
+ var scene_properties_str := {}
+ for prop in scene_properties:
+ scene_properties_str[prop] = var_to_str(scene_properties[prop])
+ var object_properties_str := {}
+ for prop in object_properties:
+ object_properties_str[prop] = var_to_str(object_properties[prop])
+ dict["scene_properties"] = scene_properties_str
+ dict["object_properties"] = object_properties_str
return dict
func deserialize(dict: Dictionary) -> void:
- .deserialize(dict)
- scene_properties = dict["scene_properties"]
- var objects_copy = dict["object_properties"]
- for object in objects_copy:
+ super.deserialize(dict)
+ scene_properties = {}
+ var scene_properties_str: Dictionary = dict["scene_properties"]
+ for prop in scene_properties_str:
+ scene_properties[prop] = str_to_var(scene_properties_str[prop])
+ var objects_copy_str: Dictionary = dict["object_properties"]
+ for object in objects_copy_str:
if typeof(object) != TYPE_STRING:
return
- Global.convert_dictionary_values(objects_copy[object])
var id := int(object)
if current_object_id < id:
current_object_id = id
- object_properties[id] = objects_copy[object]
+ object_properties[id] = str_to_var(objects_copy_str[object])
current_object_id += 1
- Global.convert_dictionary_values(scene_properties)
deserialize_scene_properties()
for object in object_properties:
_add_object_node(object)
@@ -200,17 +204,17 @@ func on_remove() -> void:
viewport.queue_free()
-func save_image_data_to_pxo(file: File) -> void:
+func save_image_data_to_pxo(file: FileAccess) -> void:
file.store_buffer(get_image().get_data())
-func load_image_data_from_pxo(file: File, project_size: Vector2) -> void:
- # Don't do anything with it, just read it so that the file can move on
+## Don't do anything with it, just read it so that the file can move on
+func load_image_data_from_pxo(file: FileAccess, project_size: Vector2i) -> void:
file.get_buffer(project_size.x * project_size.y * 4)
func instantiate_cel_button() -> Node:
- return Global.cel_3d_button_node.instance()
+ return Global.cel_3d_button_node.instantiate()
func get_class_name() -> String:
diff --git a/src/Classes/Cel3DObject.gd b/src/Classes/Cel3DObject.gd
index 694e3877119..bd73debb140 100644
--- a/src/Classes/Cel3DObject.gd
+++ b/src/Classes/Cel3DObject.gd
@@ -1,5 +1,5 @@
class_name Cel3DObject
-extends Spatial
+extends Node3D
signal property_changed
@@ -21,35 +21,37 @@ enum Gizmos { NONE, X_POS, Y_POS, Z_POS, X_ROT, Y_ROT, Z_ROT, X_SCALE, Y_SCALE,
var cel
var id := -1
-var type: int = Type.BOX setget _set_type
+var type := Type.BOX:
+ set = _set_type
var selected := false
var hovered := false
-var box_shape: BoxShape
-var camera: Camera
-var file_path := "" setget _set_file_path # Only useful for Type.IMPORTED
+var box_shape: BoxShape3D
+var camera: Camera3D
+var file_path := "":
+ set = _set_file_path
var applying_gizmos: int = Gizmos.NONE
-var node3d_type: VisualInstance
+var node3d_type: VisualInstance3D
var dir_light_texture := preload("res://assets/graphics/gizmos/directional_light.svg")
var spot_light_texture := preload("res://assets/graphics/gizmos/spot_light.svg")
var omni_light_texture := preload("res://assets/graphics/gizmos/omni_light.svg")
-onready var gizmos_3d: Node2D = Global.canvas.gizmos_3d
+@onready var gizmos_3d: Node2D = Global.canvas.gizmos_3d
func _ready() -> void:
- camera = get_viewport().get_camera()
- var static_body := StaticBody.new()
- var collision_shape := CollisionShape.new()
- box_shape = BoxShape.new()
- box_shape.extents = scale
+ camera = get_viewport().get_camera_3d()
+ var static_body := StaticBody3D.new()
+ var collision_shape := CollisionShape3D.new()
+ box_shape = BoxShape3D.new()
+ box_shape.size = scale
collision_shape.shape = box_shape
static_body.add_child(collision_shape)
add_child(static_body)
func find_cel() -> bool:
- var project = Global.current_project
+ var project := Global.current_project
return cel == project.frames[project.current_frame].cels[project.current_layer]
@@ -76,7 +78,7 @@ func serialize() -> Dictionary:
dict["mesh_is_hemisphere"] = mesh.is_hemisphere
Type.CAPSULE:
dict["mesh_radius"] = mesh.radius
- dict["mesh_mid_height"] = mesh.mid_height
+ dict["mesh_height"] = mesh.height
dict["mesh_radial_segments"] = mesh.radial_segments
dict["mesh_rings"] = mesh.rings
Type.CYLINDER:
@@ -85,6 +87,11 @@ func serialize() -> Dictionary:
dict["mesh_height"] = mesh.height
dict["mesh_radial_segments"] = mesh.radial_segments
dict["mesh_rings"] = mesh.rings
+ Type.TORUS:
+ dict["mesh_inner_radius"] = mesh.inner_radius
+ dict["mesh_outer_radius"] = mesh.outer_radius
+ dict["mesh_ring_segments"] = mesh.ring_segments
+ dict["mesh_rings"] = mesh.rings
Type.TEXT:
dict["mesh_text"] = mesh.text
dict["mesh_pixel_size"] = mesh.pixel_size
@@ -95,7 +102,6 @@ func serialize() -> Dictionary:
dict["light_energy"] = node3d_type.light_energy
dict["light_negative"] = node3d_type.light_negative
dict["shadow_enabled"] = node3d_type.shadow_enabled
- dict["shadow_color"] = node3d_type.shadow_color
match type:
Type.OMNI_LIGHT:
dict["omni_range"] = node3d_type.omni_range
@@ -108,7 +114,7 @@ func serialize() -> Dictionary:
func deserialize(dict: Dictionary) -> void:
id = dict["id"]
file_path = dict["file_path"]
- self.type = dict["type"]
+ type = dict["type"]
transform = dict["transform"]
visible = dict["visible"]
if _is_mesh():
@@ -130,7 +136,7 @@ func deserialize(dict: Dictionary) -> void:
mesh.is_hemisphere = dict["mesh_is_hemisphere"]
Type.CAPSULE:
mesh.radius = dict["mesh_radius"]
- mesh.mid_height = dict["mesh_mid_height"]
+ mesh.height = dict["mesh_height"]
mesh.radial_segments = dict["mesh_radial_segments"]
mesh.rings = dict["mesh_rings"]
Type.CYLINDER:
@@ -139,6 +145,11 @@ func deserialize(dict: Dictionary) -> void:
mesh.height = dict["mesh_height"]
mesh.radial_segments = dict["mesh_radial_segments"]
mesh.rings = dict["mesh_rings"]
+ Type.TORUS:
+ mesh.inner_radius = dict["mesh_inner_radius"]
+ mesh.outer_radius = dict["mesh_outer_radius"]
+ mesh.ring_segments = dict["mesh_ring_segments"]
+ mesh.rings = dict["mesh_rings"]
Type.TEXT:
mesh.text = dict["mesh_text"]
mesh.pixel_size = dict["mesh_pixel_size"]
@@ -149,7 +160,6 @@ func deserialize(dict: Dictionary) -> void:
node3d_type.light_energy = dict["light_energy"]
node3d_type.light_negative = dict["light_negative"]
node3d_type.shadow_enabled = dict["shadow_enabled"]
- node3d_type.shadow_color = dict["shadow_color"]
match type:
Type.OMNI_LIGHT:
node3d_type.omni_range = dict["omni_range"]
@@ -160,10 +170,10 @@ func deserialize(dict: Dictionary) -> void:
func _is_mesh() -> bool:
- return node3d_type is MeshInstance
+ return node3d_type is MeshInstance3D
-func _set_type(value: int) -> void:
+func _set_type(value: Type) -> void:
if type == value and is_instance_valid(node3d_type): # No reason to set the same type twice
return
type = value
@@ -171,50 +181,55 @@ func _set_type(value: int) -> void:
node3d_type.queue_free()
match type:
Type.BOX:
- node3d_type = MeshInstance.new()
- node3d_type.mesh = CubeMesh.new()
+ node3d_type = MeshInstance3D.new()
+ node3d_type.mesh = BoxMesh.new()
Type.SPHERE:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
node3d_type.mesh = SphereMesh.new()
Type.CAPSULE:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
node3d_type.mesh = CapsuleMesh.new()
Type.CYLINDER:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
node3d_type.mesh = CylinderMesh.new()
Type.PRISM:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
node3d_type.mesh = PrismMesh.new()
Type.PLANE:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
node3d_type.mesh = PlaneMesh.new()
+ Type.TORUS:
+ node3d_type = MeshInstance3D.new()
+ node3d_type.mesh = TorusMesh.new()
Type.TEXT:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
var mesh := TextMesh.new()
mesh.font = Global.control.theme.default_font
mesh.text = "Sample"
node3d_type.mesh = mesh
Type.DIR_LIGHT:
- node3d_type = DirectionalLight.new()
+ node3d_type = DirectionalLight3D.new()
gizmos_3d.add_always_visible(self, dir_light_texture)
Type.SPOT_LIGHT:
- node3d_type = SpotLight.new()
+ node3d_type = SpotLight3D.new()
gizmos_3d.add_always_visible(self, spot_light_texture)
Type.OMNI_LIGHT:
- node3d_type = OmniLight.new()
+ node3d_type = OmniLight3D.new()
gizmos_3d.add_always_visible(self, omni_light_texture)
Type.IMPORTED:
- node3d_type = MeshInstance.new()
+ node3d_type = MeshInstance3D.new()
var mesh: Mesh
- if not file_path.empty():
+ if not file_path.is_empty():
mesh = ObjParse.load_obj(file_path)
node3d_type.mesh = mesh
add_child(node3d_type)
func _set_file_path(value: String) -> void:
+ if file_path == value:
+ return
file_path = value
- if file_path.empty():
+ if file_path.is_empty():
return
if type == Type.IMPORTED:
node3d_type.mesh = ObjParse.load_obj(file_path)
@@ -222,7 +237,7 @@ func _set_file_path(value: String) -> void:
func _notification(what: int) -> void:
if what == NOTIFICATION_EXIT_TREE:
- unselect()
+ deselect()
gizmos_3d.remove_always_visible(self)
@@ -231,7 +246,7 @@ func select() -> void:
gizmos_3d.get_points(camera, self)
-func unselect() -> void:
+func deselect() -> void:
selected = false
gizmos_3d.clear_points(self)
@@ -279,25 +294,25 @@ func change_transform(a: Vector3, b: Vector3) -> void:
move(diff)
-func move(position: Vector3) -> void:
- translation += position
+func move(pos: Vector3) -> void:
+ position += pos
change_property()
+## Move the object in the direction it is facing, and restrict mouse movement in that axis
func move_axis(diff: Vector3, axis: Vector3) -> void:
- # Move the object in the direction it is facing, and restrict mouse movement in that axis
var axis_v2 := Vector2(axis.x, axis.y).normalized()
if axis_v2 == Vector2.ZERO:
axis_v2 = Vector2(axis.y, axis.z).normalized()
var diff_v2 := Vector2(diff.x, diff.y).normalized()
- translation += axis * axis_v2.dot(diff_v2) * diff.length()
+ position += axis * axis_v2.dot(diff_v2) * diff.length()
change_property()
func change_rotation(a: Vector3, b: Vector3, axis: Vector3) -> void:
- var a_local := a - translation
+ var a_local := a - position
var a_local_v2 := Vector2(a_local.x, a_local.y)
- var b_local := b - translation
+ var b_local := b - position
var b_local_v2 := Vector2(b_local.x, b_local.y)
var angle := b_local_v2.angle_to(a_local_v2)
# Rotate the object around a basis axis, instead of a fixed axis, such as
@@ -309,8 +324,8 @@ func change_rotation(a: Vector3, b: Vector3, axis: Vector3) -> void:
change_property()
+## Scale the object in the direction it is facing, and restrict mouse movement in that axis
func change_scale(diff: Vector3, axis: Vector3, dir: Vector3) -> void:
- # Scale the object in the direction it is facing, and restrict mouse movement in that axis
var axis_v2 := Vector2(axis.x, axis.y).normalized()
if axis_v2 == Vector2.ZERO:
axis_v2 = Vector2(axis.y, axis.z).normalized()
@@ -325,5 +340,5 @@ func change_property() -> void:
else:
# Check is needed in case this runs before _ready(), and thus onready variables
if is_instance_valid(gizmos_3d):
- gizmos_3d.update()
- emit_signal("property_changed")
+ gizmos_3d.queue_redraw()
+ property_changed.emit()
diff --git a/src/Classes/Drawers.gd b/src/Classes/Drawers.gd
index b75d8384503..dcf72a85ec8 100644
--- a/src/Classes/Drawers.gd
+++ b/src/Classes/Drawers.gd
@@ -1,12 +1,18 @@
class_name Drawer
-var pixel_perfect := false setget set_pixel_perfect
+var pixel_perfect := false:
+ set(value):
+ pixel_perfect = value
+ if pixel_perfect:
+ drawers = pixel_perfect_drawers.duplicate()
+ else:
+ drawers = [simple_drawer, simple_drawer, simple_drawer, simple_drawer]
var horizontal_mirror := false
var vertical_mirror := false
var color_op := ColorOp.new()
var simple_drawer := SimpleDrawer.new()
-var pixel_perfect_drawers := [
+var pixel_perfect_drawers: Array[PixelPerfectDrawer] = [
PixelPerfectDrawer.new(),
PixelPerfectDrawer.new(),
PixelPerfectDrawer.new(),
@@ -23,7 +29,7 @@ class ColorOp:
class SimpleDrawer:
- func set_pixel(image: Image, position: Vector2, color: Color, op: ColorOp) -> void:
+ func set_pixel(image: Image, position: Vector2i, color: Color, op: ColorOp) -> void:
var color_old := image.get_pixelv(position)
var color_str = color.to_html()
var color_new := op.process(Color(color_str), color_old)
@@ -32,16 +38,16 @@ class SimpleDrawer:
class PixelPerfectDrawer:
- const NEIGHBOURS = [Vector2(0, 1), Vector2(1, 0), Vector2(-1, 0), Vector2(0, -1)]
- const CORNERS = [Vector2(1, 1), Vector2(-1, -1), Vector2(-1, 1), Vector2(1, -1)]
- var last_pixels = [null, null]
+ const NEIGHBOURS: Array[Vector2i] = [Vector2i.DOWN, Vector2i.RIGHT, Vector2i.LEFT, Vector2i.UP]
+ const CORNERS: Array[Vector2i] = [Vector2i.ONE, -Vector2i.ONE, Vector2i(-1, 1), Vector2i(1, -1)]
+ var last_pixels := [null, null]
func reset() -> void:
last_pixels = [null, null]
- func set_pixel(image: Image, position: Vector2, color: Color, op: ColorOp) -> void:
- var color_old = image.get_pixelv(position)
- var color_str = color.to_html()
+ func set_pixel(image: Image, position: Vector2i, color: Color, op: ColorOp) -> void:
+ var color_old := image.get_pixelv(position)
+ var color_str := color.to_html()
last_pixels.push_back([position, color_old])
image.set_pixelv(position, op.process(Color(color_str), color_old))
@@ -61,27 +67,19 @@ func reset() -> void:
drawer.reset()
-func set_pixel_perfect(value: bool) -> void:
- pixel_perfect = value
- if pixel_perfect:
- drawers = pixel_perfect_drawers.duplicate()
- else:
- drawers = [simple_drawer, simple_drawer, simple_drawer, simple_drawer]
-
-
-func set_pixel(image: Image, position: Vector2, color: Color, ignore_mirroring := false) -> void:
- var project: Project = Global.current_project
+func set_pixel(image: Image, position: Vector2i, color: Color, ignore_mirroring := false) -> void:
+ var project := Global.current_project
drawers[0].set_pixel(image, position, color, color_op)
if ignore_mirroring:
return
# Handle Mirroring
- var mirror_x = project.x_symmetry_point - position.x
- var mirror_y = project.y_symmetry_point - position.y
-
- if horizontal_mirror and project.can_pixel_get_drawn(Vector2(mirror_x, position.y)):
- drawers[1].set_pixel(image, Vector2(mirror_x, position.y), color, color_op)
- if vertical_mirror and project.can_pixel_get_drawn(Vector2(position.x, mirror_y)):
- drawers[2].set_pixel(image, Vector2(mirror_x, mirror_y), color, color_op)
- if vertical_mirror and project.can_pixel_get_drawn(Vector2(position.x, mirror_y)):
- drawers[3].set_pixel(image, Vector2(position.x, mirror_y), color, color_op)
+ var mirror_x := project.x_symmetry_point - position.x
+ var mirror_y := project.y_symmetry_point - position.y
+
+ if horizontal_mirror and project.can_pixel_get_drawn(Vector2i(mirror_x, position.y)):
+ drawers[1].set_pixel(image, Vector2i(mirror_x, position.y), color, color_op)
+ if vertical_mirror and project.can_pixel_get_drawn(Vector2i(position.x, mirror_y)):
+ drawers[2].set_pixel(image, Vector2i(mirror_x, mirror_y), color, color_op)
+ if vertical_mirror and project.can_pixel_get_drawn(Vector2i(position.x, mirror_y)):
+ drawers[3].set_pixel(image, Vector2i(position.x, mirror_y), color, color_op)
diff --git a/src/Classes/Frame.gd b/src/Classes/Frame.gd
index 6c73bcc361f..c2104466150 100644
--- a/src/Classes/Frame.gd
+++ b/src/Classes/Frame.gd
@@ -1,12 +1,12 @@
class_name Frame
-extends Reference
-# A class for frame properties.
-# A frame is a collection of cels, for each layer.
+extends RefCounted
+## A class for frame properties.
+## A frame is a collection of cels, for each layer.
-var cels: Array # An array of Cels
+var cels: Array[BaseCel]
var duration := 1.0
-func _init(_cels := [], _duration := 1.0) -> void:
+func _init(_cels: Array[BaseCel] = [], _duration := 1.0) -> void:
cels = _cels
duration = _duration
diff --git a/src/Classes/GroupCel.gd b/src/Classes/GroupCel.gd
index d9f006628e5..a33e39cdd5a 100644
--- a/src/Classes/GroupCel.gd
+++ b/src/Classes/GroupCel.gd
@@ -1,7 +1,7 @@
class_name GroupCel
extends BaseCel
-# A class for the properties of cels in GroupLayers.
-# The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel).
+## A class for the properties of cels in GroupLayers.
+## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel).
func _init(_opacity := 1.0) -> void:
@@ -10,15 +10,14 @@ func _init(_opacity := 1.0) -> void:
func get_image() -> Image:
- var image := Image.new()
- image.create(
+ var image := Image.create(
Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8
)
return image
func instantiate_cel_button() -> Node:
- return Global.group_cel_button_node.instance()
+ return Global.group_cel_button_node.instantiate()
func get_class_name() -> String:
diff --git a/src/Classes/GroupLayer.gd b/src/Classes/GroupLayer.gd
index 6188094d607..c955931814b 100644
--- a/src/Classes/GroupLayer.gd
+++ b/src/Classes/GroupLayer.gd
@@ -1,40 +1,35 @@
class_name GroupLayer
extends BaseLayer
-# A class for group layer properties
+## A class for group layer properties
var expanded := true
-func _init(_project, _name := "") -> void:
+func _init(_project: Project, _name := "") -> void:
project = _project
name = _name
-func blend_children(frame: Frame, origin := Vector2.ZERO) -> Image:
- var image := Image.new()
- image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+## Blends all of the images of children layer of the group layer into a single image.
+func blend_children(frame: Frame, origin := Vector2i.ZERO) -> Image:
+ var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
var children := get_children(false)
- var blend_rect := Rect2(Vector2.ZERO, project.size)
+ var blend_rect := Rect2i(Vector2i.ZERO, project.size)
for layer in children:
if not layer.is_visible_in_hierarchy():
continue
- # Checks if layer is GroupLayer, cannot define this due to cyclic reference error
- if layer is get_script():
+ if layer is GroupLayer:
image.blend_rect(layer.blend_children(frame, origin), blend_rect, origin)
else:
- var cel: BaseCel = frame.cels[layer.index]
+ var cel := frame.cels[layer.index]
var cel_image := Image.new()
cel_image.copy_from(cel.get_image())
- if cel.opacity < 1: # If we have cel transparency
- cel_image.lock()
+ if cel.opacity < 1.0: # If we have cel transparency
for xx in cel_image.get_size().x:
for yy in cel_image.get_size().y:
var pixel_color := cel_image.get_pixel(xx, yy)
- var alpha: float = pixel_color.a * cel.opacity
- cel_image.set_pixel(
- xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)
- )
- cel_image.unlock()
+ pixel_color.a *= cel.opacity
+ cel_image.set_pixel(xx, yy, pixel_color)
image.blend_rect(cel_image, blend_rect, origin)
return image
@@ -43,14 +38,14 @@ func blend_children(frame: Frame, origin := Vector2.ZERO) -> Image:
func serialize() -> Dictionary:
- var data := .serialize()
+ var data := super.serialize()
data["type"] = get_layer_type()
data["expanded"] = expanded
return data
func deserialize(dict: Dictionary) -> void:
- .deserialize(dict)
+ super.deserialize(dict)
expanded = dict.expanded
@@ -71,4 +66,4 @@ func accepts_child(_layer: BaseLayer) -> bool:
func instantiate_layer_button() -> Node:
- return Global.group_layer_button_node.instance()
+ return Global.group_layer_button_node.instantiate()
diff --git a/src/Classes/ImageEffect.gd b/src/Classes/ImageEffect.gd
index fad90236395..8fc45f935d0 100644
--- a/src/Classes/ImageEffect.gd
+++ b/src/Classes/ImageEffect.gd
@@ -5,43 +5,43 @@ extends ConfirmationDialog
enum { SELECTED_CELS, FRAME, ALL_FRAMES, ALL_PROJECTS }
-var affect := SELECTED_CELS
-var selected_cels := Image.new()
-var current_frame := Image.new()
+var affect: int = SELECTED_CELS
+var selected_cels: Image
+var current_frame: Image
var preview_image := Image.new()
var preview_texture := ImageTexture.new()
var preview: TextureRect
var selection_checkbox: CheckBox
var affect_option_button: OptionButton
var animate_panel: AnimatePanel
-var commit_idx := -1 # the current frame, image effect is applied to
-var confirmed := false
-var _preview_idx := 0 # the current frame, being previewed
+var commit_idx := -1 ## The current frame the image effect is being applied to
+var has_been_confirmed := false
+var _preview_idx := 0 ## The current frame being previewed
func _ready() -> void:
set_nodes()
- get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL
- get_cancel().size_flags_horizontal = Control.SIZE_EXPAND_FILL
- current_frame.create(
+ get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ get_cancel_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ current_frame = Image.create(
Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8
)
- selected_cels.create(
+ selected_cels = Image.create(
Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8
)
- connect("about_to_show", self, "_about_to_show")
- connect("popup_hide", self, "_popup_hide")
- connect("confirmed", self, "_confirmed")
+ about_to_popup.connect(_about_to_popup)
+ visibility_changed.connect(_visibility_changed)
+ confirmed.connect(_confirmed)
if selection_checkbox:
- selection_checkbox.connect("toggled", self, "_on_SelectionCheckBox_toggled")
+ selection_checkbox.toggled.connect(_on_SelectionCheckBox_toggled)
if affect_option_button:
- affect_option_button.connect("item_selected", self, "_on_AffectOptionButton_item_selected")
+ affect_option_button.item_selected.connect(_on_AffectOptionButton_item_selected)
if animate_panel:
- $"%ShowAnimate".connect("pressed", self, "display_animate_dialog")
+ $"%ShowAnimate".pressed.connect(display_animate_dialog)
-func _about_to_show() -> void:
- confirmed = false
+func _about_to_popup() -> void:
+ has_been_confirmed = false
Global.canvas.selection.transform_content_confirm()
prepare_animator(Global.current_project)
set_and_update_preview_image(Global.current_project.current_frame)
@@ -50,11 +50,11 @@ func _about_to_show() -> void:
# prepares "animate_panel.frames" according to affect
func prepare_animator(project: Project) -> void:
- var frames = []
+ var frames: PackedInt32Array = []
if affect == SELECTED_CELS:
- for fram_layer in project.selected_cels:
- if not fram_layer[0] in frames:
- frames.append(fram_layer[0])
+ for frame_layer in project.selected_cels:
+ if not frame_layer[0] in frames:
+ frames.append(frame_layer[0])
frames.sort() # To always start animating from left side of the timeline
animate_panel.frames = frames
elif affect == FRAME:
@@ -67,21 +67,20 @@ func prepare_animator(project: Project) -> void:
func _confirmed() -> void:
- confirmed = true
+ has_been_confirmed = true
commit_idx = -1
- var project: Project = Global.current_project
+ var project := Global.current_project
if affect == SELECTED_CELS:
prepare_animator(project)
var undo_data := _get_undo_data(project)
for cel_index in project.selected_cels:
if !project.layers[cel_index[1]].can_layer_get_drawn():
continue
- var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
+ var cel := project.frames[cel_index[0]].cels[cel_index[1]]
if not cel is PixelCel:
continue
- var cel_image: Image = cel.image
commit_idx = cel_index[0] # frame is cel_index[0] in this mode
- commit_action(cel_image)
+ commit_action(cel.image)
_commit_undo("Draw", undo_data, project)
elif affect == FRAME:
@@ -132,7 +131,7 @@ func _confirmed() -> void:
_commit_undo("Draw", undo_data, _project)
-func commit_action(_cel: Image, _project: Project = Global.current_project) -> void:
+func commit_action(_cel: Image, _project := Global.current_project) -> void:
pass
@@ -146,8 +145,8 @@ func set_nodes() -> void:
func display_animate_dialog():
var animate_dialog: Popup = animate_panel.get_parent()
- var pos = Vector2(rect_global_position.x + rect_size.x, rect_global_position.y)
- var animate_dialog_rect := Rect2(pos, Vector2(animate_dialog.rect_size.x, rect_size.y))
+ var pos := Vector2(position.x + size.x, position.y)
+ var animate_dialog_rect := Rect2(pos, Vector2(animate_dialog.size.x, size.y))
animate_dialog.popup(animate_dialog_rect)
animate_panel.re_calibrate_preview_slider()
@@ -160,8 +159,8 @@ func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> vo
project.undo_redo.add_do_property(image, "data", redo_data[image])
for image in undo_data:
project.undo_redo.add_undo_property(image, "data", undo_data[image])
- project.undo_redo.add_do_method(Global, "undo_or_redo", false, -1, -1, project)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true, -1, -1, project)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, -1, -1, project))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, -1, -1, project))
project.undo_redo.commit_action()
@@ -169,23 +168,22 @@ func _get_undo_data(project: Project) -> Dictionary:
var data := {}
var images := _get_selected_draw_images(project)
for image in images:
- image.unlock()
data[image] = image.data
return data
-func _get_selected_draw_images(project: Project) -> Array: # Array of Images
- var images := []
+func _get_selected_draw_images(project: Project) -> Array[Image]:
+ var images: Array[Image] = []
if affect == SELECTED_CELS:
for cel_index in project.selected_cels:
var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
if cel is PixelCel:
- images.append(cel.image)
+ images.append(cel.get_image())
else:
for frame in project.frames:
for cel in frame.cels:
if cel is PixelCel:
- images.append(cel.image)
+ images.append(cel.get_image())
return images
@@ -203,7 +201,7 @@ func _on_AffectOptionButton_item_selected(index: int) -> void:
func set_and_update_preview_image(frame_idx: int) -> void:
_preview_idx = frame_idx
- var frame: Frame = Global.current_project.frames[frame_idx]
+ var frame := Global.current_project.frames[frame_idx]
selected_cels.resize(Global.current_project.size.x, Global.current_project.size.y)
selected_cels.fill(Color(0, 0, 0, 0))
Export.blend_selected_cels(selected_cels, frame)
@@ -221,30 +219,25 @@ func update_preview() -> void:
preview_image.copy_from(current_frame)
commit_idx = _preview_idx
commit_action(preview_image)
- preview_image.unlock()
- preview_texture.create_from_image(preview_image, 0)
+ preview_texture = ImageTexture.create_from_image(preview_image)
preview.texture = preview_texture
func update_transparent_background_size() -> void:
if !preview:
return
- var image_size_y := preview.rect_size.y
- var image_size_x := preview.rect_size.x
+ var image_size_y := preview.size.y
+ var image_size_x := preview.size.x
if preview_image.get_size().x > preview_image.get_size().y:
- var scale_ratio = preview_image.get_size().x / image_size_x
+ var scale_ratio := preview_image.get_size().x / image_size_x
image_size_y = preview_image.get_size().y / scale_ratio
else:
- var scale_ratio = preview_image.get_size().y / image_size_y
+ var scale_ratio := preview_image.get_size().y / image_size_y
image_size_x = preview_image.get_size().x / scale_ratio
- preview.get_node("TransparentChecker").rect_size.x = image_size_x
- preview.get_node("TransparentChecker").rect_size.y = image_size_y
+ preview.get_node("TransparentChecker").size.x = image_size_x
+ preview.get_node("TransparentChecker").size.y = image_size_y
-func _popup_hide() -> void:
+func _visibility_changed() -> void:
Global.dialog_open(false)
-
-
-func _is_webgl1() -> bool:
- return OS.get_name() == "HTML5" and OS.get_current_video_driver() == OS.VIDEO_DRIVER_GLES2
diff --git a/src/Classes/Layer3D.gd b/src/Classes/Layer3D.gd
index 3160075b3fd..6d96c8446bc 100644
--- a/src/Classes/Layer3D.gd
+++ b/src/Classes/Layer3D.gd
@@ -1,8 +1,9 @@
class_name Layer3D
extends BaseLayer
+## A class for 3D layer properties.
-func _init(_project, _name := "") -> void:
+func _init(_project: Project, _name := "") -> void:
project = _project
name = _name
@@ -11,7 +12,7 @@ func _init(_project, _name := "") -> void:
func serialize() -> Dictionary:
- var dict = .serialize()
+ var dict = super.serialize()
dict["type"] = get_layer_type()
return dict
@@ -29,4 +30,4 @@ func can_layer_get_drawn() -> bool:
func instantiate_layer_button() -> Node:
- return Global.base_layer_button_node.instance()
+ return Global.base_layer_button_node.instantiate()
diff --git a/src/Classes/ObjParse.gd b/src/Classes/ObjParse.gd
index 3b3c4d1d681..9c639e71c41 100644
--- a/src/Classes/ObjParse.gd
+++ b/src/Classes/ObjParse.gd
@@ -1,20 +1,19 @@
class_name ObjParse
-const DEBUG := false
-
-# Obj parser made by Ezcha, updated by Deakcor
-# Created on 7/11/2018
-# https://ezcha.net
-# https://github.com/Ezcha/gd-obj
-# MIT License
-# https://github.com/Ezcha/gd-obj/blob/master/LICENSE
+## Obj parser made by Ezcha, updated by Deakcor
+## Created on 7/11/2018
+## https://ezcha.net
+## https://github.com/Ezcha/gd-obj
+## MIT License
+## https://github.com/Ezcha/gd-obj/blob/master/LICENSE
+## Returns an array of materials from a MTL file
-# Returns an array of materials from a MTL file
+const DEBUG := false
# Public methods
-# Create mesh from obj and mtl paths
+## Create mesh from obj and mtl paths
static func load_obj(obj_path: String, mtl_path: String = "") -> Mesh:
if mtl_path == "":
mtl_path = search_mtl_path(obj_path)
@@ -25,29 +24,28 @@ static func load_obj(obj_path: String, mtl_path: String = "") -> Mesh:
return _create_obj(obj, mats) if obj and mats else null
-# Create mesh from obj, materials. Materials should be {"matname":data}
+## Create mesh from obj, materials. Materials should be {"matname":data}
static func load_obj_from_buffer(obj_data: String, materials: Dictionary) -> Mesh:
return _create_obj(obj_data, materials)
-# Create materials
+## Create materials
static func load_mtl_from_buffer(mtl_data: String, textures: Dictionary) -> Dictionary:
return _create_mtl(mtl_data, textures)
-# Get data from file path
+## Get data from file path
static func get_data(path: String) -> String:
if path != "":
- var file := File.new()
- var err := file.open(path, File.READ)
- if err == OK:
+ var file := FileAccess.open(path, FileAccess.READ)
+ if FileAccess.get_open_error() == OK:
var res := file.get_as_text()
file.close()
return res
return ""
-# Get textures from mtl path (return {"tex_path":data})
+## Get textures from mtl path (return {"tex_path":data})
static func get_mtl_tex(mtl_path: String) -> Dictionary:
var file_paths := get_mtl_tex_paths(mtl_path)
var textures := {}
@@ -56,31 +54,29 @@ static func get_mtl_tex(mtl_path: String) -> Dictionary:
return textures
-# Get textures paths from mtl path
+## Get textures paths from mtl path
static func get_mtl_tex_paths(mtl_path: String) -> Array:
- var file := File.new()
- var err := file.open(mtl_path, File.READ)
+ var file := FileAccess.open(mtl_path, FileAccess.READ)
var paths := []
- if err == OK:
+ if FileAccess.get_open_error() == OK:
var lines := file.get_as_text().split("\n", false)
file.close()
for line in lines:
- var parts = line.split(" ", false, 1)
+ var parts := line.split(" ", false, 1)
if parts[0] in ["map_Kd", "map_Ks", "map_Ka"]:
if !parts[1] in paths:
paths.push_back(parts[1])
return paths
-# Try to find mtl path from obj path
+## Try to find mtl path from obj path
static func search_mtl_path(obj_path: String) -> String:
- var mtl_path := obj_path.get_base_dir().plus_file(
+ var mtl_path := obj_path.get_base_dir().path_join(
obj_path.get_file().rsplit(".", false, 1)[0] + ".mtl"
)
- var dir: Directory = Directory.new()
- if !dir.file_exists(mtl_path):
- mtl_path = obj_path.get_base_dir().plus_file(obj_path.get_file() + ".mtl")
- if !dir.file_exists(mtl_path):
+ if !FileAccess.file_exists(mtl_path):
+ mtl_path = obj_path.get_base_dir().path_join(obj_path.get_file() + ".mtl")
+ if !FileAccess.file_exists(mtl_path):
return ""
return mtl_path
@@ -90,11 +86,11 @@ static func search_mtl_path(obj_path: String) -> String:
static func _create_mtl(obj: String, textures: Dictionary) -> Dictionary:
var mats := {}
- var current_mat: SpatialMaterial = null
+ var current_mat: StandardMaterial3D = null
var lines := obj.split("\n", false)
for line in lines:
- var parts = line.split(" ", false)
+ var parts := line.split(" ", false)
match parts[0]:
"#":
# Comment
@@ -104,7 +100,7 @@ static func _create_mtl(obj: String, textures: Dictionary) -> Dictionary:
# Create a new material
if DEBUG:
print("Adding new material " + parts[1])
- current_mat = SpatialMaterial.new()
+ current_mat = StandardMaterial3D.new()
mats[parts[1]] = current_mat
"Ka":
# Ambient color
@@ -117,7 +113,7 @@ static func _create_mtl(obj: String, textures: Dictionary) -> Dictionary:
print("Setting material color " + str(current_mat.albedo_color))
_:
if parts[0] in ["map_Kd", "map_Ks", "map_Ka"]:
- var path = line.split(" ", false, 1)[1]
+ var path := line.split(" ", false, 1)[1]
if textures.has(path):
current_mat.albedo_texture = _create_texture(textures[path])
return mats
@@ -127,31 +123,29 @@ static func _get_image(mtl_filepath: String, tex_filename: String) -> Image:
if DEBUG:
print(" Debug: Mapping texture file " + tex_filename)
var texfilepath := tex_filename
- if tex_filename.is_rel_path():
- texfilepath = mtl_filepath.get_base_dir().plus_file(tex_filename)
+ if tex_filename.is_relative_path():
+ texfilepath = mtl_filepath.get_base_dir().path_join(tex_filename)
var filetype := texfilepath.get_extension()
if DEBUG:
print(" Debug: texture file path: " + texfilepath + " of type " + filetype)
- var img: Image = Image.new()
+ var img := Image.new()
img.load(texfilepath)
return img
-static func _create_texture(data: PoolByteArray) -> ImageTexture:
- var img: Image = Image.new()
- var tex: ImageTexture = ImageTexture.new()
+static func _create_texture(data: PackedByteArray) -> ImageTexture:
+ var img := Image.new()
img.load_png_from_buffer(data)
- tex.create_from_image(img)
- return tex
+ return ImageTexture.create_from_image(img)
static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
# Setup
var mesh := ArrayMesh.new()
- var vertices := PoolVector3Array()
- var normals := PoolVector3Array()
- var uvs := PoolVector2Array()
+ var vertices := PackedVector3Array()
+ var normals := PackedVector3Array()
+ var uvs := PackedVector2Array()
var faces := {}
var mat_name := "default"
@@ -160,7 +154,7 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
# Parse
var lines := obj.split("\n", false)
for line in lines:
- var parts = line.split(" ", false)
+ var parts := line.split(" ", false)
match parts[0]:
"#":
# Comment
@@ -168,15 +162,15 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
pass
"v":
# Vertex
- var n_v = Vector3(float(parts[1]), float(parts[2]), float(parts[3]))
+ var n_v := Vector3(float(parts[1]), float(parts[2]), float(parts[3]))
vertices.append(n_v)
"vn":
# Normal
- var n_vn = Vector3(float(parts[1]), float(parts[2]), float(parts[3]))
+ var n_vn := Vector3(float(parts[1]), float(parts[2]), float(parts[3]))
normals.append(n_vn)
"vt":
# UV
- var n_uv = Vector2(float(parts[1]), 1 - float(parts[2]))
+ var n_uv := Vector2(float(parts[1]), 1 - float(parts[2]))
uvs.append(n_uv)
"usemtl":
# Material group
@@ -197,9 +191,9 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
# Face
if parts.size() == 4:
# Tri
- var face = {"v": [], "vt": [], "vn": []}
+ var face := {"v": [], "vt": [], "vn": []}
for map in parts:
- var vertices_index = map.split("/")
+ var vertices_index := map.split("/")
if str(vertices_index[0]) != "f":
face["v"].append(int(vertices_index[0]) - 1)
face["vt"].append(int(vertices_index[1]) - 1)
@@ -209,11 +203,11 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
faces[mat_name].append(face)
elif parts.size() > 4:
# Triangulate
- var points = []
+ var points: Array[PackedInt64Array] = []
for map in parts:
var vertices_index = map.split("/")
if str(vertices_index[0]) != "f":
- var point = []
+ var point: PackedInt64Array = []
point.append(int(vertices_index[0]) - 1)
point.append(int(vertices_index[1]) - 1)
if vertices_index.size() > 2:
@@ -222,9 +216,9 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
for i in points.size():
if i != 0:
var face = {"v": [], "vt": [], "vn": []}
- var point0 = points[0]
- var point1 = points[i]
- var point2 = points[i - 1]
+ var point0 := points[0]
+ var point1 := points[i]
+ var point2 := points[i - 1]
face["v"].append(point0[0])
face["v"].append(point2[0])
face["v"].append(point1[0])
@@ -253,28 +247,28 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
)
# Mesh Assembler
- var st = SurfaceTool.new()
+ var st := SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
if !mats.has(matgroup):
- mats[matgroup] = SpatialMaterial.new()
+ mats[matgroup] = StandardMaterial3D.new()
st.set_material(mats[matgroup])
for face in faces[matgroup]:
if face["v"].size() == 3:
# Vertices
- var fan_v = PoolVector3Array()
+ var fan_v := PackedVector3Array()
fan_v.append(vertices[face["v"][0]])
fan_v.append(vertices[face["v"][2]])
fan_v.append(vertices[face["v"][1]])
# Normals
- var fan_vn = PoolVector3Array()
+ var fan_vn := PackedVector3Array()
if face["vn"].size() > 0:
fan_vn.append(normals[face["vn"][0]])
fan_vn.append(normals[face["vn"][2]])
fan_vn.append(normals[face["vn"][1]])
# Textures
- var fan_vt = PoolVector2Array()
+ var fan_vt := PackedVector2Array()
if face["vt"].size() > 0:
for k in [0, 2, 1]:
var f = face["vt"][k]
@@ -282,10 +276,12 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh:
var uv = uvs[f]
fan_vt.append(uv)
- st.add_triangle_fan(fan_v, fan_vt, PoolColorArray(), PoolVector2Array(), fan_vn, [])
+ st.add_triangle_fan(
+ fan_v, fan_vt, PackedColorArray(), PackedVector2Array(), fan_vn, []
+ )
mesh = st.commit(mesh)
for k in mesh.get_surface_count():
- var mat = mesh.surface_get_material(k)
+ var mat := mesh.surface_get_material(k)
mat_name = ""
for m in mats:
if mats[m] == mat:
diff --git a/src/Classes/PixelCel.gd b/src/Classes/PixelCel.gd
index dff5d835779..4d5507752ae 100644
--- a/src/Classes/PixelCel.gd
+++ b/src/Classes/PixelCel.gd
@@ -1,10 +1,11 @@
class_name PixelCel
extends BaseCel
-# A class for the properties of cels in PixelLayers.
-# The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel).
-# The "image" variable is where the image data of each cel are.
+## A class for the properties of cels in PixelLayers.
+## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel).
-var image: Image setget image_changed
+## This variable is where the image data of each cel are.
+var image: Image:
+ set = image_changed
func _init(_image := Image.new(), _opacity := 1.0, _image_texture: ImageTexture = null) -> void:
@@ -12,14 +13,14 @@ func _init(_image := Image.new(), _opacity := 1.0, _image_texture: ImageTexture
image_texture = _image_texture
else:
image_texture = ImageTexture.new()
- self.image = _image # Set image and call setter
+ image = _image # Set image and call setter
opacity = _opacity
func image_changed(value: Image) -> void:
image = value
if !image.is_empty():
- image_texture.create_from_image(image, 0)
+ image_texture = ImageTexture.create_from_image(image)
func get_content():
@@ -30,21 +31,21 @@ func set_content(content, texture: ImageTexture = null) -> void:
image = content
if is_instance_valid(texture):
image_texture = texture
- if image_texture.get_size() != image.get_size():
- image_texture.create_from_image(image, 0)
+ if image_texture.get_image().get_size() != image.get_size():
+ image_texture = ImageTexture.create_from_image(image)
else:
- image_texture.create_from_image(image, 0)
+ image_texture = ImageTexture.create_from_image(image)
func create_empty_content():
- var empty_image := Image.new()
- empty_image.create(image.get_size().x, image.get_size().y, false, Image.FORMAT_RGBA8)
+ var empty_image := Image.create(
+ image.get_size().x, image.get_size().y, false, Image.FORMAT_RGBA8
+ )
return empty_image
func copy_content():
- var copy_image := Image.new()
- copy_image.create_from_data(
+ var copy_image := Image.create_from_data(
image.get_width(), image.get_height(), false, Image.FORMAT_RGBA8, image.get_data()
)
return copy_image
@@ -55,22 +56,24 @@ func get_image() -> Image:
func update_texture() -> void:
- image_texture.set_data(image)
- .update_texture()
+ image_texture.set_image(image)
+ super.update_texture()
-func save_image_data_to_pxo(file: File) -> void:
+func save_image_data_to_pxo(file: FileAccess) -> void:
file.store_buffer(image.get_data())
-func load_image_data_from_pxo(file: File, project_size: Vector2) -> void:
+func load_image_data_from_pxo(file: FileAccess, project_size: Vector2i) -> void:
var buffer := file.get_buffer(project_size.x * project_size.y * 4)
- image.create_from_data(project_size.x, project_size.y, false, Image.FORMAT_RGBA8, buffer)
+ image = Image.create_from_data(
+ project_size.x, project_size.y, false, Image.FORMAT_RGBA8, buffer
+ )
image_changed(image)
func instantiate_cel_button() -> Node:
- return Global.pixel_cel_button_node.instance()
+ return Global.pixel_cel_button_node.instantiate()
func get_class_name() -> String:
diff --git a/src/Classes/PixelLayer.gd b/src/Classes/PixelLayer.gd
index 6e6915ea0de..6efc7ae626f 100644
--- a/src/Classes/PixelLayer.gd
+++ b/src/Classes/PixelLayer.gd
@@ -1,9 +1,9 @@
class_name PixelLayer
extends BaseLayer
-# A class for standard pixel layer properties.
+## A class for standard pixel layer properties.
-func _init(_project, _name := "") -> void:
+func _init(_project: Project, _name := "") -> void:
project = _project
name = _name
@@ -12,14 +12,14 @@ func _init(_project, _name := "") -> void:
func serialize() -> Dictionary:
- var dict := .serialize()
+ var dict := super.serialize()
dict["type"] = get_layer_type()
dict["new_cels_linked"] = new_cels_linked
return dict
func deserialize(dict: Dictionary) -> void:
- .deserialize(dict)
+ super.deserialize(dict)
new_cels_linked = dict.new_cels_linked
@@ -28,8 +28,7 @@ func get_layer_type() -> int:
func new_empty_cel() -> BaseCel:
- var image := Image.new()
- image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
return PixelCel.new(image)
@@ -38,4 +37,4 @@ func can_layer_get_drawn() -> bool:
func instantiate_layer_button() -> Node:
- return Global.pixel_layer_button_node.instance()
+ return Global.pixel_layer_button_node.instantiate()
diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd
index eb25c63a79e..3a3caf56541 100644
--- a/src/Classes/Project.gd
+++ b/src/Classes/Project.gd
@@ -1,65 +1,81 @@
# gdlint: ignore=max-public-methods
class_name Project
-extends Reference
-# A class for project properties.
-
-var name := "" setget _name_changed
-var size: Vector2 setget _size_changed
+extends RefCounted
+## A class for project properties.
+
+var name := "":
+ set(value):
+ name = value
+ if Global.tabs.tab_count < Global.tabs.current_tab:
+ Global.tabs.set_tab_title(Global.tabs.current_tab, name)
+var size: Vector2i:
+ set = _size_changed
var undo_redo := UndoRedo.new()
var tiles: Tiles
-var undos := 0 # The number of times we added undo properties
-var can_undo = true
+var undos := 0 ## The number of times we added undo properties
+var can_undo := true
var fill_color := Color(0)
-var has_changed := false setget _has_changed_changed
+var has_changed := false:
+ set(value):
+ has_changed = value
+ if value:
+ Global.tabs.set_tab_title(Global.tabs.current_tab, name + "(*)")
+ else:
+ Global.tabs.set_tab_title(Global.tabs.current_tab, name)
# frames and layers Arrays should generally only be modified directly when
# opening/creating a project. When modifying the current project, use
# the add/remove/move/swap_frames/layers methods
-var frames := [] # Array of Frames (that contain Cels)
-var layers := [] # Array of Layers
+var frames: Array[Frame] = []
+var layers: Array[BaseLayer] = []
var current_frame := 0
var current_layer := 0
var selected_cels := [[0, 0]] # Array of Arrays of 2 integers (frame & layer)
-var animation_tags := [] setget _animation_tags_changed # Array of AnimationTags
-var guides := [] # Array of Guides
-var brushes := [] # Array of Images
-var reference_images := [] # Array of ReferenceImages
+var animation_tags: Array[AnimationTag] = []:
+ set = _animation_tags_changed
+var guides: Array[Guide] = []
+var brushes: Array[Image] = []
+var reference_images: Array[ReferenceImage] = []
var vanishing_points := [] # Array of Vanishing Points
var fps := 6.0
-var x_symmetry_point
-var y_symmetry_point
+var x_symmetry_point: float
+var y_symmetry_point: float
var x_symmetry_axis := SymmetryGuide.new()
var y_symmetry_axis := SymmetryGuide.new()
var selection_map := SelectionMap.new()
# This is useful for when the selection is outside of the canvas boundaries,
# on the left and/or above (negative coords)
-var selection_offset := Vector2.ZERO setget _selection_offset_changed
+var selection_offset := Vector2i.ZERO:
+ set(value):
+ selection_offset = value
+ Global.canvas.selection.marching_ants_outline.offset = selection_offset
var has_selection := false
# For every camera (currently there are 3)
-var cameras_rotation := [0.0, 0.0, 0.0] # Array of float
-var cameras_zoom := [Vector2(0.15, 0.15), Vector2(0.15, 0.15), Vector2(0.15, 0.15)]
-var cameras_offset := [Vector2.ZERO, Vector2.ZERO, Vector2.ZERO]
-var cameras_zoom_max := [Vector2.ONE, Vector2.ONE, Vector2.ONE]
+var cameras_rotation: PackedFloat32Array = [0.0, 0.0, 0.0]
+var cameras_zoom: PackedVector2Array = [
+ Vector2(0.15, 0.15), Vector2(0.15, 0.15), Vector2(0.15, 0.15)
+]
+var cameras_offset: PackedVector2Array = [Vector2.ZERO, Vector2.ZERO, Vector2.ZERO]
# Export directory path and export file name
var directory_path := ""
var file_name := "untitled"
-var file_format: int = Export.FileFormat.PNG
+var file_format := Export.FileFormat.PNG
var was_exported := false
var export_overwrite := false
-var animation_tag_node = preload("res://src/UI/Timeline/AnimationTagUI.tscn")
+var animation_tag_node := preload("res://src/UI/Timeline/AnimationTagUI.tscn")
-func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> void:
+func _init(_frames: Array[Frame] = [], _name := tr("untitled"), _size := Vector2i(64, 64)) -> void:
frames = _frames
name = _name
size = _size
tiles = Tiles.new(size)
- selection_map.create(size.x, size.y, false, Image.FORMAT_LA8)
+ selection_map.copy_from(Image.create(size.x, size.y, false, Image.FORMAT_LA8))
Global.tabs.add_tab(name)
OpenSave.current_save_paths.append("")
@@ -80,7 +96,7 @@ func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) ->
y_symmetry_axis.add_point(Vector2(x_symmetry_point / 2 + 0.5, 19999))
Global.canvas.add_child(y_symmetry_axis)
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
directory_path = "user://"
else:
directory_path = Global.config_cache.get_value(
@@ -130,7 +146,7 @@ func new_empty_frame() -> Frame:
var frame := Frame.new()
var bottom_layer := true
for l in layers: # Create as many cels as there are layers
- var cel: BaseCel = l.new_empty_cel()
+ var cel := l.new_empty_cel()
if cel is PixelCel and bottom_layer and fill_color.a > 0:
cel.image.fill(fill_color)
frame.cels.append(cel)
@@ -143,20 +159,15 @@ func get_current_cel() -> BaseCel:
func selection_map_changed() -> void:
- var image_texture := ImageTexture.new()
+ var image_texture: ImageTexture
has_selection = !selection_map.is_invisible()
if has_selection:
- image_texture.create_from_image(selection_map, 0)
+ image_texture = ImageTexture.create_from_image(selection_map)
Global.canvas.selection.marching_ants_outline.texture = image_texture
var edit_menu_popup: PopupMenu = Global.top_menu_container.edit_menu_button.get_popup()
edit_menu_popup.set_item_disabled(Global.EditMenu.NEW_BRUSH, !has_selection)
-func _selection_offset_changed(value: Vector2) -> void:
- selection_offset = value
- Global.canvas.selection.marching_ants_outline.offset = selection_offset
-
-
func change_project() -> void:
Global.animation_timeline.project_changed()
@@ -168,8 +179,7 @@ func change_project() -> void:
Global.move_right_frame_button, frames.size() == 1 or current_frame == frames.size() - 1
)
toggle_layer_buttons()
-
- self.animation_tags = animation_tags
+ animation_tags = animation_tags
# Change the guides
for guide in Global.canvas.get_children():
@@ -189,22 +199,17 @@ func change_project() -> void:
for brush in brushes:
Brushes.add_project_brush(brush)
- Global.canvas.update()
- Global.canvas.grid.update()
- Global.canvas.tile_mode.update()
Global.transparent_checker.update_rect()
Global.animation_timeline.fps_spinbox.value = fps
- Global.horizontal_ruler.update()
- Global.vertical_ruler.update()
Global.references_panel.project_changed()
Global.perspective_editor.update_points()
Global.cursor_position_label.text = "[%sร%s]" % [size.x, size.y]
- Global.window_title = "%s - Pixelorama %s" % [name, Global.current_version]
+ Global.main_window.title = "%s - Pixelorama %s" % [name, Global.current_version]
if has_changed:
- Global.window_title = Global.window_title + "(*)"
+ Global.main_window.title = Global.main_window.title + "(*)"
- var save_path = OpenSave.current_save_paths[Global.current_project_index]
+ var save_path := OpenSave.current_save_paths[Global.current_project_index]
if save_path != "":
Global.open_sprites_dialog.current_path = save_path
Global.save_sprites_dialog.current_path = save_path
@@ -236,35 +241,18 @@ func change_project() -> void:
selection_map_changed()
Global.canvas.selection.big_bounding_rectangle = selection_map.get_used_rect()
Global.canvas.selection.big_bounding_rectangle.position += selection_offset
- Global.canvas.selection.update()
+ Global.canvas.selection.queue_redraw()
var edit_menu_popup: PopupMenu = Global.top_menu_container.edit_menu_button.get_popup()
edit_menu_popup.set_item_disabled(Global.EditMenu.NEW_BRUSH, !has_selection)
var i := 0
for camera in Global.cameras:
- camera.zoom_max = cameras_zoom_max[i]
- if camera == Global.camera_preview:
- Global.preview_zoom_slider.disconnect(
- "value_changed",
- Global.canvas_preview_container,
- "_on_PreviewZoomSlider_value_changed"
- )
- Global.preview_zoom_slider.min_value = -camera.zoom_max.x
- Global.preview_zoom_slider.connect(
- "value_changed",
- Global.canvas_preview_container,
- "_on_PreviewZoomSlider_value_changed"
- )
-
- if camera == Global.camera:
- camera.set_zoom_max_value()
camera.rotation = cameras_rotation[i]
camera.zoom = cameras_zoom[i]
camera.offset = cameras_offset[i]
- camera.emit_signal("rotation_changed")
- camera.emit_signal("zoom_changed")
+ camera.rotation_changed.emit()
+ camera.zoom_changed.emit()
i += 1
- Global.tile_mode_offset_dialog.change_mask()
func serialize() -> Dictionary:
@@ -275,13 +263,16 @@ func serialize() -> Dictionary:
var tag_data := []
for tag in animation_tags:
- tag_data.append(
- {
- "name": tag.name,
- "color": tag.color.to_html(),
- "from": tag.from,
- "to": tag.to,
- }
+ (
+ tag_data
+ . append(
+ {
+ "name": tag.name,
+ "color": tag.color.to_html(),
+ "from": tag.from,
+ "to": tag.to,
+ }
+ )
)
var guide_data := []
@@ -370,7 +361,7 @@ func deserialize(dict: Dictionary) -> void:
var frame_i := 0
for frame in dict.frames:
- var cels := []
+ var cels: Array[BaseCel] = []
var cel_i := 0
for cel in frame.cels:
match int(dict.layers[cel_i].get("type", Global.LayerTypes.PIXEL)):
@@ -403,7 +394,7 @@ func deserialize(dict: Dictionary) -> void:
if dict.has("tags"):
for tag in dict.tags:
animation_tags.append(AnimationTag.new(tag.name, Color(tag.color), tag.from, tag.to))
- self.animation_tags = animation_tags
+ animation_tags = animation_tags
if dict.has("guides"):
for g in dict.guides:
var guide := Guide.new()
@@ -425,14 +416,14 @@ func deserialize(dict: Dictionary) -> void:
Global.canvas.add_child(ri)
if dict.has("vanishing_points"):
vanishing_points = dict.vanishing_points
- Global.perspective_editor.update()
+ Global.perspective_editor.queue_redraw()
if dict.has("symmetry_points"):
x_symmetry_point = dict.symmetry_points[0]
y_symmetry_point = dict.symmetry_points[1]
for point in x_symmetry_axis.points.size():
- x_symmetry_axis.points[point].y = floor(y_symmetry_point / 2 + 1)
+ x_symmetry_axis.points[point].y = floorf(y_symmetry_point / 2 + 1)
for point in y_symmetry_axis.points.size():
- y_symmetry_axis.points[point].x = floor(x_symmetry_point / 2 + 1)
+ y_symmetry_axis.points[point].x = floorf(x_symmetry_point / 2 + 1)
if dict.has("export_directory_path"):
directory_path = dict.export_directory_path
if dict.has("export_file_name"):
@@ -459,20 +450,18 @@ func _deserialize_metadata(object: Object, dict: Dictionary) -> void:
object.set_meta(meta, metadata[meta])
-func _name_changed(value: String) -> void:
- name = value
- Global.tabs.set_tab_title(Global.tabs.current_tab, name)
-
-
-func _size_changed(value: Vector2) -> void:
+func _size_changed(value: Vector2i) -> void:
+ if not is_instance_valid(tiles):
+ size = value
+ return
if size.x != 0:
- tiles.x_basis = (tiles.x_basis * value.x / size.x).round()
+ tiles.x_basis = tiles.x_basis * value.x / size.x
else:
- tiles.x_basis = Vector2(value.x, 0)
+ tiles.x_basis = Vector2i(value.x, 0)
if size.y != 0:
- tiles.y_basis = (tiles.y_basis * value.y / size.y).round()
+ tiles.y_basis = tiles.y_basis * value.y / size.y
else:
- tiles.y_basis = Vector2(0, value.y)
+ tiles.y_basis = Vector2i(0, value.y)
tiles.tile_size = value
Global.tile_mode_offset_dialog.change_mask()
size = value
@@ -488,34 +477,34 @@ func change_cel(new_frame: int, new_layer := -1) -> void:
# Unpress all buttons
for i in frames.size():
var frame_button: BaseButton = Global.frame_hbox.get_child(i)
- frame_button.pressed = false # Unpress all frame buttons
+ frame_button.button_pressed = false # Unpress all frame buttons
for cel_hbox in Global.cel_vbox.get_children():
if i < cel_hbox.get_child_count():
- cel_hbox.get_child(i).pressed = false # Unpress all cel buttons
+ cel_hbox.get_child(i).button_pressed = false # Unpress all cel buttons
for layer_button in Global.layer_vbox.get_children():
- layer_button.pressed = false # Unpress all layer buttons
+ layer_button.button_pressed = false # Unpress all layer buttons
- if selected_cels.empty():
+ if selected_cels.is_empty():
selected_cels.append([new_frame, new_layer])
for cel in selected_cels: # Press selected buttons
var frame: int = cel[0]
var layer: int = cel[1]
if frame < Global.frame_hbox.get_child_count():
var frame_button: BaseButton = Global.frame_hbox.get_child(frame)
- frame_button.pressed = true # Press selected frame buttons
+ frame_button.button_pressed = true # Press selected frame buttons
var layer_vbox_child_count: int = Global.layer_vbox.get_child_count()
if layer < layer_vbox_child_count:
var layer_button = Global.layer_vbox.get_child(layer_vbox_child_count - 1 - layer)
- layer_button.pressed = true # Press selected layer buttons
+ layer_button.button_pressed = true # Press selected layer buttons
var cel_vbox_child_count: int = Global.cel_vbox.get_child_count()
if layer < cel_vbox_child_count:
var cel_hbox: Container = Global.cel_vbox.get_child(cel_vbox_child_count - 1 - layer)
if frame < cel_hbox.get_child_count():
var cel_button: BaseButton = cel_hbox.get_child(frame)
- cel_button.pressed = true # Press selected cel buttons
+ cel_button.button_pressed = true # Press selected cel buttons
if new_frame != current_frame: # If the frame has changed
current_frame = new_frame
@@ -529,9 +518,9 @@ func change_cel(new_frame: int, new_layer := -1) -> void:
if current_frame < frames.size(): # Set opacity slider
var cel_opacity: float = frames[current_frame].cels[current_layer].opacity
Global.layer_opacity_slider.value = cel_opacity * 100
- Global.canvas.update()
+ Global.canvas.queue_redraw()
Global.transparent_checker.update_rect()
- Global.emit_signal("cel_changed")
+ Global.cel_changed.emit()
func toggle_frame_buttons() -> void:
@@ -543,7 +532,7 @@ func toggle_frame_buttons() -> void:
func toggle_layer_buttons() -> void:
- if layers.empty() or current_layer >= layers.size():
+ if layers.is_empty() or current_layer >= layers.size():
return
var child_count: int = layers[current_layer].get_child_count(true)
@@ -567,30 +556,30 @@ func toggle_layer_buttons() -> void:
)
-func _animation_tags_changed(value: Array) -> void:
+func _animation_tags_changed(value: Array[AnimationTag]) -> void:
animation_tags = value
for child in Global.tag_container.get_children():
child.queue_free()
for tag in animation_tags:
var tag_base_size = Global.animation_timeline.cel_size + 4
- var tag_c: Container = animation_tag_node.instance()
+ var tag_c: Container = animation_tag_node.instantiate()
Global.tag_container.add_child(tag_c)
tag_c.tag = tag
- var tag_position: int = Global.tag_container.get_child_count() - 1
+ var tag_position := Global.tag_container.get_child_count() - 1
Global.tag_container.move_child(tag_c, tag_position)
tag_c.get_node("Label").text = tag.name
tag_c.get_node("Label").modulate = tag.color
tag_c.get_node("Line2D").default_color = tag.color
# Added 1 to answer to get starting position of next cel
- tag_c.rect_position.x = (tag.from - 1) * tag_base_size + 1
- var tag_size: int = tag.to - tag.from
+ tag_c.position.x = (tag.from - 1) * tag_base_size + 1
+ var tag_size := tag.to - tag.from
# We dont need the 4 pixels at the end of last cel
- tag_c.rect_min_size.x = (tag_size + 1) * tag_base_size - 8
- tag_c.rect_position.y = 1 # To make top line of tag visible
- tag_c.get_node("Line2D").points[2] = Vector2(tag_c.rect_min_size.x, 0)
- tag_c.get_node("Line2D").points[3] = Vector2(tag_c.rect_min_size.x, 32)
+ tag_c.custom_minimum_size.x = (tag_size + 1) * tag_base_size - 8
+ tag_c.position.y = 1 # To make top line of tag visible
+ tag_c.get_node("Line2D").points[2] = Vector2(tag_c.custom_minimum_size.x, 0)
+ tag_c.get_node("Line2D").points[3] = Vector2(tag_c.custom_minimum_size.x, 32)
_set_timeline_first_and_last_frames()
@@ -608,14 +597,6 @@ func _set_timeline_first_and_last_frames() -> void:
Global.animation_timeline.last_frame = min(frames.size() - 1, tag.to - 1)
-func _has_changed_changed(value: bool) -> void:
- has_changed = value
- if value:
- Global.tabs.set_tab_title(Global.tabs.current_tab, name + "(*)")
- else:
- Global.tabs.set_tab_title(Global.tabs.current_tab, name)
-
-
func is_empty() -> bool:
return (
frames.size() == 1
@@ -627,9 +608,9 @@ func is_empty() -> bool:
func can_pixel_get_drawn(
- pixel: Vector2,
+ pixel: Vector2i,
image: SelectionMap = selection_map,
- selection_position: Vector2 = Global.canvas.selection.big_bounding_rectangle.position
+ selection_position: Vector2i = Global.canvas.selection.big_bounding_rectangle.position
) -> bool:
if pixel.x < 0 or pixel.y < 0 or pixel.x >= size.x or pixel.y >= size.y:
return false
@@ -683,10 +664,10 @@ func remove_frames(indices: Array) -> void: # indices should be in ascending or
cel.on_remove()
if cel.link_set != null:
cel.link_set["cels"].erase(cel)
- if cel.link_set["cels"].empty():
+ if cel.link_set["cels"].is_empty():
layers[l].cel_link_sets.erase(cel.link_set)
# Remove frame
- frames.remove(indices[i] - i)
+ frames.remove_at(indices[i] - i)
Global.animation_timeline.project_frame_removed(indices[i] - i)
_update_frame_ui()
@@ -694,8 +675,8 @@ func remove_frames(indices: Array) -> void: # indices should be in ascending or
func move_frame(from_index: int, to_index: int) -> void:
Global.canvas.selection.transform_content_confirm()
selected_cels.clear()
- var frame = frames[from_index]
- frames.remove(from_index)
+ var frame := frames[from_index]
+ frames.remove_at(from_index)
Global.animation_timeline.project_frame_removed(from_index)
frames.insert(to_index, frame)
Global.animation_timeline.project_frame_added(to_index)
@@ -705,7 +686,7 @@ func move_frame(from_index: int, to_index: int) -> void:
func swap_frame(a_index: int, b_index: int) -> void:
Global.canvas.selection.transform_content_confirm()
selected_cels.clear()
- var temp: Frame = frames[a_index]
+ var temp := frames[a_index]
frames[a_index] = frames[b_index]
frames[b_index] = temp
Global.animation_timeline.project_frame_removed(a_index)
@@ -717,11 +698,10 @@ func swap_frame(a_index: int, b_index: int) -> void:
func reverse_frames(frame_indices: Array) -> void:
Global.canvas.selection.transform_content_confirm()
-# warning-ignore:integer_division
for i in frame_indices.size() / 2:
var index: int = frame_indices[i]
var reverse_index: int = frame_indices[-i - 1]
- var temp: Frame = frames[index]
+ var temp := frames[index]
frames[index] = frames[reverse_index]
frames[reverse_index] = temp
Global.animation_timeline.project_frame_removed(index)
@@ -749,10 +729,10 @@ func remove_layers(indices: Array) -> void:
selected_cels.clear()
for i in indices.size():
# With each removed index, future indices need to be lowered, so subtract by i
- layers.remove(indices[i] - i)
+ layers.remove_at(indices[i] - i)
for frame in frames:
frame.cels[indices[i] - i].on_remove()
- frame.cels.remove(indices[i] - i)
+ frame.cels.remove_at(indices[i] - i)
Global.animation_timeline.project_layer_removed(indices[i] - i)
_update_layer_ui()
@@ -843,7 +823,7 @@ func move_cel(from_frame: int, to_frame: int, layer: int) -> void:
func swap_cel(a_frame: int, a_layer: int, b_frame: int, b_layer: int) -> void:
Global.canvas.selection.transform_content_confirm()
selected_cels.clear()
- var temp: BaseCel = frames[a_frame].cels[a_layer]
+ var temp := frames[a_frame].cels[a_layer]
frames[a_frame].cels[a_layer] = frames[b_frame].cels[b_layer]
frames[b_frame].cels[b_layer] = temp
Global.animation_timeline.project_cel_removed(a_frame, a_layer)
diff --git a/src/Classes/SelectionMap.gd b/src/Classes/SelectionMap.gd
index 117d1e5aab7..3d92ea00238 100644
--- a/src/Classes/SelectionMap.gd
+++ b/src/Classes/SelectionMap.gd
@@ -1,33 +1,29 @@
class_name SelectionMap
extends Image
-var invert_shader: Shader = preload("res://src/Shaders/Invert.shader")
+var invert_shader := preload("res://src/Shaders/Invert.gdshader")
-func is_pixel_selected(pixel: Vector2) -> bool:
+func is_pixel_selected(pixel: Vector2i) -> bool:
if pixel.x < 0 or pixel.y < 0 or pixel.x >= get_width() or pixel.y >= get_height():
return false
- lock()
var selected: bool = get_pixelv(pixel).a > 0
- unlock()
return selected
-func get_nearest_position(pixel: Vector2) -> Vector2:
+func get_nearest_position(pixel: Vector2i) -> Vector2i:
if Global.canvas.selection.flag_tilemode:
# functions more or less the same way as the tilemode
- var size = Global.current_project.size
- var selection_rect = get_used_rect()
- var start_x = selection_rect.position.x - selection_rect.size.x
- var end_x = selection_rect.position.x + 2 * selection_rect.size.x
- var start_y = selection_rect.position.y - selection_rect.size.y
- var end_y = selection_rect.position.y + 2 * selection_rect.size.y
+ var size := Global.current_project.size
+ var selection_rect := get_used_rect()
+ var start_x := selection_rect.position.x - selection_rect.size.x
+ var end_x := selection_rect.position.x + 2 * selection_rect.size.x
+ var start_y := selection_rect.position.y - selection_rect.size.y
+ var end_y := selection_rect.position.y + 2 * selection_rect.size.y
for x in range(start_x, end_x, selection_rect.size.x):
for y in range(start_y, end_y, selection_rect.size.y):
- var test_image = Image.new()
- test_image.create(size.x, size.y, false, Image.FORMAT_LA8)
+ var test_image := Image.create(size.x, size.y, false, Image.FORMAT_LA8)
test_image.blit_rect(self, selection_rect, Vector2(x, y))
- test_image.lock()
if (
pixel.x < 0
or pixel.y < 0
@@ -36,45 +32,42 @@ func get_nearest_position(pixel: Vector2) -> Vector2:
):
continue
var selected: bool = test_image.get_pixelv(pixel).a > 0
- test_image.unlock()
if selected:
- var offset = Vector2(x, y) - selection_rect.position
+ var offset := Vector2i(x, y) - selection_rect.position
return offset
- return Vector2.ZERO
+ return Vector2i.ZERO
else:
- return Vector2.ZERO
+ return Vector2i.ZERO
-func get_point_in_tile_mode(pixel: Vector2) -> Array:
- var result = []
+func get_point_in_tile_mode(pixel: Vector2i) -> Array[Vector2i]:
+ var result: Array[Vector2i] = []
if Global.canvas.selection.flag_tilemode:
- var selection_rect = get_used_rect()
- var start_x = selection_rect.position.x - selection_rect.size.x
- var end_x = selection_rect.position.x + 2 * selection_rect.size.x
- var start_y = selection_rect.position.y - selection_rect.size.y
- var end_y = selection_rect.position.y + 2 * selection_rect.size.y
+ var selection_rect := get_used_rect()
+ var start_x := selection_rect.position.x - selection_rect.size.x
+ var end_x := selection_rect.position.x + 2 * selection_rect.size.x
+ var start_y := selection_rect.position.y - selection_rect.size.y
+ var end_y := selection_rect.position.y + 2 * selection_rect.size.y
for x in range(start_x, end_x, selection_rect.size.x):
for y in range(start_y, end_y, selection_rect.size.y):
- result.append(Vector2(x, y) + pixel - selection_rect.position)
+ result.append(Vector2i(x, y) + pixel - selection_rect.position)
else:
result.append(pixel)
return result
-func get_canon_position(position) -> Vector2:
+func get_canon_position(position: Vector2i) -> Vector2i:
if Global.canvas.selection.flag_tilemode:
return position - get_nearest_position(position)
else:
return position
-func select_pixel(pixel: Vector2, select := true) -> void:
- lock()
+func select_pixel(pixel: Vector2i, select := true) -> void:
if select:
set_pixelv(pixel, Color(1, 1, 1, 1))
else:
set_pixelv(pixel, Color(0))
- unlock()
func select_all() -> void:
@@ -92,20 +85,20 @@ func invert() -> void:
self.convert(Image.FORMAT_LA8)
-func move_bitmap_values(project, move_offset := true) -> void:
- var size: Vector2 = project.size
+func move_bitmap_values(project: Project, move_offset := true) -> void:
+ var size := project.size
var selection_node = Global.canvas.selection
- var selection_position: Vector2 = selection_node.big_bounding_rectangle.position
- var selection_end: Vector2 = selection_node.big_bounding_rectangle.end
+ var selection_position: Vector2i = selection_node.big_bounding_rectangle.position
+ var selection_end: Vector2i = selection_node.big_bounding_rectangle.end
var selection_rect := get_used_rect()
- var smaller_image := get_rect(selection_rect)
+ var smaller_image := get_region(selection_rect)
clear()
var dst := selection_position
- var x_diff = selection_end.x - size.x
- var y_diff = selection_end.y - size.y
- var nw = max(size.x, size.x + x_diff)
- var nh = max(size.y, size.y + y_diff)
+ var x_diff := selection_end.x - size.x
+ var y_diff := selection_end.y - size.y
+ var nw := maxi(size.x, size.x + x_diff)
+ var nh := maxi(size.y, size.y + y_diff)
if selection_position.x < 0:
nw -= selection_position.x
@@ -130,19 +123,21 @@ func move_bitmap_values(project, move_offset := true) -> void:
nh = size.y
crop(nw, nh)
- blit_rect(smaller_image, Rect2(Vector2.ZERO, Vector2(nw, nh)), dst)
+ blit_rect(smaller_image, Rect2i(Vector2i.ZERO, Vector2i(nw, nh)), dst)
-func resize_bitmap_values(project, new_size: Vector2, flip_x: bool, flip_y: bool) -> void:
- var size: Vector2 = project.size
+func resize_bitmap_values(
+ project: Project, new_size: Vector2i, flip_hor: bool, flip_ver: bool
+) -> void:
+ var size := project.size
var selection_node: Node2D = Global.canvas.selection
- var selection_position: Vector2 = selection_node.big_bounding_rectangle.position
+ var selection_position: Vector2i = selection_node.big_bounding_rectangle.position
var dst := selection_position
var new_bitmap_size := size
- new_bitmap_size.x = max(size.x, abs(selection_position.x) + new_size.x)
- new_bitmap_size.y = max(size.y, abs(selection_position.y) + new_size.y)
+ new_bitmap_size.x = maxi(size.x, absi(selection_position.x) + new_size.x)
+ new_bitmap_size.y = maxi(size.y, absi(selection_position.y) + new_size.y)
var selection_rect := get_used_rect()
- var smaller_image := get_rect(selection_rect)
+ var smaller_image := get_region(selection_rect)
if selection_position.x <= 0:
project.selection_offset.x = selection_position.x
dst.x = 0
@@ -155,10 +150,10 @@ func resize_bitmap_values(project, new_size: Vector2, flip_x: bool, flip_y: bool
project.selection_offset.y = 0
clear()
smaller_image.resize(new_size.x, new_size.y, Image.INTERPOLATE_NEAREST)
- if flip_x:
+ if flip_hor:
smaller_image.flip_x()
- if flip_y:
+ if flip_ver:
smaller_image.flip_y()
if new_bitmap_size != size:
crop(new_bitmap_size.x, new_bitmap_size.y)
- blit_rect(smaller_image, Rect2(Vector2.ZERO, new_bitmap_size), dst)
+ blit_rect(smaller_image, Rect2i(Vector2i.ZERO, new_bitmap_size), dst)
diff --git a/src/Classes/ShaderImageEffect.gd b/src/Classes/ShaderImageEffect.gd
index 2746a545b2d..9988f1440a7 100644
--- a/src/Classes/ShaderImageEffect.gd
+++ b/src/Classes/ShaderImageEffect.gd
@@ -1,45 +1,49 @@
class_name ShaderImageEffect
-extends Reference
-# Helper class to generate image effects using shaders
+extends RefCounted
+## Helper class to generate image effects using shaders
+
signal done
-func generate_image(img: Image, shader: Shader, params: Dictionary, size: Vector2) -> void:
- img.unlock()
+func generate_image(img: Image, shader: Shader, params: Dictionary, size: Vector2i) -> void:
# duplicate shader before modifying code to avoid affecting original resource
shader = shader.duplicate()
shader.code = shader.code.replace("unshaded", "unshaded, blend_premul_alpha")
- var vp := VisualServer.viewport_create()
- var canvas := VisualServer.canvas_create()
- VisualServer.viewport_attach_canvas(vp, canvas)
- VisualServer.viewport_set_size(vp, size.x, size.y)
- VisualServer.viewport_set_disable_3d(vp, true)
- VisualServer.viewport_set_usage(vp, VisualServer.VIEWPORT_USAGE_2D)
- VisualServer.viewport_set_active(vp, true)
- VisualServer.viewport_set_transparent_background(vp, true)
+ var vp := RenderingServer.viewport_create()
+ var canvas := RenderingServer.canvas_create()
+ RenderingServer.viewport_attach_canvas(vp, canvas)
+ RenderingServer.viewport_set_size(vp, size.x, size.y)
+ RenderingServer.viewport_set_disable_3d(vp, true)
+ RenderingServer.viewport_set_active(vp, true)
+ RenderingServer.viewport_set_transparent_background(vp, true)
+ RenderingServer.viewport_set_default_canvas_item_texture_filter(
+ vp, RenderingServer.CANVAS_ITEM_TEXTURE_FILTER_NEAREST
+ )
- var ci_rid := VisualServer.canvas_item_create()
- VisualServer.viewport_set_canvas_transform(vp, canvas, Transform())
- VisualServer.canvas_item_set_parent(ci_rid, canvas)
- var texture := VisualServer.texture_create_from_image(img, 0)
- VisualServer.canvas_item_add_texture_rect(ci_rid, Rect2(Vector2.ZERO, size), texture)
+ var ci_rid := RenderingServer.canvas_item_create()
+ RenderingServer.viewport_set_canvas_transform(vp, canvas, Transform3D())
+ RenderingServer.canvas_item_set_parent(ci_rid, canvas)
+ var texture := RenderingServer.texture_2d_create(img)
+ RenderingServer.canvas_item_add_texture_rect(ci_rid, Rect2(Vector2.ZERO, size), texture)
- var mat_rid := VisualServer.material_create()
- VisualServer.material_set_shader(mat_rid, shader.get_rid())
- VisualServer.canvas_item_set_material(ci_rid, mat_rid)
+ var mat_rid := RenderingServer.material_create()
+ RenderingServer.material_set_shader(mat_rid, shader.get_rid())
+ RenderingServer.canvas_item_set_material(ci_rid, mat_rid)
for key in params:
- VisualServer.material_set_param(mat_rid, key, params[key])
+ var param = params[key]
+ if param is Texture2D:
+ RenderingServer.material_set_param(mat_rid, key, [param])
+ else:
+ RenderingServer.material_set_param(mat_rid, key, param)
- VisualServer.viewport_set_update_mode(vp, VisualServer.VIEWPORT_UPDATE_ONCE)
- VisualServer.viewport_set_vflip(vp, true)
- VisualServer.force_draw(false)
- var viewport_texture := Image.new()
- viewport_texture = VisualServer.texture_get_data(VisualServer.viewport_get_texture(vp))
- VisualServer.free_rid(vp)
- VisualServer.free_rid(canvas)
- VisualServer.free_rid(ci_rid)
- VisualServer.free_rid(mat_rid)
- VisualServer.free_rid(texture)
+ RenderingServer.viewport_set_update_mode(vp, RenderingServer.VIEWPORT_UPDATE_ONCE)
+ RenderingServer.force_draw(false)
+ var viewport_texture := RenderingServer.texture_2d_get(RenderingServer.viewport_get_texture(vp))
+ RenderingServer.free_rid(vp)
+ RenderingServer.free_rid(canvas)
+ RenderingServer.free_rid(ci_rid)
+ RenderingServer.free_rid(mat_rid)
+ RenderingServer.free_rid(texture)
viewport_texture.convert(Image.FORMAT_RGBA8)
img.copy_from(viewport_texture)
- emit_signal("done")
+ done.emit()
diff --git a/src/Classes/Tiles.gd b/src/Classes/Tiles.gd
index 3bc2142374e..c24b736491e 100644
--- a/src/Classes/Tiles.gd
+++ b/src/Classes/Tiles.gd
@@ -1,114 +1,103 @@
class_name Tiles
-extends Reference
+extends RefCounted
enum MODE { NONE, BOTH, X_AXIS, Y_AXIS }
-var mode: int = MODE.NONE
-var x_basis: Vector2
-var y_basis: Vector2
-var tile_size: Vector2
+var mode := MODE.NONE
+var x_basis: Vector2i
+var y_basis: Vector2i
+var tile_size: Vector2i
var tile_mask := Image.new()
var has_mask := false
-func _init(size: Vector2):
- x_basis = Vector2(size.x, 0)
- y_basis = Vector2(0, size.y)
+func _init(size: Vector2i):
+ x_basis = Vector2i(size.x, 0)
+ y_basis = Vector2i(0, size.y)
tile_size = size
- tile_mask.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8)
- tile_mask.fill(Color.white)
+ tile_mask = Image.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8)
+ tile_mask.fill(Color.WHITE)
-func get_bounding_rect() -> Rect2:
+func get_bounding_rect() -> Rect2i:
match mode:
MODE.BOTH:
var diagonal := x_basis + y_basis
var cross_diagonal := x_basis - y_basis
- var bounding_rect := Rect2(-diagonal, Vector2.ZERO)
+ var bounding_rect := Rect2i(-diagonal, Vector2.ZERO)
bounding_rect = bounding_rect.expand(diagonal)
bounding_rect = bounding_rect.expand(-cross_diagonal)
bounding_rect = bounding_rect.expand(cross_diagonal)
bounding_rect = bounding_rect.grow_individual(0, 0, tile_size.x, tile_size.y)
return bounding_rect
MODE.X_AXIS:
- var bounding_rect := Rect2(-x_basis, Vector2.ZERO)
+ var bounding_rect := Rect2i(-x_basis, Vector2.ZERO)
bounding_rect = bounding_rect.expand(x_basis)
bounding_rect = bounding_rect.grow_individual(0, 0, tile_size.x, tile_size.y)
return bounding_rect
MODE.Y_AXIS:
- var bounding_rect := Rect2(-y_basis, Vector2.ZERO)
+ var bounding_rect := Rect2i(-y_basis, Vector2.ZERO)
bounding_rect = bounding_rect.expand(y_basis)
bounding_rect = bounding_rect.grow_individual(0, 0, tile_size.x, tile_size.y)
return bounding_rect
_:
- return Rect2(Vector2.ZERO, tile_size)
+ return Rect2i(Vector2i.ZERO, tile_size)
-func get_nearest_tile(point: Vector2) -> Rect2:
- var positions = Global.canvas.tile_mode.get_tile_positions()
- positions.append(Vector2.ZERO)
+func get_nearest_tile(point: Vector2i) -> Rect2i:
+ var positions: Array[Vector2i] = Global.canvas.tile_mode.get_tile_positions()
+ positions.append(Vector2i.ZERO)
- var candidates := []
+ var candidates: Array[Rect2i] = []
for pos in positions:
- var test_rect = Rect2(pos, tile_size)
+ var test_rect := Rect2i(pos, tile_size)
if test_rect.has_point(point):
candidates.append(test_rect)
- if candidates.empty():
- return Rect2(Vector2.ZERO, tile_size)
+ if candidates.is_empty():
+ return Rect2i(Vector2i.ZERO, tile_size)
- var final := []
- tile_mask.lock()
+ var final: Array[Rect2i] = []
for candidate in candidates:
- var rel_pos = point - candidate.position
+ var rel_pos := point - candidate.position
if tile_mask.get_pixelv(rel_pos).a == 1.0:
final.append(candidate)
- tile_mask.unlock()
- if final.empty():
- return Rect2(Vector2.ZERO, tile_size)
- final.sort_custom(self, "sort_by_height")
+ if final.is_empty():
+ return Rect2i(Vector2i.ZERO, tile_size)
+ final.sort_custom(func(a: Rect2i, b: Rect2i): return a.position.y < b.position.y)
return final[0]
-func sort_by_height(a: Rect2, b: Rect2):
- if a.position.y > b.position.y:
- return false
- else:
- return true
-
-
-func get_canon_position(position: Vector2) -> Vector2:
+func get_canon_position(position: Vector2i) -> Vector2i:
if mode == MODE.NONE:
return position
- var nearest_tile = get_nearest_tile(position)
+ var nearest_tile := get_nearest_tile(position)
if nearest_tile.has_point(position):
position -= nearest_tile.position
return position
-func get_point_in_tiles(pixel: Vector2) -> Array:
- var positions = Global.canvas.tile_mode.get_tile_positions()
- positions.append(Vector2.ZERO)
- var result = []
+func get_point_in_tiles(pixel: Vector2i) -> Array[Vector2i]:
+ var positions: Array[Vector2i] = Global.canvas.tile_mode.get_tile_positions()
+ positions.append(Vector2i.ZERO)
+ var result: Array[Vector2i] = []
for pos in positions:
result.append(pos + pixel)
return result
-func has_point(point: Vector2) -> bool:
- var positions = Global.canvas.tile_mode.get_tile_positions()
- positions.append(Vector2.ZERO) # The central tile is included manually
- tile_mask.lock()
+func has_point(point: Vector2i) -> bool:
+ var positions: Array[Vector2i] = Global.canvas.tile_mode.get_tile_positions()
+ positions.append(Vector2i.ZERO) # The central tile is included manually
for tile_pos in positions:
- var test_rect = Rect2(tile_pos, tile_size)
- var rel_pos = point - tile_pos
+ var test_rect := Rect2i(tile_pos, tile_size)
+ var rel_pos := point - tile_pos
if test_rect.has_point(point) and tile_mask.get_pixelv(rel_pos).a == 1.0:
return true
- tile_mask.unlock()
return false
func reset_mask():
- tile_mask.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8)
- tile_mask.fill(Color.white)
+ tile_mask = Image.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8)
+ tile_mask.fill(Color.WHITE)
has_mask = false
diff --git a/src/Main.gd b/src/Main.gd
index 4ba23971b55..904b8c7f15e 100644
--- a/src/Main.gd
+++ b/src/Main.gd
@@ -3,39 +3,36 @@ extends Control
var opensprite_file_selected := false
var redone := false
var is_quitting_on_save := false
-var cursor_image: Texture = preload("res://assets/graphics/cursor.png")
+var cursor_image: Texture2D = preload("res://assets/graphics/cursor.png")
-onready var ui := $MenuAndUI/UI/DockableContainer
-onready var backup_confirmation: ConfirmationDialog = $Dialogs/BackupConfirmation
-onready var quit_dialog: ConfirmationDialog = $Dialogs/QuitDialog
-onready var quit_and_save_dialog: ConfirmationDialog = $Dialogs/QuitAndSaveDialog
-onready var left_cursor: Sprite = $LeftCursor
-onready var right_cursor: Sprite = $RightCursor
+@onready var ui := $MenuAndUI/UI/DockableContainer as DockableContainer
+@onready var backup_confirmation: ConfirmationDialog = $Dialogs/BackupConfirmation
+@onready var quit_dialog: ConfirmationDialog = $Dialogs/QuitDialog
+@onready var quit_and_save_dialog: ConfirmationDialog = $Dialogs/QuitAndSaveDialog
+@onready var left_cursor: Sprite2D = $LeftCursor
+@onready var right_cursor: Sprite2D = $RightCursor
func _init() -> void:
Global.shrink = _get_auto_display_scale()
- if OS.get_name() == "OSX":
- _use_osx_shortcuts()
func _ready() -> void:
- randomize()
get_tree().set_auto_accept_quit(false)
_setup_application_window_size()
- Global.window_title = tr("untitled") + " - Pixelorama " + Global.current_version
+ Global.main_window.title = tr("untitled") + " - Pixelorama " + Global.current_version
Global.current_project.layers.append(PixelLayer.new(Global.current_project))
Global.current_project.frames.append(Global.current_project.new_empty_frame())
Global.animation_timeline.project_changed()
Global.current_project.toggle_frame_buttons()
- Import.import_brushes(Global.directory_module.get_brushes_search_path_in_order())
- Import.import_patterns(Global.directory_module.get_patterns_search_path_in_order())
+ Import.import_brushes(Global.path_join_array(Global.data_directories, "Brushes"))
+ Import.import_patterns(Global.path_join_array(Global.data_directories, "Patterns"))
quit_and_save_dialog.add_button("Exit without saving", false, "ExitWithoutSaving")
- quit_and_save_dialog.get_ok().text = "Save & Exit"
+ quit_and_save_dialog.get_ok_button().text = "Save & Exit"
Global.open_sprites_dialog.current_dir = Global.config_cache.get_value(
"data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP)
@@ -56,7 +53,7 @@ func _ready() -> void:
var zstd_checkbox := CheckBox.new()
zstd_checkbox.name = "ZSTDCompression"
- zstd_checkbox.pressed = true
+ zstd_checkbox.button_pressed = true
zstd_checkbox.text = "Use ZSTD Compression"
zstd_checkbox.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
Global.save_sprites_dialog.get_vbox().add_child(zstd_checkbox)
@@ -64,7 +61,7 @@ func _ready() -> void:
_handle_backup()
_handle_cmdline_arguments()
- get_tree().connect("files_dropped", self, "_on_files_dropped")
+ get_tree().root.files_dropped.connect(_on_files_dropped)
if OS.get_name() == "Android":
OS.request_permissions()
@@ -76,18 +73,20 @@ func _input(event: InputEvent) -> void:
left_cursor.position = get_global_mouse_position() + Vector2(-32, 32)
right_cursor.position = get_global_mouse_position() + Vector2(32, 32)
- if event is InputEventKey and (event.scancode == KEY_ENTER or event.scancode == KEY_KP_ENTER):
- if get_focus_owner() is LineEdit:
- get_focus_owner().release_focus()
+ if event is InputEventKey and (event.keycode == KEY_ENTER or event.keycode == KEY_KP_ENTER):
+ if get_viewport().gui_get_focus_owner() is LineEdit:
+ get_viewport().gui_get_focus_owner().release_focus()
# Taken from https://github.com/godotengine/godot/blob/3.x/editor/editor_settings.cpp#L1474
func _get_auto_display_scale() -> float:
- if OS.get_name() == "OSX":
- return OS.get_screen_max_scale()
+ if OS.get_name() == "macOS":
+ return DisplayServer.screen_get_max_scale()
- var dpi := OS.get_screen_dpi()
- var smallest_dimension: int = min(OS.get_screen_size().x, OS.get_screen_size().y)
+ var dpi := DisplayServer.screen_get_dpi()
+ var smallest_dimension := mini(
+ DisplayServer.screen_get_size().x, DisplayServer.screen_get_size().y
+ )
if dpi >= 192 && smallest_dimension >= 1400:
return 2.0 # hiDPI display.
elif smallest_dimension >= 1700:
@@ -96,30 +95,33 @@ func _get_auto_display_scale() -> float:
func _setup_application_window_size() -> void:
- get_tree().set_screen_stretch(
- SceneTree.STRETCH_MODE_DISABLED,
- SceneTree.STRETCH_ASPECT_IGNORE,
- Vector2(1024, 576),
- Global.shrink
- )
+ var root := get_tree().root
+ root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE
+ root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
+ root.min_size = Vector2(1024, 576)
+ root.content_scale_factor = Global.shrink
set_custom_cursor()
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
return
# Set a minimum window size to prevent UI elements from collapsing on each other.
- OS.min_window_size = Vector2(1024, 576)
+ get_window().min_size = Vector2(1024, 576)
# Restore the window position/size if values are present in the configuration cache
if Global.config_cache.has_section_key("window", "screen"):
- OS.current_screen = Global.config_cache.get_value("window", "screen")
+ get_window().current_screen = Global.config_cache.get_value("window", "screen")
if Global.config_cache.has_section_key("window", "maximized"):
- OS.window_maximized = Global.config_cache.get_value("window", "maximized")
+ get_window().mode = (
+ Window.MODE_MAXIMIZED
+ if (Global.config_cache.get_value("window", "maximized"))
+ else Window.MODE_WINDOWED
+ )
- if !OS.window_maximized:
+ if !(get_window().mode == Window.MODE_MAXIMIZED):
if Global.config_cache.has_section_key("window", "position"):
- OS.window_position = Global.config_cache.get_value("window", "position")
+ get_window().position = Global.config_cache.get_value("window", "position")
if Global.config_cache.has_section_key("window", "size"):
- OS.window_size = Global.config_cache.get_value("window", "size")
+ get_window().size = Global.config_cache.get_value("window", "size")
func set_custom_cursor() -> void:
@@ -129,14 +131,12 @@ func set_custom_cursor() -> void:
if Global.shrink == 1.0:
Input.set_custom_mouse_cursor(cursor_image, Input.CURSOR_CROSS, Vector2(15, 15))
else:
- var cursor_data := cursor_image.get_data()
- cursor_data.resize(
- cursor_data.get_width() * Global.shrink, cursor_data.get_height() * Global.shrink, 0
- )
- var new_cursor_tex := ImageTexture.new()
- new_cursor_tex.create_from_image(cursor_data, 0)
+ var cursor_data := cursor_image.get_image()
+ var cursor_size := cursor_data.get_size() * Global.shrink
+ cursor_data.resize(cursor_size.x, cursor_size.y, Image.INTERPOLATE_NEAREST)
+ var cursor_tex := ImageTexture.create_from_image(cursor_data)
Input.set_custom_mouse_cursor(
- new_cursor_tex, Input.CURSOR_CROSS, Vector2(15, 15) * Global.shrink
+ cursor_tex, Input.CURSOR_CROSS, Vector2(15, 15) * Global.shrink
)
@@ -146,8 +146,8 @@ func _show_splash_screen() -> void:
if Global.config_cache.get_value("preferences", "startup"):
# Wait for the window to adjust itself, so the popup is correctly centered
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
$Dialogs/SplashDialog.popup_centered() # Splash screen
modulate = Color(0.5, 0.5, 0.5)
@@ -167,14 +167,11 @@ func _handle_backup() -> void:
backup_paths.append(Global.config_cache.get_value("backups", p_path))
# Temporatily stop autosave until user confirms backup
OpenSave.autosave_timer.stop()
- backup_confirmation.connect(
- "confirmed", self, "_on_BackupConfirmation_confirmed", [project_paths, backup_paths]
+ backup_confirmation.confirmed.connect(
+ _on_BackupConfirmation_confirmed.bind(project_paths, backup_paths)
)
- backup_confirmation.connect(
- "custom_action",
- self,
- "_on_BackupConfirmation_custom_action",
- [project_paths, backup_paths]
+ backup_confirmation.custom_action.connect(
+ _on_BackupConfirmation_custom_action.bind(project_paths, backup_paths)
)
backup_confirmation.popup_centered()
Global.can_draw = false
@@ -189,7 +186,7 @@ func _handle_backup() -> void:
func _handle_cmdline_arguments() -> void:
var args := OS.get_cmdline_args()
- if args.empty():
+ if args.is_empty():
return
for arg in args:
@@ -202,31 +199,31 @@ func _handle_cmdline_arguments() -> void:
func _notification(what: int) -> void:
match what:
- MainLoop.NOTIFICATION_WM_QUIT_REQUEST:
+ NOTIFICATION_WM_CLOSE_REQUEST:
show_quit_dialog()
# If the mouse exits the window and another application has the focus,
# pause the application
- MainLoop.NOTIFICATION_WM_FOCUS_OUT:
+ NOTIFICATION_APPLICATION_FOCUS_OUT:
Global.has_focus = false
if Global.pause_when_unfocused:
get_tree().paused = true
- MainLoop.NOTIFICATION_WM_MOUSE_EXIT:
- if !OS.is_window_focused() and Global.pause_when_unfocused:
+ NOTIFICATION_WM_MOUSE_EXIT:
+ if !get_window().has_focus() and Global.pause_when_unfocused:
get_tree().paused = true
# Unpause it when the mouse enters the window or when it gains focus
- MainLoop.NOTIFICATION_WM_MOUSE_ENTER:
+ NOTIFICATION_WM_MOUSE_ENTER:
get_tree().paused = false
- MainLoop.NOTIFICATION_WM_FOCUS_IN:
+ NOTIFICATION_APPLICATION_FOCUS_IN:
get_tree().paused = false
var mouse_pos := get_global_mouse_position()
var viewport_rect := Rect2(
- Global.main_viewport.rect_global_position, Global.main_viewport.rect_size
+ Global.main_viewport.global_position, Global.main_viewport.size
)
if viewport_rect.has_point(mouse_pos):
Global.has_focus = true
-func _on_files_dropped(files: PoolStringArray, _screen: int) -> void:
+func _on_files_dropped(files: PackedStringArray) -> void:
for file in files:
OpenSave.handle_loading_file(file)
var splash_dialog = Global.control.get_node("Dialogs/SplashDialog")
@@ -235,14 +232,13 @@ func _on_files_dropped(files: PoolStringArray, _screen: int) -> void:
func load_last_project() -> void:
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
return
# Check if any project was saved or opened last time
if Global.config_cache.has_section_key("preferences", "last_project_path"):
# Check if file still exists on disk
var file_path = Global.config_cache.get_value("preferences", "last_project_path")
- var file_check := File.new()
- if file_check.file_exists(file_path): # If yes then load the file
+ if FileAccess.file_exists(file_path): # If yes then load the file
OpenSave.open_pxo_file(file_path)
# Sync file dialogs
Global.save_sprites_dialog.current_dir = file_path.get_base_dir()
@@ -256,12 +252,11 @@ func load_last_project() -> void:
func load_recent_project_file(path: String) -> void:
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
return
# Check if file still exists on disk
- var file_check := File.new()
- if file_check.file_exists(path): # If yes then load the file
+ if FileAccess.file_exists(path): # If yes then load the file
OpenSave.handle_loading_file(path)
# Sync file dialogs
Global.save_sprites_dialog.current_dir = path.get_base_dir()
@@ -274,7 +269,7 @@ func load_recent_project_file(path: String) -> void:
Global.dialog_open(true)
-func _on_OpenSprite_files_selected(paths: PoolStringArray) -> void:
+func _on_OpenSprite_files_selected(paths: PackedStringArray) -> void:
for path in paths:
OpenSave.handle_loading_file(path)
Global.save_sprites_dialog.current_dir = paths[0].get_base_dir()
@@ -286,7 +281,9 @@ func _on_SaveSprite_file_selected(path: String) -> void:
func save_project(path: String) -> void:
- var zstd: bool = Global.save_sprites_dialog.get_vbox().get_node("ZSTDCompression").pressed
+ var zstd: bool = (
+ Global.save_sprites_dialog.get_vbox().get_node("ZSTDCompression").button_pressed
+ )
OpenSave.save_pxo_file(path, false, zstd)
Global.open_sprites_dialog.current_dir = path.get_base_dir()
Global.config_cache.set_value("data", "current_dir", path.get_base_dir())
@@ -296,15 +293,15 @@ func save_project(path: String) -> void:
func _on_SaveSpriteHTML5_confirmed() -> void:
- var file_name = Global.save_sprites_html5_dialog.get_node(
- "FileNameContainer/FileNameLineEdit"
- ).text
+ var file_name: String = (
+ Global.save_sprites_html5_dialog.get_node("FileNameContainer/FileNameLineEdit").text
+ )
file_name += ".pxo"
- var path = "user://".plus_file(file_name)
+ var path := "user://".path_join(file_name)
OpenSave.save_pxo_file(path, false, false)
-func _on_OpenSprite_popup_hide() -> void:
+func _on_open_sprite_visibility_changed() -> void:
if !opensprite_file_selected:
_can_draw_true()
@@ -343,7 +340,7 @@ func _on_QuitAndSaveDialog_custom_action(action: String) -> void:
func _on_QuitAndSaveDialog_confirmed() -> void:
is_quitting_on_save = true
- Global.save_sprites_dialog.get_ok().text = "Save & Exit"
+ Global.save_sprites_dialog.get_ok_button().text = "Save & Exit"
Global.save_sprites_dialog.popup_centered()
quit_dialog.hide()
Global.dialog_open(true)
@@ -380,34 +377,30 @@ func _on_BackupConfirmation_custom_action(
load_last_project()
-func _on_BackupConfirmation_popup_hide() -> void:
+func _on_backup_confirmation_visibility_changed() -> void:
+ if backup_confirmation.visible:
+ return
if Global.enable_autosave:
OpenSave.autosave_timer.start()
-
-
-func _use_osx_shortcuts() -> void:
- for action in InputMap.get_actions():
- var action_list: Array = InputMap.get_action_list(action)
- if action_list.size() == 0:
- continue
- var event: InputEvent = action_list[0]
-
- if event.is_action("show_pixel_grid"):
- event.shift = true
-
- if event.control:
- event.control = false
- event.command = true
+ Global.dialog_open(false)
func _exit_tree() -> void:
Global.config_cache.set_value("window", "layout", Global.top_menu_container.selected_layout)
- Global.config_cache.set_value("window", "screen", OS.current_screen)
+ Global.config_cache.set_value("window", "screen", get_window().current_screen)
Global.config_cache.set_value(
- "window", "maximized", OS.window_maximized || OS.window_fullscreen
+ "window",
+ "maximized",
+ (
+ (get_window().mode == Window.MODE_MAXIMIZED)
+ || (
+ (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN)
+ or (get_window().mode == Window.MODE_FULLSCREEN)
+ )
+ )
)
- Global.config_cache.set_value("window", "position", OS.window_position)
- Global.config_cache.set_value("window", "size", OS.window_size)
+ Global.config_cache.set_value("window", "position", get_window().position)
+ Global.config_cache.set_value("window", "size", get_window().size)
Global.config_cache.set_value("view_menu", "draw_grid", Global.draw_grid)
Global.config_cache.set_value("view_menu", "draw_pixel_grid", Global.draw_pixel_grid)
Global.config_cache.set_value("view_menu", "show_rulers", Global.show_rulers)
diff --git a/src/Main.tscn b/src/Main.tscn
index 9987e703966..13b0dd3271a 100644
--- a/src/Main.tscn
+++ b/src/Main.tscn
@@ -1,160 +1,129 @@
-[gd_scene load_steps=20 format=2]
-
-[ext_resource path="res://assets/themes/dark/theme.tres" type="Theme" id=1]
-[ext_resource path="res://src/Main.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/TopMenuContainer/TopMenuContainer.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/UI/UI.tscn" type="PackedScene" id=4]
-[ext_resource path="res://src/UI/Buttons/PatternsPopup.tscn" type="PackedScene" id=5]
-[ext_resource path="res://src/UI/Buttons/BrushesPopup.tscn" type="PackedScene" id=6]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffects.tscn" type="PackedScene" id=7]
-[ext_resource path="res://src/UI/Dialogs/SaveSpriteHTML5.tscn" type="PackedScene" id=8]
-[ext_resource path="res://src/UI/Timeline/FrameProperties.tscn" type="PackedScene" id=9]
-[ext_resource path="res://src/UI/Dialogs/WindowOpacityDialog.tscn" type="PackedScene" id=10]
-[ext_resource path="res://src/UI/Dialogs/SaveSprite.tscn" type="PackedScene" id=11]
-[ext_resource path="res://src/UI/Dialogs/OpenSprite.tscn" type="PackedScene" id=12]
-[ext_resource path="res://src/UI/Dialogs/ManageLayouts.tscn" type="PackedScene" id=13]
-[ext_resource path="res://src/UI/Dialogs/TileModeOffsetsDialog.tscn" type="PackedScene" id=14]
-[ext_resource path="res://src/UI/Dialogs/SplashDialog.tscn" type="PackedScene" id=27]
-[ext_resource path="res://src/UI/Dialogs/CreateNewImage.tscn" type="PackedScene" id=28]
-[ext_resource path="res://src/Preferences/PreferencesDialog.tscn" type="PackedScene" id=32]
-[ext_resource path="res://src/UI/Dialogs/AboutDialog.tscn" type="PackedScene" id=34]
-[ext_resource path="res://src/UI/Dialogs/ExportDialog.tscn" type="PackedScene" id=39]
+[gd_scene load_steps=20 format=3 uid="uid://dbylw5k04ulp8"]
+
+[ext_resource type="Theme" uid="uid://w1q3piojx08s" path="res://assets/themes/dark/theme.tres" id="1"]
+[ext_resource type="Script" path="res://src/Main.gd" id="2"]
+[ext_resource type="PackedScene" uid="uid://bsgwar3l6qtgv" path="res://src/UI/TopMenuContainer/TopMenuContainer.tscn" id="3"]
+[ext_resource type="PackedScene" uid="uid://c8dsi6ggkqa7a" path="res://src/UI/UI.tscn" id="4"]
+[ext_resource type="PackedScene" uid="uid://d1jyt8wleg8ft" path="res://src/UI/Buttons/PatternsPopup.tscn" id="5"]
+[ext_resource type="PackedScene" uid="uid://c5x85ysdouh4t" path="res://src/UI/Buttons/BrushesPopup.tscn" id="6"]
+[ext_resource type="PackedScene" uid="uid://cfihuvhy4ocx7" path="res://src/UI/Dialogs/ImageEffects/ImageEffects.tscn" id="7"]
+[ext_resource type="PackedScene" uid="uid://cltlo2whtiejd" path="res://src/UI/Dialogs/SaveSpriteHTML5.tscn" id="8"]
+[ext_resource type="PackedScene" uid="uid://bs3dnnvnxyp68" path="res://src/UI/Timeline/FrameProperties.tscn" id="9"]
+[ext_resource type="PackedScene" uid="uid://bcdt0pa7rojy5" path="res://src/UI/Dialogs/WindowOpacityDialog.tscn" id="10"]
+[ext_resource type="PackedScene" uid="uid://d4euwo633u33b" path="res://src/UI/Dialogs/SaveSprite.tscn" id="11"]
+[ext_resource type="PackedScene" uid="uid://b3aeqj2k58wdk" path="res://src/UI/Dialogs/OpenSprite.tscn" id="12"]
+[ext_resource type="PackedScene" uid="uid://d1phd84dk4t5e" path="res://src/UI/Dialogs/ManageLayouts.tscn" id="13"]
+[ext_resource type="PackedScene" uid="uid://c0nuukjakmai2" path="res://src/UI/Dialogs/TileModeOffsetsDialog.tscn" id="14"]
+[ext_resource type="PackedScene" uid="uid://bnpb1aip3wdvw" path="res://src/UI/Dialogs/SplashDialog.tscn" id="27"]
+[ext_resource type="PackedScene" uid="uid://btjf3lj873q1t" path="res://src/UI/Dialogs/CreateNewImage.tscn" id="28"]
+[ext_resource type="PackedScene" uid="uid://b3hkjj3s6pe4x" path="res://src/Preferences/PreferencesDialog.tscn" id="32"]
+[ext_resource type="PackedScene" uid="uid://w1v6plnv6ppt" path="res://src/UI/Dialogs/AboutDialog.tscn" id="34"]
+[ext_resource type="PackedScene" uid="uid://clgu8wb5o6oup" path="res://src/UI/Dialogs/ExportDialog.tscn" id="39"]
[node name="Control" type="Control"]
+layout_mode = 3
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-theme = ExtResource( 1 )
-script = ExtResource( 2 )
-__meta__ = {
-"_edit_horizontal_guides_": [ ],
-"_edit_vertical_guides_": [ ]
-}
+grow_horizontal = 2
+grow_vertical = 2
+theme = ExtResource("1")
+script = ExtResource("2")
[node name="MenuAndUI" type="VBoxContainer" parent="."]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-custom_constants/separation = 0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+theme_override_constants/separation = 0
-[node name="TopMenuContainer" parent="MenuAndUI" instance=ExtResource( 3 )]
+[node name="TopMenuContainer" parent="MenuAndUI" instance=ExtResource("3")]
+layout_mode = 2
-[node name="UI" parent="MenuAndUI" instance=ExtResource( 4 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_top = 28.0
-margin_right = 1280.0
-margin_bottom = 720.0
+[node name="UI" parent="MenuAndUI" instance=ExtResource("4")]
+layout_mode = 2
[node name="Dialogs" type="Control" parent="."]
+anchors_preset = 0
mouse_filter = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
-[node name="ImageEffects" parent="Dialogs" instance=ExtResource( 7 )]
+[node name="ImageEffects" parent="Dialogs" instance=ExtResource("7")]
-[node name="BrushesPopup" parent="Dialogs" instance=ExtResource( 6 )]
+[node name="BrushesPopup" parent="Dialogs" instance=ExtResource("6")]
-[node name="PatternsPopup" parent="Dialogs" instance=ExtResource( 5 )]
+[node name="PatternsPopup" parent="Dialogs" instance=ExtResource("5")]
-[node name="SplashDialog" parent="Dialogs" instance=ExtResource( 27 )]
+[node name="SplashDialog" parent="Dialogs" instance=ExtResource("27")]
-[node name="CreateNewImage" parent="Dialogs" instance=ExtResource( 28 )]
+[node name="CreateNewImage" parent="Dialogs" instance=ExtResource("28")]
-[node name="OpenSprite" parent="Dialogs" instance=ExtResource( 12 )]
-window_title = "Open File(s)"
-mode = 1
+[node name="OpenSprite" parent="Dialogs" instance=ExtResource("12")]
-[node name="SaveSprite" parent="Dialogs" instance=ExtResource( 11 )]
-margin_left = 108.0
-margin_top = 40.0
-margin_right = 623.0
-margin_bottom = 388.0
+[node name="SaveSprite" parent="Dialogs" instance=ExtResource("11")]
-[node name="SaveSpriteHTML5" parent="Dialogs" instance=ExtResource( 8 )]
+[node name="SaveSpriteHTML5" parent="Dialogs" instance=ExtResource("8")]
-[node name="ExportDialog" parent="Dialogs" instance=ExtResource( 39 )]
+[node name="ExportDialog" parent="Dialogs" instance=ExtResource("39")]
-[node name="PreferencesDialog" parent="Dialogs" instance=ExtResource( 32 )]
+[node name="PreferencesDialog" parent="Dialogs" instance=ExtResource("32")]
-[node name="ManageLayouts" parent="Dialogs" instance=ExtResource( 13 )]
+[node name="ManageLayouts" parent="Dialogs" instance=ExtResource("13")]
-[node name="AboutDialog" parent="Dialogs" instance=ExtResource( 34 )]
+[node name="AboutDialog" parent="Dialogs" instance=ExtResource("34")]
+position = Vector2i(0, 24)
[node name="UnsavedCanvasDialog" type="ConfirmationDialog" parent="Dialogs"]
-margin_right = 467.0
-margin_bottom = 70.0
-rect_min_size = Vector2( 180, 63 )
-window_title = "Unsaved Image"
+title = "Unsaved Image"
+exclusive = false
dialog_text = "You have unsaved changes. If you proceed, the progress you have made will be lost."
[node name="QuitDialog" type="ConfirmationDialog" parent="Dialogs"]
-margin_right = 243.0
-margin_bottom = 70.0
-resizable = true
+exclusive = false
dialog_text = "Are you sure you want to exit Pixelorama?"
[node name="QuitAndSaveDialog" type="ConfirmationDialog" parent="Dialogs"]
-margin_right = 330.0
-margin_bottom = 70.0
-window_title = "Save before exiting?"
-resizable = true
+title = "Save before exiting?"
+exclusive = false
dialog_text = "You have unsaved progress. How do you wish to proceed?"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ErrorDialog" type="AcceptDialog" parent="Dialogs"]
-margin_right = 151.0
-margin_bottom = 60.0
-window_title = "Error"
+exclusive = false
dialog_text = "This is an error message!"
[node name="BackupConfirmation" type="ConfirmationDialog" parent="Dialogs"]
-margin_right = 200.0
-margin_bottom = 88.0
-popup_exclusive = true
-resizable = true
+exclusive = false
dialog_text = "Autosaved project(s) from a crashed session were found.
Do you want to recover the data?"
dialog_autowrap = true
-[node name="FrameProperties" parent="Dialogs" instance=ExtResource( 9 )]
+[node name="FrameProperties" parent="Dialogs" instance=ExtResource("9")]
-[node name="WindowOpacityDialog" parent="Dialogs" instance=ExtResource( 10 )]
+[node name="WindowOpacityDialog" parent="Dialogs" instance=ExtResource("10")]
-[node name="TileModeOffsetsDialog" parent="Dialogs" instance=ExtResource( 14 )]
+[node name="TileModeOffsetsDialog" parent="Dialogs" instance=ExtResource("14")]
[node name="Extensions" type="Control" parent="."]
-__meta__ = {
-"_edit_use_anchors_": false
-}
+anchors_preset = 0
-[node name="LeftCursor" type="Sprite" parent="."]
+[node name="LeftCursor" type="Sprite2D" parent="."]
visible = false
-[node name="RightCursor" type="Sprite" parent="."]
+[node name="RightCursor" type="Sprite2D" parent="."]
visible = false
-[connection signal="popup_hide" from="Dialogs/SplashDialog" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/CreateNewImage" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/SplashDialog" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/CreateNewImage" to="." method="_can_draw_true"]
[connection signal="files_selected" from="Dialogs/OpenSprite" to="." method="_on_OpenSprite_files_selected"]
-[connection signal="popup_hide" from="Dialogs/OpenSprite" to="." method="_on_OpenSprite_popup_hide"]
+[connection signal="visibility_changed" from="Dialogs/OpenSprite" to="." method="_on_open_sprite_visibility_changed"]
[connection signal="file_selected" from="Dialogs/SaveSprite" to="." method="_on_SaveSprite_file_selected"]
-[connection signal="popup_hide" from="Dialogs/SaveSprite" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/SaveSprite" to="." method="_can_draw_true"]
[connection signal="confirmed" from="Dialogs/SaveSpriteHTML5" to="." method="_on_SaveSpriteHTML5_confirmed"]
-[connection signal="popup_hide" from="Dialogs/SaveSpriteHTML5" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/ExportDialog" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/PreferencesDialog" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/AboutDialog" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/UnsavedCanvasDialog" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/SaveSpriteHTML5" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/ExportDialog" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/UnsavedCanvasDialog" to="." method="_can_draw_true"]
[connection signal="confirmed" from="Dialogs/QuitDialog" to="." method="_on_QuitDialog_confirmed"]
-[connection signal="popup_hide" from="Dialogs/QuitDialog" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/QuitDialog" to="." method="_can_draw_true"]
[connection signal="confirmed" from="Dialogs/QuitAndSaveDialog" to="." method="_on_QuitAndSaveDialog_confirmed"]
[connection signal="custom_action" from="Dialogs/QuitAndSaveDialog" to="." method="_on_QuitAndSaveDialog_custom_action"]
-[connection signal="popup_hide" from="Dialogs/QuitAndSaveDialog" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/ErrorDialog" to="." method="_can_draw_true"]
-[connection signal="popup_hide" from="Dialogs/BackupConfirmation" to="." method="_on_BackupConfirmation_popup_hide"]
-[connection signal="popup_hide" from="Dialogs/BackupConfirmation" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/QuitAndSaveDialog" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/ErrorDialog" to="." method="_can_draw_true"]
+[connection signal="visibility_changed" from="Dialogs/BackupConfirmation" to="." method="_on_backup_confirmation_visibility_changed"]
diff --git a/src/Palette/CreatePaletteDialog.gd b/src/Palette/CreatePaletteDialog.gd
index 14735009f58..ad963971533 100644
--- a/src/Palette/CreatePaletteDialog.gd
+++ b/src/Palette/CreatePaletteDialog.gd
@@ -6,17 +6,17 @@ signal saved(preset, name, comment, width, height, add_alpha_colors, colors_from
# Reference to current palette stored when dialog opens
var current_palette: Palette
-onready var preset_input := $VBoxContainer/PaletteMetadata/Preset
-onready var name_input := $VBoxContainer/PaletteMetadata/Name
-onready var comment_input := $VBoxContainer/PaletteMetadata/Comment
-onready var width_input := $VBoxContainer/PaletteMetadata/Width
-onready var height_input := $VBoxContainer/PaletteMetadata/Height
-onready var alpha_colors_input := $VBoxContainer/ColorsSettings/AddAlphaColors
-onready var get_colors_from_input := $VBoxContainer/ColorsSettings/GetColorsFrom/GetColorsFrom
+@onready var preset_input := $VBoxContainer/PaletteMetadata/Preset
+@onready var name_input := $VBoxContainer/PaletteMetadata/Name
+@onready var comment_input := $VBoxContainer/PaletteMetadata/Comment
+@onready var width_input := $VBoxContainer/PaletteMetadata/Width
+@onready var height_input := $VBoxContainer/PaletteMetadata/Height
+@onready var alpha_colors_input := $VBoxContainer/ColorsSettings/AddAlphaColors
+@onready var get_colors_from_input := $VBoxContainer/ColorsSettings/GetColorsFrom/GetColorsFrom
-onready var colors_settings := $VBoxContainer/ColorsSettings
-onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning
-onready var enter_name_warning := $VBoxContainer/EnterNameWarning
+@onready var colors_settings := $VBoxContainer/ColorsSettings
+@onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning
+@onready var enter_name_warning := $VBoxContainer/EnterNameWarning
# Opens dialog
@@ -51,36 +51,35 @@ func set_default_values() -> void:
comment_input.text = ""
width_input.value = Palette.DEFAULT_WIDTH
height_input.value = Palette.DEFAULT_HEIGHT
- alpha_colors_input.pressed = true
+ alpha_colors_input.button_pressed = true
get_colors_from_input.selected = Palettes.GetColorsFrom.CURRENT_FRAME
# Shows/hides a warning when palette already exists
-func toggle_already_exists_warning(visible: bool) -> void:
- already_exists_warning.visible = visible
+func toggle_already_exists_warning(to_show: bool) -> void:
+ already_exists_warning.visible = to_show
# Required to resize window to correct size if warning causes content overflow
- rect_size = rect_size
+ size = size
func toggle_ok_button_disability(disable: bool) -> void:
- get_ok().disabled = disable
+ get_ok_button().disabled = disable
enter_name_warning.visible = disable
-func _on_CreatePaletteDialog_popup_hide() -> void:
+func _on_CreatePaletteDialog_visibility_changed() -> void:
Global.dialog_open(false)
func _on_CreatePaletteDialog_confirmed() -> void:
- emit_signal(
- "saved",
+ saved.emit(
preset_input.selected,
name_input.text,
comment_input.text,
width_input.value,
height_input.value,
- alpha_colors_input.pressed,
+ alpha_colors_input.button_pressed,
get_colors_from_input.selected
)
diff --git a/src/Palette/CreatePaletteDialog.tscn b/src/Palette/CreatePaletteDialog.tscn
index b422053f3ef..939718f33de 100644
--- a/src/Palette/CreatePaletteDialog.tscn
+++ b/src/Palette/CreatePaletteDialog.tscn
@@ -1,184 +1,131 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://68aakj2l6ee1"]
-[ext_resource path="res://src/Palette/CreatePaletteDialog.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/Palette/CreatePaletteDialog.gd" id="1"]
[node name="CreatePaletteDialog" type="ConfirmationDialog"]
-margin_top = 1.0
-margin_right = 300.0
-margin_bottom = 438.0
-window_title = "Create a new palette"
-resizable = true
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = -1
anchor_left = 0.000793701
anchor_right = 0.000793701
-margin_left = 7.76189
-margin_top = 8.0
-margin_right = 291.762
-margin_bottom = 401.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 7.76189
+offset_top = 8.0
+offset_right = 291.762
+offset_bottom = 401.0
[node name="PaletteMetadata" type="GridContainer" parent="VBoxContainer"]
-margin_right = 284.0
-margin_bottom = 162.0
+layout_mode = 2
columns = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="PresetLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_right = 67.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
text = "Preset:"
-valign = 1
[node name="Preset" type="OptionButton" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_right = 284.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-text = "Empty"
-items = [ "Empty", null, false, 0, null, "From Current Palette", null, false, 1, null, "From Current Sprite", null, false, 2, null, "From Current Selection", null, false, 3, null ]
+item_count = 4
selected = 0
+popup/item_0/text = "Empty"
+popup/item_0/id = 0
+popup/item_1/text = "From Current Palette"
+popup/item_1/id = 1
+popup/item_2/text = "From Current Sprite"
+popup/item_2/id = 2
+popup/item_3/text = "From Current Selection"
+popup/item_3/id = 3
[node name="NameLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 33.0
-margin_right = 67.0
-margin_bottom = 47.0
-rect_min_size = Vector2( 50, 0 )
+custom_minimum_size = Vector2(50, 0)
+layout_mode = 2
text = "Name:"
[node name="Name" type="LineEdit" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 28.0
-margin_right = 284.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
[node name="CommentLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 74.0
-margin_right = 67.0
-margin_bottom = 88.0
-rect_min_size = Vector2( 50, 0 )
+custom_minimum_size = Vector2(50, 0)
+layout_mode = 2
text = "Comment:"
[node name="Comment" type="TextEdit" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 56.0
-margin_right = 284.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 0, 75 )
+custom_minimum_size = Vector2(0, 75)
+layout_mode = 2
size_flags_horizontal = 3
[node name="WidthLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 115.0
-margin_right = 67.0
-margin_bottom = 129.0
+layout_mode = 2
text = "Width:"
[node name="Width" type="SpinBox" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 110.0
-margin_right = 284.0
-margin_bottom = 134.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
min_value = 1.0
max_value = 64.0
value = 1.0
-align = 2
[node name="HeightLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 143.0
-margin_right = 67.0
-margin_bottom = 157.0
+layout_mode = 2
text = "Height:"
[node name="Height" type="SpinBox" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 138.0
-margin_right = 284.0
-margin_bottom = 162.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
min_value = 1.0
max_value = 64.0
value = 1.0
-align = 2
[node name="ColorsSettings" type="VBoxContainer" parent="VBoxContainer"]
-margin_top = 166.0
-margin_right = 284.0
-margin_bottom = 226.0
+layout_mode = 2
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/ColorsSettings"]
-margin_right = 284.0
-margin_bottom = 4.0
+layout_mode = 2
[node name="AddAlphaColors" type="CheckBox" parent="VBoxContainer/ColorsSettings"]
-margin_top = 8.0
-margin_right = 284.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
text = "Create colors with alpha component"
[node name="GetColorsFrom" type="HBoxContainer" parent="VBoxContainer/ColorsSettings"]
-margin_top = 36.0
-margin_right = 284.0
-margin_bottom = 60.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+layout_mode = 2
[node name="GetColorsFromLabel" type="Label" parent="VBoxContainer/ColorsSettings/GetColorsFrom"]
-margin_top = 5.0
-margin_right = 104.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Get colors from:"
[node name="GetColorsFrom" type="OptionButton" parent="VBoxContainer/ColorsSettings/GetColorsFrom"]
-margin_left = 108.0
-margin_right = 284.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 0, 24 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-text = "Current frame"
-items = [ "Current frame", null, false, 0, null, "Selected cels", null, false, 1, null, "All frames", null, false, 2, null ]
-selected = 0
+mouse_default_cursor_shape = 2
+item_count = 3
+popup/item_0/text = "Current frame"
+popup/item_0/id = 0
+popup/item_1/text = "Selected cels"
+popup/item_1/id = 1
+popup/item_2/text = "All frames"
+popup/item_2/id = 2
[node name="AlreadyExistsWarning" type="Label" parent="VBoxContainer"]
-margin_top = 230.0
-margin_right = 284.0
-margin_bottom = 309.0
+layout_mode = 2
size_flags_vertical = 7
-custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 )
+theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1)
text = "Palette with the same name and path already exists!"
-align = 1
-valign = 2
-autowrap = true
[node name="EnterNameWarning" type="Label" parent="VBoxContainer"]
-margin_top = 313.0
-margin_right = 284.0
-margin_bottom = 393.0
+layout_mode = 2
size_flags_vertical = 7
-custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 )
+theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1)
text = "Palette name is required!"
-align = 1
-valign = 2
-autowrap = true
[connection signal="confirmed" from="." to="." method="_on_CreatePaletteDialog_confirmed"]
-[connection signal="popup_hide" from="." to="." method="_on_CreatePaletteDialog_popup_hide"]
+[connection signal="visibility_changed" from="." to="." method="_on_CreatePaletteDialog_visibility_changed"]
[connection signal="item_selected" from="VBoxContainer/PaletteMetadata/Preset" to="." method="_on_Preset_item_selected"]
[connection signal="text_changed" from="VBoxContainer/PaletteMetadata/Name" to="." method="_on_Name_text_changed"]
diff --git a/src/Palette/EditPaletteDialog.gd b/src/Palette/EditPaletteDialog.gd
index 4be95e6049c..110df19b5bb 100644
--- a/src/Palette/EditPaletteDialog.gd
+++ b/src/Palette/EditPaletteDialog.gd
@@ -12,14 +12,14 @@ var origin_height := 0
var old_name := ""
-onready var name_input := $VBoxContainer/PaletteMetadata/Name
-onready var comment_input := $VBoxContainer/PaletteMetadata/Comment
-onready var width_input := $VBoxContainer/PaletteMetadata/Width
-onready var height_input := $VBoxContainer/PaletteMetadata/Height
-onready var path_input := $VBoxContainer/PaletteMetadata/Path
+@onready var name_input := $VBoxContainer/PaletteMetadata/Name
+@onready var comment_input := $VBoxContainer/PaletteMetadata/Comment
+@onready var width_input := $VBoxContainer/PaletteMetadata/Width
+@onready var height_input := $VBoxContainer/PaletteMetadata/Height
+@onready var path_input := $VBoxContainer/PaletteMetadata/Path3D
-onready var size_reduced_warning := $VBoxContainer/SizeReducedWarning
-onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning
+@onready var size_reduced_warning := $VBoxContainer/SizeReducedWarning
+@onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning
func _ready() -> void:
@@ -50,43 +50,42 @@ func open(current_palette: Palette) -> void:
popup_centered()
-# Shows/hides a warning when palette size is being reduced
-func toggle_size_reduced_warning(visible: bool) -> void:
- size_reduced_warning.visible = visible
+## Shows/hides a warning when palette size is being reduced
+func toggle_size_reduced_warning(to_show: bool) -> void:
+ size_reduced_warning.visible = to_show
# Required to resize window to correct size if warning causes content overflow
- rect_size = rect_size
+ size = size
-# Shows/hides a warning when palette already exists
-func toggle_already_exists_warning(visible: bool) -> void:
- already_exists_warning.visible = visible
+## Shows/hides a warning when palette already exists
+func toggle_already_exists_warning(to_show: bool) -> void:
+ already_exists_warning.visible = to_show
# Disable confirm button so user cannot save
- get_ok().disabled = visible
+ get_ok_button().disabled = to_show
# Required to resize window to correct size if warning causes content overflow
- rect_size = rect_size
+ size = size
-func _on_EditPaletteDialog_popup_hide() -> void:
+func _on_EditPaletteDialog_visibility_changed() -> void:
Global.dialog_open(false)
func _on_EditPaletteDialog_confirmed() -> void:
- emit_signal("saved", name_input.text, comment_input.text, width_input.value, height_input.value)
+ saved.emit(name_input.text, comment_input.text, width_input.value, height_input.value)
func _on_EditPaletteDialog_custom_action(action: String) -> void:
if action == DELETE_ACTION:
hide()
- emit_signal("deleted")
+ deleted.emit(deleted)
func _on_size_value_changed(_value):
# Toggle resize warning label if palette size was reduced
var size_decreased: bool = (
- height_input.value < origin_height
- or width_input.value < origin_width
+ height_input.value < origin_height or width_input.value < origin_width
)
toggle_size_reduced_warning(size_decreased)
@@ -100,4 +99,4 @@ func _on_Name_text_changed(new_name):
# Disable ok button on empty name
if new_name == "":
- get_ok().disabled = true
+ get_ok_button().disabled = true
diff --git a/src/Palette/EditPaletteDialog.tscn b/src/Palette/EditPaletteDialog.tscn
index a2574460b4f..76864a17097 100644
--- a/src/Palette/EditPaletteDialog.tscn
+++ b/src/Palette/EditPaletteDialog.tscn
@@ -1,146 +1,89 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://c0p84w7umxwt1"]
-[ext_resource path="res://src/Palette/EditPaletteDialog.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/Palette/EditPaletteDialog.gd" id="1"]
[node name="EditPaletteDialog" type="ConfirmationDialog"]
-margin_right = 409.0
-margin_bottom = 535.0
-window_title = "Edit Palette"
-resizable = true
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
[node name="PaletteMetadata" type="GridContainer" parent="VBoxContainer"]
-margin_right = 393.0
-margin_bottom = 188.0
+layout_mode = 2
columns = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="NameLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 5.0
-margin_right = 67.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 50, 0 )
+custom_minimum_size = Vector2(50, 0)
+layout_mode = 2
text = "Name:"
[node name="Name" type="LineEdit" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_right = 393.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
[node name="CommentLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 46.0
-margin_right = 67.0
-margin_bottom = 60.0
-rect_min_size = Vector2( 50, 0 )
+custom_minimum_size = Vector2(50, 0)
+layout_mode = 2
text = "Comment:"
[node name="Comment" type="TextEdit" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 28.0
-margin_right = 393.0
-margin_bottom = 78.0
-rect_min_size = Vector2( 0, 75 )
+custom_minimum_size = Vector2(0, 75)
+layout_mode = 2
size_flags_horizontal = 3
[node name="WidthLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 87.0
-margin_right = 67.0
-margin_bottom = 101.0
+layout_mode = 2
text = "Width:"
[node name="Width" type="SpinBox" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 82.0
-margin_right = 393.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
min_value = 1.0
max_value = 64.0
value = 1.0
-align = 2
[node name="HeightLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 115.0
-margin_right = 67.0
-margin_bottom = 129.0
+layout_mode = 2
text = "Height:"
[node name="Height" type="SpinBox" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 110.0
-margin_right = 393.0
-margin_bottom = 134.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
min_value = 1.0
max_value = 64.0
value = 1.0
-align = 2
[node name="PathLabel" type="Label" parent="VBoxContainer/PaletteMetadata"]
-margin_top = 156.0
-margin_right = 67.0
-margin_bottom = 170.0
-text = "Path:"
-
-[node name="Path" type="TextEdit" parent="VBoxContainer/PaletteMetadata"]
-margin_left = 71.0
-margin_top = 138.0
-margin_right = 393.0
-margin_bottom = 188.0
-rect_min_size = Vector2( 0, 50 )
+layout_mode = 2
+text = "Path3D:"
+
+[node name="Path3D" type="TextEdit" parent="VBoxContainer/PaletteMetadata"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
size_flags_horizontal = 3
-readonly = true
-wrap_enabled = true
[node name="SizeReducedWarning" type="Label" parent="VBoxContainer"]
-margin_top = 192.0
-margin_right = 393.0
-margin_bottom = 223.0
-custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 )
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1)
text = "Reducing palette size will reset positions of colors. Colors that don't fit in new palette size will be lost!"
-align = 1
-valign = 2
-autowrap = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="AlreadyExistsWarning" type="Label" parent="VBoxContainer"]
-margin_top = 227.0
-margin_right = 393.0
-margin_bottom = 241.0
-custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 )
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1)
text = "Palette with the same name and path already exists!"
-align = 1
-valign = 1
-autowrap = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
[connection signal="confirmed" from="." to="." method="_on_EditPaletteDialog_confirmed"]
[connection signal="custom_action" from="." to="." method="_on_EditPaletteDialog_custom_action"]
-[connection signal="popup_hide" from="." to="." method="_on_EditPaletteDialog_popup_hide"]
+[connection signal="visibility_changed" from="." to="." method="_on_EditPaletteDialog_visibility_changed"]
[connection signal="text_changed" from="VBoxContainer/PaletteMetadata/Name" to="." method="_on_Name_text_changed"]
[connection signal="value_changed" from="VBoxContainer/PaletteMetadata/Width" to="." method="_on_size_value_changed"]
[connection signal="value_changed" from="VBoxContainer/PaletteMetadata/Height" to="." method="_on_size_value_changed"]
diff --git a/src/Palette/Palette.gd b/src/Palette/Palette.gd
index 389ce6dcec8..f2f9d7948c3 100644
--- a/src/Palette/Palette.gd
+++ b/src/Palette/Palette.gd
@@ -1,22 +1,22 @@
class_name Palette
extends Resource
-const DEFAULT_WIDTH = 8
-const DEFAULT_HEIGHT = 8
+const DEFAULT_WIDTH := 8
+const DEFAULT_HEIGHT := 8
# Metadata
-export var name: String = "Custom Palette"
-export var comment: String = ""
+@export var name := "Custom Palette"
+@export var comment := ""
# Grid size
-export var width := DEFAULT_WIDTH
-export var height := DEFAULT_HEIGHT
+@export var width := DEFAULT_WIDTH
+@export var height := DEFAULT_HEIGHT
-# Sparse colors dictionary - actual color position in the palette is determined by its index
-export var colors: Dictionary = {}
+## Sparse colors dictionary - actual color position in the palette is determined by its index
+@export var colors := {}
-# How many colors fit in palette grid
-export var colors_max := 0
+## How many colors fit in palette grid
+@export var colors_max := 0
func _init(
@@ -54,8 +54,8 @@ func edit(new_name: String, new_width: int, new_height: int, new_comment: String
reindex_colors_on_width_increase(old_width)
-# Iterates all colors from lowest index and reindexes them so they start at zero index
-# Remove trailing removes all colors that are over colors_max limit and thus don't fit into grid
+## Iterates all colors from lowest index and reindexes them so they start at zero index
+## Remove trailing removes all colors that are over colors_max limit and thus don't fit into grid
func reindex_colors_on_size_reduce(remove_trailing: bool) -> void:
var sorted_colors_indexes = colors.keys()
sorted_colors_indexes.sort()
@@ -75,8 +75,8 @@ func reindex_colors_on_size_reduce(remove_trailing: bool) -> void:
new_index += 1
-# Adds difference of old and new width to color indexes
-# so they remain on the same position as before resize
+## Adds difference of old and new width to color indexes
+## so they remain on the same position as before resize
func reindex_colors_on_width_increase(old_width: int) -> void:
var sorted_colors_indexes = colors.keys()
sorted_colors_indexes.sort()
@@ -89,7 +89,7 @@ func reindex_colors_on_width_increase(old_width: int) -> void:
colors = new_colors
-# Adds new color to the first empty swatch
+## Adds new color to the first empty swatch
func add_color(new_color: Color, start_index: int = 0) -> void:
if start_index >= colors_max:
return
@@ -105,7 +105,7 @@ func add_color(new_color: Color, start_index: int = 0) -> void:
break
-# Returns color at index or null if no color exists
+## Returns color at index or null if no color exists
func get_color(index: int):
var palette_color = colors.get(index)
if palette_color != null:
@@ -113,19 +113,19 @@ func get_color(index: int):
return null
-# Changes color data
+## Changes color data
func set_color(index: int, new_color: Color) -> void:
if self.colors.has(index):
self.colors[index].color = new_color
-# Removes a color at the specified index
+## Removes a color at the specified index
func remove_color(index: int) -> void:
colors.erase(index)
-# Inserts a color to the specified index
-# If index is already occupied move the original color to right
+## Inserts a color to the specified index
+## If index is already occupied move the original color to right
func insert_color(index: int, new_color: Color) -> void:
var c := PaletteColor.new(new_color, index)
# If insert happens on non empty swatch recursively move the original color
@@ -135,7 +135,7 @@ func insert_color(index: int, new_color: Color) -> void:
colors[index] = c
-# Recursive function that moves every color to right until one of them is moved to empty swatch
+## Recursive function that moves every color to right until one of them is moved to empty swatch
func move_right(index: int) -> void:
# Moving colors to right would overflow the size of the palette
# so increase its height automatically
@@ -150,7 +150,7 @@ func move_right(index: int) -> void:
colors[index + 1] = colors.get(index)
-# Swaps two colors
+## Swaps two colors
func swap_colors(from_index: int, to_index: int) -> void:
var from_color = colors.get(from_index)
var to_color = colors.get(to_index)
@@ -170,7 +170,7 @@ func swap_colors(from_index: int, to_index: int) -> void:
colors[from_index].index = from_index
-# Copies color
+## Copies color
func copy_colors(from_index: int, to_index: int) -> void:
# Only allow copy of existing colors
if colors.has(from_index):
@@ -178,27 +178,27 @@ func copy_colors(from_index: int, to_index: int) -> void:
colors[to_index].index = to_index
-# True if all swatches are occupied
+## True if all swatches are occupied
func is_full() -> bool:
return self.colors.size() >= self.colors_max
-# True if palette has no colors
+## True if palette has no colors
func is_empty() -> bool:
return self.colors.size() == 0
-func has_color(color: Color) -> bool:
+func has_theme_color(color: Color) -> bool:
for palette_color in colors.values():
if palette_color.color == color:
return true
return false
-# Sets name that is used to save the palette to disk
+## Sets name that is used to save the palette to disk
func set_resource_name(new_resource_name: String) -> void:
# Store palette path name only with valid path characters
- resource_name = strip_unvalid_characters(new_resource_name)
+ resource_name = Palette.strip_unvalid_characters(new_resource_name)
static func strip_unvalid_characters(string_to_strip: String) -> String:
diff --git a/src/Palette/PaletteColor.gd b/src/Palette/PaletteColor.gd
index 19c5134c966..5bf6191f516 100644
--- a/src/Palette/PaletteColor.gd
+++ b/src/Palette/PaletteColor.gd
@@ -3,10 +3,10 @@ extends Resource
const UNSET_INDEX := -1
-export var color: Color = Color.transparent
-export var index := UNSET_INDEX
+@export var color: Color = Color.TRANSPARENT
+@export var index := UNSET_INDEX
-func _init(init_color: Color = Color.black, init_index: int = UNSET_INDEX) -> void:
+func _init(init_color: Color = Color.BLACK, init_index: int = UNSET_INDEX) -> void:
color = init_color
index = init_index
diff --git a/src/Palette/PaletteGrid.gd b/src/Palette/PaletteGrid.gd
index 1b46baf66c9..46cff51e8e7 100644
--- a/src/Palette/PaletteGrid.gd
+++ b/src/Palette/PaletteGrid.gd
@@ -5,13 +5,13 @@ signal swatch_pressed(mouse_button, index)
signal swatch_double_clicked(mouse_button, index, position)
signal swatch_dropped(source_index, target_index)
-const PaletteSwatchScene := preload("res://src/Palette/PaletteSwatch.tscn")
-const DEFAULT_SWATCH_SIZE = Vector2(26, 26)
-const MIN_SWATCH_SIZE = Vector2(8, 8)
-const MAX_SWATCH_SIZE = Vector2(64, 64)
+const PALETTE_SWATCH_SCENE := preload("res://src/Palette/PaletteSwatch.tscn")
+const DEFAULT_SWATCH_SIZE := Vector2(26, 26)
+const MIN_SWATCH_SIZE := Vector2(8, 8)
+const MAX_SWATCH_SIZE := Vector2(64, 64)
-var swatches := [] # PaletteSwatch
-var current_palette = null
+var swatches: Array[PaletteSwatch] = []
+var current_palette: Palette = null
var grid_window_origin := Vector2.ZERO
var grid_size := Vector2.ZERO
var swatch_size := DEFAULT_SWATCH_SIZE
@@ -35,18 +35,18 @@ func setup_swatches() -> void:
columns = 1.0 if grid_size.x == 0.0 else grid_size.x
if grid_size.x * grid_size.y > swatches.size():
for i in range(swatches.size(), grid_size.x * grid_size.y):
- var swatch: PaletteSwatch = PaletteSwatchScene.instance()
+ var swatch := PALETTE_SWATCH_SCENE.instantiate() as PaletteSwatch
swatch.index = i
init_swatch(swatch)
- swatch.connect("pressed", self, "_on_PaletteSwatch_pressed", [i])
- swatch.connect("double_clicked", self, "_on_PaletteSwatch_double_clicked", [i])
- swatch.connect("dropped", self, "_on_PaletteSwatch_dropped")
+ swatch.pressed.connect(_on_PaletteSwatch_pressed.bind(i))
+ swatch.double_clicked.connect(_on_PaletteSwatch_double_clicked.bind(i))
+ swatch.dropped.connect(_on_PaletteSwatch_dropped)
add_child(swatch)
swatches.push_back(swatch)
else:
- var diff = swatches.size() - grid_size.x * grid_size.y
+ var diff := swatches.size() - grid_size.x * grid_size.y
for _i in range(0, diff):
- var swatch = swatches.pop_back()
+ var swatch: PaletteSwatch = swatches.pop_back()
remove_child(swatch)
swatch.queue_free()
@@ -65,8 +65,8 @@ func init_swatch(swatch: PaletteSwatch) -> void:
func draw_palette() -> void:
for j in range(grid_size.y):
for i in range(grid_size.x):
- var grid_index: int = i + grid_size.x * j
- var index: int = convert_grid_index_to_palette_index(grid_index)
+ var grid_index := i + grid_size.x * j
+ var index := convert_grid_index_to_palette_index(grid_index)
var swatch = swatches[grid_index]
swatch.show_left_highlight = false
swatch.show_right_highlight = false
@@ -90,14 +90,14 @@ func find_and_select_color(mouse_button: int, target_color: Color) -> void:
if target_color.is_equal_approx(swatches[color_ind].color):
select_swatch(mouse_button, color_ind, old_index)
match mouse_button:
- BUTTON_LEFT:
+ MOUSE_BUTTON_LEFT:
Palettes.left_selected_color = color_ind
- BUTTON_RIGHT:
+ MOUSE_BUTTON_RIGHT:
Palettes.right_selected_color = color_ind
break
-# Displays a left/right highlight over a swatch
+## Displays a left/right highlight over a swatch
func select_swatch(mouse_button: int, palette_index: int, old_palette_index: int) -> void:
var index = convert_palette_index_to_grid_index(palette_index)
var old_index = convert_palette_index_to_grid_index(old_palette_index)
@@ -125,17 +125,17 @@ func get_swatch_color(palette_index: int) -> Color:
var index = convert_palette_index_to_grid_index(palette_index)
if index >= 0 and index < swatches.size():
return swatches[index].color
- return Color.transparent
+ return Color.TRANSPARENT
-# Used to reload empty swatch color from a theme
+## Used to reload empty swatch color from a theme
func reset_empty_swatches_color() -> void:
for swatch in swatches:
if swatch.empty:
swatch.empty = true
-# Grid index adds grid window origin
+## Grid index adds grid window origin
func convert_grid_index_to_palette_index(index: int) -> int:
return (
int(index / grid_size.x + grid_window_origin.y) * current_palette.width
@@ -144,16 +144,22 @@ func convert_grid_index_to_palette_index(index: int) -> int:
func convert_palette_index_to_grid_index(palette_index: int) -> int:
- var x: int = palette_index % current_palette.width
- var y: int = palette_index / current_palette.width
+ var x := palette_index % current_palette.width
+ var y := palette_index / current_palette.width
return int((x - grid_window_origin.x) + (y - grid_window_origin.y) * grid_size.x)
func resize_grid(new_rect_size: Vector2) -> void:
- var grid_x: int = new_rect_size.x / (swatch_size.x + get("custom_constants/hseparation"))
- var grid_y: int = new_rect_size.y / (swatch_size.y + get("custom_constants/vseparation"))
- grid_size.x = min(grid_x, current_palette.width)
- grid_size.y = min(grid_y, current_palette.height)
+ if not is_instance_valid(current_palette):
+ return
+ var grid_x: int = (
+ new_rect_size.x / (swatch_size.x + get("theme_override_constants/h_separation"))
+ )
+ var grid_y: int = (
+ new_rect_size.y / (swatch_size.y + get("theme_override_constants/v_separation"))
+ )
+ grid_size.x = mini(grid_x, current_palette.width)
+ grid_size.y = mini(grid_y, current_palette.height)
setup_swatches()
draw_palette()
@@ -173,15 +179,15 @@ func change_swatch_size(size_diff: Vector2) -> void:
func _on_PaletteSwatch_pressed(mouse_button: int, index: int) -> void:
var palette_index = convert_grid_index_to_palette_index(index)
- emit_signal("swatch_pressed", mouse_button, palette_index)
+ swatch_pressed.emit(mouse_button, palette_index)
-func _on_PaletteSwatch_double_clicked(mouse_button: int, position: Vector2, index: int) -> void:
+func _on_PaletteSwatch_double_clicked(mouse_button: int, pos: Vector2, index: int) -> void:
var palette_index = convert_grid_index_to_palette_index(index)
- emit_signal("swatch_double_clicked", mouse_button, palette_index, position)
+ swatch_double_clicked.emit(mouse_button, palette_index, pos)
func _on_PaletteSwatch_dropped(source_index: int, target_index: int) -> void:
- var palette_source_index = convert_grid_index_to_palette_index(source_index)
- var palette_target_index = convert_grid_index_to_palette_index(target_index)
- emit_signal("swatch_dropped", palette_source_index, palette_target_index)
+ var palette_source_index := convert_grid_index_to_palette_index(source_index)
+ var palette_target_index := convert_grid_index_to_palette_index(target_index)
+ swatch_dropped.emit(palette_source_index, palette_target_index)
diff --git a/src/Palette/PalettePanel.gd b/src/Palette/PalettePanel.gd
index 302b7331c2a..97150333c2a 100644
--- a/src/Palette/PalettePanel.gd
+++ b/src/Palette/PalettePanel.gd
@@ -5,24 +5,24 @@ var palettes_path_id := {}
var palettes_id_path := {}
var edited_swatch_index := -1
-var edited_swatch_color := Color.transparent
+var edited_swatch_color := Color.TRANSPARENT
-onready var palette_select := $"%PaletteSelect"
-onready var palette_grid := $"%PaletteGrid"
-onready var palette_scroll := $"%PaletteScroll"
+@onready var palette_select := $"%PaletteSelect"
+@onready var palette_grid := $"%PaletteGrid"
+@onready var palette_scroll := $"%PaletteScroll"
-onready var add_color_button := $"%AddColor"
-onready var delete_color_button := $"%DeleteColor"
+@onready var add_color_button := $"%AddColor"
+@onready var delete_color_button := $"%DeleteColor"
-onready var edit_palette_dialog := $"%EditPaletteDialog"
-onready var create_palette_dialog := $"%CreatePaletteDialog"
+@onready var edit_palette_dialog := $"%EditPaletteDialog"
+@onready var create_palette_dialog := $"%CreatePaletteDialog"
# Color picker button itself is hidden but its popup is used to edit color swatches
-onready var hidden_color_picker := $"%HiddenColorPickerButton"
+@onready var hidden_color_picker := $"%HiddenColorPickerButton" as ColorPickerButton
func _ready() -> void:
- Tools.connect("color_changed", self, "_color_changed")
+ Tools.color_changed.connect(_color_changed)
setup_palettes_selector()
redraw_current_palette()
@@ -31,7 +31,7 @@ func _ready() -> void:
hidden_color_picker.get_picker().presets_visible = false
-# Setup palettes selector with available palettes
+## Setup palettes selector with available palettes
func setup_palettes_selector() -> void:
# Clear selector
palettes_path_id.clear()
@@ -58,28 +58,27 @@ func select_palette(palette_path: String) -> void:
palette_scroll.resize_grid()
palette_scroll.set_sliders(Palettes.get_current_palette(), palette_grid.grid_window_origin)
- var left_selected = Palettes.current_palette_get_selected_color_index(BUTTON_LEFT)
- var right_selected = Palettes.current_palette_get_selected_color_index(BUTTON_RIGHT)
- palette_grid.select_swatch(BUTTON_LEFT, left_selected, left_selected)
- palette_grid.select_swatch(BUTTON_RIGHT, right_selected, right_selected)
+ var left_selected := Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_LEFT)
+ var right_selected := Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_RIGHT)
+ palette_grid.select_swatch(MOUSE_BUTTON_LEFT, left_selected, left_selected)
+ palette_grid.select_swatch(MOUSE_BUTTON_RIGHT, right_selected, right_selected)
toggle_add_delete_buttons()
-# Has to be called on every Pixelorama theme change
+## Has to be called on every Pixelorama theme change
func reset_empty_palette_swatches_color() -> void:
palette_grid.reset_empty_swatches_color()
func redraw_current_palette() -> void:
# Select and display current palette
- var current_palette = Palettes.get_current_palette()
+ var current_palette := Palettes.get_current_palette()
if current_palette:
select_palette(current_palette.resource_path)
add_color_button.show()
delete_color_button.show()
else:
- palette_grid.clear_swatches()
add_color_button.hide()
delete_color_button.hide()
@@ -114,7 +113,9 @@ func _on_AddColor_gui_input(event: InputEvent) -> void:
if (
event is InputEventMouseButton
and event.pressed
- and (event.button_index == BUTTON_LEFT or event.button_index == BUTTON_RIGHT)
+ and (
+ event.button_index == MOUSE_BUTTON_LEFT or event.button_index == MOUSE_BUTTON_RIGHT
+ )
):
# Gets the grid index that corresponds to the top left of current grid window
# Color will be added at the start of the currently scrolled part of palette
@@ -140,40 +141,44 @@ func _on_DeleteColor_gui_input(event: InputEvent) -> void:
func _on_CreatePaletteDialog_saved(
preset: int,
- name: String,
+ palette_name: String,
comment: String,
width: int,
height: int,
add_alpha_colors: bool,
colors_from: int
) -> void:
- Palettes.create_new_palette(preset, name, comment, width, height, add_alpha_colors, colors_from)
+ Palettes.create_new_palette(
+ preset, palette_name, comment, width, height, add_alpha_colors, colors_from
+ )
setup_palettes_selector()
redraw_current_palette()
-func _on_EditPaletteDialog_saved(name: String, comment: String, width: int, height: int) -> void:
- Palettes.current_palette_edit(name, comment, width, height)
+func _on_EditPaletteDialog_saved(
+ palette_name: String, comment: String, width: int, height: int
+) -> void:
+ Palettes.current_palette_edit(palette_name, comment, width, height)
setup_palettes_selector()
redraw_current_palette()
func _on_PaletteGrid_swatch_double_clicked(_mb: int, index: int, click_position: Vector2) -> void:
- var color = Palettes.current_palette_get_color(index)
+ var color := Palettes.current_palette_get_color(index)
edited_swatch_index = index
hidden_color_picker.color = color
- hidden_color_picker.emit_signal("color_changed", hidden_color_picker.color)
+ hidden_color_picker.color_changed.emit(hidden_color_picker.color)
# Open color picker popup with its right bottom corner next to swatch
- var popup = hidden_color_picker.get_popup()
- popup.rect_position = click_position - popup.rect_size
+ var popup := hidden_color_picker.get_popup()
+ popup.position = click_position - Vector2(popup.size)
popup.popup()
func _on_PaletteGrid_swatch_dropped(source_index: int, target_index: int) -> void:
if Input.is_key_pressed(KEY_SHIFT):
Palettes.current_palette_insert_color(source_index, target_index)
- elif Input.is_key_pressed(KEY_CONTROL):
+ elif Input.is_key_pressed(KEY_CTRL):
Palettes.current_palette_copy_colors(source_index, target_index)
else:
Palettes.current_palette_swap_colors(source_index, target_index)
@@ -183,7 +188,7 @@ func _on_PaletteGrid_swatch_dropped(source_index: int, target_index: int) -> voi
func _on_PaletteGrid_swatch_pressed(mouse_button: int, index: int) -> void:
# Gets previously selected color index
- var old_index = Palettes.current_palette_get_selected_color_index(mouse_button)
+ var old_index := Palettes.current_palette_get_selected_color_index(mouse_button)
Palettes.current_palette_select_color(mouse_button, index)
palette_grid.select_swatch(mouse_button, index, old_index)
@@ -193,10 +198,16 @@ func _on_ColorPicker_color_changed(color: Color) -> void:
edited_swatch_color = color
palette_grid.set_swatch_color(edited_swatch_index, color)
- if edited_swatch_index == Palettes.current_palette_get_selected_color_index(BUTTON_LEFT):
- Tools.assign_color(color, BUTTON_LEFT)
- if edited_swatch_index == Palettes.current_palette_get_selected_color_index(BUTTON_RIGHT):
- Tools.assign_color(color, BUTTON_RIGHT)
+ if (
+ edited_swatch_index
+ == Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_LEFT)
+ ):
+ Tools.assign_color(color, MOUSE_BUTTON_LEFT)
+ if (
+ edited_swatch_index
+ == Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_RIGHT)
+ ):
+ Tools.assign_color(color, MOUSE_BUTTON_RIGHT)
func _on_HiddenColorPickerButton_popup_closed():
@@ -213,12 +224,12 @@ func _on_EditPaletteDialog_deleted() -> void:
func _color_changed(_color: Color, button: int) -> void:
if hidden_color_picker.get_popup().visible == false and Palettes.get_current_palette():
# Unselect swatches when tools color is changed
- var swatch_to_unselect = -1
+ var swatch_to_unselect := -1
- if button == BUTTON_LEFT:
+ if button == MOUSE_BUTTON_LEFT:
swatch_to_unselect = Palettes.left_selected_color
Palettes.left_selected_color = -1
- elif button == BUTTON_RIGHT:
+ elif button == MOUSE_BUTTON_RIGHT:
swatch_to_unselect = Palettes.right_selected_color
Palettes.right_selected_color = -1
diff --git a/src/Palette/PalettePanel.tscn b/src/Palette/PalettePanel.tscn
index 8e8bed3b5b8..04f37f2c2cd 100644
--- a/src/Palette/PalettePanel.tscn
+++ b/src/Palette/PalettePanel.tscn
@@ -1,211 +1,178 @@
-[gd_scene load_steps=8 format=2]
+[gd_scene load_steps=12 format=3 uid="uid://wplk62pbgih4"]
-[ext_resource path="res://src/Palette/EditPaletteDialog.tscn" type="PackedScene" id=1]
-[ext_resource path="res://assets/graphics/palette/edit.png" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/palette/add.png" type="Texture" id=3]
-[ext_resource path="res://src/Palette/CreatePaletteDialog.tscn" type="PackedScene" id=4]
-[ext_resource path="res://src/Palette/PaletteGrid.gd" type="Script" id=5]
-[ext_resource path="res://src/Palette/PaletteScroll.gd" type="Script" id=6]
-[ext_resource path="res://src/Palette/PalettePanel.gd" type="Script" id=8]
+[ext_resource type="PackedScene" uid="uid://c0p84w7umxwt1" path="res://src/Palette/EditPaletteDialog.tscn" id="1"]
+[ext_resource type="Texture2D" uid="uid://biyn51upnlxle" path="res://assets/graphics/palette/edit.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://b7ydn1tt37rcl" path="res://assets/graphics/palette/add.png" id="3"]
+[ext_resource type="PackedScene" uid="uid://68aakj2l6ee1" path="res://src/Palette/CreatePaletteDialog.tscn" id="4"]
+[ext_resource type="Script" path="res://src/Palette/PaletteGrid.gd" id="5"]
+[ext_resource type="Script" path="res://src/Palette/PaletteScroll.gd" id="6"]
+[ext_resource type="Script" path="res://src/Palette/PalettePanel.gd" id="8"]
+
+[sub_resource type="InputEventAction" id="InputEventAction_4n3yg"]
+action = &"edit_palette"
+
+[sub_resource type="Shortcut" id="Shortcut_jl8vt"]
+events = [SubResource("InputEventAction_4n3yg")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_mdfjt"]
+action = &"new_palette"
+
+[sub_resource type="Shortcut" id="Shortcut_6f4gc"]
+events = [SubResource("InputEventAction_mdfjt")]
[node name="PalettePanel" type="PanelContainer"]
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
[node name="PaletteVBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 159.0
-margin_bottom = 93.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PaletteButtons" type="HBoxContainer" parent="PaletteVBoxContainer"]
-margin_right = 152.0
-margin_bottom = 22.0
+layout_mode = 2
[node name="PaletteSelect" type="OptionButton" parent="PaletteVBoxContainer/PaletteButtons"]
unique_name_in_owner = true
-margin_right = 100.0
-margin_bottom = 22.0
-grow_horizontal = 0
-rect_min_size = Vector2( 100, 0 )
-hint_tooltip = "Choose a palette"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Choose a palette"
+mouse_default_cursor_shape = 2
clip_text = true
[node name="EditPalette" type="Button" parent="PaletteVBoxContainer/PaletteButtons" groups=["UIButtons"]]
-margin_left = 104.0
-margin_right = 126.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Edit currently selected palette"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+tooltip_text = "Edit currently selected palette"
mouse_default_cursor_shape = 2
-__meta__ = {
-"_edit_group_": true
-}
+shortcut = SubResource("Shortcut_jl8vt")
[node name="TextureRect" type="TextureRect" parent="PaletteVBoxContainer/PaletteButtons/EditPalette"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 2 )
+texture = ExtResource("2")
[node name="AddPalette" type="Button" parent="PaletteVBoxContainer/PaletteButtons" groups=["UIButtons"]]
-margin_left = 130.0
-margin_right = 152.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Create a new palette"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+tooltip_text = "Create a new palette"
mouse_default_cursor_shape = 2
-__meta__ = {
-"_edit_group_": true
-}
+shortcut = SubResource("Shortcut_6f4gc")
[node name="TextureRect" type="TextureRect" parent="PaletteVBoxContainer/PaletteButtons/AddPalette"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 3 )
+texture = ExtResource("3")
[node name="HSeparator" type="HSeparator" parent="PaletteVBoxContainer"]
-margin_top = 26.0
-margin_right = 152.0
-margin_bottom = 30.0
+layout_mode = 2
[node name="SwatchesContainer" type="HBoxContainer" parent="PaletteVBoxContainer"]
-margin_top = 34.0
-margin_right = 152.0
-margin_bottom = 86.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="ColorButtons" type="VBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer"]
-margin_right = 24.0
-margin_bottom = 52.0
+layout_mode = 2
[node name="AddColor" type="Button" parent="PaletteVBoxContainer/SwatchesContainer/ColorButtons"]
unique_name_in_owner = true
-margin_right = 24.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 24, 24 )
-hint_tooltip = "Add a new color"
+custom_minimum_size = Vector2(24, 24)
+layout_mode = 2
+tooltip_text = "Add a new color"
mouse_default_cursor_shape = 2
text = "+"
[node name="DeleteColor" type="Button" parent="PaletteVBoxContainer/SwatchesContainer/ColorButtons"]
unique_name_in_owner = true
-margin_top = 28.0
-margin_right = 24.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 24, 24 )
-hint_tooltip = "Remove a selected color"
+custom_minimum_size = Vector2(24, 24)
+layout_mode = 2
+tooltip_text = "Remove a selected color"
mouse_default_cursor_shape = 2
text = "-"
[node name="PaletteScroll" type="VBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer"]
unique_name_in_owner = true
-margin_left = 28.0
-margin_right = 152.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
-script = ExtResource( 6 )
+script = ExtResource("6")
[node name="HBoxContainer" type="HBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll"]
-margin_right = 124.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer"]
-margin_right = 120.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
alignment = 1
[node name="ScrollContainer" type="ScrollContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/VBoxContainer"]
unique_name_in_owner = true
-margin_right = 120.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="PaletteGrid" type="GridContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/VBoxContainer/ScrollContainer"]
unique_name_in_owner = true
-margin_right = 120.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-custom_constants/vseparation = 3
-custom_constants/hseparation = 3
-script = ExtResource( 5 )
+theme_override_constants/h_separation = 3
+theme_override_constants/v_separation = 3
+script = ExtResource("5")
[node name="HScrollBar" type="HScrollBar" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/VBoxContainer"]
unique_name_in_owner = true
visible = false
-margin_left = -132.0
-margin_top = 4.0
-margin_right = 118.0
-margin_bottom = 16.0
+layout_mode = 2
step = 1.0
page = 8.0
custom_step = 1.0
[node name="MarginContainer" type="MarginContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer"]
-margin_left = 124.0
-margin_right = 124.0
-margin_bottom = 52.0
-custom_constants/margin_bottom = 15
+layout_mode = 2
+theme_override_constants/margin_bottom = 15
[node name="VScrollBar" type="VScrollBar" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
-margin_right = 12.0
-margin_bottom = 37.0
+layout_mode = 2
step = 1.0
page = 8.0
custom_step = 1.0
-[node name="EditPaletteDialog" parent="." instance=ExtResource( 1 )]
+[node name="EditPaletteDialog" parent="." instance=ExtResource("1")]
unique_name_in_owner = true
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 317.0
-margin_bottom = 442.0
-rect_min_size = Vector2( 250, 87.5 )
-[node name="CreatePaletteDialog" parent="." instance=ExtResource( 4 )]
+[node name="CreatePaletteDialog" parent="." instance=ExtResource("4")]
unique_name_in_owner = true
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 317.0
-margin_bottom = 312.0
-rect_min_size = Vector2( 250, 87.5 )
[node name="HiddenColorPickerButton" type="ColorPickerButton" parent="."]
unique_name_in_owner = true
visible = false
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 311.0
-margin_bottom = 111.0
+layout_mode = 2
[connection signal="item_selected" from="PaletteVBoxContainer/PaletteButtons/PaletteSelect" to="." method="_on_PaletteSelect_item_selected"]
[connection signal="pressed" from="PaletteVBoxContainer/PaletteButtons/EditPalette" to="." method="_on_EditPalette_pressed"]
diff --git a/src/Palette/PaletteScroll.gd b/src/Palette/PaletteScroll.gd
index 1006a6d9719..6f763a15296 100644
--- a/src/Palette/PaletteScroll.gd
+++ b/src/Palette/PaletteScroll.gd
@@ -4,26 +4,28 @@ var scroll := Vector2.ZERO
var drag_started := false
var drag_start_position := Vector2.ZERO
-onready var h_slider := $"%HScrollBar"
-onready var v_slider := $"%VScrollBar"
-onready var palette_grid := $"%PaletteGrid"
-onready var scroll_container := $"%ScrollContainer"
+@onready var h_slider := %HScrollBar
+@onready var v_slider := %VScrollBar
+@onready var palette_grid := %PaletteGrid
+@onready var scroll_container := %ScrollContainer
func _ready() -> void:
# Hide default scollbars
- scroll_container.get_h_scrollbar().rect_scale = Vector2.ZERO
- scroll_container.get_v_scrollbar().rect_scale = Vector2.ZERO
+ scroll_container.get_h_scroll_bar().scale = Vector2.ZERO
+ scroll_container.get_v_scroll_bar().scale = Vector2.ZERO
func _input(event) -> void:
# Stops dragging even if middle mouse is released outside of this container
if event is InputEventMouseButton:
- if event.button_index == BUTTON_MIDDLE and not event.pressed:
+ if event.button_index == MOUSE_BUTTON_MIDDLE and not event.pressed:
drag_started = false
func set_sliders(palette: Palette, origin: Vector2) -> void:
+ if not is_instance_valid(palette):
+ return
h_slider.value = origin.x
h_slider.max_value = palette.width
h_slider.page = palette_grid.grid_size.x
@@ -40,7 +42,7 @@ func reset_sliders() -> void:
func resize_grid() -> void:
- palette_grid.resize_grid(rect_size - Vector2(v_slider.rect_size.x, h_slider.rect_size.y))
+ palette_grid.resize_grid(size - Vector2(v_slider.size.x, h_slider.size.y))
func scroll_grid() -> void:
@@ -59,12 +61,11 @@ func _on_HSlider_value_changed(value: int) -> void:
func _on_PaletteGrid_gui_input(event) -> void:
if event is InputEventMouseButton:
- if event.button_index == BUTTON_MIDDLE and event.pressed:
+ if event.button_index == MOUSE_BUTTON_MIDDLE and event.pressed:
drag_started = true
# Keeps position where the dragging started
drag_start_position = (
- event.position
- + Vector2(h_slider.value, v_slider.value) * palette_grid.swatch_size
+ event.position + Vector2(h_slider.value, v_slider.value) * palette_grid.swatch_size
)
if event is InputEventMouseMotion and drag_started:
@@ -73,22 +74,24 @@ func _on_PaletteGrid_gui_input(event) -> void:
func _on_PaletteScroll_resized() -> void:
+ if not is_instance_valid(palette_grid):
+ return
resize_grid()
reset_sliders()
func _on_PaletteScroll_gui_input(event) -> void:
if event is InputEventMouseButton and event.pressed:
- var scroll_vector = Vector2.ZERO
- if event.button_index == BUTTON_WHEEL_UP:
- if event.control:
+ var scroll_vector := Vector2.ZERO
+ if event.button_index == MOUSE_BUTTON_WHEEL_UP:
+ if event.ctrl_pressed:
palette_grid.change_swatch_size(Vector2.ONE)
else:
- scroll_vector = Vector2.LEFT if event.shift else Vector2.UP
- if event.button_index == BUTTON_WHEEL_DOWN:
- if event.control:
+ scroll_vector = Vector2.LEFT if event.shift_pressed else Vector2.UP
+ if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
+ if event.ctrl_pressed:
palette_grid.change_swatch_size(-Vector2.ONE)
else:
- scroll_vector = Vector2.RIGHT if event.shift else Vector2.DOWN
+ scroll_vector = Vector2.RIGHT if event.shift_pressed else Vector2.DOWN
resize_grid()
set_sliders(palette_grid.current_palette, palette_grid.grid_window_origin + scroll_vector)
diff --git a/src/Palette/PaletteSwatch.gd b/src/Palette/PaletteSwatch.gd
index 0742f159515..cca67e645e9 100644
--- a/src/Palette/PaletteSwatch.gd
+++ b/src/Palette/PaletteSwatch.gd
@@ -10,58 +10,52 @@ const DEFAULT_COLOR := Color(0.0, 0.0, 0.0, 0.0)
var index := -1
var show_left_highlight := false
var show_right_highlight := false
-var empty := true setget set_empty
+var empty := true:
+ set(value):
+ empty = value
+ if empty:
+ mouse_default_cursor_shape = Control.CURSOR_ARROW
+ color = Global.control.theme.get_stylebox("disabled", "Button").bg_color
+ else:
+ mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
-func set_swatch_size(size: Vector2) -> void:
- rect_min_size = size
- rect_size = size
+func set_swatch_size(swatch_size: Vector2) -> void:
+ custom_minimum_size = swatch_size
+ size = swatch_size
func _draw() -> void:
if not empty:
# Black border around swatches with a color
- draw_rect(Rect2(Vector2.ZERO, rect_size), Color.black, false, 1)
+ draw_rect(Rect2(Vector2.ZERO, size), Color.BLACK, false, 1)
if show_left_highlight:
# Display outer border highlight
- draw_rect(Rect2(Vector2.ZERO, rect_size), Color.white, false, 1)
- draw_rect(Rect2(Vector2.ONE, rect_size - Vector2(2, 2)), Color.black, false, 1)
+ draw_rect(Rect2(Vector2.ZERO, size), Color.WHITE, false, 1)
+ draw_rect(Rect2(Vector2.ONE, size - Vector2(2, 2)), Color.BLACK, false, 1)
if show_right_highlight:
# Display inner border highlight
- var margin := rect_size / 4
- draw_rect(Rect2(margin, rect_size - margin * 2), Color.black, false, 1)
+ var margin := size / 4
+ draw_rect(Rect2(margin, size - margin * 2), Color.BLACK, false, 1)
draw_rect(
- Rect2(margin - Vector2.ONE, rect_size - margin * 2 + Vector2(2, 2)),
- Color.white,
- false,
- 1
+ Rect2(margin - Vector2.ONE, size - margin * 2 + Vector2(2, 2)), Color.WHITE, false, 1
)
-# Enables drawing of highlights which indicate selected swatches
+## Enables drawing of highlights which indicate selected swatches
func show_selected_highlight(new_value: bool, mouse_button: int) -> void:
if not empty:
match mouse_button:
- BUTTON_LEFT:
+ MOUSE_BUTTON_LEFT:
show_left_highlight = new_value
- BUTTON_RIGHT:
+ MOUSE_BUTTON_RIGHT:
show_right_highlight = new_value
- update()
-
-
-# Empties the swatch and displays disabled color from theme
-func set_empty(new_value: bool) -> void:
- empty = new_value
- if empty:
- mouse_default_cursor_shape = Control.CURSOR_ARROW
- color = Global.control.theme.get_stylebox("disabled", "Button").bg_color
- else:
- mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+ queue_redraw()
-func get_drag_data(_position):
+func _get_drag_data(_position: Vector2):
var data = null
if not empty:
var drag_icon: PaletteSwatch = self.duplicate()
@@ -73,17 +67,17 @@ func get_drag_data(_position):
return data
-func can_drop_data(_position, _data) -> bool:
+func _can_drop_data(_position: Vector2, _data) -> bool:
return true
-func drop_data(_position, data) -> void:
- emit_signal("dropped", data.source_index, index)
+func _drop_data(_position: Vector2, data) -> void:
+ dropped.emit(data.source_index, index)
func _on_PaletteSlot_gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton and event.is_pressed() and not empty:
- if event.doubleclick:
- emit_signal("double_clicked", event.button_index, get_global_rect().position)
+ if event.double_click:
+ double_clicked.emit(event.button_index, get_global_rect().position)
else:
- emit_signal("pressed", event.button_index)
+ pressed.emit(event.button_index)
diff --git a/src/Palette/PaletteSwatch.tscn b/src/Palette/PaletteSwatch.tscn
index f9b922b2079..64486c6f119 100644
--- a/src/Palette/PaletteSwatch.tscn
+++ b/src/Palette/PaletteSwatch.tscn
@@ -1,79 +1,42 @@
-[gd_scene load_steps=4 format=2]
-
-[ext_resource path="res://src/Palette/PaletteSwatch.gd" type="Script" id=1]
-
-[sub_resource type="Shader" id=1]
-code = "shader_type canvas_item;
-render_mode unshaded;
-
-uniform float size = 10.0;
-uniform vec4 color1 : hint_color = vec4(0.7, 0.7, 0.7, 1.0);
-uniform vec4 color2 : hint_color = vec4(1.0);
-uniform vec2 offset = vec2(0.0);
-uniform vec2 scale = vec2(0.0);
-uniform vec2 rect_size = vec2(0.0);
-uniform bool follow_movement = false;
-uniform bool follow_scale = false;
-
-void fragment() {
- vec2 ref_pos = FRAGCOORD.xy;
- if (follow_scale) {
- if (!follow_movement)
- ref_pos /= scale;
- else
- ref_pos = UV * rect_size;
- }
- else if (follow_movement)
- ref_pos -= mod(offset, size * 2.0);
-
- vec2 pos = mod(ref_pos, size * 2.0);
- bool c1 = any(lessThan(pos, vec2(size)));
- bool c2 = any(greaterThanEqual(pos, vec2(size)));
- float c = c1 && c2 ? 1.0: 0.0;
- COLOR = mix(color1, color2, c);
- COLOR.a = 1.0;
-}
-"
-
-[sub_resource type="ShaderMaterial" id=2]
-shader = SubResource( 1 )
-shader_param/size = 10.0
-shader_param/color1 = Color( 0.878431, 0.878431, 0.878431, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0.8, 0.8 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = true
+[gd_scene load_steps=4 format=3 uid="uid://bwrn3rwka2ssa"]
+
+[ext_resource type="Script" path="res://src/Palette/PaletteSwatch.gd" id="1"]
+[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="2_8xme1"]
+
+[sub_resource type="ShaderMaterial" id="2"]
+shader = ExtResource("2_8xme1")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.878431, 0.878431, 0.878431, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0.8, 0.8)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = true
[node name="PaletteSwatch" type="ColorRect"]
+custom_minimum_size = Vector2(8, 8)
+anchors_preset = -1
anchor_left = 2.60711e-05
anchor_top = -2.75612e-05
anchor_right = 2.60711e-05
anchor_bottom = -2.75612e-05
-margin_left = -0.033371
-margin_top = 0.0198441
-margin_right = 25.9666
-margin_bottom = 26.0198
-rect_min_size = Vector2( 8, 8 )
+offset_left = -0.033371
+offset_top = 0.0198441
+offset_right = 25.9666
+offset_bottom = 26.0198
mouse_filter = 1
mouse_default_cursor_shape = 2
-color = Color( 0, 0, 0, 0 )
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_lock_": true,
-"_edit_use_anchors_": false
-}
+color = Color(0, 0, 0, 0)
+script = ExtResource("1")
[node name="TransparentChecker" type="ColorRect" parent="."]
show_behind_parent = true
-material = SubResource( 2 )
+material = SubResource("2")
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
-__meta__ = {
-"_edit_lock_": true,
-"_edit_use_anchors_": false
-}
[connection signal="gui_input" from="." to="." method="_on_PaletteSlot_gui_input"]
diff --git a/src/Preferences/HandleExtensions.gd b/src/Preferences/HandleExtensions.gd
index fa88fef1210..00f1b6972bf 100644
--- a/src/Preferences/HandleExtensions.gd
+++ b/src/Preferences/HandleExtensions.gd
@@ -2,14 +2,14 @@ extends Control
const EXTENSIONS_PATH := "user://extensions"
-var extensions := {} # Extension name : Extension class
+var extensions := {} ## Extension name: Extension class
var extension_selected := -1
var damaged_extension: String
-onready var extension_list: ItemList = $InstalledExtensions
-onready var enable_button: Button = $HBoxContainer/EnableButton
-onready var uninstall_button: Button = $HBoxContainer/UninstallButton
-onready var extension_parent: Node = Global.control.get_node("Extensions")
+@onready var extension_list: ItemList = $InstalledExtensions
+@onready var enable_button: Button = $HBoxContainer/EnableButton
+@onready var uninstall_button: Button = $HBoxContainer/UninstallButton
+@onready var extension_parent: Node = Global.control.get_node("Extensions")
class Extension:
@@ -40,23 +40,25 @@ class Extension:
func _ready() -> void:
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
$HBoxContainer/AddExtensionButton.disabled = true
$HBoxContainer/OpenFolderButton.visible = false
- var dir := Directory.new()
- var file_names := [] # Array of String(s)
+ var file_names: PackedStringArray = []
+ var dir := DirAccess.open("user://")
dir.make_dir(EXTENSIONS_PATH)
- if dir.open(EXTENSIONS_PATH) == OK:
+ dir = DirAccess.open(EXTENSIONS_PATH)
+ if DirAccess.get_open_error() == OK:
dir.list_dir_begin()
- var file_name = dir.get_next()
+ var file_name := dir.get_next()
while file_name != "":
- var ext: String = file_name.to_lower().get_extension()
- if !dir.current_is_dir() and ext in ["pck", "zip"]:
+ var ext := file_name.to_lower().get_extension()
+ if not dir.current_is_dir() and ext in ["pck", "zip"]:
file_names.append(file_name)
file_name = dir.get_next()
+ dir.list_dir_end()
- if file_names.empty():
+ if file_names.is_empty():
return
for file_name in file_names:
@@ -64,16 +66,16 @@ func _ready() -> void:
func install_extension(path: String) -> void:
- var dir := Directory.new()
- var file_name: String = path.get_file()
- dir.copy(path, EXTENSIONS_PATH.plus_file(file_name))
+ var file_name := path.get_file()
+ var dir := DirAccess.open(path.get_base_dir())
+ dir.copy(path, EXTENSIONS_PATH.path_join(file_name))
_add_extension(file_name)
func _uninstall_extension(file_name := "", remove_file := true, item := extension_selected) -> void:
if remove_file:
- var dir := Directory.new()
- var err := dir.remove(EXTENSIONS_PATH.plus_file(file_name))
+ var dir := DirAccess.open(EXTENSIONS_PATH.path_join(file_name))
+ var err := dir.remove(EXTENSIONS_PATH.path_join(file_name))
if err != OK:
print(err)
return
@@ -90,17 +92,17 @@ func _uninstall_extension(file_name := "", remove_file := true, item := extensio
func _add_extension(file_name: String) -> void:
- var tester_file := File.new() # For testing and deleting damaged extensions
- var remover_directory := Directory.new()
+ var tester_file: FileAccess # For testing and deleting damaged extensions
+ var remover_directory := DirAccess.open(EXTENSIONS_PATH)
# Remove any extension that was proven guilty before this extension is loaded
- if tester_file.file_exists(EXTENSIONS_PATH.plus_file("Faulty.txt")):
+ if remover_directory.file_exists(EXTENSIONS_PATH.path_join("Faulty.txt")):
# This code will only run if pixelorama crashed
- var faulty_path = EXTENSIONS_PATH.plus_file("Faulty.txt")
- tester_file.open(faulty_path, File.READ)
+ var faulty_path := EXTENSIONS_PATH.path_join("Faulty.txt")
+ tester_file = FileAccess.open(faulty_path, FileAccess.READ)
damaged_extension = tester_file.get_as_text()
tester_file.close()
- remover_directory.remove(EXTENSIONS_PATH.plus_file(damaged_extension))
- remover_directory.remove(EXTENSIONS_PATH.plus_file("Faulty.txt"))
+ remover_directory.remove(EXTENSIONS_PATH.path_join(damaged_extension))
+ remover_directory.remove(EXTENSIONS_PATH.path_join("Faulty.txt"))
# Don't load a deleted extension
if damaged_extension == file_name:
@@ -109,7 +111,7 @@ func _add_extension(file_name: String) -> void:
return
# The new (about to load) extension will be considered guilty till it's proven innocent
- tester_file.open(EXTENSIONS_PATH.plus_file("Faulty.txt"), File.WRITE)
+ tester_file = FileAccess.open(EXTENSIONS_PATH.path_join("Faulty.txt"), FileAccess.WRITE)
tester_file.store_string(file_name) # Guilty till proven innocent ;)
tester_file.close()
@@ -124,56 +126,59 @@ func _add_extension(file_name: String) -> void:
return
_uninstall_extension(file_name, false, item)
# Wait two frames so the previous nodes can get freed
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
- var file_name_no_ext: String = file_name.get_basename()
- var file_path: String = EXTENSIONS_PATH.plus_file(file_name)
+ var file_name_no_ext := file_name.get_basename()
+ var file_path := EXTENSIONS_PATH.path_join(file_name)
var success := ProjectSettings.load_resource_pack(file_path)
if !success:
print("Failed loading resource pack.")
- var dir := Directory.new()
+ var dir := DirAccess.open(EXTENSIONS_PATH)
dir.remove(file_path)
return
- var extension_path: String = "res://src/Extensions/%s/" % file_name_no_ext
- var extension_config_file_path: String = extension_path.plus_file("extension.json")
- var extension_config_file := File.new()
- var err := extension_config_file.open(extension_config_file_path, File.READ)
+ var extension_path := "res://src/Extensions/%s/" % file_name_no_ext
+ var extension_config_file_path := extension_path.path_join("extension.json")
+ var extension_config_file := FileAccess.open(extension_config_file_path, FileAccess.READ)
+ var err := FileAccess.get_open_error()
if err != OK:
- print("Error loading config file: ", err, ErrorManager.parse(err, " (", ")"))
+ print("Error loading config file: ", err, " (", error_string(err), ")")
extension_config_file.close()
return
- var extension_json = parse_json(extension_config_file.get_as_text())
+ var test_json_conv := JSON.new()
+ test_json_conv.parse(extension_config_file.get_as_text())
+ var extension_json = test_json_conv.get_data()
extension_config_file.close()
- if !extension_json:
+ if not extension_json:
print("No JSON data found.")
return
if extension_json.has("supported_api_versions"):
var supported_api_versions = extension_json["supported_api_versions"]
if typeof(supported_api_versions) == TYPE_ARRAY:
- if !ExtensionsApi.get_api_version() in supported_api_versions:
- var err_text = (
+ supported_api_versions = PackedInt32Array(supported_api_versions)
+ if not ExtensionsApi.get_api_version() in supported_api_versions:
+ var err_text := (
"The extension %s will not work on this version of Pixelorama \n"
% file_name_no_ext
)
- var required_text = "Requires Api : %s" % str(supported_api_versions)
+ var required_text := "Requires API version: %s" % str(supported_api_versions)
Global.error_dialog.set_text(str(err_text, required_text))
Global.error_dialog.popup_centered()
Global.dialog_open(true)
print("Incompatible API")
# Don't put it in faulty, (it's merely incompatible)
- remover_directory.remove(EXTENSIONS_PATH.plus_file("Faulty.txt"))
+ remover_directory.remove(EXTENSIONS_PATH.path_join("Faulty.txt"))
return
var extension := Extension.new()
extension.serialize(extension_json)
extensions[file_name] = extension
extension_list.add_item(extension.display_name)
- var item_count: int = extension_list.get_item_count() - 1
+ var item_count := extension_list.get_item_count() - 1
extension_list.set_item_tooltip(item_count, extension.description)
extension_list.set_item_metadata(item_count, file_name)
extension.enabled = Global.config_cache.get_value("extensions", extension.file_name, false)
@@ -182,7 +187,7 @@ func _add_extension(file_name: String) -> void:
# If an extension doesn't crash pixelorama then it is proven innocent
# And we should now delete its "Faulty.txt" file
- remover_directory.remove(EXTENSIONS_PATH.plus_file("Faulty.txt"))
+ remover_directory.remove(EXTENSIONS_PATH.path_join("Faulty.txt"))
func _enable_extension(extension: Extension, save_to_config := true) -> void:
@@ -196,10 +201,10 @@ func _enable_extension(extension: Extension, save_to_config := true) -> void:
if extension.enabled:
ExtensionsApi.clear_history(extension.file_name)
for node in extension.nodes:
- var scene_path: String = extension_path.plus_file(node)
+ var scene_path: String = extension_path.path_join(node)
var extension_scene: PackedScene = load(scene_path)
if extension_scene:
- var extension_node: Node = extension_scene.instance()
+ var extension_node: Node = extension_scene.instantiate()
extension_parent.add_child(extension_node)
extension_node.add_to_group(id) # Keep track of what to remove later
else:
@@ -228,7 +233,7 @@ func _on_InstalledExtensions_item_selected(index: int) -> void:
uninstall_button.disabled = false
-func _on_InstalledExtensions_nothing_selected() -> void:
+func _on_InstalledExtensions_empty_clicked(_position: Vector2, _button_index: int) -> void:
enable_button.disabled = true
uninstall_button.disabled = true
@@ -256,6 +261,6 @@ func _on_OpenFolderButton_pressed() -> void:
OS.shell_open(ProjectSettings.globalize_path(EXTENSIONS_PATH))
-func _on_AddExtensionFileDialog_files_selected(paths: PoolStringArray) -> void:
+func _on_AddExtensionFileDialog_files_selected(paths: PackedStringArray) -> void:
for path in paths:
install_extension(path)
diff --git a/src/Preferences/HandleLanguages.gd b/src/Preferences/HandleLanguages.gd
index 17249c921d3..1bf34f3bc99 100644
--- a/src/Preferences/HandleLanguages.gd
+++ b/src/Preferences/HandleLanguages.gd
@@ -6,7 +6,7 @@ const LANGUAGES_DICT := {
"da_DK": ["Dansk", "Danish"],
"de_DE": ["Deutsch", "German"],
"el_GR": ["ฮฮปฮปฮทฮฝฮนฮบฮฌ", "Greek"],
- "eo": ["Esperanto", "Esperanto"],
+ "eo_UY": ["Esperanto", "Esperanto"],
"es_ES": ["Espaรฑol", "Spanish"],
"fr_FR": ["Franรงais", "French"],
"id_ID": ["Indonesian", "Indonesian"],
@@ -27,7 +27,7 @@ const LANGUAGES_DICT := {
"uk_UA": ["ะฃะบัะฐัะฝััะบะฐ", "Ukrainian"],
}
-var loaded_locales := LANGUAGES_DICT.keys()
+var loaded_locales: PackedStringArray = LANGUAGES_DICT.keys()
func _ready() -> void:
@@ -38,30 +38,41 @@ func _ready() -> void:
if Global.config_cache.has_section_key("preferences", "locale"):
saved_locale = Global.config_cache.get_value("preferences", "locale")
locale_index = loaded_locales.find(saved_locale)
- TranslationServer.set_locale(saved_locale) # If no language is saved, OS' locale is used
+ _set_locale(saved_locale) # If no language is saved, OS' locale is used
- var button_group: ButtonGroup = $"System Language".group
+ var button_group: ButtonGroup = $"System Language".button_group
for locale in loaded_locales: # Create radiobuttons for each language
var button := CheckBox.new()
button.text = LANGUAGES_DICT[locale][0] + " [%s]" % [locale]
button.name = LANGUAGES_DICT[locale][1]
- button.hint_tooltip = LANGUAGES_DICT[locale][1]
+ button.tooltip_text = LANGUAGES_DICT[locale][1]
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
- button.group = button_group
+ button.button_group = button_group
add_child(button)
- button.connect("pressed", self, "_on_Language_pressed", [button.get_index()])
- get_child(locale_index + 2).pressed = true # Select the appropriate button
+ button.pressed.connect(_on_Language_pressed.bind(button.get_index()))
+ get_child(locale_index + 2).button_pressed = true # Select the appropriate button
func _on_Language_pressed(index: int) -> void:
- if index == 1:
- TranslationServer.set_locale(OS.get_locale())
- else:
- TranslationServer.set_locale(loaded_locales[index - 2])
+ var locale := OS.get_locale()
+ if index > 1:
+ locale = loaded_locales[index - 2]
+ _set_locale(locale)
Global.config_cache.set_value("preferences", "locale", TranslationServer.get_locale())
Global.config_cache.save("user://cache.ini")
# Update some UI elements with the new translations
- Global.update_hint_tooltips()
+ Tools.update_hint_tooltips()
Global.preferences_dialog.list.clear()
Global.preferences_dialog.add_tabs(true)
+
+
+func _set_locale(locale: String) -> void:
+ if TranslationServer.get_locale() == locale:
+ return
+ if not locale in TranslationServer.get_loaded_locales():
+ var translation := load("res://Translations/%s.po" % locale)
+ if is_instance_valid(translation) and translation is Translation:
+ TranslationServer.add_translation(translation)
+ Keychain.load_translation(locale)
+ TranslationServer.set_locale(locale)
diff --git a/src/Preferences/HandleThemes.gd b/src/Preferences/HandleThemes.gd
index 582780be5bd..da1b7ae002b 100644
--- a/src/Preferences/HandleThemes.gd
+++ b/src/Preferences/HandleThemes.gd
@@ -3,7 +3,7 @@ extends Node
var theme_index := 0
var theme_button_group := ButtonGroup.new()
-onready var themes := [
+@onready var themes: Array[Theme] = [
preload("res://assets/themes/dark/theme.tres"),
preload("res://assets/themes/gray/theme.tres"),
preload("res://assets/themes/blue/theme.tres"),
@@ -12,25 +12,24 @@ onready var themes := [
preload("res://assets/themes/purple/theme.tres"),
]
-onready var buttons_container: BoxContainer = $ThemeButtons
-onready var colors_container: BoxContainer = $ThemeColorsSpacer/ThemeColors
-onready var theme_color_preview_scene := preload("res://src/Preferences/ThemeColorPreview.tscn")
+@onready var buttons_container: BoxContainer = $ThemeButtons
+@onready var colors_container: BoxContainer = $ThemeColorsSpacer/ThemeColors
+@onready var theme_color_preview_scene := preload("res://src/Preferences/ThemeColorPreview.tscn")
func _ready() -> void:
for theme in themes:
add_theme(theme)
- yield(get_tree(), "idle_frame")
-
var theme_id: int = Global.config_cache.get_value("preferences", "theme", 0)
if theme_id >= themes.size():
theme_id = 0
- change_theme(theme_id)
- buttons_container.get_child(theme_id).pressed = true
+ if theme_id != 0:
+ change_theme(theme_id)
+ buttons_container.get_child(theme_id).button_pressed = true
func _on_Theme_pressed(index: int) -> void:
- buttons_container.get_child(index).pressed = true
+ buttons_container.get_child(index).button_pressed = true
change_theme(index)
Global.config_cache.set_value("preferences", "theme", index)
@@ -39,18 +38,18 @@ func _on_Theme_pressed(index: int) -> void:
func add_theme(theme: Theme) -> void:
var button := CheckBox.new()
- var theme_name: String = theme.resource_name
+ var theme_name := theme.resource_name
button.name = theme_name
button.text = theme_name
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
- button.group = theme_button_group
+ button.button_group = theme_button_group
buttons_container.add_child(button)
- button.connect("pressed", self, "_on_Theme_pressed", [button.get_index()])
+ button.pressed.connect(_on_Theme_pressed.bind(button.get_index()))
var panel_stylebox: StyleBox = theme.get_stylebox("panel", "Panel")
var panel_container_stylebox: StyleBox = theme.get_stylebox("panel", "PanelContainer")
if panel_stylebox is StyleBoxFlat and panel_container_stylebox is StyleBoxFlat:
- var theme_color_preview: ColorRect = theme_color_preview_scene.instance()
+ var theme_color_preview: ColorRect = theme_color_preview_scene.instantiate()
var color1: Color = panel_stylebox.bg_color
var color2: Color = panel_container_stylebox.bg_color
theme_color_preview.get_child(0).get_child(0).color = color1
@@ -59,7 +58,7 @@ func add_theme(theme: Theme) -> void:
func remove_theme(theme: Theme) -> void:
- var index: int = themes.find(theme)
+ var index := themes.find(theme)
var theme_button = buttons_container.get_child(index)
var color_previews = colors_container.get_child(index)
buttons_container.remove_child(theme_button)
@@ -71,7 +70,9 @@ func remove_theme(theme: Theme) -> void:
func change_theme(id: int) -> void:
theme_index = id
- var theme: Theme = themes[id]
+ var theme := themes[id]
+ theme.default_font_size = Global.font_size
+ theme.set_font_size("font_size", "HeaderSmall", Global.font_size + 2)
var icon_color: Color = theme.get_color("modulate_color", "Icons")
if Global.icon_color_from == Global.ColorFrom.THEME:
@@ -88,7 +89,7 @@ func change_theme(id: int) -> void:
if panel_stylebox is StyleBoxFlat:
clear_color = panel_stylebox.bg_color
else:
- clear_color = Color.gray
+ clear_color = Color.GRAY
for child in Global.preferences_dialog.get_node("Popups").get_children():
child.theme = theme
@@ -104,11 +105,11 @@ func change_clear_color() -> void:
if panel_stylebox is StyleBoxFlat:
clear_color = panel_stylebox.bg_color
else:
- clear_color = Color.gray
+ clear_color = Color.GRAY
if Global.clear_color_from == Global.ColorFrom.THEME:
- VisualServer.set_default_clear_color(clear_color)
+ RenderingServer.set_default_clear_color(clear_color)
else:
- VisualServer.set_default_clear_color(Global.modulate_clear_color)
+ RenderingServer.set_default_clear_color(Global.modulate_clear_color)
func change_icon_colors() -> void:
@@ -128,5 +129,5 @@ func change_icon_colors() -> void:
texture.modulate = Global.modulate_icon_color
if node.disabled:
texture.modulate.a = 0.5
- elif node is TextureRect or node is Sprite:
+ elif node is TextureRect or node is Sprite2D:
node.modulate = Global.modulate_icon_color
diff --git a/src/Preferences/PreferencesDialog.gd b/src/Preferences/PreferencesDialog.gd
index b8fae681850..9720c3dbb56 100644
--- a/src/Preferences/PreferencesDialog.gd
+++ b/src/Preferences/PreferencesDialog.gd
@@ -1,11 +1,15 @@
extends AcceptDialog
-# Array of Preference(s)
-var preferences := [
- Preference.new("open_last_project", "Startup/StartupContainer/OpenLastProject", "pressed"),
- Preference.new("quit_confirmation", "Startup/StartupContainer/QuitConfirmation", "pressed"),
+var preferences: Array[Preference] = [
+ Preference.new(
+ "open_last_project", "Startup/StartupContainer/OpenLastProject", "button_pressed"
+ ),
+ Preference.new(
+ "quit_confirmation", "Startup/StartupContainer/QuitConfirmation", "button_pressed"
+ ),
Preference.new("shrink", "%ShrinkSlider", "value"),
- Preference.new("dim_on_popup", "Interface/InterfaceOptions/DimCheckBox", "pressed"),
+ Preference.new("font_size", "Interface/InterfaceOptions/FontSizeSlider", "value"),
+ Preference.new("dim_on_popup", "Interface/InterfaceOptions/DimCheckBox", "button_pressed"),
Preference.new("icon_color_from", "Interface/ButtonOptions/IconColorOptionButton", "selected"),
Preference.new("custom_icon_color", "Interface/ButtonOptions/IconColorButton", "color"),
Preference.new("left_tool_color", "Interface/ButtonOptions/LeftToolColorButton", "color"),
@@ -14,35 +18,41 @@ var preferences := [
"tool_button_size", "Interface/ButtonOptions/ToolButtonSizeOptionButton", "selected"
),
Preference.new(
- "show_left_tool_icon", "Cursors/CursorsContainer/LeftToolIconCheckbox", "pressed"
+ "show_left_tool_icon", "Cursors/CursorsContainer/LeftToolIconCheckbox", "button_pressed"
),
Preference.new(
- "show_right_tool_icon", "Cursors/CursorsContainer/RightToolIconCheckbox", "pressed"
+ "show_right_tool_icon", "Cursors/CursorsContainer/RightToolIconCheckbox", "button_pressed"
),
Preference.new(
- "left_square_indicator_visible", "Cursors/CursorsContainer/LeftIndicatorCheckbox", "pressed"
+ "left_square_indicator_visible",
+ "Cursors/CursorsContainer/LeftIndicatorCheckbox",
+ "button_pressed"
),
Preference.new(
"right_square_indicator_visible",
"Cursors/CursorsContainer/RightIndicatorCheckbox",
- "pressed"
+ "button_pressed"
+ ),
+ Preference.new(
+ "native_cursors", "Cursors/CursorsContainer/NativeCursorsCheckbox", "button_pressed"
+ ),
+ Preference.new(
+ "cross_cursor", "Cursors/CursorsContainer/CrossCursorCheckbox", "button_pressed"
),
- Preference.new("native_cursors", "Cursors/CursorsContainer/NativeCursorsCheckbox", "pressed"),
- Preference.new("cross_cursor", "Cursors/CursorsContainer/CrossCursorCheckbox", "pressed"),
Preference.new("autosave_interval", "Backup/AutosaveContainer/AutosaveInterval", "value"),
- Preference.new("enable_autosave", "Backup/AutosaveContainer/EnableAutosave", "pressed"),
+ Preference.new("enable_autosave", "Backup/AutosaveContainer/EnableAutosave", "button_pressed"),
Preference.new("default_width", "Image/ImageOptions/ImageDefaultWidth", "value"),
Preference.new("default_height", "Image/ImageOptions/ImageDefaultHeight", "value"),
Preference.new("default_fill_color", "Image/ImageOptions/DefaultFillColor", "color"),
- Preference.new("smooth_zoom", "Canvas/ZoomOptions/SmoothZoom", "pressed"),
- Preference.new("integer_zoom", "Canvas/ZoomOptions/IntegerZoom", "pressed"),
+ Preference.new("smooth_zoom", "Canvas/ZoomOptions/SmoothZoom", "button_pressed"),
+ Preference.new("integer_zoom", "Canvas/ZoomOptions/IntegerZoom", "button_pressed"),
Preference.new("snapping_distance", "Canvas/SnappingOptions/DistanceValue", "value"),
Preference.new("grid_type", "Canvas/GridOptions/GridType", "selected"),
Preference.new("grid_size", "Canvas/GridOptions/GridSizeValue", "value"),
Preference.new("isometric_grid_size", "Canvas/GridOptions/IsometricGridSizeValue", "value"),
Preference.new("grid_offset", "Canvas/GridOptions/GridOffsetValue", "value"),
Preference.new(
- "grid_draw_over_tile_mode", "Canvas/GridOptions/GridDrawOverTileMode", "pressed"
+ "grid_draw_over_tile_mode", "Canvas/GridOptions/GridDrawOverTileMode", "button_pressed"
),
Preference.new("grid_color", "Canvas/GridOptions/GridColor", "color"),
Preference.new("pixel_grid_show_at_zoom", "Canvas/PixelGridOptions/ShowAtZoom", "value"),
@@ -52,14 +62,18 @@ var preferences := [
Preference.new("checker_color_1", "Canvas/CheckerOptions/CheckerColor1", "color"),
Preference.new("checker_color_2", "Canvas/CheckerOptions/CheckerColor2", "color"),
Preference.new(
- "checker_follow_movement", "Canvas/CheckerOptions/CheckerFollowMovement", "pressed"
+ "checker_follow_movement", "Canvas/CheckerOptions/CheckerFollowMovement", "button_pressed"
+ ),
+ Preference.new(
+ "checker_follow_scale", "Canvas/CheckerOptions/CheckerFollowScale", "button_pressed"
),
- Preference.new("checker_follow_scale", "Canvas/CheckerOptions/CheckerFollowScale", "pressed"),
Preference.new("tilemode_opacity", "Canvas/CheckerOptions/TileModeOpacity", "value"),
Preference.new("clear_color_from", "Canvas/BackgroundOptions/ColorOptionButton", "selected"),
Preference.new("modulate_clear_color", "Canvas/BackgroundOptions/BackgroundColor", "color"),
Preference.new(
- "select_layer_on_button_click", "Timeline/TimelineOptions/SelectLayerOnButton", "pressed"
+ "select_layer_on_button_click",
+ "Timeline/TimelineOptions/SelectLayerOnButton",
+ "button_pressed"
),
Preference.new(
"onion_skinning_past_color", "Timeline/TimelineOptions/OnionSkinningPastColor", "color"
@@ -67,34 +81,35 @@ var preferences := [
Preference.new(
"onion_skinning_future_color", "Timeline/TimelineOptions/OnionSkinningFutureColor", "color"
),
- Preference.new("selection_animated_borders", "Selection/SelectionOptions/Animate", "pressed"),
+ Preference.new(
+ "selection_animated_borders", "Selection/SelectionOptions/Animate", "button_pressed"
+ ),
Preference.new("selection_border_color_1", "Selection/SelectionOptions/BorderColor1", "color"),
Preference.new("selection_border_color_2", "Selection/SelectionOptions/BorderColor2", "color"),
Preference.new("fps_limit", "Performance/PerformanceContainer/SetFPSLimit", "value"),
Preference.new(
- "pause_when_unfocused", "Performance/PerformanceContainer/PauseAppFocus", "pressed"
- ),
- Preference.new(
- "renderer", "Drivers/DriversContainer/Renderer", "selected", true, OS.VIDEO_DRIVER_GLES2
+ "pause_when_unfocused", "Performance/PerformanceContainer/PauseAppFocus", "button_pressed"
),
+ # Preference.new(
+ # "renderer", "Drivers/DriversContainer/Renderer", "selected", true, OS.VIDEO_DRIVER_GLES2
+ # ),
Preference.new("tablet_driver", "Drivers/DriversContainer/TabletDriver", "selected", true, 0)
]
var content_list := []
var selected_item := 0
-var restore_default_button_tcsn := preload("res://src/Preferences/RestoreDefaultButton.tscn")
-onready var list: ItemList = $HSplitContainer/List
-onready var right_side: VBoxContainer = $"%RightSide"
-onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer")
-onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval")
-onready var shrink_slider: ValueSlider = $"%ShrinkSlider"
-onready var themes: BoxContainer = right_side.get_node("Interface/Themes")
-onready var shortcuts: Control = right_side.get_node("Shortcuts/ShortcutEdit")
-onready var tablet_driver_label: Label = $"%TabletDriverLabel"
-onready var tablet_driver: OptionButton = $"%TabletDriver"
-onready var extensions: BoxContainer = right_side.get_node("Extensions")
-onready var must_restart: BoxContainer = $"%MustRestart"
+@onready var list: ItemList = $HSplitContainer/List
+@onready var right_side: VBoxContainer = $"%RightSide"
+@onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer")
+@onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval")
+@onready var shrink_slider: ValueSlider = $"%ShrinkSlider"
+@onready var themes: BoxContainer = right_side.get_node("Interface/Themes")
+@onready var shortcuts: Control = right_side.get_node("Shortcuts/ShortcutEdit")
+@onready var tablet_driver_label: Label = $"%TabletDriverLabel"
+@onready var tablet_driver: OptionButton = $"%TabletDriver"
+@onready var extensions: BoxContainer = right_side.get_node("Extensions")
+@onready var must_restart: BoxContainer = $"%MustRestart"
class Preference:
@@ -123,19 +138,23 @@ class Preference:
func _ready() -> void:
# Replace OK since preference changes are being applied immediately, not after OK confirmation
- get_ok().text = "Close"
- get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ get_ok_button().text = "Close"
+ get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL
shrink_slider.value = Global.shrink # In case shrink is not equal to 1
+ shortcuts.profile_option_button.item_selected.connect(func(_i): Tools.update_hint_tooltips())
+ if shortcuts.profile_option_button.selected != 0:
+ # Manually update tooltips if the shortcut profile is not the default
+ Tools.update_hint_tooltips()
for child in shortcuts.get_children():
if not child is AcceptDialog:
continue
- child.connect("confirmed", Global, "update_hint_tooltips")
+ child.confirmed.connect(Tools.update_hint_tooltips)
for child in right_side.get_children():
content_list.append(child.name)
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
content_list.erase("Startup")
right_side.get_node("Startup").queue_free()
right_side.get_node("Language").visible = true
@@ -143,13 +162,13 @@ func _ready() -> void:
elif OS.get_name() == "Windows":
tablet_driver_label.visible = true
tablet_driver.visible = true
- for driver in OS.get_tablet_driver_count():
- var driver_name := OS.get_tablet_driver_name(driver)
+ for driver in DisplayServer.tablet_get_driver_count():
+ var driver_name := DisplayServer.tablet_get_driver_name(driver)
tablet_driver.add_item(driver_name, driver)
for pref in preferences:
- var node: Node = right_side.get_node(pref.node_path)
- var restore_default_button: BaseButton = restore_default_button_tcsn.instance()
+ var node := right_side.get_node(pref.node_path)
+ var restore_default_button := RestoreDefaultButton.new()
restore_default_button.setting_name = pref.prop_name
restore_default_button.value_type = pref.value_type
restore_default_button.default_value = pref.default_value
@@ -166,31 +185,22 @@ func _ready() -> void:
node.get_parent().move_child(restore_default_button, node_position)
match pref.value_type:
- "pressed":
- node.connect(
- "toggled", self, "_on_Preference_value_changed", [pref, restore_default_button]
+ "button_pressed":
+ node.toggled.connect(
+ _on_Preference_value_changed.bind(pref, restore_default_button)
)
"value":
- node.connect(
- "value_changed",
- self,
- "_on_Preference_value_changed",
- [pref, restore_default_button]
+ node.value_changed.connect(
+ _on_Preference_value_changed.bind(pref, restore_default_button)
)
"color":
node.get_picker().presets_visible = false
- node.connect(
- "color_changed",
- self,
- "_on_Preference_value_changed",
- [pref, restore_default_button]
+ node.color_changed.connect(
+ _on_Preference_value_changed.bind(pref, restore_default_button)
)
"selected":
- node.connect(
- "item_selected",
- self,
- "_on_Preference_value_changed",
- [pref, restore_default_button]
+ node.item_selected.connect(
+ _on_Preference_value_changed.bind(pref, restore_default_button)
)
var global_value = Global.get(pref.prop_name)
@@ -202,12 +212,17 @@ func _ready() -> void:
# This is needed because color_changed doesn't fire if the color changes in code
if typeof(value) == TYPE_VECTOR2 or typeof(value) == TYPE_COLOR:
- preference_update(pref.prop_name, pref.require_restart)
- disable_restore_default_button(
- restore_default_button, global_value.is_equal_approx(pref.default_value)
- )
+ preference_update(pref.require_restart)
+ if typeof(global_value) == TYPE_VECTOR2I:
+ disable_restore_default_button(
+ restore_default_button, global_value == pref.default_value
+ )
+ else:
+ disable_restore_default_button(
+ restore_default_button, global_value.is_equal_approx(pref.default_value)
+ )
elif pref.value_type == "selected":
- preference_update(pref.prop_name, pref.require_restart)
+ preference_update(pref.require_restart)
disable_restore_default_button(
restore_default_button, global_value == pref.default_value
)
@@ -218,114 +233,33 @@ func _ready() -> void:
)
-func _on_Preference_value_changed(value, pref: Preference, restore_default: BaseButton) -> void:
+func _on_Preference_value_changed(value, pref: Preference, button: RestoreDefaultButton) -> void:
var prop := pref.prop_name
var default_value = pref.default_value
Global.set(prop, value)
if not pref.require_restart:
Global.config_cache.set_value("preferences", prop, value)
- preference_update(prop, pref.require_restart)
+ preference_update(pref.require_restart)
var disable: bool = Global.get(prop) == default_value
if typeof(value) == TYPE_COLOR:
disable = Global.get(prop).is_equal_approx(default_value)
- disable_restore_default_button(restore_default, disable)
+ disable_restore_default_button(button, disable)
-func preference_update(prop: String, require_restart := false) -> void:
+func preference_update(require_restart := false) -> void:
if require_restart:
must_restart.visible = true
return
- if prop in ["autosave_interval", "enable_autosave"]:
- OpenSave.update_autosave()
- autosave_interval.editable = Global.enable_autosave
- if autosave_interval.editable:
- autosave_interval.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
- else:
- autosave_interval.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN
-
- elif "grid" in prop:
- Global.canvas.grid.update()
-
- elif prop in ["pixel_grid_show_at_zoom", "pixel_grid_color"]:
- Global.canvas.pixel_grid.update()
-
- elif "checker" in prop:
- Global.transparent_checker.update_rect()
-
- elif prop in ["guide_color"]:
- for guide in Global.canvas.get_children():
- if guide is SymmetryGuide:
- # Add a subtle difference to the normal guide color by mixing in some blue
- guide.default_color = Global.guide_color.linear_interpolate(Color(.2, .2, .65), .6)
- elif guide is Guide:
- guide.default_color = Global.guide_color
-
- elif prop in ["fps_limit"]:
- Engine.set_target_fps(Global.fps_limit)
-
- elif "selection" in prop:
- var marching_ants: Sprite = Global.canvas.selection.marching_ants_outline
- marching_ants.material.set_shader_param("animated", Global.selection_animated_borders)
- marching_ants.material.set_shader_param("first_color", Global.selection_border_color_1)
- marching_ants.material.set_shader_param("second_color", Global.selection_border_color_2)
- Global.canvas.selection.update()
-
- elif prop in ["icon_color_from", "custom_icon_color"]:
- if Global.icon_color_from == Global.ColorFrom.THEME:
- var current_theme: Theme = themes.themes[themes.theme_index]
- Global.modulate_icon_color = current_theme.get_color("modulate_color", "Icons")
- else:
- Global.modulate_icon_color = Global.custom_icon_color
- themes.change_icon_colors()
-
- elif prop in ["modulate_clear_color", "clear_color_from"]:
- themes.change_clear_color()
-
- elif prop == "left_tool_color":
- for child in Tools._tool_buttons.get_children():
- var left_background: NinePatchRect = child.get_node("BackgroundLeft")
- left_background.modulate = Global.left_tool_color
- Tools._slots[BUTTON_LEFT].tool_node.color_rect.color = Global.left_tool_color
-
- elif prop == "right_tool_color":
- for child in Tools._tool_buttons.get_children():
- var left_background: NinePatchRect = child.get_node("BackgroundRight")
- left_background.modulate = Global.right_tool_color
- Tools._slots[BUTTON_RIGHT].tool_node.color_rect.color = Global.right_tool_color
-
- elif prop == "tool_button_size":
- Tools.set_button_size(Global.tool_button_size)
-
- elif prop == "native_cursors":
- if Global.native_cursors:
- Input.set_custom_mouse_cursor(null, Input.CURSOR_CROSS, Vector2(15, 15))
- else:
- Global.control.set_custom_cursor()
-
- elif prop == "cross_cursor":
- if Global.cross_cursor:
- Global.main_viewport.mouse_default_cursor_shape = Control.CURSOR_CROSS
- else:
- Global.main_viewport.mouse_default_cursor_shape = Control.CURSOR_ARROW
-
- elif prop == "onion_skinning_past_color":
- Global.canvas.onion_past.blue_red_color = Global.onion_skinning_past_color
- Global.canvas.refresh_onion()
- elif prop == "onion_skinning_future_color":
- Global.canvas.onion_future.blue_red_color = Global.onion_skinning_future_color
- Global.canvas.refresh_onion()
-
- Global.config_cache.save("user://cache.ini")
-func disable_restore_default_button(button: BaseButton, disable: bool) -> void:
+func disable_restore_default_button(button: RestoreDefaultButton, disable: bool) -> void:
button.disabled = disable
if disable:
button.mouse_default_cursor_shape = Control.CURSOR_ARROW
- button.hint_tooltip = ""
+ button.tooltip_text = ""
else:
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
- button.hint_tooltip = "Restore default value"
+ button.tooltip_text = "Restore default value"
func _on_PreferencesDialog_about_to_show() -> void:
@@ -341,8 +275,11 @@ func add_tabs(changed_language := false) -> void:
autosave_interval.suffix = tr("minute(s)")
-func _on_PreferencesDialog_popup_hide() -> void:
- list.clear()
+func _on_PreferencesDialog_visibility_changed() -> void:
+ if not visible:
+ list.clear()
+ Global.dialog_open(false)
+ Global.config_cache.save("user://cache.ini")
func _on_List_item_selected(index: int) -> void:
@@ -352,15 +289,14 @@ func _on_List_item_selected(index: int) -> void:
func _on_ShrinkApplyButton_pressed() -> void:
- get_tree().set_screen_stretch(
- SceneTree.STRETCH_MODE_DISABLED,
- SceneTree.STRETCH_ASPECT_IGNORE,
- Vector2(1024, 576),
- Global.shrink
- )
+ var root := get_tree().root
+ root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE
+ root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
+ root.min_size = Vector2(1024, 576)
+ root.content_scale_factor = Global.shrink
Global.control.set_custom_cursor()
hide()
popup_centered(Vector2(600, 400))
Global.dialog_open(true)
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
Global.camera.fit_to_frame(Global.current_project.size)
diff --git a/src/Preferences/PreferencesDialog.tscn b/src/Preferences/PreferencesDialog.tscn
index b8b8fe7c516..0ea68fdb579 100644
--- a/src/Preferences/PreferencesDialog.tscn
+++ b/src/Preferences/PreferencesDialog.tscn
@@ -1,201 +1,155 @@
-[gd_scene load_steps=9 format=2]
+[gd_scene load_steps=9 format=3 uid="uid://b3hkjj3s6pe4x"]
-[ext_resource path="res://src/Preferences/PreferencesDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/Preferences/HandleExtensions.gd" type="Script" id=2]
-[ext_resource path="res://addons/keychain/ShortcutEdit.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/Preferences/HandleLanguages.gd" type="Script" id=4]
-[ext_resource path="res://src/Preferences/HandleThemes.gd" type="Script" id=5]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=7]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=8]
+[ext_resource type="Script" path="res://src/Preferences/PreferencesDialog.gd" id="1"]
+[ext_resource type="Script" path="res://src/Preferences/HandleExtensions.gd" id="2"]
+[ext_resource type="PackedScene" uid="uid://bq7ibhm0txl5p" path="res://addons/keychain/ShortcutEdit.tscn" id="3"]
+[ext_resource type="Script" path="res://src/Preferences/HandleLanguages.gd" id="4"]
+[ext_resource type="Script" path="res://src/Preferences/HandleThemes.gd" id="5"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="7"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="8"]
-[sub_resource type="ButtonGroup" id=1]
+[sub_resource type="ButtonGroup" id="ButtonGroup_8vsfb"]
[node name="PreferencesDialog" type="AcceptDialog"]
-margin_right = 620.0
-margin_bottom = 450.0
-window_title = "Preferences"
-resizable = true
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_horizontal_guides_": [ ],
-"_edit_use_anchors_": false,
-"_edit_vertical_guides_": [ ]
-}
+title = "Preferences"
+size = Vector2i(800, 500)
+exclusive = false
+script = ExtResource("1")
[node name="HSplitContainer" type="HSplitContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
size_flags_horizontal = 3
-custom_constants/autohide = 0
-custom_constants/separation = 20
+theme_override_constants/separation = 20
+theme_override_constants/autohide = 0
split_offset = 1
[node name="List" type="ItemList" parent="HSplitContainer"]
-margin_right = 86.0
-margin_bottom = 406.0
-rect_min_size = Vector2( 85, 0 )
+custom_minimum_size = Vector2(85, 0)
+layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="HSplitContainer"]
-margin_left = 106.0
-margin_right = 604.0
-margin_bottom = 406.0
+layout_mode = 2
[node name="ScrollContainer" type="ScrollContainer" parent="HSplitContainer/VBoxContainer"]
-margin_right = 498.0
-margin_bottom = 406.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="RightSide" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer"]
unique_name_in_owner = true
-margin_right = 498.0
-margin_bottom = 406.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Startup" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
-margin_right = 498.0
-margin_bottom = 70.0
+layout_mode = 2
[node name="StartupHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup"]
-margin_right = 498.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupHeader"]
-margin_right = 45.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Startup"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupHeader"]
-margin_left = 45.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="StartupContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup"]
-margin_top = 18.0
-margin_right = 498.0
-margin_bottom = 70.0
+layout_mode = 2
columns = 3
[node name="OpenLastProjectLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"]
-margin_top = 5.0
-margin_right = 189.0
-margin_bottom = 19.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Open last project on startup"
[node name="OpenLastProject" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"]
-margin_left = 193.0
-margin_right = 381.0
-margin_bottom = 24.0
-hint_tooltip = "Opens last opened project on startup"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Opens last opened project on startup"
+mouse_default_cursor_shape = 2
text = "On"
[node name="QuitConfirmationLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"]
-margin_left = 385.0
-margin_top = 5.0
-margin_right = 498.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Quit confirmation"
[node name="QuitConfirmation" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"]
-margin_top = 28.0
-margin_right = 189.0
-margin_bottom = 52.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "On"
[node name="Language" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 184.0
-margin_right = 506.0
-margin_bottom = 632.0
-script = ExtResource( 4 )
+layout_mode = 2
+script = ExtResource("4")
[node name="LanguageHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/LanguageHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Language"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/LanguageHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="System Language" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language"]
-margin_right = 506.0
-margin_bottom = 24.0
-hint_tooltip = "System Language"
+layout_mode = 2
+tooltip_text = "System Language"
mouse_default_cursor_shape = 2
-pressed = true
-group = SubResource( 1 )
+button_group = SubResource("ButtonGroup_8vsfb")
text = "System Language"
[node name="Interface" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 74.0
-margin_right = 498.0
-margin_bottom = 284.0
+layout_mode = 2
[node name="InterfaceHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"]
-margin_right = 498.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceHeader"]
-margin_right = 57.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Interface"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceHeader"]
-margin_left = 57.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="InterfaceOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"]
-margin_right = 40.0
-margin_bottom = 40.0
+layout_mode = 2
columns = 3
-[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
-margin_top = 23.0
-margin_right = 88.0
-margin_bottom = 37.0
+[node name="ShrinkLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Display scale:"
[node name="ShrinkContainer" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
-margin_top = 18.0
-margin_right = 498.0
-margin_bottom = 42.0
+layout_mode = 2
-[node name="ShrinkSlider" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer"]
+[node name="ShrinkSlider" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 0.5
max_value = 4.0
step = 0.25
@@ -205,332 +159,273 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
[node name="ShrinkApplyButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer"]
-margin_left = 297.0
-margin_right = 498.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Apply"
+[node name="FontSizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Font size:"
+
+[node name="FontSizeSlider" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
+layout_mode = 2
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+min_value = 4.0
+max_value = 32.0
+value = 6.0
+allow_greater = true
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("8")
+
[node name="DimLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
-margin_top = 51.0
-margin_right = 247.0
-margin_bottom = 65.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Dim interface on dialog popup"
[node name="DimCheckBox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"]
-margin_left = 251.0
-margin_top = 46.0
-margin_right = 498.0
-margin_bottom = 70.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="ThemesHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"]
-margin_top = 74.0
-margin_right = 498.0
-margin_bottom = 88.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ThemesHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Themes"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ThemesHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Themes" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"]
-margin_top = 92.0
-margin_right = 498.0
-margin_bottom = 96.0
-script = ExtResource( 5 )
+layout_mode = 2
+script = ExtResource("5")
[node name="ThemeButtons" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes"]
-margin_right = 247.0
-margin_bottom = 4.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ThemeColorsSpacer" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes"]
-margin_left = 251.0
-margin_right = 498.0
-margin_bottom = 4.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Control" type="Control" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes/ThemeColorsSpacer"]
-margin_right = 247.0
+layout_mode = 2
[node name="ThemeColors" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes/ThemeColorsSpacer"]
-margin_top = 4.0
-margin_right = 247.0
-margin_bottom = 4.0
-custom_constants/separation = 12
+layout_mode = 2
+theme_override_constants/separation = 12
[node name="ButtonHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"]
-margin_top = 100.0
-margin_right = 498.0
-margin_bottom = 114.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonHeader"]
-margin_right = 50.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Buttons"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonHeader"]
-margin_left = 50.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ButtonOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"]
-margin_top = 118.0
-margin_right = 498.0
-margin_bottom = 210.0
+layout_mode = 2
columns = 3
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_top = 3.0
-margin_right = 194.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Tool button size:"
[node name="ToolButtonSizeOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_left = 198.0
-margin_right = 392.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Small"
-items = [ "Small", null, false, 0, null, "Big", null, false, 1, null ]
+mouse_default_cursor_shape = 2
+item_count = 2
selected = 0
+popup/item_0/text = "Small"
+popup/item_0/id = 0
+popup/item_1/text = "Big"
+popup/item_1/id = 1
[node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_left = 396.0
-margin_top = 3.0
-margin_right = 498.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Icon color from:"
[node name="IconColorOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_top = 24.0
-margin_right = 194.0
-margin_bottom = 44.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Theme"
-items = [ "Theme", null, false, 0, null, "Custom", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "Theme"
+popup/item_0/id = 0
+popup/item_1/text = "Custom"
+popup/item_1/id = 1
[node name="Label3" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_left = 198.0
-margin_top = 27.0
-margin_right = 392.0
-margin_bottom = 41.0
+layout_mode = 2
text = "Icon color:"
[node name="IconColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_left = 396.0
-margin_top = 24.0
-margin_right = 498.0
-margin_bottom = 44.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 0.75, 0.75, 0.75, 1 )
+color = Color(0.75, 0.75, 0.75, 1)
[node name="Label4" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_top = 51.0
-margin_right = 194.0
-margin_bottom = 65.0
+layout_mode = 2
text = "Left tool color:"
[node name="LeftToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_left = 198.0
-margin_top = 48.0
-margin_right = 392.0
-margin_bottom = 68.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 0, 0.52549, 0.811765, 1 )
+color = Color(0, 0.52549, 0.811765, 1)
[node name="Label5" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_left = 396.0
-margin_top = 51.0
-margin_right = 498.0
-margin_bottom = 65.0
+layout_mode = 2
text = "Right tool color:"
[node name="RightToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"]
-margin_top = 72.0
-margin_right = 194.0
-margin_bottom = 92.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 0.992157, 0.427451, 0.0784314, 1 )
+color = Color(0.992157, 0.427451, 0.0784314, 1)
[node name="Canvas" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_right = 486.0
-margin_bottom = 572.0
+layout_mode = 2
[node name="ZoomHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_right = 486.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="ZoomLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomHeader"]
-margin_right = 37.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Zoom"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomHeader"]
-margin_left = 37.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ZoomOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 18.0
-margin_right = 486.0
-margin_bottom = 70.0
+layout_mode = 2
columns = 3
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"]
-margin_top = 5.0
-margin_right = 149.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 110, 0 )
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
text = "Smooth Zoom"
[node name="SmoothZoom" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"]
-margin_left = 153.0
-margin_right = 302.0
-margin_bottom = 24.0
-hint_tooltip = "Adds a smoother transition when zooming in or out"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+tooltip_text = "Adds a smoother transition when zooming in or out"
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"]
-margin_left = 306.0
-margin_top = 5.0
-margin_right = 486.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 110, 0 )
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
text = "Integer Zoom"
[node name="IntegerZoom" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"]
-margin_top = 28.0
-margin_right = 149.0
-margin_bottom = 52.0
-hint_tooltip = "Restricts the value to be an integer multiple of 100%"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Restricts the value to be an integer multiple of 100%"
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="GuideHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 74.0
-margin_right = 486.0
-margin_bottom = 88.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="GuideLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideHeader"]
-margin_right = 45.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Guides"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideHeader"]
-margin_left = 45.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="GuideOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 92.0
-margin_right = 486.0
-margin_bottom = 112.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="GuideColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideOptions"]
-margin_top = 3.0
-margin_right = 161.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 110, 0 )
-hint_tooltip = "A color of ruler guides displayed on the canvas"
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "A color of ruler guides displayed on the canvas"
+mouse_filter = 0
text = "Guides color:"
[node name="GuideColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideOptions"]
-margin_left = 165.0
-margin_right = 326.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 64, 20 )
-hint_tooltip = "A color of ruler guides displayed on the canvas"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
size_flags_horizontal = 3
-color = Color( 0.63, 0.13, 0.94, 1 )
+tooltip_text = "A color of ruler guides displayed on the canvas"
+mouse_default_cursor_shape = 2
+color = Color(0.63, 0.13, 0.94, 1)
[node name="SnappingHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 116.0
-margin_right = 486.0
-margin_bottom = 130.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="SnappingLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingHeader"]
-margin_right = 57.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Snapping"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingHeader"]
-margin_left = 57.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="SnappingOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 134.0
-margin_right = 486.0
-margin_bottom = 148.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="DistanceLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingOptions"]
-margin_right = 161.0
-margin_bottom = 14.0
-rect_min_size = Vector2( 110, 0 )
-hint_tooltip = "This is the distance in screen pixels where guide and grid snapping gets activated."
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "This is the distance in screen pixels where guide and grid snapping gets activated."
+mouse_filter = 0
text = "Snapping distance:"
-[node name="DistanceValue" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingOptions"]
-margin_left = 165.0
-margin_right = 326.0
-margin_bottom = 14.0
-hint_tooltip = "This is the distance in screen pixels where guide and grid snapping gets activated."
-mouse_default_cursor_shape = 2
+[node name="DistanceValue" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingOptions"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+tooltip_text = "This is the distance in screen pixels where guide and grid snapping gets activated."
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
max_value = 255.0
value = 32.0
@@ -540,75 +435,62 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
suffix = "px"
snap_step = 10.0
[node name="GridHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 152.0
-margin_right = 486.0
-margin_bottom = 166.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="GridLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridHeader"]
-margin_right = 27.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Grid"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridHeader"]
-margin_left = 27.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="GridOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 170.0
-margin_right = 486.0
-margin_bottom = 330.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="GridTypeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_top = 3.0
-margin_right = 160.0
-margin_bottom = 17.0
-hint_tooltip = "Sets the type of the grid between rectangular, isometric or both"
-mouse_filter = 0
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Sets the type of the grid between rectangular, isometric or both"
+mouse_filter = 0
text = "Grid type:"
-__meta__ = {
-"_editor_description_": ""
-}
[node name="GridType" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_left = 164.0
-margin_right = 323.0
-margin_bottom = 20.0
-hint_tooltip = "Sets the type of the grid between rectangular, isometric or both"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Rectangular"
-items = [ "Rectangular", null, false, 0, null, "Isometric", null, false, 1, null, "All", null, false, 2, null ]
+tooltip_text = "Sets the type of the grid between rectangular, isometric or both"
+mouse_default_cursor_shape = 2
+item_count = 3
selected = 0
+popup/item_0/text = "Rectangular"
+popup/item_0/id = 0
+popup/item_1/text = "Isometric"
+popup/item_1/id = 1
+popup/item_2/text = "All"
+popup/item_2/id = 2
[node name="GridSizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_left = 327.0
-margin_right = 486.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 110, 0 )
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_vertical = 1
+mouse_filter = 0
text = "Rectangular grid size:"
-[node name="GridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource( 7 )]
-margin_top = 24.0
-margin_right = 160.0
-margin_bottom = 76.0
+[node name="GridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource("7")]
+layout_mode = 2
size_flags_horizontal = 3
-value = Vector2( 2, 2 )
-min_value = Vector2( 1, 1 )
+value = Vector2(2, 2)
+min_value = Vector2(1, 1)
allow_greater = true
show_ratio = true
prefix_x = "Width:"
@@ -617,22 +499,16 @@ suffix_x = "px"
suffix_y = "px"
[node name="IsometricGridSizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_left = 164.0
-margin_top = 24.0
-margin_right = 323.0
-margin_bottom = 76.0
-mouse_filter = 0
+layout_mode = 2
size_flags_vertical = 1
+mouse_filter = 0
text = "Isometric grid size:"
-[node name="IsometricGridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource( 7 )]
-margin_left = 327.0
-margin_top = 24.0
-margin_right = 486.0
-margin_bottom = 76.0
+[node name="IsometricGridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource("7")]
+layout_mode = 2
size_flags_horizontal = 3
-value = Vector2( 16, 8 )
-min_value = Vector2( 2, 2 )
+value = Vector2(16, 8)
+min_value = Vector2(2, 2)
allow_greater = true
show_ratio = true
prefix_x = "Width:"
@@ -641,105 +517,80 @@ suffix_x = "px"
suffix_y = "px"
[node name="GridOffsetLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_top = 80.0
-margin_right = 160.0
-margin_bottom = 132.0
-hint_tooltip = "Sets grid's offset from the canvas origin (top left corner of the image)"
-mouse_filter = 0
+layout_mode = 2
size_flags_vertical = 1
+tooltip_text = "Sets grid's offset from the canvas origin (top left corner of the image)"
+mouse_filter = 0
text = "Grid offset:"
-[node name="GridOffsetValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource( 7 )]
-margin_left = 164.0
-margin_top = 80.0
-margin_right = 323.0
-margin_bottom = 132.0
-hint_tooltip = "Sets grid's offset from the canvas origin (top left corner of the image)"
+[node name="GridOffsetValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource("7")]
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Sets grid's offset from the canvas origin (top left corner of the image)"
allow_greater = true
allow_lesser = true
suffix_x = "px"
suffix_y = "px"
[node name="GridDrawOverTileModeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_left = 327.0
-margin_top = 99.0
-margin_right = 486.0
-margin_bottom = 113.0
-rect_min_size = Vector2( 110, 0 )
-hint_tooltip = "If disabled, the grid will be drawn only over the original image"
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
+tooltip_text = "If disabled, the grid will be drawn only over the original image"
mouse_filter = 0
text = "Draw over Tile Mode:"
[node name="GridDrawOverTileMode" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_top = 136.0
-margin_right = 160.0
-margin_bottom = 160.0
-hint_tooltip = "If disabled, the grid will be drawn only over the original image"
+layout_mode = 2
+tooltip_text = "If disabled, the grid will be drawn only over the original image"
mouse_default_cursor_shape = 2
text = "On"
[node name="GridColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_left = 164.0
-margin_top = 141.0
-margin_right = 323.0
-margin_bottom = 155.0
-hint_tooltip = "A color of the grid"
+layout_mode = 2
+tooltip_text = "A color of the grid"
mouse_filter = 0
text = "Grid color:"
[node name="GridColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"]
-margin_left = 327.0
-margin_top = 136.0
-margin_right = 486.0
-margin_bottom = 160.0
-rect_min_size = Vector2( 64, 20 )
-hint_tooltip = "A color of the grid"
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
+tooltip_text = "A color of the grid"
mouse_default_cursor_shape = 2
[node name="PixelGridHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 334.0
-margin_right = 486.0
-margin_bottom = 348.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="PixelGridLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridHeader"]
-margin_right = 62.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Pixel Grid"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridHeader"]
-margin_left = 62.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PixelGridOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 352.0
-margin_right = 486.0
-margin_bottom = 390.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="ShowAtZoomLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"]
-margin_right = 190.0
-margin_bottom = 14.0
-rect_min_size = Vector2( 110, 0 )
-hint_tooltip = "Sets the minimal zoom at which pixel grid will be shown"
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Sets the minimal zoom at which pixel grid will be shown"
+mouse_filter = 0
text = "Show at zoom:"
-[node name="ShowAtZoom" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"]
-margin_left = 194.0
-margin_right = 383.0
-margin_bottom = 14.0
-hint_tooltip = "Sets the minimal zoom at which pixel grid will be shown"
-mouse_default_cursor_shape = 2
+[node name="ShowAtZoom" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+tooltip_text = "Sets the minimal zoom at which pixel grid will be shown"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 50.0
max_value = 15000.0
step = 50.0
@@ -750,70 +601,57 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
suffix = "%"
snap_step = 100.0
[node name="GridColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"]
-margin_left = 387.0
-margin_right = 486.0
-margin_bottom = 14.0
-hint_tooltip = "A color of the pixel grid"
+layout_mode = 2
+tooltip_text = "A color of the pixel grid"
mouse_filter = 0
text = "Pixel grid color:"
[node name="GridColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"]
-margin_top = 18.0
-margin_right = 190.0
-margin_bottom = 38.0
-rect_min_size = Vector2( 64, 20 )
-hint_tooltip = "A color of the pixel grid"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "A color of the pixel grid"
+mouse_default_cursor_shape = 2
[node name="TransparencyHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 394.0
-margin_right = 486.0
-margin_bottom = 408.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="TransparencyLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/TransparencyHeader"]
-margin_right = 84.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Transparency"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/TransparencyHeader"]
-margin_left = 84.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="CheckerOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 412.0
-margin_right = 486.0
-margin_bottom = 506.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="SizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_right = 162.0
-margin_bottom = 14.0
-rect_min_size = Vector2( 110, 0 )
-hint_tooltip = "Size of the transparent checker background"
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Size of the transparent checker background"
+mouse_filter = 0
text = "Checker size:"
-[node name="CheckerSizeValue" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 166.0
-margin_right = 314.0
-margin_bottom = 14.0
-hint_tooltip = "Size of the transparent checker background"
-mouse_default_cursor_shape = 2
+[node name="CheckerSizeValue" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+tooltip_text = "Size of the transparent checker background"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
max_value = 1000.0
value = 10.0
@@ -823,94 +661,69 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
snap_step = 10.0
[node name="CheckerColor1Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 318.0
-margin_right = 486.0
-margin_bottom = 14.0
-hint_tooltip = "First color of the transparent checker background"
+layout_mode = 2
+tooltip_text = "First color of the transparent checker background"
mouse_filter = 0
text = "Checker color 1:"
[node name="CheckerColor1" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_top = 18.0
-margin_right = 162.0
-margin_bottom = 38.0
-rect_min_size = Vector2( 64, 20 )
-hint_tooltip = "First color of the transparent checker background"
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
+tooltip_text = "First color of the transparent checker background"
mouse_default_cursor_shape = 2
-color = Color( 0.470588, 0.470588, 0.470588, 1 )
+color = Color(0.470588, 0.470588, 0.470588, 1)
[node name="CheckerColor2Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 166.0
-margin_top = 21.0
-margin_right = 314.0
-margin_bottom = 35.0
-hint_tooltip = "Second color of the transparent checker background"
+layout_mode = 2
+tooltip_text = "Second color of the transparent checker background"
mouse_filter = 0
text = "Checker color 2:"
[node name="CheckerColor2" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 318.0
-margin_top = 18.0
-margin_right = 486.0
-margin_bottom = 38.0
-rect_min_size = Vector2( 64, 20 )
-hint_tooltip = "Second color of the transparent checker background"
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
+tooltip_text = "Second color of the transparent checker background"
mouse_default_cursor_shape = 2
-color = Color( 0.341176, 0.34902, 0.341176, 1 )
+color = Color(0.341176, 0.34902, 0.341176, 1)
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_top = 47.0
-margin_right = 162.0
-margin_bottom = 61.0
-rect_min_size = Vector2( 110, 0 )
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
text = "Follow Canvas Movement"
[node name="CheckerFollowMovement" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 166.0
-margin_top = 42.0
-margin_right = 314.0
-margin_bottom = 66.0
-hint_tooltip = "The transparent checker follow the movement of canvas"
+layout_mode = 2
+tooltip_text = "The transparent checker follow the movement of canvas"
mouse_default_cursor_shape = 2
text = "On"
[node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 318.0
-margin_top = 47.0
-margin_right = 486.0
-margin_bottom = 61.0
-rect_min_size = Vector2( 110, 0 )
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
text = "Follow Canvas Zoom Level"
[node name="CheckerFollowScale" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_top = 70.0
-margin_right = 162.0
-margin_bottom = 94.0
-hint_tooltip = "The transparent checker follow the zoom level of canvas"
+layout_mode = 2
+tooltip_text = "The transparent checker follow the zoom level of canvas"
mouse_default_cursor_shape = 2
text = "On"
[node name="Label3" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 166.0
-margin_top = 75.0
-margin_right = 314.0
-margin_bottom = 89.0
-rect_min_size = Vector2( 110, 0 )
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
mouse_filter = 0
text = "Tile mode opacity:"
-[node name="TileModeOpacity" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
-margin_left = 318.0
-margin_top = 70.0
-margin_right = 486.0
-margin_bottom = 94.0
-mouse_default_cursor_shape = 2
+[node name="TileModeOpacity" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 1.0
step = 0.01
value = 1.0
@@ -919,795 +732,581 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
snap_step = 0.1
[node name="BackgroundHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 510.0
-margin_right = 486.0
-margin_bottom = 524.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundHeader"]
-margin_right = 74.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Background"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundHeader"]
-margin_left = 74.0
-margin_right = 486.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="BackgroundOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"]
-margin_top = 528.0
-margin_right = 486.0
-margin_bottom = 572.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="ColorFromLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"]
-margin_top = 3.0
-margin_right = 182.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 110, 0 )
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+mouse_filter = 0
text = "Background color from:"
[node name="ColorOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"]
-margin_left = 186.0
-margin_right = 368.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Theme"
-items = [ "Theme", null, false, 0, null, "Custom", null, false, 1, null ]
+mouse_default_cursor_shape = 2
+item_count = 2
selected = 0
+popup/item_0/text = "Theme"
+popup/item_0/id = 0
+popup/item_1/text = "Custom"
+popup/item_1/id = 1
[node name="ColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"]
-margin_left = 372.0
-margin_top = 3.0
-margin_right = 486.0
-margin_bottom = 17.0
+layout_mode = 2
mouse_filter = 0
text = "Background color:"
[node name="BackgroundColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"]
-margin_top = 24.0
-margin_right = 182.0
-margin_bottom = 44.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 0.470588, 0.470588, 0.470588, 1 )
+color = Color(0.470588, 0.470588, 0.470588, 1)
[node name="Timeline" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 28.0
-margin_right = 498.0
-margin_bottom = 94.0
+layout_mode = 2
[node name="TimelineHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Timeline"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="TimelineOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline"]
-margin_right = 498.0
-margin_bottom = 48.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="SelectLayerOnButtonLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"]
-margin_top = 5.0
-margin_right = 176.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 110, 0 )
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+mouse_filter = 0
text = "Select layer when clicking on one of its buttons:"
[node name="SelectLayerOnButton" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"]
-margin_left = 180.0
-margin_right = 275.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "On"
[node name="OnionSkinningPastColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"]
-margin_left = 279.0
-margin_top = 5.0
-margin_right = 374.0
-margin_bottom = 19.0
+layout_mode = 2
mouse_filter = 0
text = "Onion skinning past color:"
[node name="OnionSkinningPastColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"]
-margin_top = 28.0
-margin_right = 176.0
-margin_bottom = 48.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 1, 0, 0, 1 )
+color = Color(1, 0, 0, 1)
[node name="OnionSkinningFutureColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"]
-margin_left = 180.0
-margin_top = 31.0
-margin_right = 275.0
-margin_bottom = 45.0
+layout_mode = 2
mouse_filter = 0
text = "Onion skinning future color:"
[node name="OnionSkinningFutureColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"]
-margin_left = 279.0
-margin_top = 28.0
-margin_right = 374.0
-margin_bottom = 48.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 0, 0, 1, 1 )
+color = Color(0, 0, 1, 1)
[node name="Selection" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 28.0
-margin_right = 498.0
-margin_bottom = 76.0
+layout_mode = 2
[node name="SelectionHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Selection"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="SelectionOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection"]
-margin_right = 498.0
-margin_bottom = 48.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="AnimateLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"]
-margin_top = 5.0
-margin_right = 176.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 110, 0 )
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+mouse_filter = 0
text = "Animated selection borders"
[node name="Animate" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"]
-margin_left = 180.0
-margin_right = 275.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="BorderColor1Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"]
-margin_left = 279.0
-margin_top = 5.0
-margin_right = 374.0
-margin_bottom = 19.0
+layout_mode = 2
mouse_filter = 0
text = "Border color 1:"
[node name="BorderColor1" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"]
-margin_top = 28.0
-margin_right = 176.0
-margin_bottom = 48.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 1, 1, 1, 1 )
+color = Color(1, 1, 1, 1)
[node name="BorderColor2Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"]
-margin_left = 180.0
-margin_top = 31.0
-margin_right = 275.0
-margin_bottom = 45.0
+layout_mode = 2
mouse_filter = 0
text = "Border color 2:"
[node name="BorderColor2" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"]
-margin_left = 279.0
-margin_top = 28.0
-margin_right = 374.0
-margin_bottom = 48.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
mouse_default_cursor_shape = 2
[node name="Shortcuts" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 74.0
-margin_right = 498.0
-margin_bottom = 406.0
+layout_mode = 2
size_flags_vertical = 3
[node name="ShortcutHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts"]
-margin_right = 498.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts/ShortcutHeader"]
-margin_right = 60.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Shortcuts"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts/ShortcutHeader"]
-margin_left = 60.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
-[node name="ShortcutEdit" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts" instance=ExtResource( 3 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_top = 18.0
-margin_right = 498.0
-margin_bottom = 332.0
+[node name="ShortcutEdit" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts" instance=ExtResource("3")]
+layout_mode = 2
[node name="Backup" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 184.0
-margin_right = 498.0
-margin_bottom = 254.0
+layout_mode = 2
[node name="BackupHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/BackupHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Backup"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/BackupHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="AutosaveContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup"]
-margin_top = 18.0
-margin_right = 498.0
-margin_bottom = 70.0
+layout_mode = 2
columns = 3
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"]
-margin_top = 5.0
-margin_right = 115.0
-margin_bottom = 19.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Enable autosave"
[node name="EnableAutosave" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"]
-margin_left = 119.0
-margin_right = 214.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="AutosaveIntervalLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"]
-margin_top = 33.0
-margin_right = 115.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Autosave interval:"
[node name="AutosaveInterval" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"]
-margin_left = 119.0
-margin_top = 28.0
-margin_right = 214.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 95, 0 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(95, 0)
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 0.1
max_value = 30.0
step = 0.25
-value = 1.0
-align = 2
+value = 1.1
suffix = "minute(s)"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="Performance" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 28.0
-margin_right = 500.0
-margin_bottom = 80.0
+layout_mode = 2
[node name="PerformanceHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Performance"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PerformanceContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance"]
-margin_right = 500.0
-margin_bottom = 52.0
+layout_mode = 2
columns = 3
[node name="SetFPSLimitLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
-margin_top = 5.0
-margin_right = 158.0
-margin_bottom = 19.0
-hint_tooltip = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
-mouse_filter = 0
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
+mouse_filter = 0
text = "Set application FPS limit:"
[node name="SetFPSLimit" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
-margin_left = 162.0
-margin_right = 257.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 95, 0 )
-hint_tooltip = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(95, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit."
+mouse_default_cursor_shape = 2
max_value = 144.0
-align = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="PauseAppFocusLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
-margin_left = 261.0
-margin_top = 5.0
-margin_right = 500.0
-margin_bottom = 19.0
-hint_tooltip = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window."
+layout_mode = 2
+tooltip_text = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window."
mouse_filter = 0
text = "Pause application when it loses focus"
[node name="PauseAppFocus" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"]
-margin_top = 28.0
-margin_right = 158.0
-margin_bottom = 52.0
-hint_tooltip = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window."
+layout_mode = 2
+tooltip_text = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window."
mouse_default_cursor_shape = 2
-pressed = true
+button_pressed = true
text = "On"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="Drivers" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 74.0
-margin_right = 498.0
-margin_bottom = 112.0
+layout_mode = 2
[node name="DriversHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers"]
-margin_right = 498.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversHeader"]
-margin_right = 46.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Drivers"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversHeader"]
-margin_left = 46.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="DriversContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers"]
-margin_top = 18.0
-margin_right = 498.0
-margin_bottom = 38.0
+layout_mode = 2
columns = 3
[node name="RendererLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"]
-margin_top = 3.0
-margin_right = 164.0
-margin_bottom = 17.0
-mouse_filter = 0
+layout_mode = 2
size_flags_horizontal = 3
+mouse_filter = 0
text = "Renderer:"
[node name="Renderer" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"]
-margin_left = 168.0
-margin_right = 331.0
-margin_bottom = 20.0
-hint_tooltip = "Specifies the renderer/video driver being used. GLES2 is better for older and low-end devices, but GLES3 may offer more features."
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "GLES2"
-items = [ "GLES3", null, false, 0, null, "GLES2", null, false, 1, null ]
-selected = 1
+tooltip_text = "Specifies the renderer/video driver being used. GLES2 is better for older and low-end devices, but GLES3 may offer more features."
+mouse_default_cursor_shape = 2
+disabled = true
+item_count = 2
+selected = 0
+popup/item_0/text = "OpenGL"
+popup/item_0/id = 0
+popup/item_1/text = "Vulkan"
+popup/item_1/id = 1
[node name="TabletDriverLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"]
unique_name_in_owner = true
visible = false
-margin_left = 335.0
-margin_top = 3.0
-margin_right = 498.0
-margin_bottom = 17.0
-mouse_filter = 0
+layout_mode = 2
size_flags_horizontal = 3
+mouse_filter = 0
text = "Tablet driver:"
[node name="TabletDriver" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"]
unique_name_in_owner = true
visible = false
-margin_left = 335.0
-margin_right = 498.0
-margin_bottom = 20.0
-hint_tooltip = "Specifies the tablet driver being used on Windows. If you have Windows Ink enabled, select winink."
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Specifies the tablet driver being used on Windows. If you have Windows Ink enabled, select winink."
+mouse_default_cursor_shape = 2
[node name="Extensions" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 56.0
-margin_right = 498.0
-margin_bottom = 65.0
-script = ExtResource( 2 )
+layout_mode = 2
+script = ExtResource("2")
[node name="ExtensionsHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/ExtensionsHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Extensions"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/ExtensionsHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="InstalledExtensions" type="ItemList" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions"]
-margin_right = 498.0
-margin_bottom = 9.0
+layout_mode = 2
auto_height = true
[node name="HBoxContainer" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions"]
-margin_right = 40.0
-margin_bottom = 40.0
+layout_mode = 2
[node name="AddExtensionButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"]
-margin_right = 91.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Add Extension"
[node name="EnableButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"]
-margin_right = 91.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
disabled = true
text = "Enable"
[node name="UninstallButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"]
-margin_right = 91.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
disabled = true
text = "Uninstall"
[node name="OpenFolderButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"]
-margin_right = 12.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Open Folder"
[node name="Cursors" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 56.0
-margin_right = 525.0
-margin_bottom = 164.0
+layout_mode = 2
[node name="CursorsHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Cursors"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="CursorsContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors"]
-margin_right = 525.0
-margin_bottom = 108.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_top = 5.0
-margin_right = 126.0
-margin_bottom = 19.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Left pixel indicator"
[node name="LeftIndicatorCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 130.0
-margin_right = 354.0
-margin_bottom = 24.0
-hint_tooltip = "Show left mouse pixel indicator or brush on the canvas when drawing"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+tooltip_text = "Show left mouse pixel indicator or brush on the canvas when drawing"
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 358.0
-margin_top = 5.0
-margin_right = 525.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Right pixel indicator"
[node name="RightIndicatorCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_top = 28.0
-margin_right = 126.0
-margin_bottom = 52.0
-hint_tooltip = "Show right mouse pixel indicator or brush on the canvas when drawing"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Show right mouse pixel indicator or brush on the canvas when drawing"
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="Label3" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 130.0
-margin_top = 33.0
-margin_right = 354.0
-margin_bottom = 47.0
+layout_mode = 2
text = "Show left tool icon"
[node name="LeftToolIconCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 358.0
-margin_top = 28.0
-margin_right = 525.0
-margin_bottom = 52.0
-hint_tooltip = "Displays an icon of the selected left tool next to the cursor on the canvas"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+tooltip_text = "Displays an icon of the selected left tool next to the cursor on the canvas"
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="Label4" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_top = 61.0
-margin_right = 126.0
-margin_bottom = 75.0
+layout_mode = 2
text = "Show right tool icon"
[node name="RightToolIconCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 130.0
-margin_top = 56.0
-margin_right = 354.0
-margin_bottom = 80.0
-hint_tooltip = "Displays an icon of the selected right tool next to the cursor on the canvas"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+tooltip_text = "Displays an icon of the selected right tool next to the cursor on the canvas"
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "On"
[node name="Label5" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 358.0
-margin_top = 61.0
-margin_right = 525.0
-margin_bottom = 75.0
+layout_mode = 2
text = "Use native mouse cursors"
[node name="NativeCursorsCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_top = 84.0
-margin_right = 126.0
-margin_bottom = 108.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "On"
[node name="Label6" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 130.0
-margin_top = 89.0
-margin_right = 354.0
-margin_bottom = 103.0
+layout_mode = 2
text = "Use cross cursor for the canvas"
[node name="CrossCursorCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"]
-margin_left = 358.0
-margin_top = 84.0
-margin_right = 525.0
-margin_bottom = 108.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-pressed = true
+button_pressed = true
text = "On"
[node name="Image" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"]
visible = false
-margin_top = 240.0
-margin_right = 506.0
-margin_bottom = 316.0
+layout_mode = 2
[node name="ImageHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image"]
-margin_top = 108.0
-margin_right = 498.0
-margin_bottom = 122.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageHeader"]
-margin_right = 51.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Image"
[node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageHeader"]
-margin_left = 51.0
-margin_right = 498.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ImageOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image"]
-margin_right = 506.0
-margin_bottom = 76.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 3
[node name="DefaultWidthLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"]
-margin_top = 5.0
-margin_right = 110.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 110, 0 )
-hint_tooltip = "A default width of a new image"
-mouse_filter = 0
+custom_minimum_size = Vector2(110, 0)
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "A default width of a new image"
+mouse_filter = 0
text = "Default width:"
[node name="ImageDefaultWidth" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"]
-margin_left = 114.0
-margin_right = 188.0
-margin_bottom = 24.0
-hint_tooltip = "A default width of a new image"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "A default width of a new image"
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
rounded = true
-align = 2
suffix = "px"
[node name="DefaultHeightLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"]
-margin_top = 33.0
-margin_right = 110.0
-margin_bottom = 47.0
-hint_tooltip = "A default height of a new image"
+layout_mode = 2
+tooltip_text = "A default height of a new image"
mouse_filter = 0
text = "Default height:"
[node name="ImageDefaultHeight" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"]
-margin_left = 114.0
-margin_top = 28.0
-margin_right = 188.0
-margin_bottom = 52.0
-hint_tooltip = "A default height of a new image"
+layout_mode = 2
+tooltip_text = "A default height of a new image"
mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
rounded = true
-align = 2
suffix = "px"
[node name="DefaultFillColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"]
-margin_top = 59.0
-margin_right = 110.0
-margin_bottom = 73.0
-hint_tooltip = "A default background color of a new image"
+layout_mode = 2
+tooltip_text = "A default background color of a new image"
mouse_filter = 0
text = "Default fill color:"
[node name="DefaultFillColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"]
-margin_left = 114.0
-margin_top = 56.0
-margin_right = 188.0
-margin_bottom = 76.0
-rect_min_size = Vector2( 64, 20 )
-hint_tooltip = "A default background color of a new image"
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
+tooltip_text = "A default background color of a new image"
mouse_default_cursor_shape = 2
-color = Color( 0, 0, 0, 0 )
+color = Color(0, 0, 0, 0)
[node name="MustRestart" type="HBoxContainer" parent="HSplitContainer/VBoxContainer"]
unique_name_in_owner = true
visible = false
-margin_top = 392.0
-margin_right = 498.0
-margin_bottom = 406.0
+layout_mode = 2
[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/MustRestart"]
-margin_right = 359.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Pixelorama must be restarted for changes to take effect."
[node name="Popups" type="Node" parent="."]
[node name="AddExtensionFileDialog" type="FileDialog" parent="Popups"]
-margin_right = 429.0
-margin_bottom = 356.0
-rect_min_size = Vector2( 172, 60.2 )
-window_title = "Open File(s)"
-resizable = true
mode = 1
access = 2
-filters = PoolStringArray( "*.pck ; Godot Resource Pack File", "*.zip ;" )
+filters = PackedStringArray("*.pck ; Godot Resource Pack File", "*.zip ;")
show_hidden_files = true
-[connection signal="about_to_show" from="." to="." method="_on_PreferencesDialog_about_to_show"]
-[connection signal="popup_hide" from="." to="." method="_on_PreferencesDialog_popup_hide"]
+[connection signal="about_to_popup" from="." to="." method="_on_PreferencesDialog_about_to_show"]
+[connection signal="visibility_changed" from="." to="." method="_on_PreferencesDialog_visibility_changed"]
[connection signal="item_selected" from="HSplitContainer/List" to="." method="_on_List_item_selected"]
-[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/System Language" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language" method="_on_Language_pressed" binds= [ 1 ]]
+[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/System Language" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language" method="_on_Language_pressed" binds= [1]]
[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer/ShrinkApplyButton" to="." method="_on_ShrinkApplyButton_pressed"]
+[connection signal="empty_clicked" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/InstalledExtensions" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_InstalledExtensions_empty_clicked"]
[connection signal="item_selected" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/InstalledExtensions" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_InstalledExtensions_item_selected"]
-[connection signal="nothing_selected" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/InstalledExtensions" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_InstalledExtensions_nothing_selected"]
[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/AddExtensionButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_AddExtensionButton_pressed"]
[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/EnableButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_EnableButton_pressed"]
[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/UninstallButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_UninstallButton_pressed"]
diff --git a/src/Preferences/RestoreDefaultButton.gd b/src/Preferences/RestoreDefaultButton.gd
index cb5b7c6b133..5bc8bd1b4a3 100644
--- a/src/Preferences/RestoreDefaultButton.gd
+++ b/src/Preferences/RestoreDefaultButton.gd
@@ -1,3 +1,4 @@
+class_name RestoreDefaultButton
extends TextureButton
var setting_name: String
@@ -8,13 +9,19 @@ var node: Node
func _ready() -> void:
+ disabled = true
modulate = Global.modulate_icon_color
+ texture_normal = preload("res://assets/graphics/misc/icon_reload.png")
+ texture_disabled = ImageTexture.new()
+ size_flags_horizontal = Control.SIZE_SHRINK_END
+ size_flags_vertical = Control.SIZE_SHRINK_CENTER
+ pressed.connect(_on_RestoreDefaultButton_pressed)
func _on_RestoreDefaultButton_pressed() -> void:
Global.set(setting_name, default_value)
if not require_restart:
Global.config_cache.set_value("preferences", setting_name, default_value)
- Global.preferences_dialog.preference_update(setting_name, require_restart)
+ Global.preferences_dialog.preference_update(require_restart)
Global.preferences_dialog.disable_restore_default_button(self, true)
node.set(value_type, default_value)
diff --git a/src/Preferences/RestoreDefaultButton.tscn b/src/Preferences/RestoreDefaultButton.tscn
deleted file mode 100644
index abebe2aec35..00000000000
--- a/src/Preferences/RestoreDefaultButton.tscn
+++ /dev/null
@@ -1,18 +0,0 @@
-[gd_scene load_steps=4 format=2]
-
-[ext_resource path="res://assets/graphics/misc/icon_reload.png" type="Texture" id=1]
-[ext_resource path="res://src/Preferences/RestoreDefaultButton.gd" type="Script" id=2]
-
-[sub_resource type="ImageTexture" id=1]
-
-[node name="RestoreDefaultButton" type="TextureButton" groups=["UIButtons"]]
-margin_right = 16.0
-margin_bottom = 16.0
-size_flags_horizontal = 8
-size_flags_vertical = 4
-disabled = true
-texture_normal = ExtResource( 1 )
-texture_disabled = SubResource( 1 )
-script = ExtResource( 2 )
-
-[connection signal="pressed" from="." to="." method="_on_RestoreDefaultButton_pressed"]
diff --git a/src/Preferences/ThemeColorPreview.tscn b/src/Preferences/ThemeColorPreview.tscn
index e0dfb6c5451..4b3efb17114 100644
--- a/src/Preferences/ThemeColorPreview.tscn
+++ b/src/Preferences/ThemeColorPreview.tscn
@@ -1,23 +1,23 @@
[gd_scene format=2]
[node name="ThemeColorPreview" type="ColorRect"]
-margin_right = 50.0
-margin_bottom = 14.0
-rect_min_size = Vector2( 50, 16 )
+offset_right = 50.0
+offset_bottom = 14.0
+custom_minimum_size = Vector2( 50, 16 )
color = Color( 0.380392, 0.384314, 0.380392, 1 )
[node name="HBoxContainer" type="HBoxContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 3.0
-margin_top = 3.0
-margin_right = -3.0
-margin_bottom = -3.0
+offset_left = 3.0
+offset_top = 3.0
+offset_right = -3.0
+offset_bottom = -3.0
[node name="ColorRect" type="ColorRect" parent="HBoxContainer"]
-margin_right = 20.0
-margin_bottom = 10.0
-rect_min_size = Vector2( 20, 10 )
+offset_right = 20.0
+offset_bottom = 10.0
+custom_minimum_size = Vector2( 20, 10 )
size_flags_horizontal = 3
color = Color( 0.152941, 0.152941, 0.152941, 1 )
__meta__ = {
@@ -25,10 +25,10 @@ __meta__ = {
}
[node name="ColorRect2" type="ColorRect" parent="HBoxContainer"]
-margin_left = 24.0
-margin_right = 44.0
-margin_bottom = 10.0
-rect_min_size = Vector2( 20, 10 )
+offset_left = 24.0
+offset_right = 44.0
+offset_bottom = 10.0
+custom_minimum_size = Vector2( 20, 10 )
size_flags_horizontal = 3
color = Color( 0.411765, 0.411765, 0.411765, 1 )
__meta__ = {
diff --git a/src/Shaders/AutoInvertColors.shader b/src/Shaders/AutoInvertColors.gdshader
similarity index 71%
rename from src/Shaders/AutoInvertColors.shader
rename to src/Shaders/AutoInvertColors.gdshader
index 8263d02051e..0f28ee86914 100644
--- a/src/Shaders/AutoInvertColors.shader
+++ b/src/Shaders/AutoInvertColors.gdshader
@@ -1,12 +1,13 @@
shader_type canvas_item;
+uniform sampler2D screen_texture : hint_screen_texture;
void fragment() {
vec4 color = texture(TEXTURE, UV);
COLOR = color;
vec3 inverted = vec3(1.0) - color.rgb;
- vec3 screen_color = textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0).rgb;
+ vec3 screen_color = textureLod(screen_texture, SCREEN_UV, 0.0).rgb;
float screen_avg = (screen_color.r + screen_color.g + screen_color.b) / 3.0;
-
+
COLOR.rgb = inverted * step(0.5, screen_avg) + color.rgb * step(screen_avg, 0.5);
}
diff --git a/src/Shaders/ColorReplace.shader b/src/Shaders/ColorReplace.gdshader
similarity index 93%
rename from src/Shaders/ColorReplace.shader
rename to src/Shaders/ColorReplace.gdshader
index 28d343b71e7..472bb2471f8 100644
--- a/src/Shaders/ColorReplace.shader
+++ b/src/Shaders/ColorReplace.gdshader
@@ -3,7 +3,7 @@ render_mode unshaded;
uniform vec2 size;
-uniform vec4 old_color; //Our description
+uniform vec4 old_color;
uniform vec4 new_color;
uniform float similarity_percent : hint_range(0.0, 100.0);
@@ -22,8 +22,8 @@ void fragment() { // applies on each pixel separately
vec4 col = original_color; // Innocent till proven guilty
- float max_diff = distance(original_color, old_color); // How much this pixel matches our description
-
+ float max_diff = distance(original_color, old_color); // How much this pixel matches our description
+
float similarity = abs(2.0 - ((similarity_percent/100.0) * 2.0));
if (max_diff <= similarity) // We found our match and pixel is proven guilty (small is precise)
diff --git a/src/Shaders/ColorSelect.gdshader b/src/Shaders/ColorSelect.gdshader
index 52b777df41f..bcb6f84325b 100644
--- a/src/Shaders/ColorSelect.gdshader
+++ b/src/Shaders/ColorSelect.gdshader
@@ -1,13 +1,13 @@
shader_type canvas_item;
render_mode unshaded;
-uniform sampler2D selection : hint_black;
+uniform sampler2D selection : hint_default_black;
uniform vec4 color;
uniform float similarity_percent : hint_range(0.0, 100.0);
uniform int operation = 0; // 0 = add, 1 = subtract, 2 = intersect
void fragment() {
- vec4 original_color = texture(TEXTURE, UV);
+ vec4 original_color = texture(TEXTURE, UV);
float diff = distance(original_color, color);
float similarity = abs(2.0 - ((similarity_percent/100.0) * 2.0));
vec4 col = texture(selection, UV);
diff --git a/src/Shaders/Desaturate.shader b/src/Shaders/Desaturate.gdshader
similarity index 99%
rename from src/Shaders/Desaturate.shader
rename to src/Shaders/Desaturate.gdshader
index d3306a8ca7f..c27ecbeed2e 100644
--- a/src/Shaders/Desaturate.shader
+++ b/src/Shaders/Desaturate.gdshader
@@ -8,7 +8,7 @@ uniform bool alpha;
uniform sampler2D selection;
float stolChannel(float x) {
- return (x < 0.04045) ? (x / 12.92) : pow((x + 0.055) / 1.055, 2.4);
+ return (x < 0.04045) ? (x / 12.92) : pow((x + 0.055) / 1.055, 2.4);
}
vec3 standardToLinear(vec3 c) {
@@ -39,7 +39,7 @@ void fragment() {
// Get color from the sprite texture at the current pixel we are rendering
vec4 original_color = texture(TEXTURE, UV);
vec4 selection_color = texture(selection, UV);
-
+
// Transform from standard RGB to linear RGB.
vec3 std = original_color.rgb;
vec3 lin = standardToLinear(std);
diff --git a/src/Shaders/DropShadow.tres b/src/Shaders/DropShadow.gdshader
similarity index 92%
rename from src/Shaders/DropShadow.tres
rename to src/Shaders/DropShadow.gdshader
index 5e2be92e266..66c0a426b81 100644
--- a/src/Shaders/DropShadow.tres
+++ b/src/Shaders/DropShadow.gdshader
@@ -1,7 +1,4 @@
-[gd_resource type="Shader" format=2]
-
-[resource]
-code = "shader_type canvas_item;
+shader_type canvas_item;
render_mode unshaded;
uniform vec2 shadow_offset; // Offset, in pixel coordinate [0, 1, 2, and so on]
@@ -16,19 +13,19 @@ void fragment() {
shadow *= shadow_color.a; // Multiply this mask by shadow alpha
shadow = mix(0.0, shadow, texture(selection, UV).a); // Clip shadow by selection mask
shadow = mix(shadow, 0.0, original.a); // Erase shadow alpha on original area
-
+
// Make a border to prevent stretching pixels on the edge
vec2 border_uv = UV - offset;
border_uv -= 0.5;
border_uv *= 2.0;
border_uv = abs(border_uv);
-
+
float border = max(border_uv.x, border_uv.y);
border = floor(border);
border = 1.0 - clamp(border, 0.0, 1.0);
-
+
shadow *= border; // Clip shadow by border so no more stretching
-
+
COLOR.rgb = mix(original.rgb, shadow_color.rgb, shadow); // Set color on shadow area
COLOR.a = mix(original.a, 1.0, shadow); // Combine alpha
-}"
+}
diff --git a/src/Shaders/Gradients/Linear.gdshader b/src/Shaders/Gradients/Linear.gdshader
index 6a72c2aeb6b..d1704945e71 100644
--- a/src/Shaders/Gradients/Linear.gdshader
+++ b/src/Shaders/Gradients/Linear.gdshader
@@ -4,8 +4,8 @@ render_mode unshaded;
uniform sampler2D selection;
uniform sampler2D gradient_texture;
uniform float position : hint_range(-0.5, 0.5) = 0.0;
-uniform float angle : hint_range(0.0, 360.0) = 0.0;
uniform float size : hint_range(0.01, 2.0) = 1.0;
+uniform float angle : hint_range(0.0, 360.0) = 0.0;
uniform vec2 center = vec2(0.5);
uniform vec2 radius = vec2(1.0);
uniform int shape = 0; // 0 = linear, 1 = radial
@@ -18,7 +18,7 @@ float modify_uv(vec2 uv) {
vec2 uv_offsetted = uv - 0.5;
float angle_cos = cos(radians(angle));
float angle_sin = sin(radians(angle));
- modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin;
+ modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin;
modified_uv /= abs(angle_cos) + abs(angle_sin);
modified_uv /= size;
float pivot = position / size;
@@ -35,12 +35,12 @@ float modify_uv(vec2 uv) {
float mirror_fract(float uv) {
- int sign_uv = (int(sign(uv)) - 1) / 2;
+ int sign_uv = (int(sign(uv)) - 1) / 2; // returns -1 for negative sign and 0 for positive
if (int((uv)) % 2 == sign_uv)
uv = fract(uv);
else
uv = fract(1.0 - uv);
-
+
return uv;
}
diff --git a/src/Shaders/Gradients/LinearDithering.gdshader b/src/Shaders/Gradients/LinearDithering.gdshader
index 02d4ed26332..4c802697092 100644
--- a/src/Shaders/Gradients/LinearDithering.gdshader
+++ b/src/Shaders/Gradients/LinearDithering.gdshader
@@ -1,11 +1,10 @@
shader_type canvas_item;
render_mode unshaded;
+uniform sampler2D selection;
uniform sampler2D gradient_texture;
-uniform sampler2D dither_texture;
+uniform sampler2D dither_texture : repeat_enable;
uniform sampler2D offset_texture;
-uniform sampler2D selection;
-uniform vec2 image_size = vec2(64.0);
uniform float position : hint_range(-0.5, 0.5) = 0.0;
uniform float size : hint_range(0.01, 2.0) = 1.0;
uniform float angle : hint_range(0.0, 360.0) = 0.0;
@@ -13,8 +12,6 @@ uniform vec2 center = vec2(0.5);
uniform vec2 radius = vec2(1.0);
uniform int shape = 0; // 0 = linear, 1 = radial
uniform int repeat = 0; // 0 = none, 1 = repeat, 2 = mirrored, 3 = truncate
-uniform int pixel_size : hint_range(2, 16) = 2;
-uniform int n_of_colors = 2;
float modify_uv(vec2 uv) {
@@ -23,7 +20,7 @@ float modify_uv(vec2 uv) {
vec2 uv_offsetted = uv - 0.5;
float angle_cos = cos(radians(angle));
float angle_sin = sin(radians(angle));
- modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin;
+ modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin;
modified_uv /= abs(angle_cos) + abs(angle_sin);
modified_uv /= size;
float pivot = position / size;
@@ -45,15 +42,16 @@ float mirror_fract(float uv) {
uv = fract(uv);
else
uv = fract(1.0 - uv);
-
+
return uv;
}
// Logic taken from https://godotshaders.com/shader/dither-gradient-shader/
-float dither(vec2 uv, float modified_uv) {
+float dither(vec2 uv, float modified_uv, ivec2 image_size) {
float uv_lower = floor(modified_uv);
float uv_upper = floor(modified_uv) + 1.0;
- float threshold = texture(dither_texture, uv * (image_size / float(pixel_size))).r;
+ ivec2 pixel_size = textureSize(dither_texture, 0);
+ float threshold = texture(dither_texture, uv * vec2(image_size / pixel_size.x)).r;
float ramp_val = modified_uv < threshold ? 0.0 : 1.0;
// sample at the lower bound colour if ramp_val is 0.0, upper bound color if 1.0
float col_sample = mix(uv_lower, uv_upper, ramp_val);
@@ -70,13 +68,9 @@ void fragment() {
else if (repeat == 2)
modified_uv = mirror_fract(modified_uv);
+ int n_of_colors = textureSize(offset_texture, 0).x;
vec4 output;
- // Note for the future, please remember to change 100 to n_of_colors when we
- // use GLES3 for the Web version. A constant number is used to make it work in WebGL 1.0.
- for (int i = 1; i <= 100; i++) {
- if(i > n_of_colors) {
- break;
- }
+ for (int i = 1; i <= n_of_colors; i++) {
float colors_minus = float(n_of_colors - 1);
float off = texture(offset_texture, vec2(float(i) / colors_minus)).r;
float off_prev = texture(offset_texture, vec2(float(i - 1) / colors_minus)).r;
@@ -95,7 +89,7 @@ void fragment() {
continue;
}
float uvt = (modified_uv - off_prev) / (off - off_prev);
- float col_sample = dither(UV, uvt);
+ float col_sample = dither(UV, uvt, textureSize(TEXTURE, 0));
output = mix(first, second, col_sample);
}
if (repeat == 3)
diff --git a/src/Shaders/Greyscale.gdshader b/src/Shaders/Greyscale.gdshader
index 57b774d730e..76764d1d340 100644
--- a/src/Shaders/Greyscale.gdshader
+++ b/src/Shaders/Greyscale.gdshader
@@ -1,7 +1,9 @@
shader_type canvas_item;
+uniform sampler2D screen_texture : hint_screen_texture;
+
void fragment() {
- COLOR = texture(SCREEN_TEXTURE, SCREEN_UV);
+ COLOR = texture(screen_texture, SCREEN_UV);
// formula from "https://stackoverflow.com/a/596241"
float avg = ((0.2126 * COLOR.r) + (0.7152 * COLOR.g) + (0.0722 * COLOR.b));
COLOR.rgb = vec3(avg);
diff --git a/src/Shaders/HSV.shader b/src/Shaders/HSV.gdshader
similarity index 99%
rename from src/Shaders/HSV.shader
rename to src/Shaders/HSV.gdshader
index 8c6615e6ef1..ccb1a8928cb 100644
--- a/src/Shaders/HSV.shader
+++ b/src/Shaders/HSV.gdshader
@@ -34,7 +34,7 @@ void fragment() {
// Get color from the sprite texture at the current pixel we are rendering
vec4 original_color = texture(TEXTURE, UV);
vec4 selection_color = texture(selection, UV);
-
+
vec3 col = original_color.rgb;
vec3 hsb = rgb2hsb(col);
// If not greyscale
@@ -55,7 +55,7 @@ void fragment() {
else if (val_shift < 0.0) {
hsb.z = mix(0, hsb.z , 1.0 - abs(val_shift));
}
-
+
col = hsb2rgb(hsb);
vec3 output = mix(original_color.rgb, col, selection_color.a);
COLOR = vec4(output.rgb, original_color.a);
diff --git a/src/Shaders/Invert.shader b/src/Shaders/Invert.gdshader
similarity index 100%
rename from src/Shaders/Invert.shader
rename to src/Shaders/Invert.gdshader
diff --git a/src/Shaders/MarchingAntsOutline.shader b/src/Shaders/MarchingAntsOutline.gdshader
similarity index 92%
rename from src/Shaders/MarchingAntsOutline.shader
rename to src/Shaders/MarchingAntsOutline.gdshader
index d7231a281c0..c7c883b65db 100644
--- a/src/Shaders/MarchingAntsOutline.shader
+++ b/src/Shaders/MarchingAntsOutline.gdshader
@@ -2,8 +2,8 @@
// Also thanks to https://andreashackel.de/tech-art/stripes-shader-1/ for the stripe tutorial
shader_type canvas_item;
-uniform vec4 first_color : hint_color = vec4(1.0);
-uniform vec4 second_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
+uniform vec4 first_color : source_color = vec4(1.0);
+uniform vec4 second_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform bool animated = true;
uniform float width : hint_range(0, 2) = 0.05;
uniform float frequency = 50.0;
@@ -17,21 +17,21 @@ bool has_contrary_neighbour(vec2 uv, vec2 texture_pixel_size, sampler2D tex) {
float x2 = abs(j) > width ? width * sign(j) : j;
float y1 = abs(i) > width ? width * sign(i) : i;
float y2 = abs(j) > width ? width * sign(j) : j;
-
+
vec2 xy1 = uv + texture_pixel_size * vec2(x1, y1);
vec2 xy2 = uv + texture_pixel_size * vec2(x2, y2);
-
+
if (xy1 != clamp(xy1, vec2(0.0), vec2(1.0)) || texture(tex, xy1).a == 0.0 || xy2 != clamp(xy2, vec2(0.0), vec2(1.0)) || texture(tex, xy2).a == 0.0) {
return true;
}
-
+
return false;
}
void fragment() {
COLOR = texture(TEXTURE, UV);
vec2 ts = TEXTURE_PIXEL_SIZE;
-
+
if (COLOR.a > 0.0 && has_contrary_neighbour(UV, ts, TEXTURE)) {
vec2 ratio = (ts.x > ts.y) ? vec2(ts.y / ts.x, 1) : vec2(1, ts.x / ts.y);
vec2 uv = UV * ratio;
diff --git a/src/Shaders/OffsetPixels.gdshader b/src/Shaders/OffsetPixels.gdshader
index 15bc00214e9..e0b3b2d35e0 100644
--- a/src/Shaders/OffsetPixels.gdshader
+++ b/src/Shaders/OffsetPixels.gdshader
@@ -12,7 +12,7 @@ void fragment() {
if (wrap_around) {
uv = fract(uv);
}
-
+
vec4 output = texture(TEXTURE, uv);
// Cut original selected content
original_color.a = 0.0 * step(0.5, selection_color.a) + original_color.a * step(selection_color.a, 0.5);
diff --git a/src/Shaders/OutlineInline.gdshader b/src/Shaders/OutlineInline.gdshader
index d475c46cd3d..3c200bced2e 100644
--- a/src/Shaders/OutlineInline.gdshader
+++ b/src/Shaders/OutlineInline.gdshader
@@ -2,7 +2,7 @@
shader_type canvas_item;
render_mode unshaded;
-uniform vec4 color : hint_color = vec4(1.0);
+uniform vec4 color : source_color = vec4(1.0);
uniform float width : hint_range(0, 10) = 1.0;
uniform int pattern : hint_range(0, 2) = 0; // diamond, circle, square
uniform bool inside = false;
diff --git a/src/Shaders/PatternFill.gdshader b/src/Shaders/PatternFill.gdshader
index 4712ebcdfc2..8195715677f 100644
--- a/src/Shaders/PatternFill.gdshader
+++ b/src/Shaders/PatternFill.gdshader
@@ -9,8 +9,8 @@ uniform vec2 pattern_uv_offset;
void fragment() {
vec4 original_color = texture(TEXTURE, UV);
- vec4 selection_color = texture(selection, UV);
- vec4 col = original_color;
+ vec4 selection_color = texture(selection, UV);
+ vec4 col = original_color;
col = textureLod(pattern, UV * (size / pattern_size) + pattern_uv_offset, 0.0);
COLOR = mix(original_color, col, selection_color.a);
diff --git a/src/Shaders/Posterize.gdshader b/src/Shaders/Posterize.gdshader
index 9226d4fbe89..016fc02f367 100644
--- a/src/Shaders/Posterize.gdshader
+++ b/src/Shaders/Posterize.gdshader
@@ -9,7 +9,7 @@ void fragment()
{
vec4 color = texture(TEXTURE, UV);
vec4 selection_color = texture(selection, UV);
-
+
float a = floor(mod(UV.x / TEXTURE_PIXEL_SIZE.x, 2.0));
float b = floor(mod(UV.y / TEXTURE_PIXEL_SIZE.y, 2.0));
float c = mod(a + b, 2.0);
diff --git a/src/Shaders/Rotation/NearestNeighbour.shader b/src/Shaders/Rotation/NearestNeighbour.gdshader
similarity index 92%
rename from src/Shaders/Rotation/NearestNeighbour.shader
rename to src/Shaders/Rotation/NearestNeighbour.gdshader
index 319544b07b5..7dfbc470c10 100644
--- a/src/Shaders/Rotation/NearestNeighbour.shader
+++ b/src/Shaders/Rotation/NearestNeighbour.gdshader
@@ -3,8 +3,7 @@ render_mode unshaded;
uniform float angle;
uniform sampler2D selection_tex;
-uniform vec2 selection_pivot;
-uniform vec2 selection_size;
+uniform vec2 pivot_pixel;
vec2 rotate(vec2 uv, vec2 pivot, float ratio) {
@@ -12,14 +11,14 @@ vec2 rotate(vec2 uv, vec2 pivot, float ratio) {
uv.x -= pivot.x;
uv.x *= ratio;
uv.x += pivot.x;
-
+
// Rotate image
uv -= pivot;
uv = vec2(cos(angle) * uv.x + sin(angle) * uv.y,
-sin(angle) * uv.x + cos(angle) * uv.y);
uv.x /= ratio;
uv += pivot;
-
+
return uv;
}
@@ -27,29 +26,29 @@ vec2 rotate(vec2 uv, vec2 pivot, float ratio) {
void fragment() {
vec4 original = texture(TEXTURE, UV);
float selection = texture(selection_tex, UV).a;
-
+
vec2 tex_size = 1.0 / TEXTURE_PIXEL_SIZE; // Texture size in real pixel coordinates
vec2 pixelated_uv = floor(UV * tex_size) / (tex_size - 1.0); // Pixelate UV to fit resolution
- vec2 pivot = selection_pivot / tex_size; // Normalize pivot position
+ vec2 pivot = pivot_pixel / tex_size; // Normalize pivot position
float ratio = tex_size.x / tex_size.y; // Resolution ratio
-
+
// Make a border to prevent stretching pixels on the edge
vec2 border_uv = rotate(pixelated_uv, pivot, ratio);
-
+
// Center the border
border_uv -= 0.5;
border_uv *= 2.0;
border_uv = abs(border_uv);
-
+
float border = max(border_uv.x, border_uv.y); // This is a rectangular gradient
border = floor(border - TEXTURE_PIXEL_SIZE.x); // Turn the grad into a rectangle shape
border = 1.0 - clamp(border, 0.0, 1.0); // Invert the rectangle
-
+
// Mixing
vec4 rotated = texture(TEXTURE, rotate(pixelated_uv, pivot, ratio)); // Rotated image
rotated.a *= texture(selection_tex, rotate(pixelated_uv, pivot, ratio)).a; // Combine with selection mask
float mask = mix(selection, 1.0, 1.0 - ceil(original.a)); // Combine selection mask with area outside original
-
+
// Combine original and rotated image only when intersecting, otherwise just pure rotated image.
COLOR.rgb = mix(mix(original.rgb, rotated.rgb, rotated.a * border), rotated.rgb, mask);
COLOR.a = mix(original.a, 0.0, selection); // Remove alpha on the selected area
diff --git a/src/Shaders/Rotation/OmniScale.gdshader b/src/Shaders/Rotation/OmniScale.gdshader
index aeffc5c34a8..3510ef97ba4 100644
--- a/src/Shaders/Rotation/OmniScale.gdshader
+++ b/src/Shaders/Rotation/OmniScale.gdshader
@@ -31,7 +31,7 @@ shader_type canvas_item;
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
-//
+//
uniform int ScaleMultiplier : hint_range(0, 100) = 4;
@@ -42,9 +42,8 @@ uniform int ScaleMultiplier : hint_range(0, 100) = 4;
// Pixelorama-specific uniforms
uniform float angle;
uniform sampler2D selection_tex;
-uniform vec2 selection_pivot;
-uniform vec2 selection_size;
-uniform bool preview;
+uniform vec2 pivot_pixel;
+uniform bool preview = false;
bool is_different(vec4 a, vec4 b)
@@ -285,7 +284,7 @@ vec4 scale(sampler2D image, vec2 coord, vec2 pxSize) {
}
return mix(r, w4, (dist + pixel_size / 2.0 - 0.5) / pixel_size>0.5?1.0:0.0);
}
-
+
return w4;
}
@@ -312,7 +311,7 @@ void fragment()
vec4 original = texture(TEXTURE, UV);
float selection = texture(selection_tex, UV).a;
vec2 size = 1.0 / TEXTURE_PIXEL_SIZE;
- vec2 pivot = selection_pivot / size; // Normalize pivot position
+ vec2 pivot = pivot_pixel / size; // Normalize pivot position
float ratio = size.x / size.y; // Resolution ratio
vec2 pixelated_uv = floor(UV * size) / (size - 1.0); // Pixelate UV to fit resolution
vec2 rotated_uv;
@@ -324,7 +323,7 @@ void fragment()
}
vec4 c;
c = scale(TEXTURE, rotated_uv, TEXTURE_PIXEL_SIZE);
-
+
// Taken from NearestNeighbour shader
c.a *= texture(selection_tex, rotated_uv).a; // Combine with selection mask
// Make a border to prevent stretching pixels on the edge
@@ -347,4 +346,4 @@ void fragment()
COLOR.a = mix(COLOR.a, 1.0, c.a * border); // Combine alpha of original image and rotated
//c.a = step(0.5,c.a);
//COLOR = c;
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/Shaders/Rotation/SmearRotxel.shader b/src/Shaders/Rotation/SmearRotxel.gdshader
similarity index 54%
rename from src/Shaders/Rotation/SmearRotxel.shader
rename to src/Shaders/Rotation/SmearRotxel.gdshader
index a89d381cad4..69dae3d7886 100644
--- a/src/Shaders/Rotation/SmearRotxel.shader
+++ b/src/Shaders/Rotation/SmearRotxel.gdshader
@@ -25,11 +25,11 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) {
int ox, oy;
float dir;
float mag;
- float init_angle = initial_angle < ending_angle ? initial_angle : ending_angle;
+ float init_angle = initial_angle < ending_angle ? initial_angle : ending_angle;
for (float angle = ending_angle; angle >= init_angle && color.a == 0.0; angle -= 1.0) {
float ang = angle*3.1416/180.0;
- for (k = 0; k < 9; k++) {
+ for (int k = 0; k < 9; k++) {
int i = -1 + int(k % 3);
int j = -1 + k / 3;
dir = atan(float(dy + j), float(dx + i));
@@ -44,7 +44,7 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) {
if (int(size.y) % 2 != 0) {
oy += 1;
}
-
+
if (ox >= 0 && ox < 3 * int(size.x) && oy >= 0 && oy < 3 * int(size.y)) {
break;
}
@@ -52,7 +52,7 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) {
if (k == 9){
continue;
}
-
+
int row = int(oy % 3);
int col = int(ox % 3);
int index = col + 3 * row;
@@ -105,23 +105,121 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) {
color = similarColors(f,h) && !similarColors(f,b) && !similarColors(d,h)? f : e;
}
}
- color.a *= step(ending_angle, initial_angle) +
+ color.a *= step(ending_angle, initial_angle) +
step(initial_angle ,ending_angle) * (angle - initial_angle) / (ending_angle - initial_angle + 0.01);
}
-
+
return color;
}
+// The exact same as rotate, but had to be re-defined due to https://github.com/godotengine/godot/issues/75935
+vec4 rotate_uniform(sampler2D tex, vec2 uv, vec2 tex_pixel_size) {
+ vec4 color = vec4(0.0);
+ vec2 center = origin / tex_pixel_size;
+ vec2 size = 1.0 / tex_pixel_size;
+ vec2 coord = uv / tex_pixel_size + position;
+ int dx = 3 * (int(coord.x) - int(center.x));
+ int dy = 3 * (int(coord.y) - int(center.y));
+ int k = 0;
+ int ox, oy;
+ float dir;
+ float mag;
+ float init_angle = initial_angle < ending_angle ? initial_angle : ending_angle;
+ for (float angle = ending_angle; angle >= init_angle && color.a == 0.0; angle -= 1.0) {
+ float ang = angle*3.1416/180.0;
+
+ for (int k = 0; k < 9; k++) {
+ int i = -1 + int(k % 3);
+ int j = -1 + k / 3;
+ dir = atan(float(dy + j), float(dx + i));
+ mag = sqrt(pow(float(dx + i), 2.0) + pow(float(dy + j), 2.0));
+ dir -= ang;
+ ox = int(round(3.0 * center.x + 1.0 + mag * cos(dir)));
+ oy = int(round(3.0 * center.y + 1.0 + mag * sin(dir)));
+
+ if (int(size.x) % 2 != 0) {
+ ox += 1;
+ }
+ if (int(size.y) % 2 != 0) {
+ oy += 1;
+ }
+
+ if (ox >= 0 && ox < 3 * int(size.x) && oy >= 0 && oy < 3 * int(size.y)) {
+ break;
+ }
+ }
+ if (k == 9){
+ continue;
+ }
+
+ int row = int(oy % 3);
+ int col = int(ox % 3);
+ int index = col + 3 * row;
+ ox = int(round(float(ox - 1) / 3.0));
+ oy = int(round(float(oy - 1) / 3.0));
+
+ if (ox == 0 || ox == int(size.x) - 1 || oy == 0 || oy == int(size.y) - 1) {
+ color = texture(tex, vec2(float(ox), float(oy)) * tex_pixel_size);
+ }
+ else {
+ vec4 a = texture(tex, vec2(float(ox - 1), float(oy - 1)) * tex_pixel_size);
+ vec4 b = texture(tex, vec2(float(ox), float(oy - 1)) * tex_pixel_size);
+ vec4 c = texture(tex, vec2(float(ox + 1), float(oy - 1)) * tex_pixel_size);
+ vec4 d = texture(tex, vec2(float(ox - 1), float(oy)) * tex_pixel_size);
+ vec4 e = texture(tex, vec2(float(ox), float(oy)) * tex_pixel_size);
+ vec4 f = texture(tex, vec2(float(ox + 1), float(oy)) * tex_pixel_size);
+ vec4 g = texture(tex, vec2(float(ox - 1), float(oy + 1)) * tex_pixel_size);
+ vec4 h = texture(tex, vec2(float(ox), float(oy + 1)) * tex_pixel_size);
+ vec4 l = texture(tex, vec2(float(ox + 1), float(oy + 1)) * tex_pixel_size);
+
+ if (index == 0) {
+ color = similarColors(d,b) && !similarColors(d,h) && !similarColors(b,f) ? d : e;
+ }
+ else if (index == 1) {
+ color = (similarColors(d,b) && !similarColors(d,h) && !similarColors(b,f) && !similarColors(e,c))
+ || (similarColors(b,f) && !similarColors(d,b) && !similarColors(f,h) && !similarColors(e,a)) ? b : e;
+ }
+ else if (index == 2) {
+ color = similarColors(b,f) && !similarColors(d,b) && !similarColors(f,h) ? f : e;
+ }
+ else if (index == 3) {
+ color = (similarColors(d,h) && !similarColors(f,h) && !similarColors(d,b) && !similarColors(e,a))
+ || (similarColors(d,b) && !similarColors(d,h) && !similarColors(b,f) && !similarColors(e,g)) ? d : e;
+ }
+ else if (index == 4) {
+ color = e;
+ }
+ else if (index == 5) {
+ color = (similarColors(b,f) && !similarColors(d,b) && !similarColors(f,h) && !similarColors(e,l))
+ || (similarColors(f,h) && !similarColors(b,f) && !similarColors(d,h) && !similarColors(e,c)) ? f : e;
+ }
+ else if (index == 6) {
+ color = similarColors(d,h) && !similarColors(f,h) && !similarColors(d,b) ? d : e;
+ }
+ else if (index == 7) {
+ color = (similarColors(f,h) && !similarColors(f,b)&& !similarColors(d,h) && !similarColors(e,g))
+ || (similarColors(d,h) && !similarColors(f,h) && !similarColors(d,b) && !similarColors(e,l)) ? h : e;
+ }
+ else if (index == 8) {
+ color = similarColors(f,h) && !similarColors(f,b) && !similarColors(d,h)? f : e;
+ }
+ }
+ color.a *= step(ending_angle, initial_angle) +
+ step(initial_angle ,ending_angle) * (angle - initial_angle) / (ending_angle - initial_angle + 0.01);
+ }
+
+ return color;
+}
void fragment() {
vec4 original = texture(TEXTURE, UV);
vec4 selection = texture(selection_tex, UV);
- vec4 rotated_selection = rotate(selection_tex, UV, TEXTURE_PIXEL_SIZE);
+ vec4 rotated_selection = rotate_uniform(selection_tex, UV, TEXTURE_PIXEL_SIZE);
vec4 rotated = rotate(TEXTURE, UV, TEXTURE_PIXEL_SIZE);
rotated = mix(vec4(0.0), rotated, rotated_selection.a);
rotated.a *= rotated_selection.a; // Combine with selection mask
float mask = mix(selection.a, 1.0, 1.0 - ceil(original.a)); // Combine selection mask with area outside original
-
+
// Combine original and rotated image only when intersecting, otherwise just pure rotated image.
COLOR.rgb = mix(mix(original.rgb, rotated.rgb, rotated.a), rotated.rgb, mask);
COLOR.a = mix(original.a, 0.0, selection.a); // Remove alpha on the selected area
diff --git a/src/Shaders/Rotation/cleanEdge.gdshader b/src/Shaders/Rotation/cleanEdge.gdshader
index 5bf2012161a..9add3d6de5f 100644
--- a/src/Shaders/Rotation/cleanEdge.gdshader
+++ b/src/Shaders/Rotation/cleanEdge.gdshader
@@ -27,24 +27,10 @@ OTHER DEALINGS IN THE SOFTWARE.
shader_type canvas_item;
//enables 2:1 slopes. otherwise only uses 45 degree slopes
-//#define SLOPE
+#define SLOPE
//cleans up small detail slope transitions (if SLOPE is enabled)
//if only using for rotation, CLEANUP has negligible effect and should be disabled for speed
-//#define CLEANUP
-// The commented out defines exposed as uniforms
-uniform bool slope;
-uniform bool cleanup;
-
-// This shader has been modified to work for Pixelorama
-// Godot 3.x does not support #defines, so we will uncomment them when we port to Godot 4.x
-// NearestNeighbor rotation logic has also been added into the code
-// The original file can be found at
-// https://gist.github.com/torcado194/e2794f5a4b22049ac0a41f972d14c329#file-cleanedge-gdshader
-uniform float angle;
-uniform sampler2D selection_tex;
-uniform vec2 selection_pivot;
-uniform vec2 selection_size;
-uniform bool preview;
+#define CLEANUP
//the color with the highest priority.
// other colors will be tested based on distance to this
@@ -55,14 +41,14 @@ uniform vec3 highestColor = vec3(1.,1.,1.);
// can group shapes of visually similar colors, but creates
// some artifacting and should be kept as low as possible.
uniform float similarThreshold = 0.0;
-uniform float lineWidth = 1.0;
-const mat3 yuv_matrix = mat3(vec3(0.299, 0.587, 0.114), vec3(-0.169, -0.331, 0.5), vec3(0.5, -0.419, -0.081));
+uniform float lineWidth = 1.0;
-vec3 yuv(vec3 col){
- mat3 yuv = transpose(yuv_matrix);
- return yuv * col;
-}
+// Edited for Pixelorama
+uniform float angle;
+uniform sampler2D selection_tex;
+uniform vec2 pivot_pixel;
+uniform bool preview = false;
bool similar(vec4 col1, vec4 col2){
return (col1.a == 0. && col2.a == 0.) || distance(col1, col2) <= similarThreshold;
@@ -79,10 +65,6 @@ bool similar4(vec4 col1, vec4 col2, vec4 col3, vec4 col4){
return similar(col1, col2) && similar(col2, col3) && similar(col3, col4);
}
-bool similar5(vec4 col1, vec4 col2, vec4 col3, vec4 col4, vec4 col5){
- return similar(col1, col2) && similar(col2, col3) && similar(col3, col4) && similar(col4, col5);
-}
-
bool higher(vec4 thisCol, vec4 otherCol){
if(similar(thisCol, otherCol)) return false;
if(thisCol.a == otherCol.a){
@@ -94,10 +76,6 @@ bool higher(vec4 thisCol, vec4 otherCol){
}
}
-vec4 higherCol(vec4 thisCol, vec4 otherCol){
- return higher(thisCol, otherCol) ? thisCol : otherCol;
-}
-
//color distance
float cd(vec4 col1, vec4 col2){
return distance(col1.rgba, col2.rgba);
@@ -112,17 +90,13 @@ float distToLine(vec2 testPt, vec2 pt1, vec2 pt2, vec2 dir){
//based on down-forward direction
vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uff, vec4 b, vec4 c, vec4 f, vec4 ff, vec4 db, vec4 d, vec4 df, vec4 dff, vec4 ddb, vec4 dd, vec4 ddf){
- float minWidth;
- float maxWidth;
- if (slope) {
- minWidth = 0.44;
- maxWidth = 1.142;
- }
- else {
- minWidth = 0.0;
- maxWidth = 1.4;
- }
-// #endif
+ #ifdef SLOPE
+ float minWidth = 0.44;
+ float maxWidth = 1.142;
+ #else
+ float minWidth = 0.0;
+ float maxWidth = 1.4;
+ #endif
float _lineWidth = max(minWidth, min(maxWidth, lineWidth));
point = mainDir * (point - 0.5) + 0.5; //flip point
@@ -145,8 +119,8 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf
bool flip = false;
vec2 center = vec2(0.5,0.5);
-// #ifdef SLOPE
- if(slope && similar3(f, d, db) && !similar3(f, d, b) && !similar(uf, db)){ //lower shallow 2:1 slant
+ #ifdef SLOPE
+ if(similar3(f, d, db) && !similar3(f, d, b) && !similar(uf, db)){ //lower shallow 2:1 slant
if(similar(c, df) && higher(c, f)){ //single pixel wide diagonal, dont flip
} else {
@@ -166,17 +140,16 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf
}
//cleanup slant transitions
- if (cleanup) {
- if(!flip && similar(c, uf) && !(similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff))){ //shallow
- float dist2 = distToLine(point, center+vec2(2.0, -1.0)*pointDir, center+vec2(-0.0, 1.0)*pointDir, pointDir);
- dist = min(dist, dist2);
- }
+ #ifdef CLEANUP
+ if(!flip && similar(c, uf) && !(similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff))){ //shallow
+ float dist2 = distToLine(point, center+vec2(2.0, -1.0)*pointDir, center+vec2(-0.0, 1.0)*pointDir, pointDir);
+ dist = min(dist, dist2);
}
-// #endif
+ #endif
dist -= (_lineWidth/2.0);
return dist <= 0.0 ? ((cd(c,f) <= cd(c,d)) ? f : d) : vec4(-1.0);
- } else if(slope && similar3(uf, f, d) && !similar3(u, f, d) && !similar(uf, db)){ //forward steep 2:1 slant
+ } else if(similar3(uf, f, d) && !similar3(u, f, d) && !similar(uf, db)){ //forward steep 2:1 slant
if(similar(c, df) && higher(c, d)){ //single pixel wide diagonal, dont flip
} else {
@@ -196,18 +169,17 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf
}
//cleanup slant transitions
- if (cleanup) {
- if(!flip && similar(c, db) && !(similar3(c, db, ddb) && !similar3(c, db, dd) && !similar(f, ddb))){ //steep
- float dist2 = distToLine(point, center+vec2(1.0, 0.0)*pointDir, center+vec2(-1.0, 2.0)*pointDir, pointDir);
- dist = min(dist, dist2);
- }
+ #ifdef CLEANUP
+ if(!flip && similar(c, db) && !(similar3(c, db, ddb) && !similar3(c, db, dd) && !similar(f, ddb))){ //steep
+ float dist2 = distToLine(point, center+vec2(1.0, 0.0)*pointDir, center+vec2(-1.0, 2.0)*pointDir, pointDir);
+ dist = min(dist, dist2);
}
-// #endif
+ #endif
dist -= (_lineWidth/2.0);
return dist <= 0.0 ? ((cd(c,f) <= cd(c,d)) ? f : d) : vec4(-1.0);
} else
-// #endif
+ #endif
if(similar(f, d)) { //45 diagonal
if(similar(c, df) && higher(c, f)){ //single pixel diagonal along neighbors, dont flip
if(!similar(c, dd) && !similar(c, ff)){ //line against triple color stripe edge case
@@ -227,32 +199,32 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf
flip = true;
}
- if (flip) {
+ if(flip){
dist = _lineWidth-distToLine(point, center+vec2(1.0, -1.0)*pointDir, center+vec2(-1.0, 1.0)*pointDir, -pointDir); //midpoints of own diagonal pixels
} else {
dist = distToLine(point, center+vec2(1.0, 0.0)*pointDir, center+vec2(0.0, 1.0)*pointDir, pointDir); //midpoints of corner neighbor pixels
}
//cleanup slant transitions
- if (slope && cleanup) {
- if(!flip && similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff)){ //shallow
- float dist2 = distToLine(point, center+vec2(1.5, 0.0)*pointDir, center+vec2(-0.5, 1.0)*pointDir, pointDir);
- dist = max(dist, dist2);
- }
+ #ifdef SLOPE
+ #ifdef CLEANUP
+ if(!flip && similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff)){ //shallow
+ float dist2 = distToLine(point, center+vec2(1.5, 0.0)*pointDir, center+vec2(-0.5, 1.0)*pointDir, pointDir);
+ dist = max(dist, dist2);
+ }
- if(!flip && similar3(ddb, db, c) && !similar3(dd, db, c) && !similar(ddb, f)){ //steep
- float dist2 = distToLine(point, center+vec2(1.0, -0.5)*pointDir, center+vec2(0.0, 1.5)*pointDir, pointDir);
- dist = max(dist, dist2);
- }
+ if(!flip && similar3(ddb, db, c) && !similar3(dd, db, c) && !similar(ddb, f)){ //steep
+ float dist2 = distToLine(point, center+vec2(1.0, -0.5)*pointDir, center+vec2(0.0, 1.5)*pointDir, pointDir);
+ dist = max(dist, dist2);
}
-// #endif
-// #endif
+ #endif
+ #endif
dist -= (_lineWidth/2.0);
return dist <= 0.0 ? ((cd(c,f) <= cd(c,d)) ? f : d) : vec4(-1.0);
}
-// #ifdef SLOPE
- else if(slope && similar3(ff, df, d) && !similar3(ff, df, c) && !similar(uff, d)){ //far corner of shallow slant
+ #ifdef SLOPE
+ else if(similar3(ff, df, d) && !similar3(ff, df, c) && !similar(uff, d)){ //far corner of shallow slant
if(similar(f, dff) && higher(f, ff)){ //single pixel wide diagonal, dont flip
@@ -273,7 +245,7 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf
dist -= (_lineWidth/2.0);
return dist <= 0.0 ? ((cd(f,ff) <= cd(f,df)) ? ff : df) : vec4(-1.0);
- } else if(slope && similar3(f, df, dd) && !similar3(c, df, dd) && !similar(f, ddb)){ //far corner of steep slant
+ } else if(similar3(f, df, dd) && !similar3(c, df, dd) && !similar(f, ddb)){ //far corner of steep slant
if(similar(d, ddf) && higher(d, dd)){ //single pixel wide diagonal, dont flip
} else {
@@ -298,11 +270,12 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf
dist -= (_lineWidth/2.0);
return dist <= 0.0 ? ((cd(d,df) <= cd(d,dd)) ? df : dd) : vec4(-1.0);
}
-// #endif
+ #endif
return vec4(-1.0);
}
-vec2 rotate(vec2 uv, vec2 pivot, float ratio) { // Taken from NearestNeighbour shader
+// Pixelorama edit, taken from NearestNeighbour shader
+vec2 rotate(vec2 uv, vec2 pivot, float ratio) {
// Scale and center image
uv.x -= pivot.x;
uv.x *= ratio;
@@ -319,10 +292,11 @@ vec2 rotate(vec2 uv, vec2 pivot, float ratio) { // Taken from NearestNeighbour
}
void fragment() {
+ vec2 size = 1.0/TEXTURE_PIXEL_SIZE+0.0001; //fix for some sort of rounding error
+ // Pixelorama edit
vec4 original = texture(TEXTURE, UV);
float selection = texture(selection_tex, UV).a;
- vec2 size = 1.0/TEXTURE_PIXEL_SIZE+0.0001; //fix for some sort of rounding error
- vec2 pivot = selection_pivot / size; // Normalize pivot position
+ vec2 pivot = pivot_pixel / size; // Normalize pivot position
float ratio = size.x / size.y; // Resolution ratio
vec2 pixelated_uv = floor(UV * size) / (size - 1.0); // Pixelate UV to fit resolutio
vec2 rotated_uv;
@@ -386,7 +360,7 @@ void fragment() {
col = u_col;
}
- // Taken from NearestNeighbour shader
+ // Pixelorama edit, taken from NearestNeighbour shader
col.a *= texture(selection_tex, rotated_uv).a; // Combine with selection mask
// Make a border to prevent stretching pixels on the edge
vec2 border_uv = rotated_uv;
diff --git a/src/Shaders/SilhouetteShader.gdshader b/src/Shaders/SilhouetteShader.gdshader
index dc9d4d37da3..a661cefa75b 100644
--- a/src/Shaders/SilhouetteShader.gdshader
+++ b/src/Shaders/SilhouetteShader.gdshader
@@ -1,6 +1,6 @@
shader_type canvas_item;
-uniform vec4 silhouette_color: hint_color;
+uniform vec4 silhouette_color;
uniform bool show_silhouette;
void fragment() {
@@ -9,6 +9,6 @@ void fragment() {
color.rgb = silhouette_color.rgb;
COLOR.rgb = color.rgb;
} else {
- COLOR = color
+ COLOR = color;
}
-}
\ No newline at end of file
+}
diff --git a/src/Shaders/TransparentChecker.shader b/src/Shaders/TransparentChecker.gdshader
similarity index 86%
rename from src/Shaders/TransparentChecker.shader
rename to src/Shaders/TransparentChecker.gdshader
index cb5e480538f..715cedc572a 100644
--- a/src/Shaders/TransparentChecker.shader
+++ b/src/Shaders/TransparentChecker.gdshader
@@ -3,8 +3,8 @@ render_mode unshaded;
uniform float size = 10.0;
uniform float alpha = 1.0;
-uniform vec4 color1 : hint_color = vec4(0.7, 0.7, 0.7, 1.0);
-uniform vec4 color2 : hint_color = vec4(1.0);
+uniform vec4 color1 : source_color = vec4(0.7, 0.7, 0.7, 1.0);
+uniform vec4 color2 : source_color = vec4(1.0);
uniform vec2 offset = vec2(0.0);
uniform vec2 scale = vec2(0.0);
uniform vec2 rect_size = vec2(0.0);
@@ -21,7 +21,7 @@ void fragment() {
}
else if (follow_movement)
ref_pos -= mod(offset, size * 2.0);
-
+
vec2 pos = mod(ref_pos, size * 2.0);
bool c1 = any(lessThan(pos, vec2(size)));
bool c2 = any(greaterThanEqual(pos, vec2(size)));
diff --git a/src/Shaders/UITransparency.gdshader b/src/Shaders/UITransparency.gdshader
index baf42011694..447f274a5cc 100644
--- a/src/Shaders/UITransparency.gdshader
+++ b/src/Shaders/UITransparency.gdshader
@@ -8,13 +8,13 @@ uniform vec2 size = vec2(100.0, 100.0);
void fragment(){
-
+
if (
- SCREEN_UV.x >= (position.x)/(screen_resolution.x)
- && (1.0 - SCREEN_UV.y) >= (position.y)/(screen_resolution.y)
+ SCREEN_UV.x >= (position.x)/(screen_resolution.x)
+ && (SCREEN_UV.y) >= (position.y)/(screen_resolution.y)
&& SCREEN_UV.x <= (position.x + size.x)/(screen_resolution.x)
- && (1.0 - SCREEN_UV.y) <= (position.y + size.y)/(screen_resolution.y)
+ && (SCREEN_UV.y) <= (position.y + size.y)/(screen_resolution.y)
){
COLOR.a = alpha;
}
diff --git a/src/Tools/3DShapeEdit.gd b/src/Tools/3DShapeEdit.gd
index a4c67a6bcfc..46a4201f5e7 100644
--- a/src/Tools/3DShapeEdit.gd
+++ b/src/Tools/3DShapeEdit.gd
@@ -5,7 +5,7 @@ var _can_start_timer := true
var _hovering: Cel3DObject = null
var _dragging := false
var _has_been_dragged := false
-var _prev_mouse_pos := Vector2.ZERO
+var _prev_mouse_pos := Vector2i.ZERO
var _old_cel_image = null
var _checker_update_qued := false
var _object_names := {
@@ -23,28 +23,28 @@ var _object_names := {
Cel3DObject.Type.IMPORTED: "Custom model",
}
-onready var object_option_button := $"%ObjectOptionButton" as OptionButton
-onready var new_object_menu_button := $"%NewObjectMenuButton" as MenuButton
-onready var remove_object_button := $"%RemoveObject" as Button
-onready var cel_options := $"%CelOptions" as Container
-onready var object_options := $"%ObjectOptions" as Container
-onready var mesh_options := $"%MeshOptions" as VBoxContainer
-onready var light_options := $"%LightOptions" as VBoxContainer
-onready var undo_redo_timer := $UndoRedoTimer as Timer
-onready var load_model_dialog := $LoadModelDialog as FileDialog
-
-onready var cel_properties := {
+@onready var object_option_button := $"%ObjectOptionButton" as OptionButton
+@onready var new_object_menu_button := $"%NewObjectMenuButton" as MenuButton
+@onready var remove_object_button := $"%RemoveObject" as Button
+@onready var cel_options := $"%CelOptions" as Container
+@onready var object_options := $"%ObjectOptions" as Container
+@onready var mesh_options := $"%MeshOptions" as VBoxContainer
+@onready var light_options := $"%LightOptions" as VBoxContainer
+@onready var undo_redo_timer := $UndoRedoTimer as Timer
+@onready var load_model_dialog := $LoadModelDialog as FileDialog
+
+@onready var cel_properties := {
"camera:projection": $"%ProjectionOptionButton",
"camera:rotation_degrees": $"%CameraRotation",
"camera:fov": $"%CameraFOV",
"camera:size": $"%CameraSize",
- "viewport:world:environment:ambient_light_color": $"%AmbientColorPickerButton",
- "viewport:world:environment:ambient_light_energy": $"%AmbientEnergy",
+ "viewport:world_3d:environment:ambient_light_color": $"%AmbientColorPickerButton",
+ "viewport:world_3d:environment:ambient_light_energy": $"%AmbientEnergy",
}
-onready var object_properties := {
+@onready var object_properties := {
"visible": $"%VisibleCheckBox",
- "translation": $"%ObjectPosition",
+ "position": $"%ObjectPosition",
"rotation_degrees": $"%ObjectRotation",
"scale": $"%ObjectScale",
"node3d_type:mesh:size": $"%MeshSize",
@@ -55,7 +55,6 @@ onready var object_properties := {
"node3d_type:mesh:radial_segments": $"%MeshRadialSegments",
"node3d_type:mesh:rings": $"%MeshRings",
"node3d_type:mesh:is_hemisphere": $"%MeshIsHemisphere",
- "node3d_type:mesh:mid_height": $"%MeshMidHeight",
"node3d_type:mesh:top_radius": $"%MeshTopRadius",
"node3d_type:mesh:bottom_radius": $"%MeshBottomRadius",
"node3d_type:mesh:text": $"%MeshText",
@@ -66,7 +65,6 @@ onready var object_properties := {
"node3d_type:light_energy": $"%LightEnergy",
"node3d_type:light_negative": $"%LightNegative",
"node3d_type:shadow_enabled": $"%ShadowEnabled",
- "node3d_type:shadow_color": $"%ShadowColor",
"node3d_type:omni_range": $"%OmniRange",
"node3d_type:spot_range": $"%SpotRange",
"node3d_type:spot_angle": $"%SpotAngle",
@@ -86,47 +84,46 @@ func _input(_event: InputEvent) -> void:
func _ready() -> void:
- Global.connect("cel_changed", self, "_cel_changed")
+ super._ready()
+ Global.cel_changed.connect(_cel_changed)
_cel_changed()
var new_object_popup := new_object_menu_button.get_popup()
for object in _object_names:
- if object == Cel3DObject.Type.TORUS: # Remove when Godot 3.6 or 4.0 is used
- continue
new_object_popup.add_item(_object_names[object], object)
- new_object_popup.connect("id_pressed", self, "_new_object_popup_id_pressed")
+ new_object_popup.id_pressed.connect(_new_object_popup_id_pressed)
for prop in cel_properties:
var node: Control = cel_properties[prop]
if node is ValueSliderV3:
- node.connect("value_changed", self, "_cel_property_vector3_changed", [prop])
+ node.value_changed.connect(_cel_property_vector3_changed.bind(prop))
elif node is Range:
- node.connect("value_changed", self, "_cel_property_value_changed", [prop])
+ node.value_changed.connect(_cel_property_value_changed.bind(prop))
elif node is OptionButton:
- node.connect("item_selected", self, "_cel_property_item_selected", [prop])
+ node.item_selected.connect(_cel_property_item_selected.bind(prop))
elif node is ColorPickerButton:
- node.connect("color_changed", self, "_cel_property_color_changed", [prop])
+ node.color_changed.connect(_cel_property_color_changed.bind(prop))
for prop in object_properties:
var node: Control = object_properties[prop]
if node is ValueSliderV3:
- node.connect("value_changed", self, "_object_property_vector3_changed", [prop])
+ node.value_changed.connect(_object_property_vector3_changed.bind(prop))
elif node is ValueSliderV2:
var property_path: String = prop
if property_path.ends_with("v2"):
property_path = property_path.replace("v2", "")
- node.connect("value_changed", self, "_object_property_vector2_changed", [property_path])
+ node.value_changed.connect(_object_property_vector2_changed.bind(property_path))
elif node is Range:
- node.connect("value_changed", self, "_object_property_value_changed", [prop])
+ node.value_changed.connect(_object_property_value_changed.bind(prop))
elif node is OptionButton:
- node.connect("item_selected", self, "_object_property_item_selected", [prop])
+ node.item_selected.connect(_object_property_item_selected.bind(prop))
elif node is ColorPickerButton:
- node.connect("color_changed", self, "_object_property_color_changed", [prop])
+ node.color_changed.connect(_object_property_color_changed.bind(prop))
elif node is CheckBox:
- node.connect("toggled", self, "_object_property_toggled", [prop])
+ node.toggled.connect(_object_property_toggled.bind(prop))
elif node is LineEdit:
- node.connect("text_changed", self, "_object_property_text_changed", [prop])
+ node.text_changed.connect(_object_property_text_changed.bind(prop))
-func draw_start(position: Vector2) -> void:
- var project: Project = Global.current_project
+func draw_start(pos: Vector2i) -> void:
+ var project := Global.current_project
if not project.get_current_cel() is Cel3D:
return
if not project.layers[project.current_layer].can_layer_get_drawn():
@@ -146,7 +143,7 @@ func draw_start(position: Vector2) -> void:
if is_instance_valid(_hovering):
_cel.selected = _hovering
_dragging = true
- _prev_mouse_pos = position
+ _prev_mouse_pos = pos
else: # We're not hovering
if is_instance_valid(_cel.selected):
# If we're not clicking on a gizmo, unselect
@@ -154,23 +151,23 @@ func draw_start(position: Vector2) -> void:
_cel.selected = null
else:
_dragging = true
- _prev_mouse_pos = position
+ _prev_mouse_pos = pos
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
if not Global.current_project.get_current_cel() is Cel3D:
return
- var camera: Camera = _cel.camera
+ var camera: Camera3D = _cel.camera
if _dragging:
_has_been_dragged = true
- var proj_mouse_pos := camera.project_position(position, camera.translation.z)
- var proj_prev_mouse_pos := camera.project_position(_prev_mouse_pos, camera.translation.z)
+ var proj_mouse_pos := camera.project_position(pos, camera.position.z)
+ var proj_prev_mouse_pos := camera.project_position(_prev_mouse_pos, camera.position.z)
_cel.selected.change_transform(proj_mouse_pos, proj_prev_mouse_pos)
- _prev_mouse_pos = position
+ _prev_mouse_pos = pos
sprite_changed_this_frame()
-func draw_end(_position: Vector2) -> void:
+func draw_end(_position: Vector2i) -> void:
if not Global.current_project.get_current_cel() is Cel3D:
return
_dragging = false
@@ -181,17 +178,17 @@ func draw_end(_position: Vector2) -> void:
sprite_changed_this_frame()
-func cursor_move(position: Vector2) -> void:
- .cursor_move(position)
+func cursor_move(pos: Vector2i) -> void:
+ super.cursor_move(pos)
if not Global.current_project.get_current_cel() is Cel3D:
return
# Hover logic
- var camera: Camera = _cel.camera
- var ray_from := camera.project_ray_origin(position)
- var ray_to := ray_from + camera.project_ray_normal(position) * 20
- var space_state := camera.get_world().direct_space_state
- var selection := space_state.intersect_ray(ray_from, ray_to)
- if selection.empty():
+ var camera: Camera3D = _cel.camera
+ var ray_from := camera.project_ray_origin(pos)
+ var ray_to := ray_from + camera.project_ray_normal(pos) * 20
+ var space_state := camera.get_world_3d().direct_space_state
+ var selection := space_state.intersect_ray(PhysicsRayQueryParameters3D.create(ray_from, ray_to))
+ if selection.is_empty():
if is_instance_valid(_hovering):
_hovering.unhover()
_hovering = null
@@ -221,10 +218,10 @@ func _cel_changed() -> void:
_cel = Global.current_project.get_current_cel()
var selected = _cel.selected
_cel.selected = null
- if not _cel.is_connected("scene_property_changed", self, "_set_cel_node_values"):
- _cel.connect("scene_property_changed", self, "_set_cel_node_values")
- _cel.connect("objects_changed", self, "_fill_object_option_button")
- _cel.connect("selected_object", self, "_selected_object")
+ if not _cel.scene_property_changed.is_connected(_set_cel_node_values):
+ _cel.scene_property_changed.connect(_set_cel_node_values)
+ _cel.objects_changed.connect(_fill_object_option_button)
+ _cel.selected_object.connect(_selected_object)
cel_options.visible = true
object_options.visible = false
_set_cel_node_values()
@@ -232,8 +229,8 @@ func _cel_changed() -> void:
sprite_changed_this_frame()
# two yields are required
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
_cel.selected = selected
@@ -253,10 +250,10 @@ func _add_object(type: int, file_path := "") -> void:
undo_redo.create_action("Add 3D object")
undo_redo.add_do_property(_cel, "object_properties", new_objects)
undo_redo.add_undo_property(_cel, "object_properties", _cel.object_properties)
- undo_redo.add_do_method(_cel, "_add_object_node", _cel.current_object_id)
- undo_redo.add_undo_method(_cel, "_remove_object_node", _cel.current_object_id)
- undo_redo.add_do_method(Global, "undo_or_redo", false)
- undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ undo_redo.add_do_method(_cel._add_object_node.bind(_cel.current_object_id))
+ undo_redo.add_undo_method(_cel._remove_object_node.bind(_cel.current_object_id))
+ undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
undo_redo.commit_action()
sprite_changed_this_frame()
_cel.current_object_id += 1
@@ -270,10 +267,10 @@ func _on_RemoveObject_pressed() -> void:
undo_redo.create_action("Remove 3D object")
undo_redo.add_do_property(_cel, "object_properties", new_objects)
undo_redo.add_undo_property(_cel, "object_properties", _cel.object_properties)
- undo_redo.add_do_method(_cel, "_remove_object_node", _cel.selected.id)
- undo_redo.add_undo_method(_cel, "_add_object_node", _cel.selected.id)
- undo_redo.add_do_method(Global, "undo_or_redo", false)
- undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ undo_redo.add_do_method(_cel._remove_object_node.bind(_cel.selected.id))
+ undo_redo.add_undo_method(_cel._add_object_node.bind(_cel.selected.id))
+ undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
undo_redo.commit_action()
_cel.selected = null
sprite_changed_this_frame()
@@ -286,10 +283,10 @@ func _object_property_changed(object: Cel3DObject) -> void:
undo_redo.create_action("Change object transform")
undo_redo.add_do_property(_cel, "object_properties", new_properties)
undo_redo.add_undo_property(_cel, "object_properties", _cel.object_properties)
- undo_redo.add_do_method(_cel, "_update_objects_transform", object.id)
- undo_redo.add_undo_method(_cel, "_update_objects_transform", object.id)
- undo_redo.add_do_method(Global, "undo_or_redo", false)
- undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ undo_redo.add_do_method(_cel._update_objects_transform.bind(object.id))
+ undo_redo.add_undo_method(_cel._update_objects_transform.bind(object.id))
+ undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
undo_redo.commit_action()
@@ -313,11 +310,11 @@ func _selected_object(object: Cel3DObject) -> void:
if node.get_index() > 0:
_get_previous_node(node).visible = property_exists
node.visible = property_exists
- mesh_options.visible = object.node3d_type is MeshInstance
- light_options.visible = object.node3d_type is Light
+ mesh_options.visible = object.node3d_type is MeshInstance3D
+ light_options.visible = object.node3d_type is Light3D
_set_object_node_values()
- if not object.is_connected("property_changed", self, "_set_object_node_values"):
- object.connect("property_changed", self, "_set_object_node_values")
+ if not object.property_changed.is_connected(_set_object_node_values):
+ object.property_changed.connect(_set_object_node_values)
object_option_button.select(object_option_button.get_item_index(object.id + 1))
else:
cel_options.visible = true
@@ -327,7 +324,7 @@ func _selected_object(object: Cel3DObject) -> void:
func _set_cel_node_values() -> void:
- if _cel.camera.projection == Camera.PROJECTION_PERSPECTIVE:
+ if _cel.camera.projection == Camera3D.PROJECTION_PERSPECTIVE:
_get_previous_node(cel_properties["camera:fov"]).visible = true
_get_previous_node(cel_properties["camera:size"]).visible = false
cel_properties["camera:fov"].visible = true
@@ -371,7 +368,7 @@ func _set_node_values(to_edit: Object, properties: Dictionary) -> void:
elif node is ColorPickerButton:
node.color = value
elif node is CheckBox:
- node.pressed = value
+ node.button_pressed = value
elif node is LineEdit:
if node.text != value:
node.text = value
@@ -395,25 +392,25 @@ func _set_value_from_node(to_edit: Object, value, prop: String) -> void:
func _cel_property_vector3_changed(value: Vector3, prop: String) -> void:
_set_value_from_node(_cel, value, prop)
_value_handle_change()
- Global.canvas.gizmos_3d.update()
+ Global.canvas.gizmos_3d.queue_redraw()
func _cel_property_value_changed(value: float, prop: String) -> void:
_set_value_from_node(_cel, value, prop)
_value_handle_change()
- Global.canvas.gizmos_3d.update()
+ Global.canvas.gizmos_3d.queue_redraw()
func _cel_property_item_selected(value: int, prop: String) -> void:
_set_value_from_node(_cel, value, prop)
_value_handle_change()
- Global.canvas.gizmos_3d.update()
+ Global.canvas.gizmos_3d.queue_redraw()
func _cel_property_color_changed(value: Color, prop: String) -> void:
_set_value_from_node(_cel, value, prop)
_value_handle_change()
- Global.canvas.gizmos_3d.update()
+ Global.canvas.gizmos_3d.queue_redraw()
func _object_property_vector3_changed(value: Vector3, prop: String) -> void:
@@ -474,17 +471,17 @@ func _on_UndoRedoTimer_timeout() -> void:
undo_redo.create_action("Change 3D layer properties")
undo_redo.add_do_property(_cel, "scene_properties", _cel.serialize_scene_properties())
undo_redo.add_undo_property(_cel, "scene_properties", _cel.scene_properties)
- undo_redo.add_do_method(_cel, "_scene_property_changed")
- undo_redo.add_undo_method(_cel, "_scene_property_changed")
- undo_redo.add_do_method(Global, "undo_or_redo", false)
- undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ undo_redo.add_do_method(_cel._scene_property_changed)
+ undo_redo.add_undo_method(_cel._scene_property_changed)
+ undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
undo_redo.commit_action()
-func _on_LoadModelDialog_files_selected(paths: PoolStringArray) -> void:
+func _on_LoadModelDialog_files_selected(paths: PackedStringArray) -> void:
for path in paths:
_add_object(Cel3DObject.Type.IMPORTED, path)
-func _on_LoadModelDialog_popup_hide() -> void:
+func _on_load_model_dialog_visibility_changed() -> void:
Global.dialog_open(false)
diff --git a/src/Tools/3DShapeEdit.tscn b/src/Tools/3DShapeEdit.tscn
index 404293c2591..c6c98bd99ba 100644
--- a/src/Tools/3DShapeEdit.tscn
+++ b/src/Tools/3DShapeEdit.tscn
@@ -1,150 +1,116 @@
-[gd_scene load_steps=10 format=2]
+[gd_scene load_steps=9 format=3 uid="uid://cg7d36746on67"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/3DShapeEdit.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=4]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=5]
-[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=6]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV3.tscn" type="PackedScene" id=7]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/3DShapeEdit.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="3"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="4"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"]
+[ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="6"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="7"]
-[sub_resource type="InputEventAction" id=33]
-action = "delete"
+[sub_resource type="Shortcut" id="34"]
-[sub_resource type="ShortCut" id=34]
-shortcut = SubResource( 33 )
-
-[node name="3DShapeEdit" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
-
-[node name="ColorRect" parent="." index="0"]
-margin_right = 223.0
-
-[node name="Label" parent="." index="1"]
-margin_right = 223.0
+[node name="3DShapeEdit" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="HandleObjects" type="GridContainer" parent="." index="2"]
-margin_top = 26.0
-margin_right = 223.0
-margin_bottom = 70.0
+layout_mode = 2
columns = 2
[node name="Label" type="Label" parent="HandleObjects" index="0"]
-margin_top = 3.0
-margin_right = 111.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Selected object:"
[node name="ObjectOptionButton" type="OptionButton" parent="HandleObjects" index="1"]
unique_name_in_owner = true
-margin_left = 115.0
-margin_right = 223.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "None"
-items = [ "None", null, false, 0, null ]
+mouse_default_cursor_shape = 2
+item_count = 1
selected = 0
+popup/item_0/text = "None"
+popup/item_0/id = 0
[node name="NewObjectMenuButton" type="MenuButton" parent="HandleObjects" index="2"]
unique_name_in_owner = true
-margin_top = 24.0
-margin_right = 111.0
-margin_bottom = 44.0
+layout_mode = 2
+size_flags_horizontal = 3
focus_mode = 2
mouse_default_cursor_shape = 2
-size_flags_horizontal = 3
text = "Add new object"
-align = 0
[node name="RemoveObject" type="Button" parent="HandleObjects" index="3"]
unique_name_in_owner = true
-margin_left = 115.0
-margin_top = 24.0
-margin_right = 223.0
-margin_bottom = 44.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
disabled = true
-shortcut = SubResource( 34 )
+shortcut = SubResource("34")
text = "Remove object"
[node name="CelOptions" type="VBoxContainer" parent="." index="3"]
unique_name_in_owner = true
-margin_top = 74.0
-margin_right = 223.0
-margin_bottom = 244.0
+layout_mode = 2
size_flags_vertical = 3
[node name="CameraOptions" type="VBoxContainer" parent="CelOptions" index="0"]
-margin_right = 223.0
-margin_bottom = 146.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 6 )
+layout_mode = 2
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("6")
text = "Camera"
visible_content = true
[node name="GridContainer" type="GridContainer" parent="CelOptions/CameraOptions" index="1"]
-margin_top = 24.0
-margin_right = 223.0
-margin_bottom = 146.0
+layout_mode = 2
columns = 2
[node name="ProjectionLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="0"]
-margin_top = 3.0
-margin_right = 110.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Projection:"
[node name="ProjectionOptionButton" type="OptionButton" parent="CelOptions/CameraOptions/GridContainer" index="1"]
unique_name_in_owner = true
-margin_left = 114.0
-margin_right = 223.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Perspective"
-items = [ "Perspective", null, false, 0, null, "Orthogonal", null, false, 1, null, "Frustum", null, false, 2, null ]
+mouse_default_cursor_shape = 2
+item_count = 3
selected = 0
+popup/item_0/text = "Perspective"
+popup/item_0/id = 0
+popup/item_1/text = "Orthogonal"
+popup/item_1/id = 1
+popup/item_2/text = "Frustum"
+popup/item_2/id = 2
[node name="RotationLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="2"]
-margin_top = 24.0
-margin_right = 110.0
-margin_bottom = 38.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 0
text = "Rotation:"
-[node name="CameraRotation" parent="CelOptions/CameraOptions/GridContainer" index="3" instance=ExtResource( 7 )]
+[node name="CameraRotation" parent="CelOptions/CameraOptions/GridContainer" index="3" instance=ExtResource("7")]
unique_name_in_owner = true
-margin_left = 114.0
-margin_top = 24.0
-margin_right = 223.0
-margin_bottom = 104.0
+layout_mode = 2
size_flags_horizontal = 3
-min_value = Vector3( -180, -180, -180 )
-max_value = Vector3( 180, 180, 180 )
+min_value = Vector3(-180, -180, -180)
+max_value = Vector3(180, 180, 180)
step = 0.1
suffix_x = "ยฐ"
suffix_y = "ยฐ"
suffix_z = "ยฐ"
[node name="CameraFOVLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="4"]
-margin_top = 108.0
-margin_right = 110.0
-margin_bottom = 122.0
+layout_mode = 2
text = "FOV:"
-[node name="CameraFOV" type="TextureProgress" parent="CelOptions/CameraOptions/GridContainer" index="5"]
+[node name="CameraFOV" type="TextureProgressBar" parent="CelOptions/CameraOptions/GridContainer" index="5"]
unique_name_in_owner = true
-margin_left = 114.0
-margin_top = 108.0
-margin_right = 223.0
-margin_bottom = 122.0
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
min_value = 1.0
max_value = 179.0
value = 70.0
@@ -153,24 +119,21 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
suffix = "ยฐ"
[node name="CameraSizeLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="6"]
visible = false
-margin_top = 126.0
-margin_right = 110.0
-margin_bottom = 140.0
+layout_mode = 2
text = "Size:"
-[node name="CameraSize" type="TextureProgress" parent="CelOptions/CameraOptions/GridContainer" index="7"]
+[node name="CameraSize" type="TextureProgressBar" parent="CelOptions/CameraOptions/GridContainer" index="7"]
unique_name_in_owner = true
visible = false
-margin_top = 126.0
-margin_right = 110.0
-margin_bottom = 132.0
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
min_value = 0.001
max_value = 32.0
step = 0.001
@@ -181,50 +144,38 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="EnvironmentOptions" type="VBoxContainer" parent="CelOptions" index="1"]
-margin_top = 150.0
-margin_right = 223.0
-margin_bottom = 170.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 6 )
+layout_mode = 2
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("6")
text = "Environment"
[node name="GridContainer" type="GridContainer" parent="CelOptions/EnvironmentOptions" index="1"]
visible = false
-margin_right = 1266.0
-margin_bottom = 48.0
+layout_mode = 2
columns = 2
[node name="AmbientColorLabel" type="Label" parent="CelOptions/EnvironmentOptions/GridContainer" index="0"]
-margin_top = 3.0
-margin_right = 631.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Ambient color:"
[node name="AmbientColorPickerButton" type="ColorPickerButton" parent="CelOptions/EnvironmentOptions/GridContainer" index="1"]
unique_name_in_owner = true
-margin_left = 635.0
-margin_right = 1266.0
-margin_bottom = 20.0
+layout_mode = 2
size_flags_horizontal = 3
edit_alpha = false
[node name="AmbientEnergyLabel" type="Label" parent="CelOptions/EnvironmentOptions/GridContainer" index="2"]
-margin_top = 29.0
-margin_right = 631.0
-margin_bottom = 43.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Ambient color energy:"
-[node name="AmbientEnergy" parent="CelOptions/EnvironmentOptions/GridContainer" index="3" instance=ExtResource( 4 )]
+[node name="AmbientEnergy" parent="CelOptions/EnvironmentOptions/GridContainer" index="3" instance=ExtResource("4")]
unique_name_in_owner = true
-margin_left = 635.0
-margin_top = 24.0
-margin_right = 1266.0
-margin_bottom = 48.0
+layout_mode = 2
max_value = 16.0
step = 0.01
value = 1.0
@@ -233,56 +184,48 @@ allow_greater = true
[node name="ObjectOptions" type="VBoxContainer" parent="." index="4"]
unique_name_in_owner = true
visible = false
-margin_top = 408.0
-margin_right = 1266.0
-margin_bottom = 800.0
+layout_mode = 2
size_flags_vertical = 3
[node name="GlobalOptions" type="GridContainer" parent="ObjectOptions" index="0"]
-margin_right = 40.0
-margin_bottom = 40.0
+layout_mode = 2
columns = 2
[node name="VisibleLabel" type="Label" parent="ObjectOptions/GlobalOptions" index="0"]
-margin_right = 40.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Visible:"
[node name="VisibleCheckBox" type="CheckBox" parent="ObjectOptions/GlobalOptions" index="1"]
unique_name_in_owner = true
-margin_right = 71.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "On"
[node name="TransformOptions" type="VBoxContainer" parent="ObjectOptions" index="1"]
-margin_right = 1266.0
-margin_bottom = 272.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 6 )
+layout_mode = 2
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("6")
text = "Transform"
visible_content = true
[node name="GridContainer" type="GridContainer" parent="ObjectOptions/TransformOptions" index="1"]
-margin_top = 24.0
-margin_right = 1266.0
-margin_bottom = 272.0
+layout_mode = 2
columns = 2
[node name="PositionLabel" type="Label" parent="ObjectOptions/TransformOptions/GridContainer" index="0"]
-margin_right = 631.0
-margin_bottom = 80.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "Position:"
-[node name="ObjectPosition" parent="ObjectOptions/TransformOptions/GridContainer" index="1" instance=ExtResource( 7 )]
+[node name="ObjectPosition" parent="ObjectOptions/TransformOptions/GridContainer" index="1" instance=ExtResource("7")]
unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
-min_value = Vector3( -20, -20, -20 )
-max_value = Vector3( 20, 20, 20 )
+min_value = Vector3(-20, -20, -20)
+max_value = Vector3(20, 20, 20)
step = 0.01
allow_greater = true
allow_lesser = true
@@ -291,39 +234,33 @@ suffix_y = "m"
suffix_z = "m"
[node name="RotationLabel" type="Label" parent="ObjectOptions/TransformOptions/GridContainer" index="2"]
-margin_top = 84.0
-margin_right = 631.0
-margin_bottom = 164.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "Rotation:"
-[node name="ObjectRotation" parent="ObjectOptions/TransformOptions/GridContainer" index="3" instance=ExtResource( 7 )]
+[node name="ObjectRotation" parent="ObjectOptions/TransformOptions/GridContainer" index="3" instance=ExtResource("7")]
unique_name_in_owner = true
-margin_top = -226.0
-margin_right = 631.0
-margin_bottom = -146.0
+layout_mode = 2
size_flags_horizontal = 3
-min_value = Vector3( -180, -180, -180 )
-max_value = Vector3( 180, 180, 180 )
+min_value = Vector3(-180, -180, -180)
+max_value = Vector3(180, 180, 180)
step = 0.1
suffix_x = "ยฐ"
suffix_y = "ยฐ"
suffix_z = "ยฐ"
[node name="ScaleLabel" type="Label" parent="ObjectOptions/TransformOptions/GridContainer" index="4"]
-margin_top = 168.0
-margin_right = 631.0
-margin_bottom = 248.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "Scale:"
-[node name="ObjectScale" parent="ObjectOptions/TransformOptions/GridContainer" index="5" instance=ExtResource( 7 )]
+[node name="ObjectScale" parent="ObjectOptions/TransformOptions/GridContainer" index="5" instance=ExtResource("7")]
unique_name_in_owner = true
-margin_bottom = 80.0
+layout_mode = 2
size_flags_horizontal = 3
-value = Vector3( 100, 100, 100 )
+value = Vector3(100, 100, 100)
step = 0.01
allow_greater = true
allow_lesser = true
@@ -334,65 +271,56 @@ suffix_z = "%"
[node name="MeshOptions" type="VBoxContainer" parent="ObjectOptions" index="2"]
unique_name_in_owner = true
-margin_top = 276.0
-margin_right = 1266.0
-margin_bottom = 296.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 6 )
+layout_mode = 2
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("6")
text = "Mesh"
[node name="GridContainer" type="GridContainer" parent="ObjectOptions/MeshOptions" index="1"]
visible = false
-margin_top = 24.0
-margin_right = 1266.0
-margin_bottom = 104.0
+layout_mode = 2
columns = 2
[node name="MeshSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="0"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Size:"
-[node name="MeshSize" parent="ObjectOptions/MeshOptions/GridContainer" index="1" instance=ExtResource( 7 )]
+[node name="MeshSize" parent="ObjectOptions/MeshOptions/GridContainer" index="1" instance=ExtResource("7")]
unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
-max_value = Vector3( 10, 10, 10 )
+max_value = Vector3(10, 10, 10)
step = 0.01
allow_greater = true
show_ratio = true
[node name="MeshSizeLabel2" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="2"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Size:"
-[node name="MeshSizeV2" parent="ObjectOptions/MeshOptions/GridContainer" index="3" instance=ExtResource( 3 )]
+[node name="MeshSizeV2" parent="ObjectOptions/MeshOptions/GridContainer" index="3" instance=ExtResource("3")]
unique_name_in_owner = true
-margin_right = 52.0
+layout_mode = 2
size_flags_horizontal = 3
-max_value = Vector2( 10, 10 )
+max_value = Vector2(10, 10)
allow_greater = true
show_ratio = true
snap_step = 0.01
[node name="MeshLeftToRightLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="4"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Left to right:"
-[node name="MeshLeftToRight" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="5"]
+[node name="MeshLeftToRight" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="5"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = -2.0
max_value = 2.0
step = 0.1
@@ -402,74 +330,68 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="MeshRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="6"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Radius:"
-[node name="MeshRadius" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="7"]
+[node name="MeshRadius" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="7"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 0.001
max_value = 10.0
step = 0.01
-value = 1.0
+value = 1.001
allow_greater = true
nine_patch_stretch = true
stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="MeshHeightLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="8"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Height:"
-[node name="MeshHeight" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="9"]
+[node name="MeshHeight" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="9"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 0.001
max_value = 10.0
step = 0.01
-value = 2.0
+value = 2.001
allow_greater = true
nine_patch_stretch = true
stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="MeshRadialSegmentsLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="10"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Radial segments:"
-[node name="MeshRadialSegments" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="11"]
+[node name="MeshRadialSegments" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="11"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 4.0
max_value = 640.0
value = 64.0
@@ -479,22 +401,20 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="MeshRingsLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="12"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Rings:"
-[node name="MeshRings" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="13"]
+[node name="MeshRings" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="13"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
max_value = 320.0
value = 32.0
@@ -504,63 +424,32 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="MeshIsHemisphereLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="14"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Is hemisphere:"
[node name="MeshIsHemisphere" type="CheckBox" parent="ObjectOptions/MeshOptions/GridContainer" index="15"]
unique_name_in_owner = true
-margin_right = 24.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "On"
-
-[node name="MeshMidHeightLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="16"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
-size_flags_horizontal = 3
-text = "Height:"
-
-[node name="MeshMidHeight" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="17"]
-unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
-min_value = 0.001
-max_value = 10.0
-step = 0.01
-value = 1.0
-allow_greater = true
-nine_patch_stretch = true
-stretch_margin_left = 3
-stretch_margin_top = 3
-stretch_margin_right = 3
-stretch_margin_bottom = 3
-script = ExtResource( 5 )
+text = "On"
-[node name="MeshTopRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="18"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="MeshTopRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="16"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Top radius:"
-[node name="MeshTopRadius" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="19"]
+[node name="MeshTopRadius" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="17"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 10.0
step = 0.01
value = 1.0
@@ -570,22 +459,20 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
-[node name="MeshBottomRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="20"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="MeshBottomRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="18"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Bottom radius:"
-[node name="MeshBottomRadius" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="21"]
+[node name="MeshBottomRadius" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="19"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 10.0
step = 0.01
value = 1.0
@@ -595,35 +482,30 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
-[node name="MeshTextLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="MeshTextLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="20"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Text:"
-[node name="MeshText" type="LineEdit" parent="ObjectOptions/MeshOptions/GridContainer" index="23"]
+[node name="MeshText" type="LineEdit" parent="ObjectOptions/MeshOptions/GridContainer" index="21"]
unique_name_in_owner = true
-margin_right = 58.0
-margin_bottom = 24.0
+layout_mode = 2
size_flags_horizontal = 3
-[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Pixel size:"
-[node name="MeshPixelSize" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="25"]
+[node name="MeshPixelSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="23"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 0.001
max_value = 10.0
step = 0.001
@@ -634,23 +516,21 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
snap_step = 0.01
-[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Curve step:"
-[node name="MeshCurveStep" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="27"]
+[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="25"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 0.1
max_value = 10.0
step = 0.1
@@ -661,138 +541,100 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
-[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"]
-margin_top = -583.0
-margin_right = 631.0
-margin_bottom = -569.0
+[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Horizontal alignment:"
-[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="29"]
+[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="27"]
unique_name_in_owner = true
-margin_left = 635.0
-margin_top = -586.0
-margin_right = 1266.0
-margin_bottom = -566.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Center"
-items = [ "Left", null, false, 0, null, "Center", null, false, 1, null, "Right", null, false, 2, null ]
-selected = 1
+mouse_default_cursor_shape = 2
+item_count = 3
+selected = 0
+popup/item_0/text = "Left"
+popup/item_0/id = 0
+popup/item_1/text = "Center"
+popup/item_1/id = 1
+popup/item_2/text = "Right"
+popup/item_2/id = 2
[node name="LightOptions" type="VBoxContainer" parent="ObjectOptions" index="3"]
unique_name_in_owner = true
-margin_top = 276.0
-margin_right = 1266.0
-margin_bottom = 296.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 6 )
+layout_mode = 2
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("6")
text = "Light"
[node name="GridContainer" type="GridContainer" parent="ObjectOptions/LightOptions" index="1"]
visible = false
-margin_top = 24.0
-margin_right = 1266.0
-margin_bottom = 104.0
+layout_mode = 2
columns = 2
[node name="LightColorLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="0"]
-margin_top = -499.0
-margin_right = 631.0
-margin_bottom = -485.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Color:"
[node name="LightColor" type="ColorPickerButton" parent="ObjectOptions/LightOptions/GridContainer" index="1"]
unique_name_in_owner = true
-margin_left = 635.0
-margin_top = -502.0
-margin_right = 1266.0
-margin_bottom = -482.0
+layout_mode = 2
size_flags_horizontal = 3
-color = Color( 1, 1, 1, 1 )
+color = Color(1, 1, 1, 1)
edit_alpha = false
[node name="LightEnergyLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="2"]
-margin_top = -473.0
-margin_right = 631.0
-margin_bottom = -459.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Energy:"
-[node name="LightEnergy" parent="ObjectOptions/LightOptions/GridContainer" index="3" instance=ExtResource( 4 )]
+[node name="LightEnergy" parent="ObjectOptions/LightOptions/GridContainer" index="3" instance=ExtResource("4")]
unique_name_in_owner = true
-margin_left = 635.0
-margin_top = -478.0
-margin_right = 1266.0
-margin_bottom = -454.0
+layout_mode = 2
max_value = 16.0
step = 0.01
value = 1.0
allow_greater = true
[node name="LightNegativeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="4"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Negative:"
[node name="LightNegative" type="CheckBox" parent="ObjectOptions/LightOptions/GridContainer" index="5"]
unique_name_in_owner = true
-margin_right = 47.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "On"
[node name="ShadowEnabledLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="6"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Shadow:"
[node name="ShadowEnabled" type="CheckBox" parent="ObjectOptions/LightOptions/GridContainer" index="7"]
unique_name_in_owner = true
-margin_right = 47.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "On"
-[node name="ShadowColorLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="8"]
-margin_top = -499.0
-margin_right = 631.0
-margin_bottom = -485.0
-size_flags_horizontal = 3
-text = "Shadow color:"
-
-[node name="ShadowColor" type="ColorPickerButton" parent="ObjectOptions/LightOptions/GridContainer" index="9"]
-unique_name_in_owner = true
-margin_left = 635.0
-margin_top = -502.0
-margin_right = 1266.0
-margin_bottom = -482.0
-size_flags_horizontal = 3
-edit_alpha = false
-
-[node name="OmniRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="10"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="OmniRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="8"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Range:"
-[node name="OmniRange" type="TextureProgress" parent="ObjectOptions/LightOptions/GridContainer" index="11"]
+[node name="OmniRange" type="TextureProgressBar" parent="ObjectOptions/LightOptions/GridContainer" index="9"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 4096.0
step = 0.01
value = 5.0
@@ -801,22 +643,20 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
-[node name="SpotRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="12"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="SpotRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="10"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Range:"
-[node name="SpotRange" type="TextureProgress" parent="ObjectOptions/LightOptions/GridContainer" index="13"]
+[node name="SpotRange" type="TextureProgressBar" parent="ObjectOptions/LightOptions/GridContainer" index="11"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 4096.0
step = 0.01
value = 5.0
@@ -825,22 +665,20 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
-[node name="SpotAngleLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="14"]
-margin_top = 33.0
-margin_right = 631.0
-margin_bottom = 47.0
+[node name="SpotAngleLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="12"]
+layout_mode = 2
size_flags_horizontal = 3
text = "Angle:"
-[node name="SpotAngle" type="TextureProgress" parent="ObjectOptions/LightOptions/GridContainer" index="15"]
+[node name="SpotAngle" type="TextureProgressBar" parent="ObjectOptions/LightOptions/GridContainer" index="13"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 180.0
step = 0.01
value = 45.0
@@ -849,26 +687,24 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="UndoRedoTimer" type="Timer" parent="." index="5"]
wait_time = 0.2
one_shot = true
[node name="LoadModelDialog" type="FileDialog" parent="." index="6"]
-margin_top = 590.0
-margin_right = 515.0
-margin_bottom = 938.0
-rect_min_size = Vector2( 515, 348 )
-window_title = "Open File(s)"
-resizable = true
mode = 1
+title = "Open File(s)"
+size = Vector2i(558, 300)
+ok_button_text = "Open"
+file_mode = 1
access = 2
-filters = PoolStringArray( "*.obj" )
+filters = PackedStringArray("*.obj")
show_hidden_files = true
[connection signal="item_selected" from="HandleObjects/ObjectOptionButton" to="." method="_on_ObjectOptionButton_item_selected"]
[connection signal="pressed" from="HandleObjects/RemoveObject" to="." method="_on_RemoveObject_pressed"]
[connection signal="timeout" from="UndoRedoTimer" to="." method="_on_UndoRedoTimer_timeout"]
[connection signal="files_selected" from="LoadModelDialog" to="." method="_on_LoadModelDialog_files_selected"]
-[connection signal="popup_hide" from="LoadModelDialog" to="." method="_on_LoadModelDialog_popup_hide"]
+[connection signal="visibility_changed" from="LoadModelDialog" to="." method="_on_load_model_dialog_visibility_changed"]
diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd
index f10fd205034..13b376de3d9 100644
--- a/src/Tools/BaseTool.gd
+++ b/src/Tools/BaseTool.gd
@@ -3,20 +3,20 @@ extends VBoxContainer
var is_moving = false
var kname: String
-var tool_slot = null # Tools.Slot, can't have static typing due to cyclic errors
+var tool_slot: Tools.Slot = null
var cursor_text := ""
-var _cursor := Vector2.INF
+var _cursor := Vector2i(Vector2.INF)
-var _draw_cache: PoolVector2Array = [] # for storing already drawn pixels
-var _for_frame := 0 # cache for which frame?
+var _draw_cache: Array[Vector2i] = [] ## For storing already drawn pixels
+@warning_ignore("unused_private_class_variable") var _for_frame := 0 ## Cache for which frame
-# Only use "_spacing_mode" and "_spacing" variables (the others are set automatically)
+# Only use _spacing_mode and _spacing variables (the others are set automatically)
# The _spacing_mode and _spacing values are to be CHANGED only in the tool scripts (e.g Pencil.gd)
-var _spacing_mode := false # Enables spacing (continuous gaps between two strokes)
-var _spacing := Vector2.ZERO # Spacing between two strokes
-var _stroke_dimensions := Vector2.ONE # 2d vector containing _brush_size from Draw.gd
-var _spacing_offset := Vector2.ZERO # The "INITIAL" error between position and position.snapped()
-onready var color_rect: ColorRect = $ColorRect
+var _spacing_mode := false ## Enables spacing (continuous gaps between two strokes)
+var _spacing := Vector2i.ZERO ## Spacing between two strokes
+var _stroke_dimensions := Vector2i.ONE ## 2D vector containing _brush_size from Draw.gd
+var _spacing_offset := Vector2i.ZERO ## The initial error between position and position.snapped()
+@onready var color_rect := $ColorRect as ColorRect
func _ready() -> void:
@@ -26,7 +26,6 @@ func _ready() -> void:
else:
color_rect.color = Global.right_tool_color
$Label.text = Tools.tools[name].display_name
-
load_config()
@@ -53,62 +52,62 @@ func update_config() -> void:
pass
-func draw_start(position: Vector2) -> void:
+func draw_start(pos: Vector2i) -> void:
_draw_cache = []
is_moving = true
Global.current_project.can_undo = false
- _spacing_offset = _get_spacing_offset(position)
+ _spacing_offset = _get_spacing_offset(pos)
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
# This can happen if the user switches between tools with a shortcut
# while using another tool
if !is_moving:
- draw_start(position)
+ draw_start(pos)
-func draw_end(_position: Vector2) -> void:
+func draw_end(_pos: Vector2i) -> void:
is_moving = false
_draw_cache = []
Global.current_project.can_undo = true
-func cursor_move(position: Vector2) -> void:
- _cursor = position
+func cursor_move(pos: Vector2i) -> void:
+ _cursor = pos
if _spacing_mode and is_moving:
- _cursor = get_spacing_position(position)
+ _cursor = get_spacing_position(pos)
-func get_spacing_position(position: Vector2) -> Vector2:
+func get_spacing_position(pos: Vector2i) -> Vector2i:
# spacing_factor is the distance the mouse needs to get snapped by in order
# to keep a space "_spacing" between two strokes of dimensions "_stroke_dimensions"
var spacing_factor := _stroke_dimensions + _spacing
- var snap_position := position.snapped(spacing_factor) + _spacing_offset
+ var snap_pos := Vector2(pos.snapped(spacing_factor) + _spacing_offset)
- # keeping snap_position as is would have been fine but this adds extra accuracy as to
+ # keeping snap_pos as is would have been fine but this adds extra accuracy as to
# which snap point (from the list below) is closest to mouse and occupy THAT point
- var t_l := snap_position + Vector2(-spacing_factor.x, -spacing_factor.y)
- var t_c := snap_position + Vector2(0, -spacing_factor.y) # t_c is for "top centre" and so on...
- var t_r := snap_position + Vector2(spacing_factor.x, -spacing_factor.y)
- var m_l := snap_position + Vector2(-spacing_factor.x, 0)
- var m_c := snap_position
- var m_r := snap_position + Vector2(spacing_factor.x, 0)
- var b_l := snap_position + Vector2(-spacing_factor.x, spacing_factor.y)
- var b_c := snap_position + Vector2(0, spacing_factor.y)
- var b_r := snap_position + Vector2(spacing_factor.x, spacing_factor.y)
- var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r]
+ var t_l := snap_pos + Vector2(-spacing_factor.x, -spacing_factor.y)
+ var t_c := snap_pos + Vector2(0, -spacing_factor.y) # t_c is for "top centre" and so on...
+ var t_r := snap_pos + Vector2(spacing_factor.x, -spacing_factor.y)
+ var m_l := snap_pos + Vector2(-spacing_factor.x, 0)
+ var m_c := snap_pos
+ var m_r := snap_pos + Vector2(spacing_factor.x, 0)
+ var b_l := snap_pos + Vector2(-spacing_factor.x, spacing_factor.y)
+ var b_c := snap_pos + Vector2(0, spacing_factor.y)
+ var b_r := snap_pos + Vector2(spacing_factor.x, spacing_factor.y)
+ var vec_arr: PackedVector2Array = [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r]
for vec in vec_arr:
- if vec.distance_to(position) < snap_position.distance_to(position):
- snap_position = vec
+ if vec.distance_to(pos) < snap_pos.distance_to(pos):
+ snap_pos = vec
- return snap_position
+ return Vector2i(snap_pos)
-func _get_spacing_offset(position: Vector2) -> Vector2:
- var spacing_factor = _stroke_dimensions + _spacing # spacing_factor is explained above
+func _get_spacing_offset(pos: Vector2i) -> Vector2i:
+ var spacing_factor := _stroke_dimensions + _spacing # spacing_factor is explained above
# since we just started drawing, the "position" is our intended location so the error
# (_spacing_offset) is measured by subtracting both quantities
- return position - position.snapped(spacing_factor)
+ return pos - pos.snapped(spacing_factor)
func draw_indicator(left: bool) -> void:
@@ -121,11 +120,11 @@ func draw_preview() -> void:
pass
-func snap_position(position: Vector2) -> Vector2:
- var snapping_distance := Global.snapping_distance * Global.camera.zoom.x
+func snap_position(pos: Vector2) -> Vector2:
+ var snapping_distance := Global.snapping_distance / Global.camera.zoom.x
if Global.snap_to_rectangular_grid_boundary:
- var grid_pos := position.snapped(Global.grid_size)
- grid_pos += Global.grid_offset
+ var grid_pos := pos.snapped(Global.grid_size)
+ grid_pos += Vector2(Global.grid_offset)
# keeping grid_pos as is would have been fine but this adds extra accuracy as to
# which snap point (from the list below) is closest to mouse and occupy THAT point
var t_l := grid_pos + Vector2(-Global.grid_size.x, -Global.grid_size.y)
@@ -136,19 +135,19 @@ func snap_position(position: Vector2) -> Vector2:
var m_r := grid_pos + Vector2(Global.grid_size.x, 0)
var b_l := grid_pos + Vector2(-Global.grid_size.x, Global.grid_size.y)
var b_c := grid_pos + Vector2(0, Global.grid_size.y)
- var b_r := grid_pos + Global.grid_size
- var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r]
+ var b_r := grid_pos + Vector2(Global.grid_size)
+ var vec_arr: PackedVector2Array = [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r]
for vec in vec_arr:
- if vec.distance_to(position) < grid_pos.distance_to(position):
+ if vec.distance_to(pos) < grid_pos.distance_to(pos):
grid_pos = vec
- var grid_point := _get_closest_point_to_grid(position, snapping_distance, grid_pos)
+ var grid_point := _get_closest_point_to_grid(pos, snapping_distance, grid_pos)
if grid_point != Vector2.INF:
- position = grid_point.floor()
+ pos = grid_point.floor()
if Global.snap_to_rectangular_grid_center:
- var grid_center := position.snapped(Global.grid_size) + (Global.grid_size / 2)
- grid_center += Global.grid_offset
+ var grid_center := pos.snapped(Global.grid_size) + Vector2(Global.grid_size / 2)
+ grid_center += Vector2(Global.grid_offset)
# keeping grid_center as is would have been fine but this adds extra accuracy as to
# which snap point (from the list below) is closest to mouse and occupy THAT point
var t_l := grid_center + Vector2(-Global.grid_size.x, -Global.grid_size.y)
@@ -159,13 +158,13 @@ func snap_position(position: Vector2) -> Vector2:
var m_r := grid_center + Vector2(Global.grid_size.x, 0)
var b_l := grid_center + Vector2(-Global.grid_size.x, Global.grid_size.y)
var b_c := grid_center + Vector2(0, Global.grid_size.y)
- var b_r := grid_center + Global.grid_size
+ var b_r := grid_center + Vector2(Global.grid_size)
var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r]
for vec in vec_arr:
- if vec.distance_to(position) < grid_center.distance_to(position):
+ if vec.distance_to(pos) < grid_center.distance_to(pos):
grid_center = vec
- if grid_center.distance_to(position) <= snapping_distance:
- position = grid_center.floor()
+ if grid_center.distance_to(pos) <= snapping_distance:
+ pos = grid_center.floor()
var snap_to := Vector2.INF
if Global.snap_to_guides:
@@ -174,7 +173,7 @@ func snap_position(position: Vector2) -> Vector2:
continue
var s1: Vector2 = guide.points[0]
var s2: Vector2 = guide.points[1]
- var snap := _snap_to_guide(snap_to, position, snapping_distance, s1, s2)
+ var snap := _snap_to_guide(snap_to, pos, snapping_distance, s1, s2)
if snap == Vector2.INF:
continue
snap_to = snap
@@ -185,28 +184,28 @@ func snap_position(position: Vector2) -> Vector2:
continue
for i in point.lines.size():
if point.lines[i].has("angle") and point.lines[i].has("length"): # Sanity check
- var angle: float = deg2rad(point.lines[i].angle)
+ var angle := deg_to_rad(point.lines[i].angle)
var length: float = point.lines[i].length
- var start = Vector2(point.pos_x, point.pos_y)
- var s1: Vector2 = start
+ var start := Vector2(point.pos_x, point.pos_y)
+ var s1 := start
var s2 := s1 + Vector2(length * cos(angle), length * sin(angle))
- var snap := _snap_to_guide(snap_to, position, snapping_distance, s1, s2)
+ var snap := _snap_to_guide(snap_to, pos, snapping_distance, s1, s2)
if snap == Vector2.INF:
continue
snap_to = snap
if snap_to != Vector2.INF:
- position = snap_to.floor()
+ pos = snap_to.floor()
- return position
+ return pos
-func _get_closest_point_to_grid(position: Vector2, distance: float, grid_pos: Vector2) -> Vector2:
+func _get_closest_point_to_grid(pos: Vector2, distance: float, grid_pos: Vector2) -> Vector2:
# If the cursor is close to the start/origin of a grid cell, snap to that
var snap_distance := distance * Vector2.ONE
var closest_point := Vector2.INF
var rect := Rect2()
- rect.position = position - (snap_distance / 4.0)
- rect.end = position + (snap_distance / 4.0)
+ rect.position = pos - (snap_distance / 4.0)
+ rect.end = pos + (snap_distance / 4.0)
if rect.has_point(grid_pos):
closest_point = grid_pos
return closest_point
@@ -215,17 +214,17 @@ func _get_closest_point_to_grid(position: Vector2, distance: float, grid_pos: Ve
var grid_start_hor := Vector2(0, grid_pos.y)
var grid_end_hor := Vector2(Global.current_project.size.x, grid_pos.y)
var closest_point_hor := _get_closest_point_to_segment(
- position, distance, grid_start_hor, grid_end_hor
+ pos, distance, grid_start_hor, grid_end_hor
)
# Look for a point close to a vertical grid line
var grid_start_ver := Vector2(grid_pos.x, 0)
var grid_end_ver := Vector2(grid_pos.x, Global.current_project.size.y)
var closest_point_ver := _get_closest_point_to_segment(
- position, distance, grid_start_ver, grid_end_ver
+ pos, distance, grid_start_ver, grid_end_ver
)
# Snap to the closest point to the closest grid line
- var horizontal_distance := (closest_point_hor - position).length()
- var vertical_distance := (closest_point_ver - position).length()
+ var horizontal_distance := (closest_point_hor - pos).length()
+ var vertical_distance := (closest_point_ver - pos).length()
if horizontal_distance < vertical_distance:
closest_point = closest_point_hor
elif horizontal_distance > vertical_distance:
@@ -236,47 +235,44 @@ func _get_closest_point_to_grid(position: Vector2, distance: float, grid_pos: Ve
func _get_closest_point_to_segment(
- position: Vector2, distance: float, s1: Vector2, s2: Vector2
+ pos: Vector2, distance: float, s1: Vector2, s2: Vector2
) -> Vector2:
- var test_line := (s2 - s1).rotated(deg2rad(90)).normalized()
- var from_a := position - test_line * distance
- var from_b := position + test_line * distance
+ var test_line := (s2 - s1).rotated(deg_to_rad(90)).normalized()
+ var from_a := pos - test_line * distance
+ var from_b := pos + test_line * distance
var closest_point := Vector2.INF
- if Geometry.segment_intersects_segment_2d(from_a, from_b, s1, s2):
- closest_point = Geometry.get_closest_point_to_segment_2d(position, s1, s2)
+ if Geometry2D.segment_intersects_segment(from_a, from_b, s1, s2):
+ closest_point = Geometry2D.get_closest_point_to_segment(pos, s1, s2)
return closest_point
func _snap_to_guide(
- snap_to: Vector2, position: Vector2, distance: float, s1: Vector2, s2: Vector2
+ snap_to: Vector2, pos: Vector2, distance: float, s1: Vector2, s2: Vector2
) -> Vector2:
- var closest_point := _get_closest_point_to_segment(position, distance, s1, s2)
+ var closest_point := _get_closest_point_to_segment(pos, distance, s1, s2)
if closest_point == Vector2.INF: # Is not close to a guide
return Vector2.INF
# Snap to the closest guide
- if (
- snap_to == Vector2.INF
- or (snap_to - position).length() > (closest_point - position).length()
- ):
+ if snap_to == Vector2.INF or (snap_to - pos).length() > (closest_point - pos).length():
snap_to = closest_point
return snap_to
-func _get_draw_rect() -> Rect2:
+func _get_draw_rect() -> Rect2i:
if Global.current_project.has_selection:
return Global.current_project.selection_map.get_used_rect()
else:
- return Rect2(Vector2.ZERO, Global.current_project.size)
+ return Rect2i(Vector2i.ZERO, Global.current_project.size)
func _get_draw_image() -> Image:
return Global.current_project.get_current_cel().get_image()
-func _get_selected_draw_images() -> Array: # Array of Images
- var images := []
- var project: Project = Global.current_project
+func _get_selected_draw_images() -> Array[Image]:
+ var images: Array[Image] = []
+ var project := Global.current_project
for cel_index in project.selected_cels:
var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
if not cel is PixelCel:
@@ -286,49 +282,49 @@ func _get_selected_draw_images() -> Array: # Array of Images
return images
-func _flip_rect(rect: Rect2, size: Vector2, horizontal: bool, vertical: bool) -> Rect2:
+func _flip_rect(rect: Rect2, rect_size: Vector2, horiz: bool, vert: bool) -> Rect2:
var result := rect
- if horizontal:
- result.position.x = size.x - rect.end.x
- result.end.x = size.x - rect.position.x
- if vertical:
- result.position.y = size.y - rect.end.y
- result.end.y = size.y - rect.position.y
+ if horiz:
+ result.position.x = rect_size.x - rect.end.x
+ result.end.x = rect_size.x - rect.position.x
+ if vert:
+ result.position.y = rect_size.y - rect.end.y
+ result.end.y = rect_size.y - rect.position.y
return result.abs()
func _create_polylines(bitmap: BitMap) -> Array:
var lines := []
- var size := bitmap.get_size()
- for y in size.y:
- for x in size.x:
- var p := Vector2(x, y)
- if not bitmap.get_bit(p):
+ var bitmap_size := bitmap.get_size()
+ for y in bitmap_size.y:
+ for x in bitmap_size.x:
+ var p := Vector2i(x, y)
+ if not bitmap.get_bitv(p):
continue
- if x <= 0 or not bitmap.get_bit(p - Vector2(1, 0)):
- _add_polylines_segment(lines, p, p + Vector2(0, 1))
- if y <= 0 or not bitmap.get_bit(p - Vector2(0, 1)):
- _add_polylines_segment(lines, p, p + Vector2(1, 0))
- if x + 1 >= size.x or not bitmap.get_bit(p + Vector2(1, 0)):
- _add_polylines_segment(lines, p + Vector2(1, 0), p + Vector2(1, 1))
- if y + 1 >= size.y or not bitmap.get_bit(p + Vector2(0, 1)):
- _add_polylines_segment(lines, p + Vector2(0, 1), p + Vector2(1, 1))
+ if x <= 0 or not bitmap.get_bitv(p - Vector2i(1, 0)):
+ _add_polylines_segment(lines, p, p + Vector2i(0, 1))
+ if y <= 0 or not bitmap.get_bitv(p - Vector2i(0, 1)):
+ _add_polylines_segment(lines, p, p + Vector2i(1, 0))
+ if x + 1 >= bitmap_size.x or not bitmap.get_bitv(p + Vector2i(1, 0)):
+ _add_polylines_segment(lines, p + Vector2i(1, 0), p + Vector2i(1, 1))
+ if y + 1 >= bitmap_size.y or not bitmap.get_bitv(p + Vector2i(0, 1)):
+ _add_polylines_segment(lines, p + Vector2i(0, 1), p + Vector2i(1, 1))
return lines
-func _fill_bitmap_with_points(points: Array, size: Vector2) -> BitMap:
+func _fill_bitmap_with_points(points: Array[Vector2i], bitmap_size: Vector2i) -> BitMap:
var bitmap := BitMap.new()
- bitmap.create(size)
+ bitmap.create(bitmap_size)
for point in points:
- if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y:
+ if point.x < 0 or point.y < 0 or point.x >= bitmap_size.x or point.y >= bitmap_size.y:
continue
- bitmap.set_bit(point, 1)
+ bitmap.set_bitv(point, 1)
return bitmap
-func _add_polylines_segment(lines: Array, start: Vector2, end: Vector2) -> void:
+func _add_polylines_segment(lines: Array, start: Vector2i, end: Vector2i) -> void:
for line in lines:
if line[0] == start:
line.insert(0, end)
diff --git a/src/Tools/BaseTool.tscn b/src/Tools/BaseTool.tscn
index f275a2ac12c..4803a9711d7 100644
--- a/src/Tools/BaseTool.tscn
+++ b/src/Tools/BaseTool.tscn
@@ -1,25 +1,20 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://ctfgfelg0sho8"]
-[ext_resource path="res://src/Tools/BaseTool.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/Tools/BaseTool.gd" id="1"]
[node name="ToolOptions" type="VBoxContainer"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 123.0
-margin_bottom = 65.0
+offset_left = 7.0
+offset_top = 7.0
+offset_right = 123.0
+offset_bottom = 65.0
size_flags_horizontal = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="ColorRect" type="ColorRect" parent="."]
-margin_right = 116.0
-margin_bottom = 4.0
-rect_min_size = Vector2( 0, 4 )
+custom_minimum_size = Vector2(0, 4)
+layout_mode = 2
[node name="Label" type="Label" parent="."]
-margin_top = 8.0
-margin_right = 116.0
-margin_bottom = 22.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Tool Name"
-align = 1
-autowrap = true
diff --git a/src/Tools/Bucket.gd b/src/Tools/Bucket.gd
index 71dd4b10b67..04183e19a30 100644
--- a/src/Tools/Bucket.gd
+++ b/src/Tools/Bucket.gd
@@ -3,7 +3,7 @@ extends BaseTool
enum FillArea { AREA, COLORS, SELECTION }
enum FillWith { COLOR, PATTERN }
-const COLOR_REPLACE_SHADER := preload("res://src/Shaders/ColorReplace.shader")
+const COLOR_REPLACE_SHADER := preload("res://src/Shaders/ColorReplace.gdshader")
const PATTERN_FILL_SHADER := preload("res://src/Shaders/PatternFill.gdshader")
var _prev_mode := 0
@@ -13,13 +13,27 @@ var _fill_area: int = FillArea.AREA
var _fill_with: int = FillWith.COLOR
var _offset_x := 0
var _offset_y := 0
-# working array used as buffer for segments while flooding
-var _allegro_flood_segments: Array
-# results array per image while flooding
-var _allegro_image_segments: Array
+## Working array used as buffer for segments while flooding
+var _allegro_flood_segments: Array[Segment]
+## Results array per image while flooding
+var _allegro_image_segments: Array[Segment]
+
+
+class Segment:
+ var flooding := false
+ var todo_above := false
+ var todo_below := false
+ var left_position := -5
+ var right_position := -5
+ var y := 0
+ var next := 0
+
+ func _init(_y: int) -> void:
+ y = _y
func _ready() -> void:
+ super._ready()
update_pattern()
@@ -62,9 +76,9 @@ func _on_SimilaritySlider_value_changed(value: float) -> void:
func _on_PatternType_pressed() -> void:
var popup: Popup = Global.patterns_popup
- if !popup.is_connected("pattern_selected", self, "_on_Pattern_selected"):
- popup.connect("pattern_selected", self, "_on_Pattern_selected", [], CONNECT_ONESHOT)
- popup.popup(Rect2($FillPattern/Type.rect_global_position, Vector2(226, 72)))
+ if !popup.pattern_selected.is_connected(_on_Pattern_selected):
+ popup.pattern_selected.connect(_on_Pattern_selected.bind(), CONNECT_ONE_SHOT)
+ popup.popup(Rect2i($FillPattern/Type.global_position, Vector2i(226, 72)))
func _on_Pattern_selected(pattern: Patterns.Pattern) -> void:
@@ -125,56 +139,53 @@ func update_pattern() -> void:
return
else:
_pattern = Global.patterns_popup.default_pattern
- var tex := ImageTexture.new()
+ var tex: ImageTexture
if !_pattern.image.is_empty():
- tex.create_from_image(_pattern.image, 0)
- $FillPattern/Type/Texture.texture = tex
- var size := _pattern.image.get_size()
- $FillPattern/OffsetX.max_value = size.x - 1
- $FillPattern/OffsetY.max_value = size.y - 1
+ tex = ImageTexture.create_from_image(_pattern.image)
+ $FillPattern/Type/Texture2D.texture = tex
+ var pattern_size := _pattern.image.get_size()
+ $FillPattern/OffsetX.max_value = pattern_size.x - 1
+ $FillPattern/OffsetY.max_value = pattern_size.y - 1
-func draw_start(position: Vector2) -> void:
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ super.draw_start(pos)
if Input.is_action_pressed("draw_color_picker"):
- _pick_color(position)
+ _pick_color(pos)
return
Global.canvas.selection.transform_content_confirm()
if (
!Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn()
- or !Rect2(Vector2.ZERO, Global.current_project.size).has_point(position)
+ or !Rect2i(Vector2i.ZERO, Global.current_project.size).has_point(pos)
):
return
- if (
- Global.current_project.has_selection
- and not Global.current_project.can_pixel_get_drawn(position)
- ):
+ if Global.current_project.has_selection and not Global.current_project.can_pixel_get_drawn(pos):
return
var undo_data := _get_undo_data()
match _fill_area:
FillArea.AREA:
- fill_in_area(position)
+ fill_in_area(pos)
FillArea.COLORS:
- fill_in_color(position)
+ fill_in_color(pos)
FillArea.SELECTION:
fill_in_selection()
commit_undo("Draw", undo_data)
-func draw_move(position: Vector2) -> void:
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ super.draw_move(pos)
-func draw_end(position: Vector2) -> void:
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ super.draw_end(pos)
-func fill_in_color(position: Vector2) -> void:
- var project: Project = Global.current_project
+func fill_in_color(pos: Vector2i) -> void:
+ var project := Global.current_project
var images := _get_selected_draw_images()
for image in images:
- var color: Color = image.get_pixelv(position)
+ var color: Color = image.get_pixelv(pos)
var pattern_image: Image
if _fill_with == FillWith.COLOR or _pattern == null:
if tool_slot.color.is_equal_approx(color):
@@ -187,19 +198,18 @@ func fill_in_color(position: Vector2) -> void:
return
var selection: Image
- var selection_tex := ImageTexture.new()
+ var selection_tex: ImageTexture
if project.has_selection:
selection = project.selection_map
else:
- selection = Image.new()
- selection.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ selection = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
selection.fill(Color(1, 1, 1, 1))
- selection_tex.create_from_image(selection)
+ selection_tex = ImageTexture.create_from_image(selection)
- var pattern_tex := ImageTexture.new()
+ var pattern_tex: ImageTexture
if _pattern and pattern_image:
- pattern_tex.create_from_image(pattern_image)
+ pattern_tex = ImageTexture.create_from_image(pattern_image)
var params := {
"size": project.size,
@@ -208,46 +218,45 @@ func fill_in_color(position: Vector2) -> void:
"similarity_percent": _similarity,
"selection": selection_tex,
"pattern": pattern_tex,
- "pattern_size": pattern_tex.get_size(),
- # pixel offset converted to pattern uv offset
- "pattern_uv_offset":
- Vector2.ONE / pattern_tex.get_size() * Vector2(_offset_x, _offset_y),
"has_pattern": true if _fill_with == FillWith.PATTERN else false
}
+ if is_instance_valid(pattern_tex):
+ var pattern_size := Vector2i(pattern_tex.get_size())
+ params["pattern_size"] = pattern_size
+ # pixel offset converted to pattern uv offset
+ params["pattern_uv_offset"] = (
+ Vector2i.ONE / pattern_size * Vector2i(_offset_x, _offset_y)
+ )
var gen := ShaderImageEffect.new()
gen.generate_image(image, COLOR_REPLACE_SHADER, params, project.size)
-func fill_in_area(position: Vector2) -> void:
- var project: Project = Global.current_project
- _flood_fill(position)
+func fill_in_area(pos: Vector2i) -> void:
+ var project := Global.current_project
+ _flood_fill(pos)
# Handle Mirroring
- var mirror_x = project.x_symmetry_point - position.x
- var mirror_y = project.y_symmetry_point - position.y
- var mirror_x_inside: bool
- var mirror_y_inside: bool
-
- mirror_x_inside = project.can_pixel_get_drawn(Vector2(mirror_x, position.y))
- mirror_y_inside = project.can_pixel_get_drawn(Vector2(position.x, mirror_y))
+ var mirror_x := project.x_symmetry_point - pos.x
+ var mirror_y := project.y_symmetry_point - pos.y
+ var mirror_x_inside := project.can_pixel_get_drawn(Vector2i(mirror_x, pos.y))
+ var mirror_y_inside := project.can_pixel_get_drawn(Vector2i(pos.x, mirror_y))
if Tools.horizontal_mirror and mirror_x_inside:
- _flood_fill(Vector2(mirror_x, position.y))
+ _flood_fill(Vector2i(mirror_x, pos.y))
if Tools.vertical_mirror and mirror_y_inside:
- _flood_fill(Vector2(mirror_x, mirror_y))
+ _flood_fill(Vector2i(mirror_x, mirror_y))
if Tools.vertical_mirror and mirror_y_inside:
- _flood_fill(Vector2(position.x, mirror_y))
+ _flood_fill(Vector2i(pos.x, mirror_y))
func fill_in_selection() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var images := _get_selected_draw_images()
if _fill_with == FillWith.COLOR or _pattern == null:
if project.has_selection:
- var filler := Image.new()
- filler.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ var filler := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
filler.fill(tool_slot.color)
- var rect: Rect2 = Global.canvas.selection.big_bounding_rectangle
+ var rect: Rect2i = Global.canvas.selection.big_bounding_rectangle
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
# In case the selection map is bigger than the canvas
@@ -265,78 +274,69 @@ func fill_in_selection() -> void:
return
var selection: Image
- var selection_tex := ImageTexture.new()
+ var selection_tex: ImageTexture
if project.has_selection:
selection = project.selection_map
else:
- selection = Image.new()
- selection.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ selection = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
selection.fill(Color(1, 1, 1, 1))
- selection_tex.create_from_image(selection)
+ selection_tex = ImageTexture.create_from_image(selection)
- var pattern_tex := ImageTexture.new()
+ var pattern_tex: ImageTexture
if _pattern and pattern_image:
- pattern_tex.create_from_image(pattern_image)
+ pattern_tex = ImageTexture.create_from_image(pattern_image)
var params := {
"selection": selection_tex,
"size": project.size,
"pattern": pattern_tex,
- "pattern_size": pattern_tex.get_size(),
- # pixel offset converted to pattern uv offset
- "pattern_uv_offset":
- Vector2.ONE / pattern_tex.get_size() * Vector2(_offset_x, _offset_y),
}
+ if is_instance_valid(pattern_tex):
+ params["pattern_size"] = pattern_size
+ # pixel offset converted to pattern uv offset
+ params["pattern_uv_offset"] = (
+ Vector2i.ONE / pattern_size * Vector2i(_offset_x, _offset_y)
+ )
for image in images:
var gen := ShaderImageEffect.new()
gen.generate_image(image, PATTERN_FILL_SHADER, params, project.size)
-# Add a new segment to the array
-func _add_new_segment(y: int = 0) -> void:
- var segment := {}
- segment.flooding = false
- segment.todo_above = false
- segment.todo_below = false
- segment.left_position = -5 # anything less than -1 is ok
- segment.right_position = -5
- segment.y = y
- segment.next = 0
- _allegro_flood_segments.append(segment)
+## Add a new segment to the array
+func _add_new_segment(y := 0) -> void:
+ _allegro_flood_segments.append(Segment.new(y))
-# fill an horizontal segment around the specified position, and adds it to the
-# list of segments filled. Returns the first x coordinate after the part of the
-# line that has been filled.
+## Fill an horizontal segment around the specified position, and adds it to the
+## list of segments filled. Returns the first x coordinate after the part of the
+## line that has been filled.
func _flood_line_around_point(
- position: Vector2, project: Project, image: Image, src_color: Color
+ pos: Vector2i, project: Project, image: Image, src_color: Color
) -> int:
# this method is called by `_flood_fill` after the required data structures
# have been initialized
- if not image.get_pixelv(position).is_equal_approx(src_color):
- return int(position.x) + 1
- var west: Vector2 = position
- var east: Vector2 = position
+ if not image.get_pixelv(pos).is_equal_approx(src_color):
+ return pos.x + 1
+ var west := pos
+ var east := pos
if project.has_selection:
while (
- project.can_pixel_get_drawn(west)
- && image.get_pixelv(west).is_equal_approx(src_color)
+ project.can_pixel_get_drawn(west) && image.get_pixelv(west).is_equal_approx(src_color)
):
- west += Vector2.LEFT
+ west += Vector2i.LEFT
while (
- project.can_pixel_get_drawn(east)
- && image.get_pixelv(east).is_equal_approx(src_color)
+ project.can_pixel_get_drawn(east) && image.get_pixelv(east).is_equal_approx(src_color)
):
- east += Vector2.RIGHT
+ east += Vector2i.RIGHT
else:
while west.x >= 0 && image.get_pixelv(west).is_equal_approx(src_color):
- west += Vector2.LEFT
+ west += Vector2i.LEFT
while east.x < project.size.x && image.get_pixelv(east).is_equal_approx(src_color):
- east += Vector2.RIGHT
+ east += Vector2i.RIGHT
# Make a note of the stuff we processed
- var c = int(position.y)
- var segment = _allegro_flood_segments[c]
+ var c := pos.y
+ var segment := _allegro_flood_segments[c]
# we may have already processed some segments on this y coordinate
if segment.flooding:
while segment.next > 0:
@@ -345,13 +345,13 @@ func _flood_line_around_point(
# found last current segment on this line
c = _allegro_flood_segments.size()
segment.next = c
- _add_new_segment(position.y)
+ _add_new_segment(pos.y)
segment = _allegro_flood_segments[c]
# set the values for the current segment
segment.flooding = true
segment.left_position = west.x + 1
segment.right_position = east.x - 1
- segment.y = position.y
+ segment.y = pos.y
segment.next = 0
# Should we process segments above or below this one?
# when there is a selected area, the pixels above and below the one we started creating this
@@ -360,44 +360,44 @@ func _flood_line_around_point(
# test will be performed later anyway.
# On the other hand, this test we described is the same `project.can_pixel_get_drawn` does if
# there is no selection, so we don't need branching here.
- segment.todo_above = position.y > 0
- segment.todo_below = position.y < project.size.y - 1
+ segment.todo_above = pos.y > 0
+ segment.todo_below = pos.y < project.size.y - 1
# this is an actual segment we should be coloring, so we add it to the results for the
# current image
if segment.right_position >= segment.left_position:
_allegro_image_segments.append(segment)
# we know the point just east of the segment is not part of a segment that should be
# processed, else it would be part of this segment
- return int(east.x) + 1
+ return east.x + 1
func _check_flooded_segment(
y: int, left: int, right: int, project: Project, image: Image, src_color: Color
) -> bool:
- var ret = false
+ var ret := false
var c: int = 0
while left <= right:
c = y
while true:
- var segment = _allegro_flood_segments[c]
+ var segment := _allegro_flood_segments[c]
if left >= segment.left_position and left <= segment.right_position:
left = segment.right_position + 2
break
c = segment.next
if c == 0: # couldn't find a valid segment, so we draw a new one
- left = _flood_line_around_point(Vector2(left, y), project, image, src_color)
+ left = _flood_line_around_point(Vector2i(left, y), project, image, src_color)
ret = true
break
return ret
-func _flood_fill(position: Vector2) -> void:
+func _flood_fill(pos: Vector2i) -> void:
# implements the floodfill routine by Shawn Hargreaves
# from https://www1.udel.edu/CIS/software/dist/allegro-4.2.1/src/flood.c
- var project: Project = Global.current_project
+ var project := Global.current_project
var images := _get_selected_draw_images()
for image in images:
- var color: Color = image.get_pixelv(position)
+ var color: Color = image.get_pixelv(pos)
if _fill_with == FillWith.COLOR or _pattern == null:
# end early if we are filling with the same color
if tool_slot.color.is_equal_approx(color):
@@ -410,27 +410,27 @@ func _flood_fill(position: Vector2) -> void:
# init flood data structures
_allegro_flood_segments = []
_allegro_image_segments = []
- _compute_segments_for_image(position, project, image, color)
+ _compute_segments_for_image(pos, project, image, color)
# now actually color the image: since we have already checked a few things for the points
# we'll process here, we're going to skip a bunch of safety checks to speed things up.
_color_segments(image)
func _compute_segments_for_image(
- position: Vector2, project: Project, image: Image, src_color: Color
+ pos: Vector2i, project: Project, image: Image, src_color: Color
) -> void:
# initially allocate at least 1 segment per line of image
for j in image.get_height():
_add_new_segment(j)
# start flood algorithm
- _flood_line_around_point(position, project, image, src_color)
+ _flood_line_around_point(pos, project, image, src_color)
# test all segments while also discovering more
- var done = false
+ var done := false
while not done:
done = true
- var max_index = _allegro_flood_segments.size()
+ var max_index := _allegro_flood_segments.size()
for c in max_index:
- var p = _allegro_flood_segments[c]
+ var p := _allegro_flood_segments[c]
if p.todo_below: # check below the segment?
p.todo_below = false
if _check_flooded_segment(
@@ -447,36 +447,34 @@ func _compute_segments_for_image(
func _color_segments(image: Image) -> void:
if _fill_with == FillWith.COLOR or _pattern == null:
- var color_str = tool_slot.color.to_html()
+ var color: Color = tool_slot.color
# short circuit for flat colors
for c in _allegro_image_segments.size():
- var p = _allegro_image_segments[c]
+ var p := _allegro_image_segments[c]
for px in range(p.left_position, p.right_position + 1):
# We don't have to check again whether the point being processed is within the bounds
- image.set_pixel(px, p.y, Color(color_str))
+ image.set_pixel(px, p.y, color)
else:
# shortcircuit tests for patternfills
- var pattern_size = _pattern.image.get_size()
+ var pattern_size := _pattern.image.get_size()
# we know the pattern had a valid size when we began flooding, so we can skip testing that
# again for every point in the pattern.
for c in _allegro_image_segments.size():
- var p = _allegro_image_segments[c]
+ var p := _allegro_image_segments[c]
for px in range(p.left_position, p.right_position + 1):
_set_pixel_pattern(image, px, p.y, pattern_size)
-func _set_pixel_pattern(image: Image, x: int, y: int, pattern_size: Vector2) -> void:
- _pattern.image.lock()
- var px := int(x + _offset_x) % int(pattern_size.x)
- var py := int(y + _offset_y) % int(pattern_size.y)
+func _set_pixel_pattern(image: Image, x: int, y: int, pattern_size: Vector2i) -> void:
+ var px := (x + _offset_x) % pattern_size.x
+ var py := (y + _offset_y) % pattern_size.y
var pc := _pattern.image.get_pixel(px, py)
- _pattern.image.unlock()
image.set_pixel(x, y, pc)
func commit_undo(action: String, undo_data: Dictionary) -> void:
var redo_data := _get_undo_data()
- var project: Project = Global.current_project
+ var project := Global.current_project
var frame := -1
var layer := -1
if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1:
@@ -487,11 +485,10 @@ func commit_undo(action: String, undo_data: Dictionary) -> void:
project.undo_redo.create_action(action)
for image in redo_data:
project.undo_redo.add_do_property(image, "data", redo_data[image])
- image.unlock()
for image in undo_data:
project.undo_redo.add_undo_property(image, "data", undo_data[image])
- project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer))
project.undo_redo.commit_action()
@@ -499,26 +496,26 @@ func _get_undo_data() -> Dictionary:
var data := {}
var images := _get_selected_draw_images()
for image in images:
- image.unlock()
data[image] = image.data
- image.lock()
return data
-func _pick_color(position: Vector2) -> void:
- var project: Project = Global.current_project
- position = project.tiles.get_canon_position(position)
+func _pick_color(pos: Vector2i) -> void:
+ var project := Global.current_project
+ pos = project.tiles.get_canon_position(pos)
- if position.x < 0 or position.y < 0:
+ if pos.x < 0 or pos.y < 0:
return
var image := Image.new()
image.copy_from(_get_draw_image())
- if position.x > image.get_width() - 1 or position.y > image.get_height() - 1:
+ if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
return
- image.lock()
- var color := image.get_pixelv(position)
- image.unlock()
- var button := BUTTON_LEFT if Tools._slots[BUTTON_LEFT].tool_node == self else BUTTON_RIGHT
+ var color := image.get_pixelv(pos)
+ var button := (
+ MOUSE_BUTTON_LEFT
+ if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self
+ else MOUSE_BUTTON_RIGHT
+ )
Tools.assign_color(color, button, false)
diff --git a/src/Tools/Bucket.tscn b/src/Tools/Bucket.tscn
index e8ed2917e72..e59f7039cb1 100644
--- a/src/Tools/Bucket.tscn
+++ b/src/Tools/Bucket.tscn
@@ -1,117 +1,109 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://bbvvkrrjyxugo"]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/Tools/Bucket.gd" type="Script" id=3]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="2"]
+[ext_resource type="Script" path="res://src/Tools/Bucket.gd" id="3"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=2]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="2"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
anti_aliasing = false
-[node name="ToolOptions" instance=ExtResource( 2 )]
-margin_right = 138.0
-margin_bottom = 105.0
-script = ExtResource( 3 )
-
-[node name="ColorRect" parent="." index="0"]
-margin_right = 131.0
-
-[node name="Label" parent="." index="1"]
-margin_right = 131.0
+[node name="ToolOptions" instance=ExtResource("2")]
+offset_right = 138.0
+offset_bottom = 105.0
+script = ExtResource("3")
[node name="FillArea" type="Label" parent="." index="2"]
-margin_top = 26.0
-margin_right = 131.0
-margin_bottom = 40.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "Fill area:"
[node name="FillAreaOptions" type="OptionButton" parent="." index="3"]
-margin_top = 44.0
-margin_right = 131.0
-margin_bottom = 64.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Similar area"
-items = [ "Similar area", null, false, 0, null, "Similar colors", null, false, 1, null, "Whole selection", null, false, 2, null ]
+mouse_default_cursor_shape = 2
+item_count = 3
selected = 0
-
-[node name="SimilaritySlider" parent="." index="4" instance=ExtResource( 1 )]
+popup/item_0/text = "Similar area"
+popup/item_0/id = 0
+popup/item_1/text = "Similar colors"
+popup/item_1/id = 1
+popup/item_2/text = "Whole selection"
+popup/item_2/id = 2
+
+[node name="SimilaritySlider" parent="." index="4" instance=ExtResource("1")]
visible = false
-margin_top = 68.0
-margin_right = 131.0
-margin_bottom = 92.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 100.0
prefix = "Similarity:"
[node name="FillWith" type="Label" parent="." index="5"]
-margin_top = 68.0
-margin_right = 131.0
-margin_bottom = 82.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Fill with:"
[node name="FillWithOptions" type="OptionButton" parent="." index="6"]
-margin_top = 86.0
-margin_right = 131.0
-margin_bottom = 106.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Selected color"
-items = [ "Selected color", null, false, 0, null, "Pattern", null, false, 1, null ]
+mouse_default_cursor_shape = 2
+item_count = 2
selected = 0
+popup/item_0/text = "Selected color"
+popup/item_0/id = 0
+popup/item_1/text = "Pattern"
+popup/item_1/id = 1
[node name="FillPattern" type="VBoxContainer" parent="." index="7"]
visible = false
-margin_top = 110.0
-margin_right = 131.0
-margin_bottom = 198.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Type" type="Button" parent="FillPattern" index="0"]
-margin_right = 32.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Select a brush"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
size_flags_horizontal = 0
-custom_styles/hover = SubResource( 1 )
-custom_styles/pressed = SubResource( 1 )
-custom_styles/focus = SubResource( 2 )
-custom_styles/disabled = SubResource( 2 )
-custom_styles/normal = SubResource( 1 )
-
-[node name="Texture" type="TextureRect" parent="FillPattern/Type" index="0"]
-margin_right = 32.0
-margin_bottom = 32.0
-expand = true
+tooltip_text = "Select a brush"
+mouse_default_cursor_shape = 2
+theme_override_styles/normal = SubResource("1")
+theme_override_styles/hover = SubResource("1")
+theme_override_styles/pressed = SubResource("1")
+theme_override_styles/disabled = SubResource("2")
+theme_override_styles/focus = SubResource("2")
+
+[node name="Texture2D" type="TextureRect" parent="FillPattern/Type" index="0"]
+layout_mode = 0
+offset_right = 32.0
+offset_bottom = 32.0
+expand_mode = 1
stretch_mode = 6
-[node name="OffsetX" parent="FillPattern" index="1" instance=ExtResource( 1 )]
-margin_top = 36.0
-margin_right = 131.0
-margin_bottom = 60.0
+[node name="OffsetX" parent="FillPattern" index="1" instance=ExtResource("1")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
prefix = "Offset X:"
-[node name="OffsetY" parent="FillPattern" index="2" instance=ExtResource( 1 )]
-margin_top = 64.0
-margin_right = 131.0
-margin_bottom = 88.0
+[node name="OffsetY" parent="FillPattern" index="2" instance=ExtResource("1")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
prefix = "Offset Y:"
[connection signal="item_selected" from="FillAreaOptions" to="." method="_on_FillAreaOptions_item_selected"]
diff --git a/src/Tools/ColorPicker.gd b/src/Tools/ColorPicker.gd
index 7e20d11eea6..6ecf32caa86 100644
--- a/src/Tools/ColorPicker.gd
+++ b/src/Tools/ColorPicker.gd
@@ -46,47 +46,43 @@ func update_config() -> void:
$ColorPicker/ExtractFrom.selected = _mode
-func draw_start(position: Vector2) -> void:
- .draw_start(position)
- _pick_color(position)
+func draw_start(pos: Vector2i) -> void:
+ super.draw_start(pos)
+ _pick_color(pos)
-func draw_move(position: Vector2) -> void:
- .draw_move(position)
- _pick_color(position)
+func draw_move(pos: Vector2i) -> void:
+ super.draw_move(pos)
+ _pick_color(pos)
-func draw_end(position: Vector2) -> void:
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ super.draw_end(pos)
-func _pick_color(position: Vector2) -> void:
- var project: Project = Global.current_project
- position = project.tiles.get_canon_position(position)
+func _pick_color(pos: Vector2i) -> void:
+ var project := Global.current_project
+ pos = project.tiles.get_canon_position(pos)
- if position.x < 0 or position.y < 0:
+ if pos.x < 0 or pos.y < 0:
return
var color := Color(0, 0, 0, 0)
var image := Image.new()
image.copy_from(_get_draw_image())
- if position.x > image.get_width() - 1 or position.y > image.get_height() - 1:
+ if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
return
match _mode:
TOP_COLOR:
- var curr_frame: Frame = project.frames[project.current_frame]
+ var curr_frame := project.frames[project.current_frame]
for layer in project.layers.size():
- var idx = (project.layers.size() - 1) - layer
+ var idx := (project.layers.size() - 1) - layer
if project.layers[idx].is_visible_in_hierarchy():
image = curr_frame.cels[idx].get_image()
- image.lock()
- color = image.get_pixelv(position)
- image.unlock()
- if color != Color(0, 0, 0, 0):
+ color = image.get_pixelv(pos)
+ if not color.is_equal_approx(Color(0, 0, 0, 0)):
break
CURRENT_LAYER:
- image.lock()
- color = image.get_pixelv(position)
- image.unlock()
- var button := BUTTON_LEFT if _color_slot == 0 else BUTTON_RIGHT
+ color = image.get_pixelv(pos)
+ var button := MOUSE_BUTTON_LEFT if _color_slot == 0 else MOUSE_BUTTON_RIGHT
Tools.assign_color(color, button, false)
diff --git a/src/Tools/ColorPicker.tscn b/src/Tools/ColorPicker.tscn
index ef6f4185029..8551c878f96 100644
--- a/src/Tools/ColorPicker.tscn
+++ b/src/Tools/ColorPicker.tscn
@@ -1,48 +1,45 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://2onobu8eymt8"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/ColorPicker.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/ColorPicker.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="ColorPicker" type="VBoxContainer" parent="." index="2"]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 106.0
+layout_mode = 2
[node name="Label" type="Label" parent="ColorPicker" index="0"]
-margin_right = 116.0
-margin_bottom = 14.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_vertical = 1
+mouse_default_cursor_shape = 2
text = "Pick for:"
[node name="Options" type="OptionButton" parent="ColorPicker" index="1"]
-margin_top = 18.0
-margin_right = 116.0
-margin_bottom = 38.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Left Color"
-items = [ "Left Color", null, false, 0, null, "Right Color", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "Left Color"
+popup/item_0/id = 0
+popup/item_1/text = "Right Color"
+popup/item_1/id = 1
[node name="Label2" type="Label" parent="ColorPicker" index="2"]
-margin_top = 42.0
-margin_right = 116.0
-margin_bottom = 56.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_vertical = 1
+mouse_default_cursor_shape = 2
text = "Pick mode:"
[node name="ExtractFrom" type="OptionButton" parent="ColorPicker" index="3"]
-margin_top = 60.0
-margin_right = 116.0
-margin_bottom = 80.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Top Color"
-items = [ "Top Color", null, false, 0, null, "Current Layer", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "Top Color"
+popup/item_0/id = 0
+popup/item_1/text = "Current Layer"
+popup/item_1/id = 1
[connection signal="item_selected" from="ColorPicker/Options" to="." method="_on_Options_item_selected"]
[connection signal="item_selected" from="ColorPicker/ExtractFrom" to="." method="_on_ExtractFrom_item_selected"]
diff --git a/src/Tools/CropTool.gd b/src/Tools/CropTool.gd
index ea245cb7e59..3463d8a6326 100644
--- a/src/Tools/CropTool.gd
+++ b/src/Tools/CropTool.gd
@@ -1,7 +1,7 @@
extends BaseTool
-# Crop Tool, allows you to resize the canvas interactively
+## Crop Tool, allows you to resize the canvas interactively
-var _offset := Vector2.ZERO
+var _offset := Vector2i.ZERO
var _crop: CropRect
var _start_pos: Vector2
var _syncing := false
@@ -9,55 +9,57 @@ var _locked_ratio := false
func _ready() -> void:
+ super._ready()
_crop = Global.canvas.crop_rect
- _crop.connect("updated", self, "_sync_ui")
+ _crop.updated.connect(_sync_ui)
_crop.tool_count += 1
_sync_ui()
func _exit_tree() -> void:
+ super._exit_tree()
_crop.tool_count -= 1
-func draw_start(position: Vector2) -> void:
- .draw_start(position)
- _offset = position - _crop.rect.position
- _start_pos = position
+func draw_start(pos: Vector2i) -> void:
+ super.draw_start(pos)
+ _offset = pos - _crop.rect.position
+ _start_pos = pos
-func draw_move(position: Vector2) -> void:
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ super.draw_move(pos)
if _crop.locked_size:
- _crop.rect.position = position - _offset
+ _crop.rect.position = pos - _offset
else:
if _crop.mode == CropRect.Mode.POSITION_SIZE and _locked_ratio:
var ratio: Vector2 = $"%Size".ratio
- var distance := abs(_start_pos.x - position.x) + abs(_start_pos.y - position.y)
- _crop.rect.size.x = round(distance * ratio.x / (ratio.x + ratio.y))
- _crop.rect.size.y = round(distance * ratio.y / (ratio.x + ratio.y))
- if _start_pos.x < position.x:
+ var distance := absf(_start_pos.x - pos.x) + absf(_start_pos.y - pos.y)
+ _crop.rect.size.x = roundi(distance * ratio.x / (ratio.x + ratio.y))
+ _crop.rect.size.y = roundi(distance * ratio.y / (ratio.x + ratio.y))
+ if _start_pos.x < pos.x:
_crop.rect.position.x = _start_pos.x
else:
_crop.rect.position.x = _start_pos.x - _crop.rect.size.x
- if _start_pos.y < position.y:
+ if _start_pos.y < pos.y:
_crop.rect.position.y = _start_pos.y
else:
_crop.rect.position.y = _start_pos.y - _crop.rect.size.y
else:
- _crop.rect.position.x = min(_start_pos.x, position.x)
- _crop.rect.position.y = min(_start_pos.y, position.y)
- _crop.rect.end.x = max(_start_pos.x, position.x)
- _crop.rect.end.y = max(_start_pos.y, position.y)
+ _crop.rect.position.x = mini(_start_pos.x, pos.x)
+ _crop.rect.position.y = mini(_start_pos.y, pos.y)
+ _crop.rect.end.x = maxi(_start_pos.x, pos.x)
+ _crop.rect.end.y = maxi(_start_pos.y, pos.y)
# Ensure that the size is at least 1:
- _crop.rect.size.x = max(1, _crop.rect.size.x)
- _crop.rect.size.y = max(1, _crop.rect.size.y)
- _crop.emit_signal("updated")
+ _crop.rect.size.x = maxi(1, _crop.rect.size.x)
+ _crop.rect.size.y = maxi(1, _crop.rect.size.y)
+ _crop.updated.emit()
func _sync_ui() -> void:
_syncing = true
$"%CropMode".selected = _crop.mode
- $"%SizeLock".pressed = _crop.locked_size
+ $"%SizeLock".button_pressed = _crop.locked_size
match _crop.mode:
CropRect.Mode.MARGINS:
$"%MarginsContainer".show()
@@ -78,7 +80,7 @@ func _sync_ui() -> void:
$"%Left".value = _crop.rect.position.x
$"%Right".value = _crop.rect.end.x
- $"%Position".max_value = Global.current_project.size - Vector2.ONE
+ $"%Position".max_value = Global.current_project.size - Vector2i.ONE
$"%Size".max_value = Global.current_project.size
$"%Position".value = _crop.rect.position
$"%Size".value = _crop.rect.size
@@ -90,11 +92,11 @@ func _sync_ui() -> void:
# UI Signals:
-func _on_CropMode_item_selected(index: int) -> void:
+func _on_CropMode_item_selected(index: CropRect.Mode) -> void:
if _syncing:
return
_crop.mode = index
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_SizeLock_toggled(button_pressed: bool) -> void:
@@ -105,7 +107,7 @@ func _on_SizeLock_toggled(button_pressed: bool) -> void:
if _syncing:
return
_crop.locked_size = button_pressed
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_Top_value_changed(value: float) -> void:
@@ -114,32 +116,32 @@ func _on_Top_value_changed(value: float) -> void:
var difference := value - _crop.rect.position.y
_crop.rect.size.y = max(1, _crop.rect.size.y - difference)
_crop.rect.position.y = value
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_Bottom_value_changed(value: float) -> void:
if _syncing:
return
- _crop.rect.position.y = min(value - 1, _crop.rect.position.y)
+ _crop.rect.position.y = mini(value - 1, _crop.rect.position.y)
_crop.rect.end.y = value
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_Left_value_changed(value: float) -> void:
if _syncing:
return
var difference := value - _crop.rect.position.x
- _crop.rect.size.x = max(1, _crop.rect.size.x - difference)
+ _crop.rect.size.x = maxi(1, _crop.rect.size.x - difference)
_crop.rect.position.x = value
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_Right_value_changed(value: float) -> void:
if _syncing:
return
- _crop.rect.position.x = min(value - 1, _crop.rect.position.x)
+ _crop.rect.position.x = mini(value - 1, _crop.rect.position.x)
_crop.rect.end.x = value
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_RatioX_value_changed(value: float) -> void:
@@ -147,8 +149,8 @@ func _on_RatioX_value_changed(value: float) -> void:
return
var prev_ratio: Vector2 = $"%Size".ratio
$"%Size".ratio.x = value
- _crop.rect.size.x = round(max(1, _crop.rect.size.y / prev_ratio.y * value))
- _crop.emit_signal("updated")
+ _crop.rect.size.x = roundi(maxf(1, _crop.rect.size.y / prev_ratio.y * value))
+ _crop.updated.emit()
func _on_RatioY_value_changed(value: float) -> void:
@@ -156,22 +158,22 @@ func _on_RatioY_value_changed(value: float) -> void:
return
var prev_ratio: Vector2 = $"%Size".ratio
$"%Size".ratio.y = value
- _crop.rect.size.y = round(max(1, _crop.rect.size.x / prev_ratio.x * value))
- _crop.emit_signal("updated")
+ _crop.rect.size.y = roundi(maxf(1, _crop.rect.size.x / prev_ratio.x * value))
+ _crop.updated.emit()
-func _on_Position_value_changed(value: Vector2) -> void:
+func _on_Position_value_changed(value: Vector2i) -> void:
if _syncing:
return
_crop.rect.position = value
- _crop.emit_signal("updated")
+ _crop.updated.emit()
-func _on_Size_value_changed(value: Vector2) -> void:
+func _on_Size_value_changed(value: Vector2i) -> void:
if _syncing:
return
_crop.rect.size = value
- _crop.emit_signal("updated")
+ _crop.updated.emit()
func _on_Size_ratio_toggled(button_pressed: bool) -> void:
diff --git a/src/Tools/CropTool.tscn b/src/Tools/CropTool.tscn
index 06762bfa431..2e550bc61b8 100644
--- a/src/Tools/CropTool.tscn
+++ b/src/Tools/CropTool.tscn
@@ -1,42 +1,38 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://c35n21ii7onhe"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/Tools/CropTool.gd" type="Script" id=3]
-[ext_resource path="res://assets/graphics/misc/unlocked_size.png" type="Texture" id=4]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=5]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="2"]
+[ext_resource type="Script" path="res://src/Tools/CropTool.gd" id="3"]
+[ext_resource type="Texture2D" uid="uid://bgrq56ndc4ydj" path="res://assets/graphics/misc/unlocked_size.png" id="4"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="5"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 3 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("3")
[node name="ModeLabel" type="Label" parent="." index="2"]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 40.0
+layout_mode = 2
text = "Mode:"
[node name="HBoxContainer" type="HBoxContainer" parent="." index="3"]
-margin_top = 44.0
-margin_right = 116.0
-margin_bottom = 66.0
+layout_mode = 2
[node name="CropMode" type="OptionButton" parent="HBoxContainer" index="0"]
unique_name_in_owner = true
-margin_right = 84.0
-margin_bottom = 22.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Margins"
+mouse_default_cursor_shape = 2
clip_text = true
-items = [ "Margins", null, false, 0, null, "Position + Size", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "Margins"
+popup/item_0/id = 0
+popup/item_1/text = "Position + Size"
+popup/item_1/id = 1
[node name="SizeLock" type="Button" parent="HBoxContainer" index="1"]
unique_name_in_owner = true
-margin_left = 88.0
-margin_right = 116.0
-margin_bottom = 22.0
-hint_tooltip = "Locked size
+layout_mode = 2
+tooltip_text = "Locked size
When enabled using the tool on the canvas will only move the cropping rectangle.
@@ -44,54 +40,48 @@ When disabled using the tool on the canvas will draw the rectangle."
focus_mode = 0
mouse_default_cursor_shape = 2
toggle_mode = true
-icon = ExtResource( 4 )
-__meta__ = {
-"_editor_description_": ""
-}
+icon = ExtResource("4")
[node name="MarginsContainer" type="VBoxContainer" parent="." index="4"]
unique_name_in_owner = true
-margin_top = 70.0
-margin_right = 116.0
-margin_bottom = 196.0
+layout_mode = 2
[node name="MarginsLabel" type="Label" parent="MarginsContainer" index="0"]
-margin_right = 116.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Margins:"
-[node name="Top" parent="MarginsContainer" index="1" instance=ExtResource( 2 )]
+[node name="Top" parent="MarginsContainer" index="1" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_top = 18.0
-margin_right = 116.0
-margin_bottom = 42.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
allow_greater = true
allow_lesser = true
prefix = "Top:"
-[node name="Bottom" parent="MarginsContainer" index="2" instance=ExtResource( 2 )]
+[node name="Bottom" parent="MarginsContainer" index="2" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_top = 46.0
-margin_right = 116.0
-margin_bottom = 70.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
allow_greater = true
allow_lesser = true
prefix = "Bottom:"
-[node name="Left" parent="MarginsContainer" index="3" instance=ExtResource( 2 )]
+[node name="Left" parent="MarginsContainer" index="3" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_top = 74.0
-margin_right = 116.0
-margin_bottom = 98.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
allow_greater = true
allow_lesser = true
prefix = "Left:"
-[node name="Right" parent="MarginsContainer" index="4" instance=ExtResource( 2 )]
+[node name="Right" parent="MarginsContainer" index="4" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_top = 102.0
-margin_right = 116.0
-margin_bottom = 126.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
allow_greater = true
allow_lesser = true
prefix = "Right:"
@@ -99,92 +89,73 @@ prefix = "Right:"
[node name="RatioContainer" type="VBoxContainer" parent="." index="5"]
unique_name_in_owner = true
visible = false
-margin_top = 200.0
-margin_right = 116.0
-margin_bottom = 242.0
+layout_mode = 2
[node name="AspectRatioLabel" type="Label" parent="RatioContainer" index="0"]
-margin_right = 116.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Aspect Ratio:"
[node name="HBoxContainer" type="HBoxContainer" parent="RatioContainer" index="1"]
-margin_top = 18.0
-margin_right = 116.0
-margin_bottom = 42.0
+layout_mode = 2
-[node name="RatioX" parent="RatioContainer/HBoxContainer" index="0" instance=ExtResource( 2 )]
+[node name="RatioX" parent="RatioContainer/HBoxContainer" index="0" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_right = 52.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
allow_greater = true
[node name="Label" type="Label" parent="RatioContainer/HBoxContainer" index="1"]
-margin_left = 56.0
-margin_top = 5.0
-margin_right = 60.0
-margin_bottom = 19.0
+layout_mode = 2
text = ":"
-[node name="RatioY" parent="RatioContainer/HBoxContainer" index="2" instance=ExtResource( 2 )]
+[node name="RatioY" parent="RatioContainer/HBoxContainer" index="2" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_left = 64.0
-margin_right = 116.0
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
allow_greater = true
[node name="PosSizeContainer" type="VBoxContainer" parent="." index="6"]
unique_name_in_owner = true
-margin_top = 200.0
-margin_right = 116.0
-margin_bottom = 344.0
+layout_mode = 2
[node name="PositionLabel" type="Label" parent="PosSizeContainer" index="0"]
-margin_right = 116.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Position:"
-[node name="Position" parent="PosSizeContainer" index="1" instance=ExtResource( 5 )]
+[node name="Position" parent="PosSizeContainer" index="1" instance=ExtResource("5")]
unique_name_in_owner = true
-margin_top = 18.0
-margin_right = 116.0
-margin_bottom = 70.0
+layout_mode = 2
allow_greater = true
allow_lesser = true
[node name="SizeLabel" type="Label" parent="PosSizeContainer" index="2"]
-margin_top = 74.0
-margin_right = 116.0
-margin_bottom = 88.0
+layout_mode = 2
text = "Size:"
-[node name="Size" parent="PosSizeContainer" index="3" instance=ExtResource( 5 )]
+[node name="Size" parent="PosSizeContainer" index="3" instance=ExtResource("5")]
unique_name_in_owner = true
-margin_top = 92.0
-margin_right = 116.0
-margin_bottom = 144.0
-value = Vector2( 1, 1 )
-min_value = Vector2( 1, 1 )
+layout_mode = 2
+value = Vector2(1, 1)
+min_value = Vector2(1, 1)
allow_greater = true
show_ratio = true
prefix_x = "Width:"
prefix_y = "Height:"
[node name="Apply" type="Button" parent="." index="7"]
-margin_top = 348.0
-margin_right = 116.0
-margin_bottom = 368.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Apply"
[node name="DimensionsLabel" type="Label" parent="." index="8"]
unique_name_in_owner = true
-margin_top = 372.0
-margin_right = 116.0
-margin_bottom = 386.0
-align = 1
+layout_mode = 2
[connection signal="item_selected" from="HBoxContainer/CropMode" to="." method="_on_CropMode_item_selected"]
[connection signal="toggled" from="HBoxContainer/SizeLock" to="." method="_on_SizeLock_toggled"]
diff --git a/src/Tools/Draw.gd b/src/Tools/Draw.gd
index 6a9b0b12434..57b3cecfb8f 100644
--- a/src/Tools/Draw.gd
+++ b/src/Tools/Draw.gd
@@ -6,19 +6,19 @@ var _brush_size_dynamics := 1
var _cache_limit := 3
var _brush_interpolate := 0
var _brush_image := Image.new()
-var _orignal_brush_image := Image.new() # contains the original _brush_image, without resizing
+var _orignal_brush_image := Image.new() ## Contains the original _brush_image, without resizing
var _brush_texture := ImageTexture.new()
var _strength := 1.0
-var _picking_color := false
+@warning_ignore("unused_private_class_variable") var _picking_color := false
var _undo_data := {}
var _drawer := Drawer.new()
-var _mask := PoolRealArray()
+var _mask := PackedFloat32Array()
var _mirror_brushes := {}
var _draw_line := false
-var _line_start := Vector2.ZERO
-var _line_end := Vector2.ZERO
+var _line_start := Vector2i.ZERO
+var _line_end := Vector2i.ZERO
var _indicator := BitMap.new()
var _polylines := []
@@ -26,29 +26,28 @@ var _line_polylines := []
# Memorize some stuff when doing brush strokes
var _stroke_project: Project
-var _stroke_images := [] # Array of Images
+var _stroke_images: Array[Image] = []
var _is_mask_size_zero := true
-var _circle_tool_shortcut: PoolVector2Array
+var _circle_tool_shortcut: Array[Vector2i]
func _ready() -> void:
- Global.global_tool_options.connect("dynamics_changed", self, "_reset_dynamics")
- Tools.connect("color_changed", self, "_on_Color_changed")
- Global.brushes_popup.connect("brush_removed", self, "_on_Brush_removed")
+ super._ready()
+ Global.global_tool_options.dynamics_changed.connect(_reset_dynamics)
+ Tools.color_changed.connect(_on_Color_changed)
+ Global.brushes_popup.brush_removed.connect(_on_Brush_removed)
func _on_BrushType_pressed() -> void:
- if not Global.brushes_popup.is_connected("brush_selected", self, "_on_Brush_selected"):
- Global.brushes_popup.connect(
- "brush_selected", self, "_on_Brush_selected", [], CONNECT_ONESHOT
- )
+ if not Global.brushes_popup.brush_selected.is_connected(_on_Brush_selected):
+ Global.brushes_popup.brush_selected.connect(_on_Brush_selected, CONNECT_ONE_SHOT)
# Now we set position and columns
var tool_option_container = get_node("../../")
var brush_button = $Brush/Type
- var pop_position = brush_button.rect_global_position + Vector2(0, brush_button.rect_size.y)
- var size_x = tool_option_container.rect_size.x
- var size_y = tool_option_container.rect_size.y - $Brush.rect_position.y - $Brush.rect_size.y
- var columns = int(size_x / 36) - 1 # 36 is the rect_size of BrushButton.tscn
+ var pop_position = brush_button.global_position + Vector2(0, brush_button.size.y)
+ var size_x = tool_option_container.size.x
+ var size_y = tool_option_container.size.y - $Brush.position.y - $Brush.size.y
+ var columns := int(size_x / 36) - 1 # 36 is the size of BrushButton.tscn
var categories = Global.brushes_popup.get_node("Background/Brushes/Categories")
for child in categories.get_children():
if child is GridContainer:
@@ -129,13 +128,19 @@ func update_brush() -> void:
$Brush/BrushSize.suffix = "px" # Assume we are using default brushes
match _brush.type:
Brushes.PIXEL:
- _brush_texture.create_from_image(load("res://assets/graphics/pixel_image.png"), 0)
+ _brush_texture = ImageTexture.create_from_image(
+ load("res://assets/graphics/pixel_image.png")
+ )
_stroke_dimensions = Vector2.ONE * _brush_size
Brushes.CIRCLE:
- _brush_texture.create_from_image(load("res://assets/graphics/circle_9x9.png"), 0)
+ _brush_texture = ImageTexture.create_from_image(
+ load("res://assets/graphics/circle_9x9.png")
+ )
_stroke_dimensions = Vector2.ONE * _brush_size
Brushes.FILLED_CIRCLE:
- _brush_texture.create_from_image(load("res://assets/graphics/circle_filled_9x9.png"), 0)
+ _brush_texture = ImageTexture.create_from_image(
+ load("res://assets/graphics/circle_filled_9x9.png")
+ )
_stroke_dimensions = Vector2.ONE * _brush_size
Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM:
$Brush/BrushSize.suffix = "00 %" # Use a different size convention on images
@@ -145,7 +150,7 @@ func update_brush() -> void:
var random := randi() % _brush.random.size()
_orignal_brush_image = _brush.random[random]
_brush_image = _create_blended_brush_image(_orignal_brush_image)
- _brush_texture.create_from_image(_brush_image, 0)
+ _brush_texture = ImageTexture.create_from_image(_brush_image)
update_mirror_brush()
_stroke_dimensions = _brush_image.get_size()
_indicator = _create_brush_indicator()
@@ -157,9 +162,9 @@ func update_brush() -> void:
func update_random_image() -> void:
if _brush.type != Brushes.RANDOM_FILE:
return
- var random = randi() % _brush.random.size()
+ var random := randi() % _brush.random.size()
_brush_image = _create_blended_brush_image(_brush.random[random])
- _brush_texture.create_from_image(_brush_image, 0)
+ _brush_texture = ImageTexture.create_from_image(_brush_image)
_indicator = _create_brush_indicator()
update_mirror_brush()
@@ -176,15 +181,14 @@ func update_mirror_brush() -> void:
func update_mask(can_skip := true) -> void:
if can_skip and Tools.dynamics_alpha == Tools.Dynamics.NONE:
if _mask:
- _mask = PoolRealArray()
+ _mask = PackedFloat32Array()
return
- var size: Vector2 = Global.current_project.size
_is_mask_size_zero = false
- # Faster than zeroing PoolByteArray directly.
+ # Faster than zeroing PackedFloat32Array directly.
# See: https://github.com/Orama-Interactive/Pixelorama/pull/439
var nulled_array := []
- nulled_array.resize(size.x * size.y)
- _mask = PoolRealArray(nulled_array)
+ nulled_array.resize(Global.current_project.size.x * Global.current_project.size.y)
+ _mask = PackedFloat32Array(nulled_array)
func update_line_polylines(start: Vector2, end: Vector2) -> void:
@@ -193,14 +197,14 @@ func update_line_polylines(start: Vector2, end: Vector2) -> void:
func prepare_undo(action: String) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
_undo_data = _get_undo_data()
project.undo_redo.create_action(action)
func commit_undo() -> void:
var redo_data := _get_undo_data()
- var project: Project = Global.current_project
+ var project := Global.current_project
var frame := -1
var layer := -1
if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1:
@@ -209,51 +213,58 @@ func commit_undo() -> void:
project.undos += 1
for image in redo_data:
- var compressed_data = redo_data[image]
- var buffer_size = compressed_data["data"].size()
+ var compressed_data: Dictionary = redo_data[image]
+ var buffer_size: int = compressed_data["data"].size()
compressed_data["data"] = compressed_data["data"].compress()
project.undo_redo.add_do_method(
- self, "undo_redo_draw_op", image, compressed_data, buffer_size
+ undo_redo_draw_op.bind(image, compressed_data["data"], buffer_size)
)
- image.unlock()
for image in _undo_data:
- var compressed_data = _undo_data[image]
- var buffer_size = compressed_data["data"].size()
+ var compressed_data: Dictionary = _undo_data[image]
+ var buffer_size: int = compressed_data["data"].size()
compressed_data["data"] = compressed_data["data"].compress()
project.undo_redo.add_undo_method(
- self, "undo_redo_draw_op", image, compressed_data, buffer_size
+ undo_redo_draw_op.bind(image, compressed_data["data"], buffer_size)
)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer))
project.undo_redo.commit_action()
_undo_data.clear()
-func undo_redo_draw_op(image: Object, compressed_image_data: Dictionary, buffer_size: int) -> void:
- image["data"]["data"] = compressed_image_data["data"].decompress(buffer_size)
+func undo_redo_draw_op(
+ image: Image, compressed_image_data: PackedByteArray, buffer_size: int
+) -> void:
+ image.set_data(
+ image.get_width(),
+ image.get_height(),
+ image.has_mipmaps(),
+ image.get_format(),
+ compressed_image_data.decompress(buffer_size)
+ )
-func draw_tool(position: Vector2) -> void:
+func draw_tool(pos: Vector2i) -> void:
if Global.mirror_view:
# Even brushes are not perfectly centred and are offsetted by 1 px so we add it
if int(_stroke_dimensions.x) % 2 == 0:
- position.x += 1
+ pos.x += 1
_prepare_tool()
- var coords_to_draw := _draw_tool(position)
+ var coords_to_draw := _draw_tool(pos)
for coord in coords_to_draw:
_set_pixel_no_cache(coord)
-func draw_end(position: Vector2) -> void:
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ super.draw_end(pos)
_brush_size_dynamics = _brush_size
if Tools.dynamics_size != Tools.Dynamics.NONE:
_brush_size_dynamics = Tools.brush_size_min
match _brush.type:
Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM:
_brush_image = _create_blended_brush_image(_orignal_brush_image)
- _brush_texture.create_from_image(_brush_image, 0)
+ _brush_texture = ImageTexture.create_from_image(_brush_image)
update_mirror_brush()
_stroke_dimensions = _brush_image.get_size()
_indicator = _create_brush_indicator()
@@ -264,14 +275,14 @@ func _prepare_tool() -> void:
if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
return
_brush_size_dynamics = _brush_size
- var strength: float = Tools.get_alpha_dynamic(_strength)
+ var strength := Tools.get_alpha_dynamic(_strength)
if Tools.dynamics_size == Tools.Dynamics.PRESSURE:
- _brush_size_dynamics = round(
- lerp(Tools.brush_size_min, Tools.brush_size_max, Tools.pen_pressure)
+ _brush_size_dynamics = roundi(
+ lerpf(Tools.brush_size_min, Tools.brush_size_max, Tools.pen_pressure)
)
elif Tools.dynamics_size == Tools.Dynamics.VELOCITY:
- _brush_size_dynamics = round(
- lerp(Tools.brush_size_min, Tools.brush_size_max, Tools.mouse_velocity)
+ _brush_size_dynamics = roundi(
+ lerpf(Tools.brush_size_min, Tools.brush_size_max, Tools.mouse_velocity)
)
_drawer.pixel_perfect = Tools.pixel_perfect if _brush_size == 1 else false
_drawer.horizontal_mirror = Tools.horizontal_mirror
@@ -293,7 +304,7 @@ func _prepare_tool() -> void:
Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM:
# save _brush_image for safe keeping
_brush_image = _create_blended_brush_image(_orignal_brush_image)
- _brush_texture.create_from_image(_brush_image, 0)
+ _brush_texture = ImageTexture.create_from_image(_brush_image)
update_mirror_brush()
_stroke_dimensions = _brush_image.get_size()
@@ -305,27 +316,27 @@ func _prepare_circle_tool(fill: bool) -> void:
var diameter := _brush_size_dynamics * 2 + 1
for n in range(0, diameter):
for m in range(0, diameter):
- if circle_tool_map.get_bit(Vector2(m, n)):
+ if circle_tool_map.get_bitv(Vector2i(m, n)):
_circle_tool_shortcut.append(
- Vector2(m - _brush_size_dynamics, n - _brush_size_dynamics)
+ Vector2i(m - _brush_size_dynamics, n - _brush_size_dynamics)
)
# Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be
# drawn if it can (except for the generic brush, when it's actually drawing them)
-func _draw_tool(position: Vector2) -> PoolVector2Array:
+func _draw_tool(pos: Vector2) -> PackedVector2Array:
if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
- return PoolVector2Array() # empty fallback
+ return PackedVector2Array() # empty fallback
match _brush.type:
Brushes.PIXEL:
- return _compute_draw_tool_pixel(position)
+ return _compute_draw_tool_pixel(pos)
Brushes.CIRCLE:
- return _compute_draw_tool_circle(position, false)
+ return _compute_draw_tool_circle(pos, false)
Brushes.FILLED_CIRCLE:
- return _compute_draw_tool_circle(position, true)
+ return _compute_draw_tool_circle(pos, true)
_:
- draw_tool_brush(position)
- return PoolVector2Array() # empty fallback
+ draw_tool_brush(pos)
+ return PackedVector2Array() # empty fallback
# Bresenham's Algorithm
@@ -336,15 +347,15 @@ func draw_fill_gap(start: Vector2, end: Vector2) -> void:
if int(_stroke_dimensions.x) % 2 == 0:
start.x += 1
end.x += 1
- var dx := int(abs(end.x - start.x))
- var dy := int(-abs(end.y - start.y))
+ _prepare_tool()
+ var dx := absi(end.x - start.x)
+ var dy := -absi(end.y - start.y)
var err := dx + dy
var e2 := err << 1
var sx := 1 if start.x < end.x else -1
var sy := 1 if start.y < end.y else -1
var x := start.x
var y := start.y
- _prepare_tool()
# This needs to be a dictionary to ensure duplicate coordinates are not being added
var coords_to_draw := {}
while !(x == end.x && y == end.y):
@@ -364,10 +375,10 @@ func draw_fill_gap(start: Vector2, end: Vector2) -> void:
_set_pixel_no_cache(c)
-# Compute the array of coordinates that should be drawn
-func _compute_draw_tool_pixel(position: Vector2) -> PoolVector2Array:
- var result := PoolVector2Array()
- var start := position - Vector2.ONE * (_brush_size_dynamics >> 1)
+## Compute the array of coordinates that should be drawn
+func _compute_draw_tool_pixel(pos: Vector2) -> PackedVector2Array:
+ var result := PackedVector2Array()
+ var start := pos - Vector2.ONE * (_brush_size_dynamics >> 1)
var end := start + Vector2.ONE * _brush_size_dynamics
for y in range(start.y, end.y):
for x in range(start.x, end.x):
@@ -375,155 +386,155 @@ func _compute_draw_tool_pixel(position: Vector2) -> PoolVector2Array:
return result
-# Compute the array of coordinates that should be drawn
-func _compute_draw_tool_circle(position: Vector2, fill := false) -> PoolVector2Array:
- var size := Vector2(_brush_size_dynamics, _brush_size_dynamics)
- var pos = position - (size / 2).floor()
+## Compute the array of coordinates that should be drawn
+func _compute_draw_tool_circle(pos: Vector2i, fill := false) -> Array[Vector2i]:
+ var brush_size := Vector2i(_brush_size_dynamics, _brush_size_dynamics)
+ var offset_pos := pos - (brush_size / 2)
if _circle_tool_shortcut:
- return _draw_tool_circle_from_map(position)
+ return _draw_tool_circle_from_map(pos)
- var result := PoolVector2Array()
+ var result: Array[Vector2i] = []
if fill:
- result = DrawingAlgos.get_ellipse_points_filled(pos, size)
+ result = DrawingAlgos.get_ellipse_points_filled(offset_pos, brush_size)
else:
- result = DrawingAlgos.get_ellipse_points(pos, size)
+ result = DrawingAlgos.get_ellipse_points(offset_pos, brush_size)
return result
-func _draw_tool_circle_from_map(position: Vector2) -> PoolVector2Array:
- var result := PoolVector2Array()
+func _draw_tool_circle_from_map(pos: Vector2i) -> Array[Vector2i]:
+ var result: Array[Vector2i] = []
for displacement in _circle_tool_shortcut:
- result.append(position + displacement)
+ result.append(pos + displacement)
return result
-func draw_tool_brush(brush_position: Vector2) -> void:
- var project: Project = Global.current_project
+func draw_tool_brush(brush_position: Vector2i) -> void:
+ var project := Global.current_project
# image brushes work differently, (we have to consider all 8 surrounding points)
- var central_point = project.tiles.get_canon_position(brush_position)
- var positions = project.tiles.get_point_in_tiles(central_point)
+ var central_point := project.tiles.get_canon_position(brush_position)
+ var positions := project.tiles.get_point_in_tiles(central_point)
if Global.current_project.has_selection and project.tiles.mode == Tiles.MODE.NONE:
positions = Global.current_project.selection_map.get_point_in_tile_mode(central_point)
- var size := _brush_image.get_size()
+ var brush_size := _brush_image.get_size()
for i in positions.size():
- var position: Vector2 = positions[i]
- var dst: Vector2 = position - (size / 2).floor()
- var dst_rect := Rect2(dst, size)
- var draw_rect := _get_draw_rect()
- dst_rect = dst_rect.clip(draw_rect)
- if dst_rect.size == Vector2.ZERO:
+ var pos := positions[i]
+ var dst := pos - (brush_size / 2)
+ var dst_rect := Rect2i(dst, brush_size)
+ var draw_rectangle := _get_draw_rect()
+ dst_rect = dst_rect.intersection(draw_rectangle)
+ if dst_rect.size == Vector2i.ZERO:
continue
- var src_rect := Rect2(dst_rect.position - dst, dst_rect.size)
+ var src_rect := Rect2i(dst_rect.position - dst, dst_rect.size)
var brush_image: Image = remove_unselected_parts_of_brush(_brush_image, dst)
dst = dst_rect.position
_draw_brush_image(brush_image, src_rect, dst)
# Handle Mirroring
- var mirror_x = (project.x_symmetry_point + 1) - dst.x - src_rect.size.x
- var mirror_y = (project.y_symmetry_point + 1) - dst.y - src_rect.size.y
+ var mirror_x := (project.x_symmetry_point + 1) - dst.x - src_rect.size.x
+ var mirror_y := (project.y_symmetry_point + 1) - dst.y - src_rect.size.y
if Tools.horizontal_mirror:
- var x_dst := Vector2(mirror_x, dst.y)
- var mirror_brush_x: Image = remove_unselected_parts_of_brush(_mirror_brushes.x, x_dst)
- _draw_brush_image(mirror_brush_x, _flip_rect(src_rect, size, true, false), x_dst)
+ var x_dst := Vector2i(mirror_x, dst.y)
+ var mirror_brush_x := remove_unselected_parts_of_brush(_mirror_brushes.x, x_dst)
+ _draw_brush_image(mirror_brush_x, _flip_rect(src_rect, brush_size, true, false), x_dst)
if Tools.vertical_mirror:
- var xy_dst := Vector2(mirror_x, mirror_y)
+ var xy_dst := Vector2i(mirror_x, mirror_y)
var mirror_brush_xy := remove_unselected_parts_of_brush(_mirror_brushes.xy, xy_dst)
- _draw_brush_image(mirror_brush_xy, _flip_rect(src_rect, size, true, true), xy_dst)
+ _draw_brush_image(
+ mirror_brush_xy, _flip_rect(src_rect, brush_size, true, true), xy_dst
+ )
if Tools.vertical_mirror:
- var y_dst := Vector2(dst.x, mirror_y)
- var mirror_brush_y: Image = remove_unselected_parts_of_brush(_mirror_brushes.y, y_dst)
- _draw_brush_image(mirror_brush_y, _flip_rect(src_rect, size, false, true), y_dst)
+ var y_dst := Vector2i(dst.x, mirror_y)
+ var mirror_brush_y := remove_unselected_parts_of_brush(_mirror_brushes.y, y_dst)
+ _draw_brush_image(mirror_brush_y, _flip_rect(src_rect, brush_size, false, true), y_dst)
-func remove_unselected_parts_of_brush(brush: Image, dst: Vector2) -> Image:
- var project: Project = Global.current_project
+func remove_unselected_parts_of_brush(brush: Image, dst: Vector2i) -> Image:
+ var project := Global.current_project
if !project.has_selection:
return brush
- var size := brush.get_size()
+ var brush_size := brush.get_size()
var new_brush := Image.new()
new_brush.copy_from(brush)
- new_brush.lock()
- for x in size.x:
- for y in size.y:
- var pos := Vector2(x, y) + dst
+ for x in brush_size.x:
+ for y in brush_size.y:
+ var pos := Vector2i(x, y) + dst
if !project.selection_map.is_pixel_selected(pos):
new_brush.set_pixel(x, y, Color(0))
- new_brush.unlock()
return new_brush
func draw_indicator(left: bool) -> void:
var color := Global.left_tool_color if left else Global.right_tool_color
- draw_indicator_at(snap_position(_cursor), Vector2.ZERO, color)
+ draw_indicator_at(snap_position(_cursor), Vector2i.ZERO, color)
if (
Global.current_project.has_selection
and Global.current_project.tiles.mode == Tiles.MODE.NONE
):
- var position := _line_start if _draw_line else _cursor
- var nearest_pos := Global.current_project.selection_map.get_nearest_position(position)
- if nearest_pos != Vector2.ZERO:
+ var pos := _line_start if _draw_line else _cursor
+ var nearest_pos := Global.current_project.selection_map.get_nearest_position(pos)
+ if nearest_pos != Vector2i.ZERO:
var offset := nearest_pos
- draw_indicator_at(snap_position(_cursor), offset, Color.green)
+ draw_indicator_at(snap_position(_cursor), offset, Color.GREEN)
return
if Global.current_project.tiles.mode and Global.current_project.tiles.has_point(_cursor):
- var position := _line_start if _draw_line else _cursor
- var nearest_tile := Global.current_project.tiles.get_nearest_tile(position)
- if nearest_tile.position != Vector2.ZERO:
+ var pos := _line_start if _draw_line else _cursor
+ var nearest_tile := Global.current_project.tiles.get_nearest_tile(pos)
+ if nearest_tile.position != Vector2i.ZERO:
var offset := nearest_tile.position
- draw_indicator_at(snap_position(_cursor), offset, Color.green)
+ draw_indicator_at(snap_position(_cursor), offset, Color.GREEN)
-func draw_indicator_at(position: Vector2, offset: Vector2, color: Color) -> void:
- var canvas = Global.canvas.indicators
+func draw_indicator_at(pos: Vector2i, offset: Vector2i, color: Color) -> void:
+ var canvas: Node2D = Global.canvas.indicators
if _brush.type in [Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM] and not _draw_line:
- position -= (_brush_image.get_size() / 2).floor()
- position -= offset
- canvas.draw_texture(_brush_texture, position)
+ pos -= _brush_image.get_size() / 2
+ pos -= offset
+ canvas.draw_texture(_brush_texture, pos)
else:
if _draw_line:
- position.x = _line_end.x if _line_end.x < _line_start.x else _line_start.x
- position.y = _line_end.y if _line_end.y < _line_start.y else _line_start.y
- position -= (_indicator.get_size() / 2).floor()
- position -= offset
- canvas.draw_set_transform(position, canvas.rotation, canvas.scale)
+ pos.x = _line_end.x if _line_end.x < _line_start.x else _line_start.x
+ pos.y = _line_end.y if _line_end.y < _line_start.y else _line_start.y
+ pos -= _indicator.get_size() / 2
+ pos -= offset
+ canvas.draw_set_transform(pos, canvas.rotation, canvas.scale)
var polylines := _line_polylines if _draw_line else _polylines
for line in polylines:
- var pool := PoolVector2Array(line)
+ var pool := PackedVector2Array(line)
canvas.draw_polyline(pool, color)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
-func _set_pixel(position: Vector2, ignore_mirroring := false) -> void:
- if position in _draw_cache and _for_frame == _stroke_project.current_frame:
+func _set_pixel(pos: Vector2i, ignore_mirroring := false) -> void:
+ if pos in _draw_cache and _for_frame == _stroke_project.current_frame:
return
if _draw_cache.size() > _cache_limit or _for_frame != _stroke_project.current_frame:
_draw_cache = []
_for_frame = _stroke_project.current_frame
- _draw_cache.append(position) # Store the position of pixel
+ _draw_cache.append(pos) # Store the position of pixel
# Invoke uncached version to actually draw the pixel
- _set_pixel_no_cache(position, ignore_mirroring)
+ _set_pixel_no_cache(pos, ignore_mirroring)
-func _set_pixel_no_cache(position: Vector2, ignore_mirroring := false) -> void:
- position = _stroke_project.tiles.get_canon_position(position)
+func _set_pixel_no_cache(pos: Vector2i, ignore_mirroring := false) -> void:
+ pos = _stroke_project.tiles.get_canon_position(pos)
if Global.current_project.has_selection:
- position = Global.current_project.selection_map.get_canon_position(position)
- if !_stroke_project.can_pixel_get_drawn(position):
+ pos = Global.current_project.selection_map.get_canon_position(pos)
+ if !_stroke_project.can_pixel_get_drawn(pos):
return
var images := _stroke_images
if _is_mask_size_zero:
for image in images:
- _drawer.set_pixel(image, position, tool_slot.color, ignore_mirroring)
+ _drawer.set_pixel(image, pos, tool_slot.color, ignore_mirroring)
else:
- var i := int(position.x + position.y * _stroke_project.size.x)
+ var i := pos.x + pos.y * _stroke_project.size.x
if _mask.size() >= i + 1:
var alpha_dynamic: float = Tools.get_alpha_dynamic()
- var alpha: float = images[0].get_pixelv(position).a
+ var alpha: float = images[0].get_pixelv(pos).a
if _mask[i] < alpha_dynamic:
# Overwrite colors to avoid additive blending between strokes of
# brushes that are larger than 1px
@@ -534,38 +545,36 @@ func _set_pixel_no_cache(position: Vector2, ignore_mirroring := false) -> void:
_drawer.color_op.overwrite = true
_mask[i] = alpha_dynamic
for image in images:
- _drawer.set_pixel(image, position, tool_slot.color, ignore_mirroring)
+ _drawer.set_pixel(image, pos, tool_slot.color, ignore_mirroring)
if overwrite != null:
_drawer.color_op.overwrite = overwrite
else:
for image in images:
- _drawer.set_pixel(image, position, tool_slot.color, ignore_mirroring)
+ _drawer.set_pixel(image, pos, tool_slot.color, ignore_mirroring)
-func _draw_brush_image(_image: Image, _src_rect: Rect2, _dst: Vector2) -> void:
+func _draw_brush_image(_image: Image, _src_rect: Rect2i, _dst: Vector2i) -> void:
pass
func _create_blended_brush_image(image: Image) -> Image:
- var size := image.get_size() * _brush_size_dynamics
+ var brush_size := image.get_size() * _brush_size_dynamics
var brush := Image.new()
brush.copy_from(image)
brush = _blend_image(brush, tool_slot.color, _brush_interpolate / 100.0)
- brush.resize(size.x, size.y, Image.INTERPOLATE_NEAREST)
+ brush.resize(brush_size.x, brush_size.y, Image.INTERPOLATE_NEAREST)
return brush
func _blend_image(image: Image, color: Color, factor: float) -> Image:
- var size := image.get_size()
- image.lock()
- for y in size.y:
- for x in size.x:
+ var image_size := image.get_size()
+ for y in image_size.y:
+ for x in image_size.x:
var color_old := image.get_pixel(x, y)
if color_old.a > 0:
- var color_new := color_old.linear_interpolate(color, factor)
+ var color_new := color_old.lerp(color, factor)
color_new.a = color_old.a
image.set_pixel(x, y, color_new)
- image.unlock()
return image
@@ -587,35 +596,36 @@ func _create_image_indicator(image: Image) -> BitMap:
return bitmap
-func _create_pixel_indicator(size: int) -> BitMap:
+func _create_pixel_indicator(brush_size: int) -> BitMap:
var bitmap := BitMap.new()
- bitmap.create(Vector2.ONE * size)
- bitmap.set_bit_rect(Rect2(Vector2.ZERO, Vector2.ONE * size), true)
+ bitmap.create(Vector2i.ONE * brush_size)
+ bitmap.set_bit_rect(Rect2i(Vector2i.ZERO, Vector2i.ONE * brush_size), true)
return bitmap
-func _create_circle_indicator(size: int, fill := false) -> BitMap:
- _circle_tool_shortcut = PoolVector2Array()
- var diameter := Vector2(size, size) * 2 + Vector2.ONE
- return _fill_bitmap_with_points(_compute_draw_tool_circle(Vector2(size, size), fill), diameter)
+func _create_circle_indicator(brush_size: int, fill := false) -> BitMap:
+ _circle_tool_shortcut = []
+ var brush_size_v2 := Vector2i(brush_size, brush_size)
+ var diameter := brush_size_v2 * 2 + Vector2i.ONE
+ return _fill_bitmap_with_points(_compute_draw_tool_circle(brush_size_v2, fill), diameter)
-func _create_line_indicator(indicator: BitMap, start: Vector2, end: Vector2) -> BitMap:
+func _create_line_indicator(indicator: BitMap, start: Vector2i, end: Vector2i) -> BitMap:
var bitmap := BitMap.new()
- var size := (end - start).abs() + indicator.get_size()
- bitmap.create(size)
+ var brush_size := (end - start).abs() + indicator.get_size()
+ bitmap.create(brush_size)
- var offset := (indicator.get_size() / 2).floor()
+ var offset := indicator.get_size() / 2
var diff := end - start
- start.x = -diff.x if diff.x < 0 else 0.0
- end.x = 0.0 if diff.x < 0 else diff.x
- start.y = -diff.y if diff.y < 0 else 0.0
- end.y = 0.0 if diff.y < 0 else diff.y
+ start.x = -diff.x if diff.x < 0 else 0
+ end.x = 0 if diff.x < 0 else diff.x
+ start.y = -diff.y if diff.y < 0 else 0
+ end.y = 0 if diff.y < 0 else diff.y
start += offset
end += offset
- var dx := int(abs(end.x - start.x))
- var dy := int(-abs(end.y - start.y))
+ var dx := absi(end.x - start.x)
+ var dy := -absi(end.y - start.y)
var err := dx + dy
var e2 := err << 1
var sx := 1 if start.x < end.x else -1
@@ -623,7 +633,7 @@ func _create_line_indicator(indicator: BitMap, start: Vector2, end: Vector2) ->
var x := start.x
var y := start.y
while !(x == end.x && y == end.y):
- _blit_indicator(bitmap, indicator, Vector2(x, y))
+ _blit_indicator(bitmap, indicator, Vector2i(x, y))
e2 = err << 1
if e2 >= dy:
err += dy
@@ -631,53 +641,53 @@ func _create_line_indicator(indicator: BitMap, start: Vector2, end: Vector2) ->
if e2 <= dx:
err += dx
y += sy
- _blit_indicator(bitmap, indicator, Vector2(x, y))
+ _blit_indicator(bitmap, indicator, Vector2i(x, y))
return bitmap
-func _blit_indicator(dst: BitMap, indicator: BitMap, position: Vector2) -> void:
- var rect := Rect2(Vector2.ZERO, dst.get_size())
- var size := indicator.get_size()
- position -= (size / 2).floor()
- for y in size.y:
- for x in size.x:
- var pos := Vector2(x, y)
- var bit := indicator.get_bit(pos)
- pos += position
- if bit and rect.has_point(pos):
- dst.set_bit(pos, bit)
+func _blit_indicator(dst: BitMap, indicator: BitMap, pos: Vector2i) -> void:
+ var rect := Rect2i(Vector2.ZERO, dst.get_size())
+ var brush_size := indicator.get_size()
+ pos -= brush_size / 2
+ for y in brush_size.y:
+ for x in brush_size.x:
+ var brush_pos := Vector2i(x, y)
+ var bit := indicator.get_bitv(brush_pos)
+ brush_pos += pos
+ if bit and rect.has_point(brush_pos):
+ dst.set_bitv(brush_pos, bit)
func _line_angle_constraint(start: Vector2, end: Vector2) -> Dictionary:
var result := {}
- var angle := rad2deg(end.angle_to_point(start))
+ var angle := rad_to_deg(start.angle_to_point(end))
var distance := start.distance_to(end)
if Input.is_action_pressed("draw_snap_angle"):
if Tools.pixel_perfect:
- angle = stepify(angle, 22.5)
+ angle = snappedf(angle, 22.5)
if step_decimals(angle) != 0:
var diff := end - start
- var v := Vector2(2, 1) if abs(diff.x) > abs(diff.y) else Vector2(1, 2)
+ var v := Vector2(2, 1) if absf(diff.x) > absf(diff.y) else Vector2(1, 2)
var p := diff.project(diff.sign() * v).abs().round()
- var f := p.y if abs(diff.x) > abs(diff.y) else p.x
+ var f := p.y if absf(diff.x) > absf(diff.y) else p.x
end = start + diff.sign() * v * f - diff.sign()
- angle = rad2deg(atan2(sign(diff.y) * v.y, sign(diff.x) * v.x))
+ angle = rad_to_deg(atan2(signi(diff.y) * v.y, signi(diff.x) * v.x))
else:
- end = start + Vector2.RIGHT.rotated(deg2rad(angle)) * distance
+ end = start + Vector2.RIGHT.rotated(deg_to_rad(angle)) * distance
else:
- angle = stepify(angle, 15)
- end = start + Vector2.RIGHT.rotated(deg2rad(angle)) * distance
+ angle = snappedf(angle, 15)
+ end = start + Vector2.RIGHT.rotated(deg_to_rad(angle)) * distance
angle *= -1
angle += 360 if angle < 0 else 0
- result.text = str(stepify(angle, 0.01)) + "ยฐ"
- result.position = end.round()
+ result.text = str(snappedf(angle, 0.01)) + "ยฐ"
+ result.position = Vector2i(end.round())
return result
func _get_undo_data() -> Dictionary:
var data := {}
- var project: Project = Global.current_project
- var cels := [] # Array of Cels
+ var project := Global.current_project
+ var cels: Array[BaseCel] = []
if Global.animation_timer.is_stopped():
for cel_index in project.selected_cels:
cels.append(project.frames[cel_index[0]].cels[cel_index[1]])
@@ -690,23 +700,21 @@ func _get_undo_data() -> Dictionary:
for cel in cels:
if not cel is PixelCel:
continue
- var image: Image = cel.image
- image.unlock()
+ var image := cel.get_image()
data[image] = image.data
- image.lock()
return data
-func _pick_color(position: Vector2) -> void:
- var project: Project = Global.current_project
- position = project.tiles.get_canon_position(position)
+func _pick_color(pos: Vector2i) -> void:
+ var project := Global.current_project
+ pos = project.tiles.get_canon_position(pos)
- if position.x < 0 or position.y < 0:
+ if pos.x < 0 or pos.y < 0:
return
var image := Image.new()
image.copy_from(_get_draw_image())
- if position.x > image.get_width() - 1 or position.y > image.get_height() - 1:
+ if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1:
return
var color := Color(0, 0, 0, 0)
@@ -715,10 +723,12 @@ func _pick_color(position: Vector2) -> void:
var idx = (project.layers.size() - 1) - layer
if project.layers[idx].is_visible_in_hierarchy():
image = curr_frame.cels[idx].get_image()
- image.lock()
- color = image.get_pixelv(position)
- image.unlock()
+ color = image.get_pixelv(pos)
if color != Color(0, 0, 0, 0):
break
- var button := BUTTON_LEFT if Tools._slots[BUTTON_LEFT].tool_node == self else BUTTON_RIGHT
+ var button := (
+ MOUSE_BUTTON_LEFT
+ if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self
+ else MOUSE_BUTTON_RIGHT
+ )
Tools.assign_color(color, button, false)
diff --git a/src/Tools/Draw.tscn b/src/Tools/Draw.tscn
index 9918f1f4191..48053198eef 100644
--- a/src/Tools/Draw.tscn
+++ b/src/Tools/Draw.tscn
@@ -1,73 +1,68 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://ubyatap3sylf"]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/Tools/Draw.gd" type="Script" id=3]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="2"]
+[ext_resource type="Script" path="res://src/Tools/Draw.gd" id="3"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=2]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="2"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
anti_aliasing = false
-[node name="ToolOptions" instance=ExtResource( 2 )]
-script = ExtResource( 3 )
+[node name="ToolOptions" instance=ExtResource("2")]
+script = ExtResource("3")
[node name="Brush" type="HBoxContainer" parent="." index="2"]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 58.0
+layout_mode = 2
alignment = 1
[node name="Type" type="Button" parent="Brush" index="0"]
-margin_right = 32.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Select a brush"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
size_flags_horizontal = 0
-custom_styles/hover = SubResource( 1 )
-custom_styles/pressed = SubResource( 1 )
-custom_styles/focus = SubResource( 2 )
-custom_styles/disabled = SubResource( 2 )
-custom_styles/normal = SubResource( 1 )
+tooltip_text = "Select a brush"
+mouse_default_cursor_shape = 2
+theme_override_styles/normal = SubResource("1")
+theme_override_styles/hover = SubResource("1")
+theme_override_styles/pressed = SubResource("1")
+theme_override_styles/disabled = SubResource("2")
+theme_override_styles/focus = SubResource("2")
[node name="Texture" type="TextureRect" parent="Brush/Type" index="0"]
-margin_right = 32.0
-margin_bottom = 32.0
-expand = true
+layout_mode = 0
+offset_right = 32.0
+offset_bottom = 32.0
+expand_mode = 1
stretch_mode = 6
-[node name="BrushSize" parent="Brush" index="1" instance=ExtResource( 1 )]
-margin_left = 36.0
-margin_right = 116.0
-margin_bottom = 32.0
+[node name="BrushSize" parent="Brush" index="1" instance=ExtResource("1")]
+layout_mode = 2
min_value = 1.0
max_value = 25.0
value = 1.0
allow_greater = true
prefix = "Size:"
suffix = "px"
-is_global = true
+global_increment_action = "brush_size_increment"
+global_decrement_action = "brush_size_decrement"
-[node name="ColorInterpolation" parent="." index="3" instance=ExtResource( 1 )]
+[node name="ColorInterpolation" parent="." index="3" instance=ExtResource("1")]
visible = false
-margin_top = 62.0
-margin_right = 116.0
-margin_bottom = 86.0
-hint_tooltip = "0: Color from the brush itself, 100: the currently selected color"
+layout_mode = 2
+tooltip_text = "0: Color from the brush itself, 100: the currently selected color"
prefix = "Brush color from:"
[connection signal="pressed" from="Brush/Type" to="." method="_on_BrushType_pressed"]
diff --git a/src/Tools/EllipseTool.gd b/src/Tools/EllipseTool.gd
index 4e1e12de424..28959dc9c3e 100644
--- a/src/Tools/EllipseTool.gd
+++ b/src/Tools/EllipseTool.gd
@@ -1,46 +1,46 @@
extends "res://src/Tools/ShapeDrawer.gd"
-func _get_shape_points_filled(size: Vector2) -> PoolVector2Array:
- return DrawingAlgos.get_ellipse_points_filled(Vector2.ZERO, size, _thickness)
+func _get_shape_points_filled(shape_size: Vector2i) -> Array[Vector2i]:
+ return DrawingAlgos.get_ellipse_points_filled(Vector2i.ZERO, shape_size, _thickness)
-func _get_shape_points(size: Vector2) -> PoolVector2Array:
+func _get_shape_points(shape_size: Vector2i) -> Array[Vector2i]:
# Return ellipse with thickness 1
if _thickness == 1:
- return PoolVector2Array(DrawingAlgos.get_ellipse_points(Vector2.ZERO, size))
+ return DrawingAlgos.get_ellipse_points(Vector2i.ZERO, shape_size)
- var size_offset := Vector2.ONE * (_thickness - 1)
- var new_size := size + size_offset
+ var size_offset := Vector2i.ONE * (_thickness - 1)
+ var new_size := shape_size + size_offset
var inner_ellipse_size := new_size - size_offset
# The inner ellipse is to small to create a gap in the middle of the ellipse,
# just return a filled ellipse
if inner_ellipse_size.x <= 2 and inner_ellipse_size.y <= 2:
- return _get_shape_points_filled(size)
+ return _get_shape_points_filled(shape_size)
# Adapted scanline algorithm to fill between 2 ellipses, to create a thicker ellipse
- var res_array := []
+ var res_array: Array[Vector2i] = []
var border_ellipses := (
- DrawingAlgos.get_ellipse_points(Vector2.ZERO, new_size)
+ DrawingAlgos.get_ellipse_points(Vector2i.ZERO, new_size)
+ DrawingAlgos.get_ellipse_points(size_offset, inner_ellipse_size)
) # Outer and inner ellipses
var bitmap := _fill_bitmap_with_points(border_ellipses, new_size)
- var smallest_side := min(new_size.x, new_size.y)
- var largest_side := max(new_size.x, new_size.y)
- var scan_dir := Vector2(0, 1) if smallest_side == new_size.x else Vector2(1, 0)
- var iscan_dir := Vector2(1, 0) if smallest_side == new_size.x else Vector2(0, 1)
- var ie_relevant_offset_side = size_offset.x if smallest_side == new_size.x else size_offset.y
- var h_ls_c := ceil(largest_side / 2)
+ var smallest_side := mini(new_size.x, new_size.y)
+ var largest_side := maxi(new_size.x, new_size.y)
+ var scan_dir := Vector2i(0, 1) if smallest_side == new_size.x else Vector2i(1, 0)
+ var iscan_dir := Vector2i(1, 0) if smallest_side == new_size.x else Vector2i(0, 1)
+ var ie_relevant_offset_side := size_offset.x if smallest_side == new_size.x else size_offset.y
+ var h_ls_c := ceili(largest_side / 2)
- for s in range(ceil(smallest_side / 2)):
+ for s in range(ceili(smallest_side / 2)):
if s <= ie_relevant_offset_side:
- var draw := false
+ var can_draw := false
for l in range(h_ls_c):
var pos := scan_dir * l + iscan_dir * s
- if bitmap.get_bit(pos):
- draw = true
- if draw:
+ if bitmap.get_bitv(pos):
+ can_draw = true
+ if can_draw:
var mirror_smallest_side := iscan_dir * (smallest_side - 1 - 2 * s)
var mirror_largest_side := scan_dir * (largest_side - 1 - 2 * l)
res_array.append(pos)
@@ -52,14 +52,14 @@ func _get_shape_points(size: Vector2) -> PoolVector2Array:
var l_o := 0
for l in range(h_ls_c):
var pos := scan_dir * l + iscan_dir * s
- if bitmap.get_bit(pos):
+ if bitmap.get_bitv(pos):
l_o = l
break
# Find inner ellipse
var li := 0
for l in range(h_ls_c, 0, -1):
var pos := scan_dir * l + iscan_dir * s
- if bitmap.get_bit(pos):
+ if bitmap.get_bitv(pos):
li = l
break
# Fill between both
@@ -72,4 +72,4 @@ func _get_shape_points(size: Vector2) -> PoolVector2Array:
res_array.append(pos + mirror_smallest_side)
res_array.append(pos + mirror_smallest_side + mirror_largest_side)
- return PoolVector2Array(res_array)
+ return res_array
diff --git a/src/Tools/EllipseTool.tscn b/src/Tools/EllipseTool.tscn
index 054c10f9ec9..04674337cd6 100644
--- a/src/Tools/EllipseTool.tscn
+++ b/src/Tools/EllipseTool.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://4hp76lf38bc7"]
-[ext_resource path="res://src/Tools/ShapeDrawer.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/EllipseTool.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/ShapeDrawer.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/EllipseTool.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/Eraser.gd b/src/Tools/Eraser.gd
index 543435cfb8a..2b297ae1ba8 100644
--- a/src/Tools/Eraser.gd
+++ b/src/Tools/Eraser.gd
@@ -1,7 +1,7 @@
extends "res://src/Tools/Draw.gd"
var _last_position := Vector2.INF
-var _clear_image := Image.new()
+var _clear_image: Image
var _changed := false
@@ -19,27 +19,27 @@ class EraseOp:
func _init() -> void:
_drawer.color_op = EraseOp.new()
- _clear_image.create(1, 1, false, Image.FORMAT_RGBA8)
+ _clear_image = Image.create(1, 1, false, Image.FORMAT_RGBA8)
_clear_image.fill(Color(0, 0, 0, 0))
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["strength"] = _strength
return config
func set_config(config: Dictionary) -> void:
- .set_config(config)
+ super.set_config(config)
_strength = config.get("strength", _strength)
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if Input.is_action_pressed("draw_color_picker"):
_picking_color = true
- _pick_color(position)
+ _pick_color(pos)
return
_picking_color = false
@@ -55,43 +55,43 @@ func draw_start(position: Vector2) -> void:
if _draw_line:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = (Global.current_project.size.x - 1) - position.x
- _line_start = position
- _line_end = position
+ pos.x = (Global.current_project.size.x - 1) - pos.x
+ _line_start = pos
+ _line_end = pos
update_line_polylines(_line_start, _line_end)
else:
- draw_tool(position)
- _last_position = position
+ draw_tool(pos)
+ _last_position = pos
Global.canvas.sprite_changed_this_frame = true
cursor_text = ""
-func draw_move(position: Vector2) -> void:
- position = snap_position(position)
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_move(pos)
if _picking_color: # Still return even if we released Alt
if Input.is_action_pressed("draw_color_picker"):
- _pick_color(position)
+ _pick_color(pos)
return
if _draw_line:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = (Global.current_project.size.x - 1) - position.x
- var d := _line_angle_constraint(_line_start, position)
+ pos.x = (Global.current_project.size.x - 1) - pos.x
+ var d := _line_angle_constraint(_line_start, pos)
_line_end = d.position
cursor_text = d.text
update_line_polylines(_line_start, _line_end)
else:
- draw_fill_gap(_last_position, position)
- _last_position = position
+ draw_fill_gap(_last_position, pos)
+ _last_position = pos
cursor_text = ""
Global.canvas.sprite_changed_this_frame = true
-func draw_end(position: Vector2) -> void:
- position = snap_position(position)
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_end(pos)
if _picking_color:
return
@@ -109,24 +109,22 @@ func draw_end(position: Vector2) -> void:
update_random_image()
-func _draw_brush_image(image: Image, src_rect: Rect2, dst: Vector2) -> void:
+func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void:
_changed = true
if _strength == 1:
- var size := image.get_size()
- if _clear_image.get_size() != size:
- _clear_image.resize(size.x, size.y, Image.INTERPOLATE_NEAREST)
+ var brush_size := image.get_size()
+ if _clear_image.get_size() != brush_size:
+ _clear_image.resize(brush_size.x, brush_size.y, Image.INTERPOLATE_NEAREST)
var images := _get_selected_draw_images()
for draw_image in images:
draw_image.blit_rect_mask(_clear_image, image, src_rect, dst)
else:
- image.lock()
for xx in image.get_size().x:
for yy in image.get_size().y:
if image.get_pixel(xx, yy).a > 0:
- var pos := Vector2(xx, yy) + dst - src_rect.position
+ var pos := Vector2i(xx, yy) + dst - src_rect.position
_set_pixel(pos, true)
- image.unlock()
func _on_Opacity_value_changed(value: float) -> void:
@@ -136,10 +134,10 @@ func _on_Opacity_value_changed(value: float) -> void:
func update_config() -> void:
- .update_config()
+ super.update_config()
$OpacitySlider.value = _strength * 255
func update_brush() -> void:
- .update_brush()
+ super.update_brush()
$ColorInterpolation.visible = false
diff --git a/src/Tools/Eraser.tscn b/src/Tools/Eraser.tscn
index 337525fd025..fcb2e92044f 100644
--- a/src/Tools/Eraser.tscn
+++ b/src/Tools/Eraser.tscn
@@ -1,20 +1,16 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://btmbrqqig7wys"]
-[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/Eraser.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/Eraser.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
-[node name="ColorInterpolation" parent="." index="3"]
-margin_top = 134.0
-margin_bottom = 196.0
-
-[node name="OpacitySlider" parent="." index="4" instance=ExtResource( 3 )]
-margin_top = 62.0
-margin_right = 116.0
-margin_bottom = 86.0
+[node name="OpacitySlider" parent="." index="4" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
max_value = 255.0
value = 255.0
prefix = "Opacity:"
diff --git a/src/Tools/LineTool.gd b/src/Tools/LineTool.gd
index ceaa5e6a51b..f11078f16b6 100644
--- a/src/Tools/LineTool.gd
+++ b/src/Tools/LineTool.gd
@@ -1,9 +1,9 @@
extends "res://src/Tools/Draw.gd"
-var _original_pos := Vector2.ZERO
-var _start := Vector2.ZERO
-var _offset := Vector2.ZERO
-var _dest := Vector2.ZERO
+var _original_pos := Vector2i.ZERO
+var _start := Vector2i.ZERO
+var _offset := Vector2i.ZERO
+var _dest := Vector2i.ZERO
var _drawing := false
var _displace_origin := false
var _thickness := 1
@@ -28,34 +28,34 @@ func _on_Thickness_value_changed(value: int) -> void:
func update_indicator() -> void:
var bitmap := BitMap.new()
- bitmap.create(Vector2.ONE * _thickness)
- bitmap.set_bit_rect(Rect2(Vector2.ZERO, Vector2.ONE * _thickness), true)
+ bitmap.create(Vector2i.ONE * _thickness)
+ bitmap.set_bit_rect(Rect2i(Vector2i.ZERO, Vector2i.ONE * _thickness), true)
_indicator = bitmap
_polylines = _create_polylines(_indicator)
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["thickness"] = _thickness
return config
func set_config(config: Dictionary) -> void:
- .set_config(config)
+ super.set_config(config)
_thickness = config.get("thickness", _thickness)
func update_config() -> void:
- .update_config()
+ super.update_config()
$ThicknessSlider.value = _thickness
-func _get_shape_points(_size: Vector2) -> PoolVector2Array:
- return PoolVector2Array()
+func _get_shape_points(_size: Vector2i) -> Array[Vector2i]:
+ return []
-func _get_shape_points_filled(_size: Vector2) -> PoolVector2Array:
- return PoolVector2Array()
+func _get_shape_points_filled(_size: Vector2i) -> Array[Vector2i]:
+ return []
func _input(event: InputEvent) -> void:
@@ -66,12 +66,12 @@ func _input(event: InputEvent) -> void:
_displace_origin = false
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if Input.is_action_pressed("shape_displace"):
_picking_color = true
- _pick_color(position)
+ _pick_color(pos)
return
_picking_color = false
@@ -80,29 +80,29 @@ func draw_start(position: Vector2) -> void:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = Global.current_project.size.x - position.x - 1
- _original_pos = position
- _start = position
- _offset = position
- _dest = position
+ pos.x = Global.current_project.size.x - pos.x - 1
+ _original_pos = pos
+ _start = pos
+ _offset = pos
+ _dest = pos
_drawing = true
-func draw_move(position: Vector2) -> void:
- position = snap_position(position)
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_move(pos)
if _picking_color: # Still return even if we released Alt
if Input.is_action_pressed("shape_displace"):
- _pick_color(position)
+ _pick_color(pos)
return
if _drawing:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = Global.current_project.size.x - position.x - 1
+ pos.x = Global.current_project.size.x - pos.x - 1
if _displace_origin:
- _original_pos += position - _offset
- var d := _line_angle_constraint(_original_pos, position)
+ _original_pos += pos - _offset
+ var d := _line_angle_constraint(_original_pos, pos)
_dest = d.position
if Input.is_action_pressed("shape_center"):
@@ -110,12 +110,12 @@ func draw_move(position: Vector2) -> void:
else:
_start = _original_pos
cursor_text = d.text
- _offset = position
+ _offset = pos
-func draw_end(position: Vector2) -> void:
- position = snap_position(position)
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_end(pos)
if _picking_color:
return
@@ -153,17 +153,17 @@ func draw_preview() -> void:
var points := _get_points()
var t_offset := _thickness - 1
- var t_offsetv := Vector2(t_offset, t_offset)
- indicator.create((_dest - _start).abs() + t_offsetv * 2 + Vector2.ONE)
+ var t_offsetv := Vector2i(t_offset, t_offset)
+ indicator.create((_dest - _start).abs() + t_offsetv * 2 + Vector2i.ONE)
for point in points:
- var p: Vector2 = point - start + t_offsetv
- indicator.set_bit(p, 1)
+ var p := point - start + t_offsetv
+ indicator.set_bitv(p, 1)
canvas.draw_set_transform(start - t_offsetv, canvas.rotation, canvas.scale)
for line in _create_polylines(indicator):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
@@ -181,22 +181,22 @@ func _draw_shape() -> void:
commit_undo()
-func _get_points() -> PoolVector2Array:
- var array := []
- var dx := int(abs(_dest.x - _start.x))
- var dy := int(-abs(_dest.y - _start.y))
+func _get_points() -> Array[Vector2i]:
+ var array: Array[Vector2i] = []
+ var dx := absi(_dest.x - _start.x)
+ var dy := -absi(_dest.y - _start.y)
var err := dx + dy
var e2 := err << 1
- var sx = 1 if _start.x < _dest.x else -1
- var sy = 1 if _start.y < _dest.y else -1
- var x = _start.x
- var y = _start.y
+ var sx := 1 if _start.x < _dest.x else -1
+ var sy := 1 if _start.y < _dest.y else -1
+ var x := _start.x
+ var y := _start.y
- var start := _start - Vector2.ONE * (_thickness >> 1)
- var end := start + Vector2.ONE * _thickness
+ var start := _start - Vector2i.ONE * (_thickness >> 1)
+ var end := start + Vector2i.ONE * _thickness
for yy in range(start.y, end.y):
for xx in range(start.x, end.x):
- array.append(Vector2(xx, yy))
+ array.append(Vector2i(xx, yy))
while !(x == _dest.x && y == _dest.y):
e2 = err << 1
@@ -207,33 +207,33 @@ func _get_points() -> PoolVector2Array:
err += dx
y += sy
- var pos := Vector2(x, y)
- start = pos - Vector2.ONE * (_thickness >> 1)
- end = start + Vector2.ONE * _thickness
+ var pos := Vector2i(x, y)
+ start = pos - Vector2i.ONE * (_thickness >> 1)
+ end = start + Vector2i.ONE * _thickness
for yy in range(start.y, end.y):
for xx in range(start.x, end.x):
- array.append(Vector2(xx, yy))
+ array.append(Vector2i(xx, yy))
- return PoolVector2Array(array)
+ return array
func _line_angle_constraint(start: Vector2, end: Vector2) -> Dictionary:
var result := {}
- var angle := rad2deg(end.angle_to_point(start))
+ var angle := rad_to_deg(start.angle_to_point(end))
var distance := start.distance_to(end)
if Input.is_action_pressed("shape_perfect"):
- angle = stepify(angle, 22.5)
+ angle = snappedf(angle, 22.5)
if step_decimals(angle) != 0:
var diff := end - start
- var v := Vector2(2, 1) if abs(diff.x) > abs(diff.y) else Vector2(1, 2)
+ var v := Vector2(2, 1) if absf(diff.x) > absf(diff.y) else Vector2(1, 2)
var p := diff.project(diff.sign() * v).abs().round()
- var f := p.y if abs(diff.x) > abs(diff.y) else p.x
+ var f := p.y if absf(diff.x) > absf(diff.y) else p.x
end = start + diff.sign() * v * f - diff.sign()
- angle = rad2deg(atan2(sign(diff.y) * v.y, sign(diff.x) * v.x))
+ angle = rad_to_deg(atan2(signi(diff.y) * v.y, signi(diff.x) * v.x))
else:
- end = start + Vector2.RIGHT.rotated(deg2rad(angle)) * distance
+ end = start + Vector2.RIGHT.rotated(deg_to_rad(angle)) * distance
angle *= -1
angle += 360 if angle < 0 else 0
- result.text = str(stepify(angle, 0.01)) + "ยฐ"
+ result.text = str(snappedf(angle, 0.01)) + "ยฐ"
result.position = end.round()
return result
diff --git a/src/Tools/LineTool.tscn b/src/Tools/LineTool.tscn
index c62b6871046..94793fc3619 100644
--- a/src/Tools/LineTool.tscn
+++ b/src/Tools/LineTool.tscn
@@ -1,16 +1,16 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://ceahf2toaq47l"]
-[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/LineTool.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/LineTool.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
-[node name="ThicknessSlider" parent="." index="2" instance=ExtResource( 3 )]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 50.0
+[node name="ThicknessSlider" parent="." index="2" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
prefix = "Size:"
@@ -20,8 +20,4 @@ is_global = true
[node name="Brush" parent="." index="3"]
visible = false
-[node name="ColorInterpolation" parent="." index="4"]
-margin_top = 66.0
-margin_bottom = 128.0
-
[connection signal="value_changed" from="ThicknessSlider" to="." method="_on_Thickness_value_changed"]
diff --git a/src/Tools/Move.gd b/src/Tools/Move.gd
index 32b60d128aa..a3fe4d8b506 100644
--- a/src/Tools/Move.gd
+++ b/src/Tools/Move.gd
@@ -1,19 +1,19 @@
extends BaseTool
var _undo_data := {}
-var _start_pos: Vector2
-var _offset: Vector2
+var _start_pos: Vector2i
+var _offset: Vector2i
-# Used to check if the state of content transformation has been changed
-# while draw_move() is being called. For example, pressing Enter while still moving content
+## Used to check if the state of content transformation has been changed
+## while draw_move() is being called. For example, pressing Enter while still moving content
var _content_transformation_check := false
-var _snap_to_grid := false # Mouse Click + Ctrl
+var _snap_to_grid := false ## Mouse Click + Ctrl
-onready var selection_node: Node2D = Global.canvas.selection
+@onready var selection_node: Node2D = Global.canvas.selection
func _input(event: InputEvent) -> void:
- if _start_pos == Vector2.INF:
+ if _start_pos == Vector2i(Vector2.INF):
return
if event.is_action_pressed("transform_snap_grid"):
_snap_to_grid = true
@@ -29,64 +29,63 @@ func _input(event: InputEvent) -> void:
)
selection_node.big_bounding_rectangle.position += grid_offset
selection_node.marching_ants_outline.offset += (
- selection_node.big_bounding_rectangle.position
- - prev_pos
+ selection_node.big_bounding_rectangle.position - prev_pos
)
elif event.is_action_released("transform_snap_grid"):
_snap_to_grid = false
-func draw_start(position: Vector2) -> void:
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ super.draw_start(pos)
if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
return
- _start_pos = position
- _offset = position
+ _start_pos = pos
+ _offset = pos
_undo_data = _get_undo_data()
if Global.current_project.has_selection:
selection_node.transform_content_start()
_content_transformation_check = selection_node.is_moving_content
-func draw_move(position: Vector2) -> void:
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ super.draw_move(pos)
if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
return
# This is true if content transformation has been confirmed (pressed Enter for example)
# while the content is being moved
if _content_transformation_check != selection_node.is_moving_content:
return
- position = _snap_position(position)
+ pos = _snap_position(pos)
if Global.current_project.has_selection:
- selection_node.move_content(position - _offset)
+ selection_node.move_content(pos - _offset)
else:
- Global.canvas.move_preview_location = position - _start_pos
- _offset = position
+ Global.canvas.move_preview_location = pos - _start_pos
+ _offset = pos
-func draw_end(position: Vector2) -> void:
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ super.draw_end(pos)
if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
return
if (
- _start_pos != Vector2.INF
+ _start_pos != Vector2i(Vector2.INF)
and _content_transformation_check == selection_node.is_moving_content
):
- position = _snap_position(position)
- var project: Project = Global.current_project
+ pos = _snap_position(pos)
+ var project := Global.current_project
if project.has_selection:
selection_node.move_borders_end()
else:
- var pixel_diff: Vector2 = position - _start_pos
- Global.canvas.move_preview_location = Vector2.ZERO
+ var pixel_diff := pos - _start_pos
+ Global.canvas.move_preview_location = Vector2i.ZERO
var images := _get_selected_draw_images()
for image in images:
var image_copy := Image.new()
image_copy.copy_from(image)
image.fill(Color(0, 0, 0, 0))
- image.blit_rect(image_copy, Rect2(Vector2.ZERO, project.size), pixel_diff)
+ image.blit_rect(image_copy, Rect2i(Vector2i.ZERO, project.size), pixel_diff)
commit_undo("Draw")
@@ -94,35 +93,33 @@ func draw_end(position: Vector2) -> void:
_snap_to_grid = false
-func _snap_position(position: Vector2) -> Vector2:
+func _snap_position(pos: Vector2) -> Vector2:
if Input.is_action_pressed("transform_snap_axis"):
- var angle := position.angle_to_point(_start_pos)
- if abs(angle) <= PI / 4 or abs(angle) >= 3 * PI / 4:
- position.y = _start_pos.y
+ var angle := pos.angle_to_point(_start_pos)
+ if absf(angle) <= PI / 4 or absf(angle) >= 3 * PI / 4:
+ pos.y = _start_pos.y
else:
- position.x = _start_pos.x
+ pos.x = _start_pos.x
if _snap_to_grid: # Snap to grid
- position = position.snapped(Global.grid_size)
+ pos = pos.snapped(Global.grid_size)
# The part below only corrects the offset for situations when there is no selection
# Offsets when there is selection is controlled in _input() function
if !Global.current_project.has_selection:
var move_offset := Vector2.ZERO
move_offset.x = (
- _start_pos.x
- - int(_start_pos.x / Global.grid_size.x) * Global.grid_size.x
+ _start_pos.x - (_start_pos.x / Global.grid_size.x) * Global.grid_size.x
)
move_offset.y = (
- _start_pos.y
- - int(_start_pos.y / Global.grid_size.y) * Global.grid_size.y
+ _start_pos.y - (_start_pos.y / Global.grid_size.y) * Global.grid_size.y
)
- position += move_offset
+ pos += move_offset
- return position
+ return pos
func commit_undo(action: String) -> void:
var redo_data := _get_undo_data()
- var project: Project = Global.current_project
+ var project := Global.current_project
var frame := -1
var layer := -1
if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1:
@@ -133,11 +130,10 @@ func commit_undo(action: String) -> void:
project.undo_redo.create_action(action)
for image in redo_data:
project.undo_redo.add_do_property(image, "data", redo_data[image])
- image.unlock()
for image in _undo_data:
project.undo_redo.add_undo_property(image, "data", _undo_data[image])
- project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer))
project.undo_redo.commit_action()
_undo_data.clear()
@@ -145,8 +141,8 @@ func commit_undo(action: String) -> void:
func _get_undo_data() -> Dictionary:
var data := {}
- var project: Project = Global.current_project
- var cels := [] # Array of Cels
+ var project := Global.current_project
+ var cels: Array[BaseCel] = []
if Global.animation_timer.is_stopped():
for cel_index in project.selected_cels:
cels.append(project.frames[cel_index[0]].cels[cel_index[1]])
@@ -158,7 +154,5 @@ func _get_undo_data() -> Dictionary:
if not cel is PixelCel:
continue
var image: Image = cel.image
- image.unlock()
data[image] = image.data
- image.lock()
return data
diff --git a/src/Tools/Move.tscn b/src/Tools/Move.tscn
index 4d94322241b..ef057e531b0 100644
--- a/src/Tools/Move.tscn
+++ b/src/Tools/Move.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://64l4dmyfeev7"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/Move.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/Move.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/Pan.gd b/src/Tools/Pan.gd
index 81e68d7c632..b6b5c7d897b 100644
--- a/src/Tools/Pan.gd
+++ b/src/Tools/Pan.gd
@@ -1,17 +1,17 @@
extends BaseTool
-func draw_start(position: Vector2) -> void:
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ super.draw_start(pos)
Global.camera.drag = true
Global.camera2.drag = true
-func draw_move(position: Vector2) -> void:
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ super.draw_move(pos)
-func draw_end(position: Vector2) -> void:
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ super.draw_end(pos)
Global.camera.drag = false
Global.camera2.drag = false
diff --git a/src/Tools/Pan.tscn b/src/Tools/Pan.tscn
index 80068710ec3..02f3d3dcf39 100644
--- a/src/Tools/Pan.tscn
+++ b/src/Tools/Pan.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://pvno2bc0jepk"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/Pan.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/Pan.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/Pencil.gd b/src/Tools/Pencil.gd
index 71d2e6688a7..e6a49f8cb36 100644
--- a/src/Tools/Pencil.gd
+++ b/src/Tools/Pencil.gd
@@ -1,12 +1,12 @@
extends "res://src/Tools/Draw.gd"
var _prev_mode := false
-var _last_position := Vector2.INF
+var _last_position := Vector2i(Vector2.INF)
var _changed := false
var _overwrite := false
var _fill_inside := false
-var _draw_points := Array()
-var _old_spacing_mode := false # needed to reset spacing mode in case we change it
+var _draw_points := PackedVector2Array()
+var _old_spacing_mode := false ## Needed to reset spacing mode in case we change it
class PencilOp:
@@ -55,17 +55,17 @@ func _input(event: InputEvent) -> void:
var overwrite_button: CheckBox = $Overwrite
if event.is_action_pressed("change_tool_mode"):
- _prev_mode = overwrite_button.pressed
+ _prev_mode = overwrite_button.button_pressed
if event.is_action("change_tool_mode"):
- overwrite_button.pressed = !_prev_mode
- _overwrite = overwrite_button.pressed
+ overwrite_button.button_pressed = !_prev_mode
+ _overwrite = overwrite_button.button_pressed
if event.is_action_released("change_tool_mode"):
- overwrite_button.pressed = _prev_mode
- _overwrite = overwrite_button.pressed
+ overwrite_button.button_pressed = _prev_mode
+ _overwrite = overwrite_button.button_pressed
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["overwrite"] = _overwrite
config["fill_inside"] = _fill_inside
config["spacing_mode"] = _spacing_mode
@@ -74,7 +74,7 @@ func get_config() -> Dictionary:
func set_config(config: Dictionary) -> void:
- .set_config(config)
+ super.set_config(config)
_overwrite = config.get("overwrite", _overwrite)
_fill_inside = config.get("fill_inside", _fill_inside)
_spacing_mode = config.get("spacing_mode", _spacing_mode)
@@ -82,21 +82,21 @@ func set_config(config: Dictionary) -> void:
func update_config() -> void:
- .update_config()
- $Overwrite.pressed = _overwrite
- $FillInside.pressed = _fill_inside
- $SpacingMode.pressed = _spacing_mode
+ super.update_config()
+ $Overwrite.button_pressed = _overwrite
+ $FillInside.button_pressed = _fill_inside
+ $SpacingMode.button_pressed = _spacing_mode
$Spacing.visible = _spacing_mode
$Spacing.value = _spacing
-func draw_start(position: Vector2) -> void:
+func draw_start(pos: Vector2i) -> void:
_old_spacing_mode = _spacing_mode
- position = snap_position(position)
- .draw_start(position)
+ pos = snap_position(pos)
+ super.draw_start(pos)
if Input.is_action_pressed("draw_color_picker"):
_picking_color = true
- _pick_color(position)
+ _pick_color(pos)
return
_picking_color = false
@@ -108,7 +108,7 @@ func draw_start(position: Vector2) -> void:
_changed = false
_drawer.color_op.changed = false
_drawer.color_op.overwrite = _overwrite
- _draw_points = Array()
+ _draw_points = []
prepare_undo("Draw")
_drawer.reset()
@@ -118,48 +118,48 @@ func draw_start(position: Vector2) -> void:
_spacing_mode = false # spacing mode is disabled during line mode
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = (Global.current_project.size.x - 1) - position.x
- _line_start = position
- _line_end = position
+ pos.x = (Global.current_project.size.x - 1) - pos.x
+ _line_start = pos
+ _line_end = pos
update_line_polylines(_line_start, _line_end)
else:
if _fill_inside:
- _draw_points.append(position)
- draw_tool(position)
- _last_position = position
+ _draw_points.append(pos)
+ draw_tool(pos)
+ _last_position = pos
Global.canvas.sprite_changed_this_frame = true
cursor_text = ""
-func draw_move(position: Vector2) -> void:
- position = snap_position(position)
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_move(pos)
if _picking_color: # Still return even if we released Alt
if Input.is_action_pressed("draw_color_picker"):
- _pick_color(position)
+ _pick_color(pos)
return
if _draw_line:
_spacing_mode = false # spacing mode is disabled during line mode
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = (Global.current_project.size.x - 1) - position.x
- var d := _line_angle_constraint(_line_start, position)
+ pos.x = (Global.current_project.size.x - 1) - pos.x
+ var d := _line_angle_constraint(_line_start, pos)
_line_end = d.position
cursor_text = d.text
update_line_polylines(_line_start, _line_end)
else:
- draw_fill_gap(_last_position, position)
- _last_position = position
+ draw_fill_gap(_last_position, pos)
+ _last_position = pos
cursor_text = ""
Global.canvas.sprite_changed_this_frame = true
if _fill_inside:
- _draw_points.append(position)
+ _draw_points.append(pos)
-func draw_end(position: Vector2) -> void:
- position = snap_position(position)
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_end(pos)
if _picking_color:
return
@@ -174,15 +174,15 @@ func draw_end(position: Vector2) -> void:
_draw_line = false
else:
if _fill_inside:
- _draw_points.append(position)
+ _draw_points.append(pos)
if _draw_points.size() > 3:
- var v = Vector2()
- var image_size = Global.current_project.size
+ var v := Vector2i()
+ var image_size := Global.current_project.size
for x in image_size.x:
v.x = x
for y in image_size.y:
v.y = y
- if Geometry.is_point_in_polygon(v, _draw_points):
+ if Geometry2D.is_point_in_polygon(v, _draw_points):
if _spacing_mode:
# use of get_spacing_position() in Pencil.gd is a rare case
# (you would ONLY need _spacing_mode and _spacing in most cases)
@@ -195,7 +195,7 @@ func draw_end(position: Vector2) -> void:
_spacing_mode = _old_spacing_mode
-func _draw_brush_image(image: Image, src_rect: Rect2, dst: Vector2) -> void:
+func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void:
_changed = true
var images := _get_selected_draw_images()
if _overwrite:
diff --git a/src/Tools/Pencil.tscn b/src/Tools/Pencil.tscn
index e1fb94409a5..c51efb6e9ac 100644
--- a/src/Tools/Pencil.tscn
+++ b/src/Tools/Pencil.tscn
@@ -1,62 +1,31 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://cul5mpy17ebfl"]
-[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/Tools/Pencil.gd" type="Script" id=3]
+[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2"]
+[ext_resource type="Script" path="res://src/Tools/Pencil.gd" id="3"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 3 )
-
-[node name="ColorRect" parent="." index="0"]
-margin_right = 127.0
-
-[node name="Label" parent="." index="1"]
-margin_right = 127.0
-
-[node name="Brush" parent="." index="2"]
-margin_right = 127.0
-
-[node name="BrushSize" parent="Brush" index="1"]
-margin_right = 127.0
-
-[node name="ColorInterpolation" parent="." index="3"]
-margin_right = 128.0
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("3")
[node name="Overwrite" type="CheckBox" parent="." index="4"]
-margin_top = 62.0
-margin_right = 127.0
-margin_bottom = 86.0
-grow_horizontal = 2
-grow_vertical = 2
-hint_tooltip = "Overwrites color instead of blending it. This option is only relevant with colors that are not fully opaque"
+layout_mode = 2
+tooltip_text = "Overwrites color instead of blending it. This option is only relevant with colors that are not fully opaque"
mouse_default_cursor_shape = 2
text = "Overwrite color"
-__meta__ = {
-"_editor_description_": ""
-}
[node name="FillInside" type="CheckBox" parent="." index="5"]
-margin_top = 90.0
-margin_right = 127.0
-margin_bottom = 114.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Fill inside"
-__meta__ = {
-"_editor_description_": ""
-}
[node name="SpacingMode" type="CheckBox" parent="." index="6"]
-margin_top = 118.0
-margin_right = 127.0
-margin_bottom = 142.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Spacing"
-[node name="Spacing" parent="." index="7" instance=ExtResource( 2 )]
+[node name="Spacing" parent="." index="7" instance=ExtResource("2")]
visible = false
-margin_top = 146.0
-margin_right = 127.0
-margin_bottom = 198.0
+layout_mode = 2
allow_greater = true
show_ratio = true
prefix_x = "Gap X:"
diff --git a/src/Tools/RectangleTool.gd b/src/Tools/RectangleTool.gd
index a19c9764c6d..a5324e3ae04 100644
--- a/src/Tools/RectangleTool.gd
+++ b/src/Tools/RectangleTool.gd
@@ -1,44 +1,44 @@
extends "res://src/Tools/ShapeDrawer.gd"
-func _get_shape_points_filled(size: Vector2) -> PoolVector2Array:
- var array := []
+func _get_shape_points_filled(shape_size: Vector2i) -> Array[Vector2i]:
+ var array: Array[Vector2i] = []
var t_of := _thickness - 1
- for y in range(size.y + t_of):
- for x in range(size.x + t_of):
- array.append(Vector2(x, y))
+ for y in range(shape_size.y + t_of):
+ for x in range(shape_size.x + t_of):
+ array.append(Vector2i(x, y))
- return PoolVector2Array(array)
+ return array
-func _get_shape_points(size: Vector2) -> PoolVector2Array:
+func _get_shape_points(shape_size: Vector2i) -> Array[Vector2i]:
if _thickness == 1:
- return PoolVector2Array(_get_rectangle_points(Vector2(0, 0), size))
+ return _get_rectangle_points(Vector2(0, 0), shape_size)
- var array := []
+ var array: Array[Vector2i] = []
var t_of := _thickness - 1
for i in range(_thickness):
- var point_size := size + Vector2(2, 2) * (t_of - i) - Vector2.ONE * t_of
+ var point_size := shape_size + Vector2i(2, 2) * (t_of - i) - Vector2i.ONE * t_of
array += _get_rectangle_points(Vector2(i, i), point_size)
- return PoolVector2Array(array)
+ return array
-func _get_rectangle_points(pos: Vector2, size: Vector2) -> Array:
- var array := []
+func _get_rectangle_points(pos: Vector2i, shape_size: Vector2i) -> Array[Vector2i]:
+ var array: Array[Vector2i] = []
- var y1 = size.y + pos.y - 1
- for x in range(pos.x, size.x + pos.x):
- var t := Vector2(x, pos.y)
- var b := Vector2(x, y1)
+ var y1 := shape_size.y + pos.y - 1
+ for x in range(pos.x, shape_size.x + pos.x):
+ var t := Vector2i(x, pos.y)
+ var b := Vector2i(x, y1)
array.append(t)
array.append(b)
- var x1 = size.x + pos.x - 1
- for y in range(pos.y + 1, size.y + pos.y):
- var l := Vector2(pos.x, y)
- var r := Vector2(x1, y)
+ var x1 := shape_size.x + pos.x - 1
+ for y in range(pos.y + 1, shape_size.y + pos.y):
+ var l := Vector2i(pos.x, y)
+ var r := Vector2i(x1, y)
array.append(l)
array.append(r)
diff --git a/src/Tools/RectangleTool.tscn b/src/Tools/RectangleTool.tscn
index e7b1e0eb845..c04add273fc 100644
--- a/src/Tools/RectangleTool.tscn
+++ b/src/Tools/RectangleTool.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://dhlab4q2dwu0a"]
-[ext_resource path="res://src/Tools/ShapeDrawer.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/RectangleTool.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/ShapeDrawer.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/RectangleTool.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/SelectionTools/ColorSelect.gd b/src/Tools/SelectionTools/ColorSelect.gd
index d829c867a90..f89c2cb34c2 100644
--- a/src/Tools/SelectionTools/ColorSelect.gd
+++ b/src/Tools/SelectionTools/ColorSelect.gd
@@ -1,11 +1,11 @@
extends SelectionTool
-var shader: Shader = preload("res://src/Shaders/ColorSelect.gdshader")
+var shader := preload("res://src/Shaders/ColorSelect.gdshader")
var _similarity := 100
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["similarity"] = _similarity
return config
@@ -24,19 +24,17 @@ func _on_Similarity_value_changed(value: float) -> void:
save_config()
-func apply_selection(position: Vector2) -> void:
- .apply_selection(position)
- var project: Project = Global.current_project
- if position.x < 0 or position.y < 0:
+func apply_selection(pos: Vector2i) -> void:
+ super.apply_selection(pos)
+ var project := Global.current_project
+ if pos.x < 0 or pos.y < 0:
return
- if position.x > project.size.x - 1 or position.y > project.size.y - 1:
+ if pos.x > project.size.x - 1 or pos.y > project.size.y - 1:
return
var cel_image := Image.new()
cel_image.copy_from(_get_draw_image())
- cel_image.lock()
- var color := cel_image.get_pixelv(position)
- cel_image.unlock()
+ var color := cel_image.get_pixelv(pos)
var operation := 0
if _subtract:
operation = 1
@@ -45,8 +43,7 @@ func apply_selection(position: Vector2) -> void:
var params := {"color": color, "similarity_percent": _similarity, "operation": operation}
if _add or _subtract or _intersect:
- var selection_tex := ImageTexture.new()
- selection_tex.create_from_image(project.selection_map, 0)
+ var selection_tex := ImageTexture.create_from_image(project.selection_map)
params["selection"] = selection_tex
var gen := ShaderImageEffect.new()
gen.generate_image(cel_image, shader, params, project.size)
diff --git a/src/Tools/SelectionTools/ColorSelect.tscn b/src/Tools/SelectionTools/ColorSelect.tscn
index a44671cc838..e2800b90ecd 100644
--- a/src/Tools/SelectionTools/ColorSelect.tscn
+++ b/src/Tools/SelectionTools/ColorSelect.tscn
@@ -1,16 +1,16 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bqr6hr0p3ew6a"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/ColorSelect.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/ColorSelect.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
-[node name="SimilaritySlider" parent="." index="9" instance=ExtResource( 3 )]
-margin_top = 174.0
-margin_right = 116.0
-margin_bottom = 198.0
+[node name="SimilaritySlider" parent="." index="9" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 100.0
prefix = "Similarity:"
diff --git a/src/Tools/SelectionTools/EllipseSelect.gd b/src/Tools/SelectionTools/EllipseSelect.gd
index 8ca87de4663..00a1d4e391a 100644
--- a/src/Tools/SelectionTools/EllipseSelect.gd
+++ b/src/Tools/SelectionTools/EllipseSelect.gd
@@ -1,14 +1,14 @@
extends SelectionTool
-var _rect := Rect2(0, 0, 0, 0)
+var _rect := Rect2i(0, 0, 0, 0)
-var _square := false # Mouse Click + Shift
-var _expand_from_center := false # Mouse Click + Ctrl
-var _displace_origin = false # Mouse Click + Alt
+var _square := false ## Mouse Click + Shift
+var _expand_from_center := false ## Mouse Click + Ctrl
+var _displace_origin = false ## Mouse Click + Alt
func _input(event: InputEvent) -> void:
- if !_move and !_rect.has_no_area():
+ if !_move and _rect.has_area():
if event.is_action_pressed("shape_perfect"):
_square = true
elif event.is_action_released("shape_perfect"):
@@ -23,60 +23,60 @@ func _input(event: InputEvent) -> void:
_displace_origin = false
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_move(position)
+ pos = snap_position(pos)
+ super.draw_move(pos)
if !_move:
if _displace_origin:
- _start_pos += position - _offset
- _rect = _get_result_rect(_start_pos, position)
+ _start_pos += pos - _offset
+ _rect = _get_result_rect(_start_pos, pos)
_set_cursor_text(_rect)
- _offset = position
+ _offset = pos
-func draw_end(position: Vector2) -> void:
+func draw_end(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_end(position)
- _rect = Rect2(0, 0, 0, 0)
+ pos = snap_position(pos)
+ super.draw_end(pos)
+ _rect = Rect2i(0, 0, 0, 0)
_square = false
_expand_from_center = false
_displace_origin = false
func draw_preview() -> void:
- if !_move && !_rect.has_no_area():
+ if !_move && _rect.has_area():
var canvas: Node2D = Global.canvas.previews
- var position := canvas.position
- var scale := canvas.scale
- var temp_rect = _rect
+ var pos := canvas.position
+ var canvas_scale := canvas.scale
+ var temp_rect := _rect
if Global.mirror_view:
- position.x = position.x + Global.current_project.size.x
+ pos.x = pos.x + Global.current_project.size.x
temp_rect.position.x = Global.current_project.size.x - temp_rect.position.x
- scale.x = -1
+ canvas_scale.x = -1
- var border := _get_shape_points_filled(temp_rect.size)
+ var border := DrawingAlgos.get_ellipse_points_filled(Vector2.ZERO, temp_rect.size)
var indicator := _fill_bitmap_with_points(border, temp_rect.size)
- canvas.draw_set_transform(temp_rect.position, canvas.rotation, scale)
+ canvas.draw_set_transform(temp_rect.position, canvas.rotation, canvas_scale)
for line in _create_polylines(indicator):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
-func apply_selection(_position: Vector2) -> void:
- .apply_selection(_position)
- var project: Project = Global.current_project
+func apply_selection(_position: Vector2i) -> void:
+ super.apply_selection(_position)
+ var project := Global.current_project
if !_add and !_subtract and !_intersect:
Global.canvas.selection.clear_selection()
- if _rect.size == Vector2.ZERO and Global.current_project.has_selection:
+ if _rect.size == Vector2i.ZERO and Global.current_project.has_selection:
Global.canvas.selection.commit_undo("Select", undo_data)
- if _rect.size != Vector2.ZERO:
+ if _rect.size != Vector2i.ZERO:
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
set_ellipse(selection_map_copy, _rect.position)
@@ -85,27 +85,21 @@ func apply_selection(_position: Vector2) -> void:
if Tools.horizontal_mirror:
var mirror_x_rect := _rect
mirror_x_rect.position.x = (
- Global.current_project.x_symmetry_point
- - _rect.position.x
- + 1
+ Global.current_project.x_symmetry_point - _rect.position.x + 1
)
mirror_x_rect.end.x = Global.current_project.x_symmetry_point - _rect.end.x + 1
set_ellipse(selection_map_copy, mirror_x_rect.abs().position)
if Tools.vertical_mirror:
var mirror_xy_rect := mirror_x_rect
mirror_xy_rect.position.y = (
- Global.current_project.y_symmetry_point
- - _rect.position.y
- + 1
+ Global.current_project.y_symmetry_point - _rect.position.y + 1
)
mirror_xy_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1
set_ellipse(selection_map_copy, mirror_xy_rect.abs().position)
if Tools.vertical_mirror:
var mirror_y_rect := _rect
mirror_y_rect.position.y = (
- Global.current_project.y_symmetry_point
- - _rect.position.y
- + 1
+ Global.current_project.y_symmetry_point - _rect.position.y + 1
)
mirror_y_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1
set_ellipse(selection_map_copy, mirror_y_rect.abs().position)
@@ -115,148 +109,50 @@ func apply_selection(_position: Vector2) -> void:
Global.canvas.selection.commit_undo("Select", undo_data)
-func set_ellipse(selection_map: SelectionMap, position: Vector2) -> void:
- var project: Project = Global.current_project
- var bitmap_size: Vector2 = selection_map.get_size()
+func set_ellipse(selection_map: SelectionMap, pos: Vector2i) -> void:
+ var project := Global.current_project
+ var bitmap_size := selection_map.get_size()
if _intersect:
selection_map.clear()
- var points := _get_shape_points_filled(_rect.size)
+ var points := DrawingAlgos.get_ellipse_points_filled(Vector2.ZERO, _rect.size)
for p in points:
- var pos: Vector2 = position + p
- if pos.x < 0 or pos.y < 0 or pos.x >= bitmap_size.x or pos.y >= bitmap_size.y:
+ var fill_p := pos + Vector2i(p)
+ if fill_p.x < 0 or fill_p.y < 0 or fill_p.x >= bitmap_size.x or fill_p.y >= bitmap_size.y:
continue
if _intersect:
- if project.selection_map.is_pixel_selected(pos):
- selection_map.select_pixel(pos, true)
+ if project.selection_map.is_pixel_selected(fill_p):
+ selection_map.select_pixel(fill_p, true)
else:
- selection_map.select_pixel(pos, !_subtract)
+ selection_map.select_pixel(fill_p, !_subtract)
# Given an origin point and destination point, returns a rect representing
# where the shape will be drawn and what is its size
-func _get_result_rect(origin: Vector2, dest: Vector2) -> Rect2:
- var rect := Rect2(Vector2.ZERO, Vector2.ZERO)
+func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i:
+ var rect := Rect2i()
# Center the rect on the mouse
if _expand_from_center:
- var new_size := (dest - origin).floor()
+ var new_size := dest - origin
# Make rect 1:1 while centering it on the mouse
if _square:
- var square_size := max(abs(new_size.x), abs(new_size.y))
- new_size = Vector2(square_size, square_size)
+ var square_size := maxi(absi(new_size.x), absi(new_size.y))
+ new_size = Vector2i(square_size, square_size)
origin -= new_size
dest = origin + 2 * new_size
# Make rect 1:1 while not trying to center it
if _square:
- var square_size := min(abs(origin.x - dest.x), abs(origin.y - dest.y))
+ var square_size := mini(absi(origin.x - dest.x), absi(origin.y - dest.y))
rect.position.x = origin.x if origin.x < dest.x else origin.x - square_size
rect.position.y = origin.y if origin.y < dest.y else origin.y - square_size
- rect.size = Vector2(square_size, square_size)
+ rect.size = Vector2i(square_size, square_size)
# Get the rect without any modifications
else:
- rect.position = Vector2(min(origin.x, dest.x), min(origin.y, dest.y))
+ rect.position = Vector2i(mini(origin.x, dest.x), mini(origin.y, dest.y))
rect.size = (origin - dest).abs()
- rect.size += Vector2.ONE
+ rect.size += Vector2i.ONE
return rect
-
-
-func _get_shape_points_filled(size: Vector2) -> PoolVector2Array:
- var border := _get_ellipse_points(Vector2.ZERO, size)
- var filling := []
- var bitmap := _fill_bitmap_with_points(border, size)
-
- for x in range(1, ceil(size.x / 2)):
- var fill := false
- var prev_is_true := false
- for y in range(0, ceil(size.y / 2)):
- var top_l_p := Vector2(x, y)
- var bit := bitmap.get_bit(top_l_p)
-
- if bit and not fill:
- prev_is_true = true
- continue
-
- if not bit and (fill or prev_is_true):
- filling.append(top_l_p)
- filling.append(Vector2(x, size.y - y - 1))
- filling.append(Vector2(size.x - x - 1, y))
- filling.append(Vector2(size.x - x - 1, size.y - y - 1))
-
- if prev_is_true:
- fill = true
- prev_is_true = false
- elif bit and fill:
- break
-
- return PoolVector2Array(border + filling)
-
-
-# Algorithm based on http://members.chello.at/easyfilter/bresenham.html
-func _get_ellipse_points(pos: Vector2, size: Vector2) -> Array:
- var array := []
- var x0 := int(pos.x)
- var x1 := pos.x + int(size.x - 1)
- var y0 := int(pos.y)
- var y1 := int(pos.y) + int(size.y - 1)
- var a := int(abs(x1 - x0))
- var b := int(abs(y1 - x0))
- var b1 := b & 1
- var dx := 4 * (1 - a) * b * b
- var dy := 4 * (b1 + 1) * a * a
- var err := dx + dy + b1 * a * a
- var e2 := 0
-
- if x0 > x1:
- x0 = x1
- x1 += a
-
- if y0 > y1:
- y0 = y1
-
-# warning-ignore:integer_division
- y0 += (b + 1) / 2
- y1 = y0 - b1
- a *= 8 * a
- b1 = 8 * b * b
-
- while x0 <= x1:
- var v1 := Vector2(x1, y0)
- var v2 := Vector2(x0, y0)
- var v3 := Vector2(x0, y1)
- var v4 := Vector2(x1, y1)
- array.append(v1)
- array.append(v2)
- array.append(v3)
- array.append(v4)
-
- e2 = 2 * err
-
- if e2 <= dy:
- y0 += 1
- y1 -= 1
- dy += a
- err += dy
-
- if e2 >= dx || 2 * err > dy:
- x0 += 1
- x1 -= 1
- dx += b1
- err += dx
-
- while y0 - y1 < b:
- var v1 := Vector2(x0 - 1, y0)
- var v2 := Vector2(x1 + 1, y0)
- var v3 := Vector2(x0 - 1, y1)
- var v4 := Vector2(x1 + 1, y1)
- array.append(v1)
- array.append(v2)
- array.append(v3)
- array.append(v4)
- y0 += 1
- y1 -= 1
-
- return array
diff --git a/src/Tools/SelectionTools/EllipseSelect.tscn b/src/Tools/SelectionTools/EllipseSelect.tscn
index e8935fd7b85..a189f8eb76d 100644
--- a/src/Tools/SelectionTools/EllipseSelect.tscn
+++ b/src/Tools/SelectionTools/EllipseSelect.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://cf2gm1oypbm6m"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/EllipseSelect.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/EllipseSelect.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/SelectionTools/Lasso.gd b/src/Tools/SelectionTools/Lasso.gd
index e4146dc025d..38cd2f1a804 100644
--- a/src/Tools/SelectionTools/Lasso.gd
+++ b/src/Tools/SelectionTools/Lasso.gd
@@ -1,51 +1,51 @@
extends SelectionTool
var _last_position := Vector2.INF
-var _draw_points := []
+var _draw_points: Array[Vector2i] = []
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if !_move:
- _draw_points.append(position)
- _last_position = position
+ _draw_points.append(pos)
+ _last_position = pos
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_move(position)
+ pos = snap_position(pos)
+ super.draw_move(pos)
if !_move:
- append_gap(_last_position, position)
- _last_position = position
- _draw_points.append(position)
- _offset = position
+ append_gap(_last_position, pos)
+ _last_position = pos
+ _draw_points.append(pos)
+ _offset = pos
-func draw_end(position: Vector2) -> void:
+func draw_end(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
+ pos = snap_position(pos)
if !_move:
- _draw_points.append(position)
- .draw_end(position)
+ _draw_points.append(pos)
+ super.draw_end(pos)
func draw_preview() -> void:
if _last_position != Vector2.INF and !_move:
var canvas: Node2D = Global.canvas.previews
- var position := canvas.position
- var scale := canvas.scale
+ var pos := canvas.position
+ var canvas_scale := canvas.scale
if Global.mirror_view:
- position.x = position.x + Global.current_project.size.x
- scale.x = -1
- canvas.draw_set_transform(position, canvas.rotation, scale)
+ pos.x = pos.x + Global.current_project.size.x
+ canvas_scale.x = -1
+ canvas.draw_set_transform(pos, canvas.rotation, canvas_scale)
var indicator := _fill_bitmap_with_points(_draw_points, Global.current_project.size)
for line in _create_polylines(indicator):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
# Handle mirroring
if Tools.horizontal_mirror:
@@ -54,28 +54,28 @@ func draw_preview() -> void:
mirror_array(_draw_points, true, false), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
if Tools.vertical_mirror:
for line in _create_polylines(
_fill_bitmap_with_points(
mirror_array(_draw_points, true, true), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
if Tools.vertical_mirror:
for line in _create_polylines(
_fill_bitmap_with_points(
mirror_array(_draw_points, false, true), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
func apply_selection(_position) -> void:
- .apply_selection(_position)
- var project: Project = Global.current_project
+ super.apply_selection(_position)
+ var project := Global.current_project
var cleared := false
if !_add and !_subtract and !_intersect:
cleared = true
@@ -106,11 +106,11 @@ func apply_selection(_position) -> void:
_last_position = Vector2.INF
-func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> void:
- var project: Project = Global.current_project
- var size := selection_map.get_size()
+func lasso_selection(selection_map: SelectionMap, points: Array[Vector2i]) -> void:
+ var project := Global.current_project
+ var selection_size := selection_map.get_size()
for point in points:
- if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y:
+ if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y:
continue
if _intersect:
if project.selection_map.is_pixel_selected(point):
@@ -118,13 +118,13 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v
else:
selection_map.select_pixel(point, !_subtract)
- var v := Vector2()
- var image_size: Vector2 = project.size
+ var v := Vector2i()
+ var image_size := project.size
for x in image_size.x:
v.x = x
for y in image_size.y:
v.y = y
- if Geometry.is_point_in_polygon(v, points):
+ if Geometry2D.is_point_in_polygon(v, points):
if _intersect:
if project.selection_map.is_pixel_selected(v):
selection_map.select_pixel(v, true)
@@ -134,15 +134,15 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v
# Bresenham's Algorithm
# Thanks to https://godotengine.org/qa/35276/tile-based-line-drawing-algorithm-efficiency
-func append_gap(start: Vector2, end: Vector2) -> void:
- var dx := int(abs(end.x - start.x))
- var dy := int(-abs(end.y - start.y))
+func append_gap(start: Vector2i, end: Vector2i) -> void:
+ var dx := absi(end.x - start.x)
+ var dy := -absi(end.y - start.y)
var err := dx + dy
var e2 := err << 1
- var sx = 1 if start.x < end.x else -1
- var sy = 1 if start.y < end.y else -1
- var x = start.x
- var y = start.y
+ var sx := 1 if start.x < end.x else -1
+ var sy := 1 if start.y < end.y else -1
+ var x := start.x
+ var y := start.y
while !(x == end.x && y == end.y):
e2 = err << 1
if e2 >= dy:
@@ -151,20 +151,20 @@ func append_gap(start: Vector2, end: Vector2) -> void:
if e2 <= dx:
err += dx
y += sy
- _draw_points.append(Vector2(x, y))
+ _draw_points.append(Vector2i(x, y))
-func mirror_array(array: Array, h: bool, v: bool) -> Array:
- var new_array := []
- var project: Project = Global.current_project
+func mirror_array(array: Array[Vector2i], h: bool, v: bool) -> Array[Vector2i]:
+ var new_array: Array[Vector2i] = []
+ var project := Global.current_project
for point in array:
if h and v:
new_array.append(
- Vector2(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y)
+ Vector2i(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y)
)
elif h:
- new_array.append(Vector2(project.x_symmetry_point - point.x, point.y))
+ new_array.append(Vector2i(project.x_symmetry_point - point.x, point.y))
elif v:
- new_array.append(Vector2(point.x, project.y_symmetry_point - point.y))
+ new_array.append(Vector2i(point.x, project.y_symmetry_point - point.y))
return new_array
diff --git a/src/Tools/SelectionTools/Lasso.tscn b/src/Tools/SelectionTools/Lasso.tscn
index ec598ad365a..af18882ea2e 100644
--- a/src/Tools/SelectionTools/Lasso.tscn
+++ b/src/Tools/SelectionTools/Lasso.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://cu37uo35mcfom"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/Lasso.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/Lasso.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/SelectionTools/MagicWand.gd b/src/Tools/SelectionTools/MagicWand.gd
index 2bfc9abaed6..2505b3613fe 100644
--- a/src/Tools/SelectionTools/MagicWand.gd
+++ b/src/Tools/SelectionTools/MagicWand.gd
@@ -1,16 +1,28 @@
extends SelectionTool
-# working array used as buffer for segments while flooding
-var _allegro_flood_segments: Array
-# results array per image while flooding
-var _allegro_image_segments: Array
+## Working array used as buffer for segments while flooding
+var _allegro_flood_segments: Array[Segment]
+## Results array per image while flooding
+var _allegro_image_segments: Array[Segment]
-func apply_selection(position: Vector2) -> void:
- .apply_selection(position)
- var project: Project = Global.current_project
- var size: Vector2 = project.size
- if position.x < 0 or position.y < 0 or position.x >= size.x or position.y >= size.y:
+class Segment:
+ var flooding := false
+ var todo_above := false
+ var todo_below := false
+ var left_position := -5
+ var right_position := -5
+ var y := 0
+ var next := 0
+
+ func _init(_y: int) -> void:
+ y = _y
+
+
+func apply_selection(pos: Vector2i) -> void:
+ super.apply_selection(pos)
+ var project := Global.current_project
+ if pos.x < 0 or pos.y < 0 or pos.x >= project.size.x or pos.y >= project.size.y:
return
if !_add and !_subtract and !_intersect:
Global.canvas.selection.clear_selection()
@@ -22,60 +34,50 @@ func apply_selection(position: Vector2) -> void:
var cel_image := Image.new()
cel_image.copy_from(_get_draw_image())
- cel_image.lock()
- _flood_fill(position, cel_image, selection_map_copy)
+ _flood_fill(pos, cel_image, selection_map_copy)
# Handle mirroring
if Tools.horizontal_mirror:
- var mirror_x := position
- mirror_x.x = Global.current_project.x_symmetry_point - position.x
+ var mirror_x := pos
+ mirror_x.x = Global.current_project.x_symmetry_point - pos.x
_flood_fill(mirror_x, cel_image, selection_map_copy)
if Tools.vertical_mirror:
var mirror_xy := mirror_x
- mirror_xy.y = Global.current_project.y_symmetry_point - position.y
+ mirror_xy.y = Global.current_project.y_symmetry_point - pos.y
_flood_fill(mirror_xy, cel_image, selection_map_copy)
if Tools.vertical_mirror:
- var mirror_y := position
- mirror_y.y = Global.current_project.y_symmetry_point - position.y
+ var mirror_y := pos
+ mirror_y.y = Global.current_project.y_symmetry_point - pos.y
_flood_fill(mirror_y, cel_image, selection_map_copy)
- cel_image.unlock()
project.selection_map = selection_map_copy
Global.canvas.selection.big_bounding_rectangle = project.selection_map.get_used_rect()
Global.canvas.selection.commit_undo("Select", undo_data)
# Add a new segment to the array
-func _add_new_segment(y: int = 0) -> void:
- var segment = {}
- segment.flooding = false
- segment.todo_above = false
- segment.todo_below = false
- segment.left_position = -5 # anything less than -1 is ok
- segment.right_position = -5
- segment.y = y
- segment.next = 0
- _allegro_flood_segments.append(segment)
+func _add_new_segment(y := 0) -> void:
+ _allegro_flood_segments.append(Segment.new(y))
# fill an horizontal segment around the specified position, and adds it to the
# list of segments filled. Returns the first x coordinate after the part of the
# line that has been filled.
func _flood_line_around_point(
- position: Vector2, project: Project, image: Image, src_color: Color
+ pos: Vector2i, project: Project, image: Image, src_color: Color
) -> int:
# this method is called by `_flood_fill` after the required data structures
# have been initialized
- if not image.get_pixelv(position).is_equal_approx(src_color):
- return int(position.x) + 1
- var west: Vector2 = position
- var east: Vector2 = position
+ if not image.get_pixelv(pos).is_equal_approx(src_color):
+ return pos.x + 1
+ var west := pos
+ var east := pos
while west.x >= 0 && image.get_pixelv(west).is_equal_approx(src_color):
- west += Vector2.LEFT
+ west += Vector2i.LEFT
while east.x < project.size.x && image.get_pixelv(east).is_equal_approx(src_color):
- east += Vector2.RIGHT
+ east += Vector2i.RIGHT
# Make a note of the stuff we processed
- var c = int(position.y)
- var segment = _allegro_flood_segments[c]
+ var c := pos.y
+ var segment := _allegro_flood_segments[c]
# we may have already processed some segments on this y coordinate
if segment.flooding:
while segment.next > 0:
@@ -84,13 +86,13 @@ func _flood_line_around_point(
# found last current segment on this line
c = _allegro_flood_segments.size()
segment.next = c
- _add_new_segment(position.y)
+ _add_new_segment(pos.y)
segment = _allegro_flood_segments[c]
# set the values for the current segment
segment.flooding = true
segment.left_position = west.x + 1
segment.right_position = east.x - 1
- segment.y = position.y
+ segment.y = pos.y
segment.next = 0
# Should we process segments above or below this one?
# when there is a selected area, the pixels above and below the one we started creating this
@@ -99,66 +101,66 @@ func _flood_line_around_point(
# test will be performed later anyway.
# On the other hand, this test we described is the same `project.can_pixel_get_drawn` does if
# there is no selection, so we don't need branching here.
- segment.todo_above = position.y > 0
- segment.todo_below = position.y < project.size.y - 1
+ segment.todo_above = pos.y > 0
+ segment.todo_below = pos.y < project.size.y - 1
# this is an actual segment we should be coloring, so we add it to the results for the
# current image
if segment.right_position >= segment.left_position:
_allegro_image_segments.append(segment)
# we know the point just east of the segment is not part of a segment that should be
# processed, else it would be part of this segment
- return int(east.x) + 1
+ return east.x + 1
func _check_flooded_segment(
y: int, left: int, right: int, project: Project, image: Image, src_color: Color
) -> bool:
- var ret = false
- var c: int = 0
+ var ret := false
+ var c := 0
while left <= right:
c = y
while true:
- var segment = _allegro_flood_segments[c]
+ var segment := _allegro_flood_segments[c]
if left >= segment.left_position and left <= segment.right_position:
left = segment.right_position + 2
break
c = segment.next
if c == 0: # couldn't find a valid segment, so we draw a new one
- left = _flood_line_around_point(Vector2(left, y), project, image, src_color)
+ left = _flood_line_around_point(Vector2i(left, y), project, image, src_color)
ret = true
break
return ret
-func _flood_fill(position: Vector2, image: Image, selection_map: SelectionMap) -> void:
+func _flood_fill(pos: Vector2i, image: Image, selection_map: SelectionMap) -> void:
# implements the floodfill routine by Shawn Hargreaves
# from https://www1.udel.edu/CIS/software/dist/allegro-4.2.1/src/flood.c
- var project: Project = Global.current_project
- var color: Color = image.get_pixelv(position)
+ var project := Global.current_project
+ var color := image.get_pixelv(pos)
# init flood data structures
_allegro_flood_segments = []
_allegro_image_segments = []
- _compute_segments_for_image(position, project, image, color)
+ _compute_segments_for_image(pos, project, image, color)
# now actually color the image: since we have already checked a few things for the points
# we'll process here, we're going to skip a bunch of safety checks to speed things up.
_select_segments(selection_map)
func _compute_segments_for_image(
- position: Vector2, project: Project, image: Image, src_color: Color
+ pos: Vector2i, project: Project, image: Image, src_color: Color
) -> void:
# initially allocate at least 1 segment per line of image
for j in image.get_height():
_add_new_segment(j)
# start flood algorithm
- _flood_line_around_point(position, project, image, src_color)
+ _flood_line_around_point(pos, project, image, src_color)
# test all segments while also discovering more
var done := false
while not done:
done = true
- var max_index = _allegro_flood_segments.size()
+ var max_index := _allegro_flood_segments.size()
for c in max_index:
- var p = _allegro_flood_segments[c]
+ var p := _allegro_flood_segments[c]
if p.todo_below: # check below the segment?
p.todo_below = false
if _check_flooded_segment(
@@ -176,14 +178,14 @@ func _compute_segments_for_image(
func _select_segments(selection_map: SelectionMap) -> void:
# short circuit for flat colors
for c in _allegro_image_segments.size():
- var p = _allegro_image_segments[c]
+ var p := _allegro_image_segments[c]
for px in range(p.left_position, p.right_position + 1):
# We don't have to check again whether the point being processed is within the bounds
- _set_bit(Vector2(px, p.y), selection_map)
+ _set_bit(Vector2i(px, p.y), selection_map)
-func _set_bit(p: Vector2, selection_map: SelectionMap) -> void:
- var project: Project = Global.current_project
+func _set_bit(p: Vector2i, selection_map: SelectionMap) -> void:
+ var project := Global.current_project
if _intersect:
selection_map.select_pixel(p, project.selection_map.is_pixel_selected(p))
else:
diff --git a/src/Tools/SelectionTools/MagicWand.tscn b/src/Tools/SelectionTools/MagicWand.tscn
index 1b193ba7449..263e4a4f987 100644
--- a/src/Tools/SelectionTools/MagicWand.tscn
+++ b/src/Tools/SelectionTools/MagicWand.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://blt8u6nvg1k3g"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/MagicWand.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/MagicWand.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/SelectionTools/PaintSelect.gd b/src/Tools/SelectionTools/PaintSelect.gd
index 52bb70a6547..3ffedd85f91 100644
--- a/src/Tools/SelectionTools/PaintSelect.gd
+++ b/src/Tools/SelectionTools/PaintSelect.gd
@@ -1,19 +1,19 @@
extends SelectionTool
-var _brush_size: int = 2
+var _brush_size := 2
var _brush := Brushes.get_default_brush()
var _indicator := BitMap.new()
var _polylines := []
var _brush_image := Image.new()
-var _brush_texture := ImageTexture.new()
-var _circle_tool_shortcut: PoolVector2Array
+var _brush_texture: ImageTexture
+var _circle_tool_shortcut: Array[Vector2i]
var _last_position := Vector2.INF
-var _draw_points := []
+var _draw_points: Array[Vector2i] = []
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["brush_type"] = _brush.type
config["brush_index"] = _brush.index
config["brush_size"] = _brush_size
@@ -32,48 +32,48 @@ func update_config() -> void:
update_brush()
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if !_move:
- _draw_points.append_array(draw_tool(position))
- _last_position = position
+ _draw_points.append_array(draw_tool(pos))
+ _last_position = pos
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_move(position)
+ pos = snap_position(pos)
+ super.draw_move(pos)
if !_move:
- append_gap(_last_position, position)
- _last_position = position
- _draw_points.append_array(draw_tool(position))
- _offset = position
+ append_gap(_last_position, pos)
+ _last_position = pos
+ _draw_points.append_array(draw_tool(pos))
+ _offset = pos
-func draw_end(position: Vector2) -> void:
+func draw_end(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
+ pos = snap_position(pos)
if !_move:
- _draw_points.append_array(draw_tool(position))
- .draw_end(position)
+ _draw_points.append_array(draw_tool(pos))
+ super.draw_end(pos)
func draw_preview() -> void:
if _last_position != Vector2.INF and !_move:
var canvas: Node2D = Global.canvas.previews
- var position := canvas.position
- var scale := canvas.scale
+ var pos := canvas.position
+ var canvas_scale := canvas.scale
if Global.mirror_view:
- position.x = position.x + Global.current_project.size.x
- scale.x = -1
- canvas.draw_set_transform(position, canvas.rotation, scale)
+ pos.x = pos.x + Global.current_project.size.x
+ canvas_scale.x = -1
+ canvas.draw_set_transform(pos, canvas.rotation, canvas_scale)
var indicator := _fill_bitmap_with_points(_draw_points, Global.current_project.size)
for line in _create_polylines(indicator):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
# Handle mirroring
if Tools.horizontal_mirror:
@@ -82,28 +82,28 @@ func draw_preview() -> void:
mirror_array(_draw_points, true, false), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
if Tools.vertical_mirror:
for line in _create_polylines(
_fill_bitmap_with_points(
mirror_array(_draw_points, true, true), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
if Tools.vertical_mirror:
for line in _create_polylines(
_fill_bitmap_with_points(
mirror_array(_draw_points, false, true), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
-func apply_selection(_position) -> void:
- .apply_selection(_position)
- var project: Project = Global.current_project
+func apply_selection(pos: Vector2i) -> void:
+ super.apply_selection(pos)
+ var project := Global.current_project
var cleared := false
if !_add and !_subtract and !_intersect:
cleared = true
@@ -135,11 +135,11 @@ func apply_selection(_position) -> void:
_last_position = Vector2.INF
-func paint_selection(selection_map: SelectionMap, points: PoolVector2Array) -> void:
- var project: Project = Global.current_project
- var size := selection_map.get_size()
+func paint_selection(selection_map: SelectionMap, points: Array[Vector2i]) -> void:
+ var project := Global.current_project
+ var selection_size := selection_map.get_size()
for point in points:
- if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y:
+ if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y:
continue
if _intersect:
if project.selection_map.is_pixel_selected(point):
@@ -150,15 +150,15 @@ func paint_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v
# Bresenham's Algorithm
# Thanks to https://godotengine.org/qa/35276/tile-based-line-drawing-algorithm-efficiency
-func append_gap(start: Vector2, end: Vector2) -> void:
- var dx := int(abs(end.x - start.x))
- var dy := int(-abs(end.y - start.y))
+func append_gap(start: Vector2i, end: Vector2i) -> void:
+ var dx := absi(end.x - start.x)
+ var dy := -absi(end.y - start.y)
var err := dx + dy
var e2 := err << 1
- var sx = 1 if start.x < end.x else -1
- var sy = 1 if start.y < end.y else -1
- var x = start.x
- var y = start.y
+ var sx := 1 if start.x < end.x else -1
+ var sy := 1 if start.y < end.y else -1
+ var x := start.x
+ var y := start.y
while !(x == end.x && y == end.y):
e2 = err << 1
if e2 >= dy:
@@ -167,28 +167,28 @@ func append_gap(start: Vector2, end: Vector2) -> void:
if e2 <= dx:
err += dx
y += sy
- _draw_points.append_array(draw_tool(Vector2(x, y)))
+ _draw_points.append_array(draw_tool(Vector2i(x, y)))
-func mirror_array(array: Array, h: bool, v: bool) -> Array:
- var new_array := []
- var project: Project = Global.current_project
+func mirror_array(array: Array[Vector2i], h: bool, v: bool) -> Array[Vector2i]:
+ var new_array: Array[Vector2i] = []
+ var project := Global.current_project
for point in array:
if h and v:
new_array.append(
- Vector2(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y)
+ Vector2i(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y)
)
elif h:
- new_array.append(Vector2(project.x_symmetry_point - point.x, point.y))
+ new_array.append(Vector2i(project.x_symmetry_point - point.x, point.y))
elif v:
- new_array.append(Vector2(point.x, project.y_symmetry_point - point.y))
+ new_array.append(Vector2i(point.x, project.y_symmetry_point - point.y))
return new_array
-func draw_tool(position: Vector2) -> PoolVector2Array:
+func draw_tool(pos: Vector2i) -> Array[Vector2i]:
_prepare_tool()
- return _draw_tool(position)
+ return _draw_tool(pos)
func _prepare_tool() -> void:
@@ -206,83 +206,81 @@ func _prepare_circle_tool(fill: bool) -> void:
var diameter := _brush_size * 2 + 1
for n in range(0, diameter):
for m in range(0, diameter):
- if circle_tool_map.get_bit(Vector2(m, n)):
- _circle_tool_shortcut.append(Vector2(m - _brush_size, n - _brush_size))
+ if circle_tool_map.get_bitv(Vector2i(m, n)):
+ _circle_tool_shortcut.append(Vector2i(m - _brush_size, n - _brush_size))
-# Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be
-# drawn if it can (except for the generic brush, when it's actually drawing them)
-func _draw_tool(position: Vector2) -> PoolVector2Array:
+## Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be
+## drawn if it can (except for the generic brush, when it's actually drawing them)
+func _draw_tool(pos: Vector2i) -> Array[Vector2i]:
match _brush.type:
Brushes.PIXEL:
- return _compute_draw_tool_pixel(position)
+ return _compute_draw_tool_pixel(pos)
Brushes.CIRCLE:
- return _compute_draw_tool_circle(position, false)
+ return _compute_draw_tool_circle(pos, false)
Brushes.FILLED_CIRCLE:
- return _compute_draw_tool_circle(position, true)
+ return _compute_draw_tool_circle(pos, true)
_:
- return _compute_draw_tool_brush(position)
+ return _compute_draw_tool_brush(pos)
-func _compute_draw_tool_pixel(position: Vector2) -> PoolVector2Array:
- var result := PoolVector2Array()
- var start := position - Vector2.ONE * (_brush_size >> 1)
- var end := start + Vector2.ONE * _brush_size
+func _compute_draw_tool_pixel(pos: Vector2i) -> Array[Vector2i]:
+ var result: Array[Vector2i] = []
+ var start := pos - Vector2i.ONE * (_brush_size >> 1)
+ var end := start + Vector2i.ONE * _brush_size
for y in range(start.y, end.y):
for x in range(start.x, end.x):
- if !_draw_points.has(Vector2(x, y)):
- result.append(Vector2(x, y))
+ if !_draw_points.has(Vector2i(x, y)):
+ result.append(Vector2i(x, y))
return result
# Compute the array of coordinates that should be drawn
-func _compute_draw_tool_circle(position: Vector2, fill := false) -> PoolVector2Array:
- var size := Vector2(_brush_size, _brush_size)
- var pos = position - (size / 2).floor()
+func _compute_draw_tool_circle(pos: Vector2i, fill := false) -> Array[Vector2i]:
+ var brush_size := Vector2i(_brush_size, _brush_size)
+ var offset_pos := pos - (brush_size / 2)
if _circle_tool_shortcut:
- return _draw_tool_circle_from_map(position)
+ return _draw_tool_circle_from_map(pos)
- var result := PoolVector2Array()
+ var result: Array[Vector2i] = []
if fill:
- result = DrawingAlgos.get_ellipse_points_filled(pos, size)
+ result = DrawingAlgos.get_ellipse_points_filled(offset_pos, brush_size)
else:
- result = DrawingAlgos.get_ellipse_points(pos, size)
+ result = DrawingAlgos.get_ellipse_points(offset_pos, brush_size)
return result
-func _draw_tool_circle_from_map(position: Vector2) -> PoolVector2Array:
- var result := PoolVector2Array()
+func _draw_tool_circle_from_map(pos: Vector2i) -> Array[Vector2i]:
+ var result: Array[Vector2i] = []
for displacement in _circle_tool_shortcut:
- result.append(position + displacement)
+ result.append(pos + displacement)
return result
-func _compute_draw_tool_brush(position: Vector2) -> PoolVector2Array:
- var result := PoolVector2Array()
+func _compute_draw_tool_brush(pos: Vector2i) -> Array[Vector2i]:
+ var result: Array[Vector2i] = []
var brush_mask := BitMap.new()
- var pos = position - (_indicator.get_size() / 2).floor()
+ pos = pos - (_indicator.get_size() / 2)
brush_mask.create_from_image_alpha(_brush_image, 0.0)
for x in brush_mask.get_size().x:
for y in brush_mask.get_size().y:
- if !_draw_points.has(Vector2(x, y)):
- if brush_mask.get_bit(Vector2(x, y)):
- result.append(pos + Vector2(x, y))
+ if !_draw_points.has(Vector2i(x, y)):
+ if brush_mask.get_bitv(Vector2i(x, y)):
+ result.append(pos + Vector2i(x, y))
return result
func _on_BrushType_pressed() -> void:
- if not Global.brushes_popup.is_connected("brush_selected", self, "_on_Brush_selected"):
- Global.brushes_popup.connect(
- "brush_selected", self, "_on_Brush_selected", [], CONNECT_ONESHOT
- )
+ if not Global.brushes_popup.brush_selected.is_connected(_on_Brush_selected):
+ Global.brushes_popup.brush_selected.connect(_on_Brush_selected, CONNECT_ONE_SHOT)
# Now we set position and columns
- var tool_option_container = get_node("../../")
- var brush_button = $Brush/Type
- var pop_position = brush_button.rect_global_position + Vector2(0, brush_button.rect_size.y)
- var size_x = tool_option_container.rect_size.x
- var size_y = tool_option_container.rect_size.y - $Brush.rect_position.y - $Brush.rect_size.y
- var columns = int(size_x / 36) - 1 # 36 is the rect_size of BrushButton.tscn
+ var tool_option_container := get_node("../../") as Control
+ var brush_button := $Brush/Type as Button
+ var pop_position := Vector2i(brush_button.global_position) + Vector2i(0, brush_button.size.y)
+ var size_x := tool_option_container.size.x
+ var size_y: float = tool_option_container.size.y - $Brush.position.y - $Brush.size.y
+ var columns = int(size_x / 36) - 1 # 36 is the size of BrushButton.tscn
var categories = Global.brushes_popup.get_node("Background/Brushes/Categories")
for child in categories.get_children():
if child is GridContainer:
@@ -308,11 +306,17 @@ func update_brush() -> void:
$Brush/BrushSize.suffix = "px" # Assume we are using default brushes
match _brush.type:
Brushes.PIXEL:
- _brush_texture.create_from_image(load("res://assets/graphics/pixel_image.png"), 0)
+ _brush_texture = ImageTexture.create_from_image(
+ load("res://assets/graphics/pixel_image.png")
+ )
Brushes.CIRCLE:
- _brush_texture.create_from_image(load("res://assets/graphics/circle_9x9.png"), 0)
+ _brush_texture = ImageTexture.create_from_image(
+ load("res://assets/graphics/circle_9x9.png")
+ )
Brushes.FILLED_CIRCLE:
- _brush_texture.create_from_image(load("res://assets/graphics/circle_filled_9x9.png"), 0)
+ _brush_texture = ImageTexture.create_from_image(
+ load("res://assets/graphics/circle_filled_9x9.png")
+ )
Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM:
$Brush/BrushSize.suffix = "00 %" # Use a different size convention on images
if _brush.random.size() <= 1:
@@ -320,18 +324,18 @@ func update_brush() -> void:
else:
var random := randi() % _brush.random.size()
_brush_image = _create_blended_brush_image(_brush.random[random])
- _brush_texture.create_from_image(_brush_image, 0)
+ _brush_texture = ImageTexture.create_from_image(_brush_image)
_indicator = _create_brush_indicator()
_polylines = _create_polylines(_indicator)
- $Brush/Type/Texture.texture = _brush_texture
+ $Brush/Type/Texture2D.texture = _brush_texture
func _create_blended_brush_image(image: Image) -> Image:
- var size := image.get_size() * _brush_size
+ var brush_size := image.get_size() * _brush_size
var brush := Image.new()
brush.copy_from(image)
- brush.resize(size.x, size.y, Image.INTERPOLATE_NEAREST)
+ brush.resize(brush_size.x, brush_size.y, Image.INTERPOLATE_NEAREST)
return brush
@@ -347,17 +351,18 @@ func _create_brush_indicator() -> BitMap:
return _create_image_indicator(_brush_image)
-func _create_pixel_indicator(size: int) -> BitMap:
+func _create_pixel_indicator(brush_size: int) -> BitMap:
var bitmap := BitMap.new()
- bitmap.create(Vector2.ONE * size)
- bitmap.set_bit_rect(Rect2(Vector2.ZERO, Vector2.ONE * size), true)
+ bitmap.create(Vector2i.ONE * brush_size)
+ bitmap.set_bit_rect(Rect2i(Vector2i.ZERO, Vector2i.ONE * brush_size), true)
return bitmap
-func _create_circle_indicator(size: int, fill := false) -> BitMap:
- _circle_tool_shortcut = PoolVector2Array()
- var diameter := Vector2(size, size) * 2 + Vector2.ONE
- return _fill_bitmap_with_points(_compute_draw_tool_circle(Vector2(size, size), fill), diameter)
+func _create_circle_indicator(brush_size: int, fill := false) -> BitMap:
+ _circle_tool_shortcut = []
+ var brush_size_v2 := Vector2i(brush_size, brush_size)
+ var diameter := brush_size_v2 * 2 + Vector2i.ONE
+ return _fill_bitmap_with_points(_compute_draw_tool_circle(brush_size_v2, fill), diameter)
func _create_image_indicator(image: Image) -> BitMap:
@@ -368,16 +373,16 @@ func _create_image_indicator(image: Image) -> BitMap:
func draw_indicator(left: bool) -> void:
var color := Global.left_tool_color if left else Global.right_tool_color
- draw_indicator_at(_cursor, Vector2.ZERO, color)
+ draw_indicator_at(_cursor, Vector2i.ZERO, color)
-func draw_indicator_at(position: Vector2, offset: Vector2, color: Color) -> void:
+func draw_indicator_at(pos: Vector2i, offset: Vector2i, color: Color) -> void:
var canvas = Global.canvas.indicators
- position -= (_indicator.get_size() / 2).floor()
- position -= offset
- canvas.draw_set_transform(position, canvas.rotation, canvas.scale)
+ pos -= _indicator.get_size() / 2
+ pos -= offset
+ canvas.draw_set_transform(pos, canvas.rotation, canvas.scale)
var polylines := _polylines
for line in polylines:
- var pool := PoolVector2Array(line)
+ var pool := PackedVector2Array(line)
canvas.draw_polyline(pool, color)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
diff --git a/src/Tools/SelectionTools/PaintSelect.tscn b/src/Tools/SelectionTools/PaintSelect.tscn
index 699f9ccd025..0fef4f9e3cf 100644
--- a/src/Tools/SelectionTools/PaintSelect.tscn
+++ b/src/Tools/SelectionTools/PaintSelect.tscn
@@ -1,59 +1,55 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://bry4ltxur56u7"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/PaintSelect.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/PaintSelect.gd" id="2"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="1"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
anti_aliasing = false
-[sub_resource type="StyleBoxFlat" id=2]
-bg_color = Color( 1, 1, 1, 1 )
-border_color = Color( 1, 1, 1, 1 )
+[sub_resource type="StyleBoxFlat" id="2"]
+bg_color = Color(1, 1, 1, 1)
+border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
anti_aliasing = false
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="Brush" type="HBoxContainer" parent="." index="2"]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 58.0
+layout_mode = 2
alignment = 1
[node name="Type" type="Button" parent="Brush" index="0"]
-margin_right = 32.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Select a brush"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
size_flags_horizontal = 0
-custom_styles/hover = SubResource( 1 )
-custom_styles/pressed = SubResource( 1 )
-custom_styles/focus = SubResource( 2 )
-custom_styles/disabled = SubResource( 2 )
-custom_styles/normal = SubResource( 1 )
-
-[node name="Texture" type="TextureRect" parent="Brush/Type" index="0"]
-margin_right = 32.0
-margin_bottom = 32.0
-expand = true
+tooltip_text = "Select a brush"
+mouse_default_cursor_shape = 2
+theme_override_styles/normal = SubResource("1")
+theme_override_styles/hover = SubResource("1")
+theme_override_styles/pressed = SubResource("1")
+theme_override_styles/disabled = SubResource("2")
+theme_override_styles/focus = SubResource("2")
+
+[node name="Texture2D" type="TextureRect" parent="Brush/Type" index="0"]
+layout_mode = 0
+offset_right = 32.0
+offset_bottom = 32.0
+expand_mode = 1
stretch_mode = 6
-[node name="BrushSize" parent="Brush" index="1" instance=ExtResource( 3 )]
-margin_left = 36.0
-margin_right = 116.0
-margin_bottom = 32.0
+[node name="BrushSize" parent="Brush" index="1" instance=ExtResource("3")]
+layout_mode = 2
min_value = 1.0
max_value = 25.0
value = 1.0
@@ -62,29 +58,5 @@ prefix = "Size:"
suffix = "px"
is_global = true
-[node name="PositionLabel" parent="." index="3"]
-margin_top = 62.0
-margin_bottom = 76.0
-
-[node name="XSpinBox" parent="." index="4"]
-margin_top = 80.0
-margin_bottom = 104.0
-
-[node name="YSpinBox" parent="." index="5"]
-margin_top = 108.0
-margin_bottom = 132.0
-
-[node name="SizeLabel" parent="." index="6"]
-margin_top = 136.0
-margin_bottom = 150.0
-
-[node name="WSpinBox" parent="." index="7"]
-margin_top = 154.0
-margin_bottom = 178.0
-
-[node name="HSpinBox" parent="." index="8"]
-margin_top = 182.0
-margin_bottom = 206.0
-
[connection signal="pressed" from="Brush/Type" to="." method="_on_BrushType_pressed"]
[connection signal="value_changed" from="Brush/BrushSize" to="." method="_on_BrushSize_value_changed"]
diff --git a/src/Tools/SelectionTools/PolygonSelect.gd b/src/Tools/SelectionTools/PolygonSelect.gd
index 9603ba9a863..2ace63a4a39 100644
--- a/src/Tools/SelectionTools/PolygonSelect.gd
+++ b/src/Tools/SelectionTools/PolygonSelect.gd
@@ -1,7 +1,7 @@
extends SelectionTool
-var _last_position := Vector2.INF
-var _draw_points := []
+var _last_position := Vector2i(Vector2.INF)
+var _draw_points: Array[Vector2i] = []
var _ready_to_apply := false
@@ -13,74 +13,74 @@ func _input(event: InputEvent) -> void:
if Global.mirror_view:
_last_position.x = (Global.current_project.size.x - 1) - _last_position.x
elif event is InputEventMouseButton:
- if event.doubleclick and event.button_index == tool_slot.button and _draw_points:
+ if event.double_click and event.button_index == tool_slot.button and _draw_points:
$DoubleClickTimer.start()
append_gap(_draw_points[-1], _draw_points[0], _draw_points)
_ready_to_apply = true
- apply_selection(Vector2.ZERO) # Argument doesn't matter
+ apply_selection(Vector2i.ZERO) # Argument doesn't matter
else:
if event.is_action_pressed("transformation_cancel") and _ongoing_selection:
_ongoing_selection = false
_draw_points.clear()
_ready_to_apply = false
- Global.canvas.previews.update()
+ Global.canvas.previews.queue_redraw()
-func draw_start(position: Vector2) -> void:
+func draw_start(pos: Vector2i) -> void:
if !$DoubleClickTimer.is_stopped():
return
- position = snap_position(position)
- .draw_start(position)
+ pos = snap_position(pos)
+ super.draw_start(pos)
if !_move and !_draw_points:
_ongoing_selection = true
- _draw_points.append(position)
- _last_position = position
+ _draw_points.append(pos)
+ _last_position = pos
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_move(position)
+ pos = snap_position(pos)
+ super.draw_move(pos)
-func draw_end(position: Vector2) -> void:
+func draw_end(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
+ pos = snap_position(pos)
if !_move and _draw_points:
- append_gap(_draw_points[-1], position, _draw_points)
- if position == _draw_points[0] and _draw_points.size() > 1:
+ append_gap(_draw_points[-1], pos, _draw_points)
+ if pos == _draw_points[0] and _draw_points.size() > 1:
_ready_to_apply = true
- .draw_end(position)
+ super.draw_end(pos)
func draw_preview() -> void:
if _ongoing_selection and !_move:
var canvas: Node2D = Global.canvas.previews
- var position := canvas.position
- var scale := canvas.scale
+ var pos := canvas.position
+ var canvas_scale := canvas.scale
if Global.mirror_view:
- position.x = position.x + Global.current_project.size.x
- scale.x = -1
+ pos.x = pos.x + Global.current_project.size.x
+ canvas_scale.x = -1
var preview_draw_points := _draw_points.duplicate()
append_gap(_draw_points[-1], _last_position, preview_draw_points)
- canvas.draw_set_transform(position, canvas.rotation, scale)
+ canvas.draw_set_transform(pos, canvas.rotation, canvas_scale)
var indicator := _fill_bitmap_with_points(preview_draw_points, Global.current_project.size)
for line in _create_polylines(indicator):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
- var circle_radius: Vector2 = Global.camera.zoom * 10
- circle_radius.x = clamp(circle_radius.x, 2, circle_radius.x)
- circle_radius.y = clamp(circle_radius.y, 2, circle_radius.y)
+ var circle_radius := Global.camera.zoom * 10
+ circle_radius.x = clampf(circle_radius.x, 2, circle_radius.x)
+ circle_radius.y = clampf(circle_radius.y, 2, circle_radius.y)
if _last_position == _draw_points[0] and _draw_points.size() > 1:
draw_empty_circle(
- canvas, _draw_points[0] + Vector2.ONE * 0.5, circle_radius, Color.black
+ canvas, Vector2(_draw_points[0]) + Vector2.ONE * 0.5, circle_radius, Color.BLACK
)
# Handle mirroring
@@ -90,30 +90,30 @@ func draw_preview() -> void:
mirror_array(preview_draw_points, true, false), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
if Tools.vertical_mirror:
for line in _create_polylines(
_fill_bitmap_with_points(
mirror_array(preview_draw_points, true, true), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
if Tools.vertical_mirror:
for line in _create_polylines(
_fill_bitmap_with_points(
mirror_array(preview_draw_points, false, true), Global.current_project.size
)
):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
-func apply_selection(_position) -> void:
- .apply_selection(_position)
+func apply_selection(pos: Vector2i) -> void:
+ super.apply_selection(pos)
if !_ready_to_apply:
return
- var project: Project = Global.current_project
+ var project := Global.current_project
var cleared := false
if !_add and !_subtract and !_intersect:
cleared = true
@@ -143,14 +143,14 @@ func apply_selection(_position) -> void:
_ongoing_selection = false
_draw_points.clear()
_ready_to_apply = false
- Global.canvas.previews.update()
+ Global.canvas.previews.queue_redraw()
-func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> void:
- var project: Project = Global.current_project
- var size := selection_map.get_size()
+func lasso_selection(selection_map: SelectionMap, points: Array[Vector2i]) -> void:
+ var project := Global.current_project
+ var selection_size := selection_map.get_size()
for point in points:
- if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y:
+ if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y:
continue
if _intersect:
if project.selection_map.is_pixel_selected(point):
@@ -158,13 +158,13 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v
else:
selection_map.select_pixel(point, !_subtract)
- var v := Vector2()
- var image_size: Vector2 = project.size
+ var v := Vector2i()
+ var image_size := project.size
for x in image_size.x:
v.x = x
for y in image_size.y:
v.y = y
- if Geometry.is_point_in_polygon(v, points):
+ if Geometry2D.is_point_in_polygon(v, points):
if _intersect:
if project.selection_map.is_pixel_selected(v):
selection_map.select_pixel(v, true)
@@ -174,15 +174,15 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v
# Bresenham's Algorithm
# Thanks to https://godotengine.org/qa/35276/tile-based-line-drawing-algorithm-efficiency
-func append_gap(start: Vector2, end: Vector2, array: Array) -> void:
- var dx := int(abs(end.x - start.x))
- var dy := int(-abs(end.y - start.y))
+func append_gap(start: Vector2i, end: Vector2i, array: Array[Vector2i]) -> void:
+ var dx := absi(end.x - start.x)
+ var dy := -absi(end.y - start.y)
var err := dx + dy
var e2 := err << 1
- var sx = 1 if start.x < end.x else -1
- var sy = 1 if start.y < end.y else -1
- var x = start.x
- var y = start.y
+ var sx := 1 if start.x < end.x else -1
+ var sy := 1 if start.y < end.y else -1
+ var x := start.x
+ var y := start.y
while !(x == end.x && y == end.y):
e2 = err << 1
if e2 >= dy:
@@ -191,21 +191,21 @@ func append_gap(start: Vector2, end: Vector2, array: Array) -> void:
if e2 <= dx:
err += dx
y += sy
- array.append(Vector2(x, y))
+ array.append(Vector2i(x, y))
-func mirror_array(array: Array, h: bool, v: bool) -> Array:
- var new_array := []
- var project: Project = Global.current_project
+func mirror_array(array: Array[Vector2i], h: bool, v: bool) -> Array[Vector2i]:
+ var new_array: Array[Vector2i] = []
+ var project := Global.current_project
for point in array:
if h and v:
new_array.append(
- Vector2(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y)
+ Vector2i(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y)
)
elif h:
- new_array.append(Vector2(project.x_symmetry_point - point.x, point.y))
+ new_array.append(Vector2i(project.x_symmetry_point - point.x, point.y))
elif v:
- new_array.append(Vector2(point.x, project.y_symmetry_point - point.y))
+ new_array.append(Vector2i(point.x, project.y_symmetry_point - point.y))
return new_array
@@ -221,10 +221,10 @@ func draw_empty_circle(
line_origin = circle_radius + circle_center
while draw_counter <= 360:
- line_end = circle_radius.rotated(deg2rad(draw_counter)) + circle_center
+ line_end = circle_radius.rotated(deg_to_rad(draw_counter)) + circle_center
canvas.draw_line(line_origin, line_end, color)
draw_counter += 1
line_origin = line_end
- line_end = circle_radius.rotated(deg2rad(360)) + circle_center
+ line_end = circle_radius.rotated(deg_to_rad(360)) + circle_center
canvas.draw_line(line_origin, line_end, color)
diff --git a/src/Tools/SelectionTools/PolygonSelect.tscn b/src/Tools/SelectionTools/PolygonSelect.tscn
index d18160d989d..d28ddefdb83 100644
--- a/src/Tools/SelectionTools/PolygonSelect.tscn
+++ b/src/Tools/SelectionTools/PolygonSelect.tscn
@@ -1,10 +1,10 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://dv8bn8gys3tax"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/PolygonSelect.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/PolygonSelect.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="DoubleClickTimer" type="Timer" parent="." index="8"]
wait_time = 0.1
diff --git a/src/Tools/SelectionTools/RectSelect.gd b/src/Tools/SelectionTools/RectSelect.gd
index f6206dc4535..6912e5f0fca 100644
--- a/src/Tools/SelectionTools/RectSelect.gd
+++ b/src/Tools/SelectionTools/RectSelect.gd
@@ -1,14 +1,14 @@
extends SelectionTool
-var _rect := Rect2(0, 0, 0, 0)
+var _rect := Rect2i()
-var _square := false # Mouse Click + Shift
-var _expand_from_center := false # Mouse Click + Ctrl
-var _displace_origin = false # Mouse Click + Alt
+var _square := false ## Mouse Click + Shift
+var _expand_from_center := false ## Mouse Click + Ctrl
+var _displace_origin = false ## Mouse Click + Alt
func _input(event: InputEvent) -> void:
- if !_move and !_rect.has_no_area():
+ if !_move and _rect.has_area():
if event.is_action_pressed("shape_perfect"):
_square = true
elif event.is_action_released("shape_perfect"):
@@ -23,80 +23,71 @@ func _input(event: InputEvent) -> void:
_displace_origin = false
-func draw_move(position: Vector2) -> void:
+func draw_move(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_move(position)
+ pos = snap_position(pos)
+ super.draw_move(pos)
if !_move:
if _displace_origin:
- _start_pos += position - _offset
- _rect = _get_result_rect(_start_pos, position)
+ _start_pos += pos - _offset
+ _rect = _get_result_rect(_start_pos, pos)
_set_cursor_text(_rect)
- _offset = position
+ _offset = pos
-func draw_end(position: Vector2) -> void:
+func draw_end(pos: Vector2i) -> void:
if selection_node.arrow_key_move:
return
- position = snap_position(position)
- .draw_end(position)
- _rect = Rect2(0, 0, 0, 0)
+ pos = snap_position(pos)
+ super.draw_end(pos)
+ _rect = Rect2i()
_square = false
_expand_from_center = false
_displace_origin = false
func draw_preview() -> void:
- if !_move:
- var canvas: Node2D = Global.canvas.previews
- var position := canvas.position
- var scale := canvas.scale
- if Global.mirror_view:
- position.x = position.x + Global.current_project.size.x
- scale.x = -1
- canvas.draw_set_transform(position, canvas.rotation, scale)
- canvas.draw_rect(_rect, Color.black, false)
-
- # Handle mirroring
- if Tools.horizontal_mirror:
- var mirror_x_rect := _rect
- mirror_x_rect.position.x = (
- Global.current_project.x_symmetry_point
- - _rect.position.x
- + 1
- )
- mirror_x_rect.end.x = Global.current_project.x_symmetry_point - _rect.end.x + 1
- canvas.draw_rect(mirror_x_rect, Color.black, false)
- if Tools.vertical_mirror:
- var mirror_xy_rect := mirror_x_rect
- mirror_xy_rect.position.y = (
- Global.current_project.y_symmetry_point
- - _rect.position.y
- + 1
- )
- mirror_xy_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1
- canvas.draw_rect(mirror_xy_rect, Color.black, false)
+ if _move:
+ return
+ var canvas: Node2D = Global.canvas.previews
+ var pos := canvas.position
+ var canvas_scale := canvas.scale
+ if Global.mirror_view:
+ pos.x = pos.x + Global.current_project.size.x
+ canvas_scale.x = -1
+ canvas.draw_set_transform(pos, canvas.rotation, canvas_scale)
+ canvas.draw_rect(_rect, Color.BLACK, false)
+
+ # Handle mirroring
+ if Tools.horizontal_mirror:
+ var mirror_x_rect := _rect
+ mirror_x_rect.position.x = Global.current_project.x_symmetry_point - _rect.position.x + 1
+ mirror_x_rect.end.x = Global.current_project.x_symmetry_point - _rect.end.x + 1
+ canvas.draw_rect(mirror_x_rect, Color.BLACK, false)
if Tools.vertical_mirror:
- var mirror_y_rect := _rect
- mirror_y_rect.position.y = (
- Global.current_project.y_symmetry_point
- - _rect.position.y
- + 1
+ var mirror_xy_rect := mirror_x_rect
+ mirror_xy_rect.position.y = (
+ Global.current_project.y_symmetry_point - _rect.position.y + 1
)
- mirror_y_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1
- canvas.draw_rect(mirror_y_rect, Color.black, false)
- canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
+ mirror_xy_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1
+ canvas.draw_rect(mirror_xy_rect, Color.BLACK, false)
+ if Tools.vertical_mirror:
+ var mirror_y_rect := _rect
+ mirror_y_rect.position.y = Global.current_project.y_symmetry_point - _rect.position.y + 1
+ mirror_y_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1
+ canvas.draw_rect(mirror_y_rect, Color.BLACK, false)
+ canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
-func apply_selection(_position: Vector2) -> void:
- .apply_selection(_position)
- var project: Project = Global.current_project
+func apply_selection(pos: Vector2i) -> void:
+ super.apply_selection(pos)
+ var project := Global.current_project
if !_add and !_subtract and !_intersect:
Global.canvas.selection.clear_selection()
- if _rect.size == Vector2.ZERO and project.has_selection:
+ if _rect.size == Vector2i.ZERO and project.has_selection:
Global.canvas.selection.commit_undo("Select", undo_data)
- if _rect.size == Vector2.ZERO:
+ if _rect.size == Vector2i.ZERO:
return
var operation := 0
if _subtract:
@@ -125,33 +116,33 @@ func apply_selection(_position: Vector2) -> void:
Global.canvas.selection.commit_undo("Select", undo_data)
-# Given an origin point and destination point, returns a rect representing
-# where the shape will be drawn and what is its size
-func _get_result_rect(origin: Vector2, dest: Vector2) -> Rect2:
- var rect := Rect2(Vector2.ZERO, Vector2.ZERO)
+## Given an origin point and destination point, returns a rect representing
+## where the shape will be drawn and what is its size
+func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i:
+ var rect := Rect2i()
# Center the rect on the mouse
if _expand_from_center:
- var new_size := (dest - origin).floor()
+ var new_size := dest - origin
# Make rect 1:1 while centering it on the mouse
if _square:
- var square_size := max(abs(new_size.x), abs(new_size.y))
- new_size = Vector2(square_size, square_size)
+ var square_size := maxi(absi(new_size.x), absi(new_size.y))
+ new_size = Vector2i(square_size, square_size)
origin -= new_size
dest = origin + 2 * new_size
# Make rect 1:1 while not trying to center it
if _square:
- var square_size := min(abs(origin.x - dest.x), abs(origin.y - dest.y))
+ var square_size := mini(absi(origin.x - dest.x), absi(origin.y - dest.y))
rect.position.x = origin.x if origin.x < dest.x else origin.x - square_size
rect.position.y = origin.y if origin.y < dest.y else origin.y - square_size
- rect.size = Vector2(square_size, square_size)
+ rect.size = Vector2i(square_size, square_size)
# Get the rect without any modifications
else:
- rect.position = Vector2(min(origin.x, dest.x), min(origin.y, dest.y))
+ rect.position = Vector2i(mini(origin.x, dest.x), mini(origin.y, dest.y))
rect.size = (origin - dest).abs()
- rect.size += Vector2.ONE
+ rect.size += Vector2i.ONE
return rect
diff --git a/src/Tools/SelectionTools/RectSelect.tscn b/src/Tools/SelectionTools/RectSelect.tscn
index 683b19e5d41..fa518992c80 100644
--- a/src/Tools/SelectionTools/RectSelect.tscn
+++ b/src/Tools/SelectionTools/RectSelect.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://iph72k1ii717"]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/RectSelect.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/RectSelect.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
diff --git a/src/Tools/SelectionTools/SelectionTool.gd b/src/Tools/SelectionTools/SelectionTool.gd
index d3f125592c0..a82862e4124 100644
--- a/src/Tools/SelectionTools/SelectionTool.gd
+++ b/src/Tools/SelectionTools/SelectionTool.gd
@@ -6,36 +6,36 @@ enum Mode { DEFAULT, ADD, SUBTRACT, INTERSECT }
var undo_data: Dictionary
var _move := false
var _move_content := true
-var _start_pos := Vector2.ZERO
-var _offset := Vector2.ZERO
-# For tools such as the Polygon selection tool where you have to
-# click multiple times to create a selection
+var _start_pos := Vector2i.ZERO
+var _offset := Vector2i.ZERO
+## For tools such as the Polygon selection tool where you have to
+## click multiple times to create a selection
var _ongoing_selection := false
var _mode_selected := 0
-var _add := false # Shift + Mouse Click
-var _subtract := false # Ctrl + Mouse Click
-var _intersect := false # Shift + Ctrl + Mouse Click
+var _add := false ## Shift + Mouse Click
+var _subtract := false ## Ctrl + Mouse Click
+var _intersect := false ## Shift + Ctrl + Mouse Click
-# Used to check if the state of content transformation has been changed
-# while draw_move() is being called. For example, pressing Enter while still moving content
+## Used to check if the state of content transformation has been changed
+## while draw_move() is being called. For example, pressing Enter while still moving content
var _content_transformation_check := false
var _skip_slider_logic := false
-onready var selection_node: Node2D = Global.canvas.selection
-onready var position_sliders := $Position as ValueSliderV2
-onready var size_sliders := $Size as ValueSliderV2
-onready var timer := $Timer as Timer
+@onready var selection_node: Node2D = Global.canvas.selection
+@onready var position_sliders := $Position as ValueSliderV2
+@onready var size_sliders := $Size as ValueSliderV2
+@onready var timer := $Timer as Timer
func _ready() -> void:
+ super._ready()
set_spinbox_values()
refresh_options()
+## Ensure all items are added when we are selecting an option (bad things will happen otherwise)
func refresh_options() -> void:
- # The existence of this function is to ensure all items
- # are added when we are selecting an option (bad things will happen otherwise)
$Modes.clear()
$Modes.add_item("Replace selection")
$Modes.add_item("Add to selection")
@@ -45,7 +45,7 @@ func refresh_options() -> void:
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["mode_selected"] = _mode_selected
return config
@@ -60,8 +60,8 @@ func update_config() -> void:
func set_spinbox_values() -> void:
_skip_slider_logic = true
- var select_rect: Rect2 = selection_node.big_bounding_rectangle
- var has_selection := not select_rect.has_no_area()
+ var select_rect: Rect2i = selection_node.big_bounding_rectangle
+ var has_selection := select_rect.has_area()
if not has_selection:
size_sliders.press_ratio_button(false)
position_sliders.editable = has_selection
@@ -71,27 +71,27 @@ func set_spinbox_values() -> void:
_skip_slider_logic = false
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if selection_node.arrow_key_move:
return
- var project: Project = Global.current_project
+ var project := Global.current_project
undo_data = selection_node.get_undo_data(false)
_intersect = Input.is_action_pressed("selection_intersect", true)
_add = Input.is_action_pressed("selection_add", true)
_subtract = Input.is_action_pressed("selection_subtract", true)
- _start_pos = position
- _offset = position
+ _start_pos = pos
+ _offset = pos
- var selection_position: Vector2 = selection_node.big_bounding_rectangle.position
- var offsetted_pos := position
+ var selection_position: Vector2i = selection_node.big_bounding_rectangle.position
+ var offsetted_pos := pos
if selection_position.x < 0:
offsetted_pos.x -= selection_position.x
if selection_position.y < 0:
offsetted_pos.y -= selection_position.y
- var quick_copy: bool = Input.is_action_pressed("transform_copy_selection_content", true)
+ var quick_copy := Input.is_action_pressed("transform_copy_selection_content", true)
if (
offsetted_pos.x >= 0
and offsetted_pos.y >= 0
@@ -99,7 +99,12 @@ func draw_start(position: Vector2) -> void:
and (!_add and !_subtract and !_intersect or quick_copy)
and !_ongoing_selection
):
- if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn():
+ if !(
+ Global
+ . current_project
+ . layers[Global.current_project.current_layer]
+ . can_layer_get_drawn()
+ ):
return
# Move current selection
_move = true
@@ -110,7 +115,7 @@ func draw_start(position: Vector2) -> void:
image.blit_rect_mask(
selection_node.preview_image,
selection_node.preview_image,
- Rect2(Vector2.ZERO, project.selection_map.get_size()),
+ Rect2i(Vector2i.ZERO, project.selection_map.get_size()),
selection_node.big_bounding_rectangle.position
)
@@ -127,7 +132,7 @@ func draw_start(position: Vector2) -> void:
image.blit_rect_mask(
selection_node.preview_image,
selection_node.preview_image,
- Rect2(Vector2.ZERO, project.selection_map.get_size()),
+ Rect2i(Vector2i.ZERO, project.selection_map.get_size()),
selection_node.big_bounding_rectangle.position
)
Global.canvas.update_selected_cels_textures()
@@ -146,9 +151,9 @@ func draw_start(position: Vector2) -> void:
_content_transformation_check = selection_node.is_moving_content
-func draw_move(position: Vector2) -> void:
- position = snap_position(position)
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_move(pos)
if selection_node.arrow_key_move:
return
# This is true if content transformation has been confirmed (pressed Enter for example)
@@ -159,51 +164,50 @@ func draw_move(position: Vector2) -> void:
return
if Input.is_action_pressed("transform_snap_axis"): # Snap to axis
- var angle := position.angle_to_point(_start_pos)
- if abs(angle) <= PI / 4 or abs(angle) >= 3 * PI / 4:
- position.y = _start_pos.y
+ var angle := Vector2(pos).angle_to_point(_start_pos)
+ if absf(angle) <= PI / 4 or absf(angle) >= 3 * PI / 4:
+ pos.y = _start_pos.y
else:
- position.x = _start_pos.x
+ pos.x = _start_pos.x
if Input.is_action_pressed("transform_snap_grid"):
_offset = _offset.snapped(Global.grid_size)
- var prev_pos: Vector2 = selection_node.big_bounding_rectangle.position
+ var prev_pos: Vector2i = selection_node.big_bounding_rectangle.position
selection_node.big_bounding_rectangle.position = prev_pos.snapped(Global.grid_size)
- selection_node.marching_ants_outline.offset += (
- selection_node.big_bounding_rectangle.position
- - prev_pos
+ selection_node.marching_ants_outline.offset += Vector2(
+ selection_node.big_bounding_rectangle.position - prev_pos
)
- position = position.snapped(Global.grid_size)
+ pos = pos.snapped(Global.grid_size)
var grid_offset := Global.grid_offset
- grid_offset = Vector2(
+ grid_offset = Vector2i(
fmod(grid_offset.x, Global.grid_size.x), fmod(grid_offset.y, Global.grid_size.y)
)
- position += grid_offset
+ pos += grid_offset
if _move_content:
- selection_node.move_content(position - _offset)
+ selection_node.move_content(pos - _offset)
else:
- selection_node.move_borders(position - _offset)
+ selection_node.move_borders(pos - _offset)
- _offset = position
+ _offset = pos
_set_cursor_text(selection_node.big_bounding_rectangle)
-func draw_end(position: Vector2) -> void:
- position = snap_position(position)
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_end(pos)
if selection_node.arrow_key_move:
return
if _content_transformation_check == selection_node.is_moving_content:
if _move:
selection_node.move_borders_end()
else:
- apply_selection(position)
+ apply_selection(pos)
_move = false
cursor_text = ""
-func apply_selection(_position: Vector2) -> void:
+func apply_selection(_position: Vector2i) -> void:
# if a shortcut is activated then that will be obeyed instead
match _mode_selected:
Mode.ADD:
@@ -222,16 +226,16 @@ func _on_Modes_item_selected(index: int) -> void:
save_config()
-func _set_cursor_text(rect: Rect2) -> void:
+func _set_cursor_text(rect: Rect2i) -> void:
cursor_text = "%s, %s" % [rect.position.x, rect.position.y]
cursor_text += " -> %s, %s" % [rect.end.x - 1, rect.end.y - 1]
cursor_text += " (%s, %s)" % [rect.size.x, rect.size.y]
-func _on_Position_value_changed(value: Vector2) -> void:
+func _on_Position_value_changed(value: Vector2i) -> void:
if _skip_slider_logic:
return
- var project: Project = Global.current_project
+ var project := Global.current_project
if !project.has_selection:
return
@@ -247,7 +251,7 @@ func _on_Position_value_changed(value: Vector2) -> void:
project.selection_map_changed()
-func _on_Size_value_changed(value: Vector2) -> void:
+func _on_Size_value_changed(value: Vector2i) -> void:
if _skip_slider_logic:
return
if !Global.current_project.has_selection:
diff --git a/src/Tools/SelectionTools/SelectionTool.tscn b/src/Tools/SelectionTools/SelectionTool.tscn
index 8972b8bf3a1..23f95a726cd 100644
--- a/src/Tools/SelectionTools/SelectionTool.tscn
+++ b/src/Tools/SelectionTools/SelectionTool.tscn
@@ -1,50 +1,37 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bd62qfjn380wf"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=4]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/SelectionTools/SelectionTool.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="4"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="ModeLabel" type="Label" parent="." index="2"]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 40.0
+layout_mode = 2
text = "Mode:"
[node name="Modes" type="OptionButton" parent="." index="3"]
-margin_top = 44.0
-margin_right = 116.0
-margin_bottom = 64.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-align = 1
[node name="PositionLabel" type="Label" parent="." index="4"]
-margin_top = 68.0
-margin_right = 116.0
-margin_bottom = 82.0
+layout_mode = 2
text = "Position:"
-[node name="Position" parent="." index="5" instance=ExtResource( 4 )]
-margin_top = 86.0
-margin_right = 116.0
-margin_bottom = 138.0
+[node name="Position" parent="." index="5" instance=ExtResource("4")]
+layout_mode = 2
allow_greater = true
allow_lesser = true
[node name="SizeLabel" type="Label" parent="." index="6"]
-margin_top = 142.0
-margin_right = 116.0
-margin_bottom = 156.0
+layout_mode = 2
text = "Size:"
-[node name="Size" parent="." index="7" instance=ExtResource( 4 )]
-margin_top = 160.0
-margin_right = 116.0
-margin_bottom = 212.0
-value = Vector2( 1, 1 )
-min_value = Vector2( 1, 1 )
+[node name="Size" parent="." index="7" instance=ExtResource("4")]
+layout_mode = 2
+value = Vector2(1, 1)
+min_value = Vector2(1, 1)
allow_greater = true
show_ratio = true
prefix_x = "Width:"
diff --git a/src/Tools/Shading.gd b/src/Tools/Shading.gd
index 33f5a3cf739..10d2b845048 100644
--- a/src/Tools/Shading.gd
+++ b/src/Tools/Shading.gd
@@ -17,8 +17,8 @@ var _value_amount := 10
class LightenDarkenOp:
extends Drawer.ColorOp
var changed := false
- var shading_mode: int = ShadingMode.SIMPLE
- var lighten_or_darken: int = LightenDarken.LIGHTEN
+ var shading_mode := ShadingMode.SIMPLE
+ var lighten_or_darken := LightenDarken.LIGHTEN
var hue_amount := 10.0
var sat_amount := 10.0
var value_amount := 10.0
@@ -52,7 +52,7 @@ class LightenDarkenOp:
hue_shift = hue_limit_lighten(dst.h, hue_shift)
dst.h = fposmod(dst.h + hue_shift, 1)
if dst.s > sat_lighten_limit:
- dst.s = max(dst.s - min(sat_shift, dst.s), sat_lighten_limit)
+ dst.s = maxf(dst.s - minf(sat_shift, dst.s), sat_lighten_limit)
dst.v += value_shift
else:
@@ -60,7 +60,7 @@ class LightenDarkenOp:
dst.h = fposmod(dst.h - hue_shift, 1)
dst.s += sat_shift
if dst.v > value_darken_limit:
- dst.v = max(dst.v - min(value_shift, dst.v), value_darken_limit)
+ dst.v = maxf(dst.v - minf(value_shift, dst.v), value_darken_limit)
return dst
@@ -162,7 +162,7 @@ func _on_LightenDarken_value_value_changed(value: float) -> void:
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["shading_mode"] = _shading_mode
config["mode"] = _mode
config["amount"] = _amount
@@ -173,7 +173,7 @@ func get_config() -> Dictionary:
func set_config(config: Dictionary) -> void:
- .set_config(config)
+ super.set_config(config)
_shading_mode = config.get("shading_mode", _shading_mode)
_drawer.color_op.shading_mode = _shading_mode
_mode = config.get("mode", _mode)
@@ -185,7 +185,7 @@ func set_config(config: Dictionary) -> void:
func update_config() -> void:
- .update_config()
+ super.update_config()
$ShadingMode.selected = _shading_mode
$LightenDarken.selected = _mode
$AmountSlider.value = _amount
@@ -205,12 +205,12 @@ func update_strength() -> void:
_drawer.color_op.value_amount = _value_amount
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if Input.is_action_pressed("draw_color_picker"):
_picking_color = true
- _pick_color(position)
+ _pick_color(pos)
return
_picking_color = false
@@ -226,43 +226,43 @@ func draw_start(position: Vector2) -> void:
if _draw_line:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = (Global.current_project.size.x - 1) - position.x
- _line_start = position
- _line_end = position
+ pos.x = (Global.current_project.size.x - 1) - pos.x
+ _line_start = pos
+ _line_end = pos
update_line_polylines(_line_start, _line_end)
else:
- draw_tool(position)
- _last_position = position
+ draw_tool(pos)
+ _last_position = pos
Global.canvas.sprite_changed_this_frame = true
cursor_text = ""
-func draw_move(position: Vector2) -> void:
- position = snap_position(position)
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_move(pos)
if _picking_color: # Still return even if we released Alt
if Input.is_action_pressed("draw_color_picker"):
- _pick_color(position)
+ _pick_color(pos)
return
if _draw_line:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = (Global.current_project.size.x - 1) - position.x
- var d := _line_angle_constraint(_line_start, position)
+ pos.x = (Global.current_project.size.x - 1) - pos.x
+ var d := _line_angle_constraint(_line_start, pos)
_line_end = d.position
cursor_text = d.text
update_line_polylines(_line_start, _line_end)
else:
- draw_fill_gap(_last_position, position)
- _last_position = position
+ draw_fill_gap(_last_position, pos)
+ _last_position = pos
cursor_text = ""
Global.canvas.sprite_changed_this_frame = true
-func draw_end(position: Vector2) -> void:
- position = snap_position(position)
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_end(pos)
if _picking_color:
return
@@ -280,17 +280,15 @@ func draw_end(position: Vector2) -> void:
update_random_image()
-func _draw_brush_image(image: Image, src_rect: Rect2, dst: Vector2) -> void:
+func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void:
_changed = true
- image.lock()
for xx in image.get_size().x:
for yy in image.get_size().y:
if image.get_pixel(xx, yy).a > 0:
- var pos := Vector2(xx, yy) + dst - src_rect.position
+ var pos := Vector2i(xx, yy) + dst - src_rect.position
_set_pixel(pos, true)
- image.unlock()
func update_brush() -> void:
- .update_brush()
+ super.update_brush()
$ColorInterpolation.visible = false
diff --git a/src/Tools/Shading.tscn b/src/Tools/Shading.tscn
index 5cc418a3247..bb070d5a31d 100644
--- a/src/Tools/Shading.tscn
+++ b/src/Tools/Shading.tscn
@@ -1,80 +1,64 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://rbyd7i6snxjc"]
-[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/Shading.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/Shading.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
-
-[node name="ColorRect" parent="." index="0"]
-margin_right = 126.0
-
-[node name="Label" parent="." index="1"]
-margin_right = 126.0
-
-[node name="Brush" parent="." index="2"]
-margin_right = 126.0
-
-[node name="BrushSize" parent="Brush" index="1"]
-margin_right = 126.0
-
-[node name="ColorInterpolation" parent="." index="3"]
-margin_top = 216.0
-margin_right = 126.0
-margin_bottom = 278.0
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="LightenDarken" type="OptionButton" parent="." index="4"]
-margin_top = 62.0
-margin_right = 126.0
-margin_bottom = 82.0
-rect_min_size = Vector2( 92, 0 )
+custom_minimum_size = Vector2(92, 0)
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Lighten"
-items = [ "Lighten", null, false, 0, null, "Darken", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "Lighten"
+popup/item_0/id = 0
+popup/item_1/text = "Darken"
+popup/item_1/id = 1
[node name="ShadingMode" type="OptionButton" parent="." index="5"]
-margin_top = 86.0
-margin_right = 126.0
-margin_bottom = 106.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Simple Shading"
-items = [ "Simple Shading", null, false, 0, null, "Hue Shifting", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "Simple Shading"
+popup/item_0/id = 0
+popup/item_1/text = "Hue Shifting"
+popup/item_1/id = 1
-[node name="AmountSlider" parent="." index="6" instance=ExtResource( 3 )]
-margin_top = 110.0
-margin_right = 126.0
-margin_bottom = 134.0
-hint_tooltip = "Lighten/Darken amount"
+[node name="AmountSlider" parent="." index="6" instance=ExtResource("3")]
+layout_mode = 2
+tooltip_text = "Lighten/Darken amount"
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 10.0
prefix = "Amount:"
[node name="HueShiftingOptions" type="VBoxContainer" parent="." index="7"]
visible = false
-margin_top = 138.0
-margin_right = 126.0
-margin_bottom = 218.0
+layout_mode = 2
-[node name="HueSlider" parent="HueShiftingOptions" index="0" instance=ExtResource( 3 )]
-margin_right = 126.0
-margin_bottom = 24.0
+[node name="HueSlider" parent="HueShiftingOptions" index="0" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
max_value = 180.0
value = 10.0
prefix = "Hue:"
-[node name="SatSlider" parent="HueShiftingOptions" index="1" instance=ExtResource( 3 )]
-margin_top = 28.0
-margin_right = 126.0
-margin_bottom = 52.0
+[node name="SatSlider" parent="HueShiftingOptions" index="1" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 10.0
prefix = "Saturation:"
-[node name="ValueSlider" parent="HueShiftingOptions" index="2" instance=ExtResource( 3 )]
-margin_top = 56.0
-margin_right = 126.0
-margin_bottom = 80.0
+[node name="ValueSlider" parent="HueShiftingOptions" index="2" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 10.0
prefix = "Value:"
diff --git a/src/Tools/ShapeDrawer.gd b/src/Tools/ShapeDrawer.gd
index 1bf44394fb3..c894675a1be 100644
--- a/src/Tools/ShapeDrawer.gd
+++ b/src/Tools/ShapeDrawer.gd
@@ -1,8 +1,8 @@
extends "res://src/Tools/Draw.gd"
-var _start := Vector2.ZERO
-var _offset := Vector2.ZERO
-var _dest := Vector2.ZERO
+var _start := Vector2i.ZERO
+var _offset := Vector2i.ZERO
+var _dest := Vector2i.ZERO
var _fill := false
var _drawing := false
var _displace_origin := false
@@ -31,10 +31,10 @@ func update_indicator() -> void:
var rect := _get_result_rect(_start, _dest)
var points := _get_points(rect.size)
var t_offset := _thickness - 1
- var t_offsetv := Vector2(t_offset, t_offset)
+ var t_offsetv := Vector2i(t_offset, t_offset)
indicator.create(rect.size + t_offsetv)
for point in points:
- indicator.set_bit(point, 1)
+ indicator.set_bitv(point, 1)
_indicator = indicator
_polylines = _create_polylines(_indicator)
@@ -47,30 +47,30 @@ func _on_FillCheckbox_toggled(button_pressed: bool) -> void:
func get_config() -> Dictionary:
- var config := .get_config()
+ var config := super.get_config()
config["fill"] = _fill
config["thickness"] = _thickness
return config
func set_config(config: Dictionary) -> void:
- .set_config(config)
+ super.set_config(config)
_fill = config.get("fill", _fill)
_thickness = config.get("thickness", _thickness)
func update_config() -> void:
- .update_config()
- $FillCheckbox.pressed = _fill
+ super.update_config()
+ $FillCheckbox.button_pressed = _fill
$ThicknessSlider.value = _thickness
-func _get_shape_points(_size: Vector2) -> PoolVector2Array:
- return PoolVector2Array()
+func _get_shape_points(_size: Vector2i) -> Array[Vector2i]:
+ return []
-func _get_shape_points_filled(_size: Vector2) -> PoolVector2Array:
- return PoolVector2Array()
+func _get_shape_points_filled(_size: Vector2i) -> Array[Vector2i]:
+ return []
func _input(event: InputEvent) -> void:
@@ -81,12 +81,12 @@ func _input(event: InputEvent) -> void:
_displace_origin = false
-func draw_start(position: Vector2) -> void:
- position = snap_position(position)
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_start(pos)
if Input.is_action_pressed("draw_color_picker"):
_picking_color = true
- _pick_color(position)
+ _pick_color(pos)
return
_picking_color = false
@@ -95,35 +95,35 @@ func draw_start(position: Vector2) -> void:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = Global.current_project.size.x - position.x - 1
- _start = position
- _offset = position
- _dest = position
+ pos.x = Global.current_project.size.x - pos.x - 1
+ _start = pos
+ _offset = pos
+ _dest = pos
_drawing = true
-func draw_move(position: Vector2) -> void:
- position = snap_position(position)
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_move(pos)
if _picking_color: # Still return even if we released draw_color_picker (Alt)
if Input.is_action_pressed("draw_color_picker"):
- _pick_color(position)
+ _pick_color(pos)
return
if _drawing:
if Global.mirror_view:
# mirroring position is ONLY required by "Preview"
- position.x = Global.current_project.size.x - position.x - 1
+ pos.x = Global.current_project.size.x - pos.x - 1
if _displace_origin:
- _start += position - _offset
- _dest = position
- _offset = position
- _set_cursor_text(_get_result_rect(_start, position))
+ _start += pos - _offset
+ _dest = pos
+ _offset = pos
+ _set_cursor_text(_get_result_rect(_start, pos))
-func draw_end(position: Vector2) -> void:
- position = snap_position(position)
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ pos = snap_position(pos)
+ super.draw_end(pos)
if _picking_color:
return
@@ -137,11 +137,11 @@ func draw_end(position: Vector2) -> void:
_start.x += 1
_offset.x += 1
_dest.x += 1
- position.x += 1
- _draw_shape(_start, position)
+ pos.x += 1
+ _draw_shape(_start, pos)
- _start = Vector2.ZERO
- _dest = Vector2.ZERO
+ _start = Vector2i.ZERO
+ _dest = Vector2i.ZERO
_drawing = false
_displace_origin = false
cursor_text = ""
@@ -154,21 +154,23 @@ func draw_preview() -> void:
var rect := _get_result_rect(_start, _dest)
var points := _get_points(rect.size)
var t_offset := _thickness - 1
- var t_offsetv := Vector2(t_offset, t_offset)
+ var t_offsetv := Vector2i(t_offset, t_offset)
indicator.create(rect.size + t_offsetv)
for point in points:
- indicator.set_bit(point, 1)
+ indicator.set_bitv(point, 1)
- var transform_pos: Vector2 = rect.position - t_offsetv + Vector2(0.5, 0.5) * (t_offset - 1)
- canvas.draw_set_transform(transform_pos.ceil(), canvas.rotation, canvas.scale)
+ var transform_pos := (
+ rect.position - t_offsetv + Vector2i((Vector2(0.5, 0.5) * (t_offset - 1)).ceil())
+ )
+ canvas.draw_set_transform(transform_pos, canvas.rotation, canvas.scale)
for line in _create_polylines(indicator):
- canvas.draw_polyline(PoolVector2Array(line), Color.black)
+ canvas.draw_polyline(PackedVector2Array(line), Color.BLACK)
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
-func _draw_shape(origin: Vector2, dest: Vector2) -> void:
+func _draw_shape(origin: Vector2i, dest: Vector2i) -> void:
var rect := _get_result_rect(origin, dest)
var points := _get_points(rect.size)
prepare_undo("Draw Shape")
@@ -176,48 +178,48 @@ func _draw_shape(origin: Vector2, dest: Vector2) -> void:
# Reset drawer every time because pixel perfect sometimes breaks the tool
_drawer.reset()
# Draw each point offsetted based on the shape's thickness
- draw_tool(rect.position + point - Vector2(0.5, 0.5) * (_thickness - 1))
+ draw_tool(rect.position + point - Vector2i((Vector2(0.5, 0.5) * (_thickness - 1)).ceil()))
commit_undo()
-# Given an origin point and destination point, returns a rect representing
-# where the shape will be drawn and what is its size
-func _get_result_rect(origin: Vector2, dest: Vector2) -> Rect2:
- var rect := Rect2()
+## Given an origin point and destination point, returns a rect representing
+## where the shape will be drawn and what is its size
+func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i:
+ var rect := Rect2i()
# Center the rect on the mouse
if Input.is_action_pressed("shape_center"):
- var new_size := (dest - origin).floor()
+ var new_size := dest - origin
# Make rect 1:1 while centering it on the mouse
if Input.is_action_pressed("shape_perfect"):
- var square_size := max(abs(new_size.x), abs(new_size.y))
- new_size = Vector2(square_size, square_size)
+ var square_size := maxi(absi(new_size.x), absi(new_size.y))
+ new_size = Vector2i(square_size, square_size)
origin -= new_size
dest = origin + 2 * new_size
# Make rect 1:1 while not trying to center it
if Input.is_action_pressed("shape_perfect"):
- var square_size := min(abs(origin.x - dest.x), abs(origin.y - dest.y))
+ var square_size := mini(absi(origin.x - dest.x), absi(origin.y - dest.y))
rect.position.x = origin.x if origin.x < dest.x else origin.x - square_size
rect.position.y = origin.y if origin.y < dest.y else origin.y - square_size
- rect.size = Vector2(square_size, square_size)
+ rect.size = Vector2i(square_size, square_size)
# Get the rect without any modifications
else:
- rect.position = Vector2(min(origin.x, dest.x), min(origin.y, dest.y))
+ rect.position = Vector2i(mini(origin.x, dest.x), mini(origin.y, dest.y))
rect.size = (origin - dest).abs()
- rect.size += Vector2.ONE
+ rect.size += Vector2i.ONE
return rect
-func _get_points(size: Vector2) -> PoolVector2Array:
- return _get_shape_points_filled(size) if _fill else _get_shape_points(size)
+func _get_points(shape_size: Vector2i) -> Array[Vector2i]:
+ return _get_shape_points_filled(shape_size) if _fill else _get_shape_points(shape_size)
-func _set_cursor_text(rect: Rect2) -> void:
+func _set_cursor_text(rect: Rect2i) -> void:
cursor_text = "%s, %s" % [rect.position.x, rect.position.y]
cursor_text += " -> %s, %s" % [rect.end.x - 1, rect.end.y - 1]
cursor_text += " (%s, %s)" % [rect.size.x, rect.size.y]
diff --git a/src/Tools/ShapeDrawer.tscn b/src/Tools/ShapeDrawer.tscn
index f75a7e35e63..1b9720845b2 100644
--- a/src/Tools/ShapeDrawer.tscn
+++ b/src/Tools/ShapeDrawer.tscn
@@ -1,16 +1,16 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://n40lhf8hm7o1"]
-[ext_resource path="res://src/Tools/ShapeDrawer.gd" type="Script" id=1]
-[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="Script" path="res://src/Tools/ShapeDrawer.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[node name="ToolOptions" instance=ExtResource( 2 )]
-script = ExtResource( 1 )
+[node name="ToolOptions" instance=ExtResource("2")]
+script = ExtResource("1")
-[node name="ThicknessSlider" parent="." index="2" instance=ExtResource( 3 )]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 50.0
+[node name="ThicknessSlider" parent="." index="2" instance=ExtResource("3")]
+layout_mode = 2
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
prefix = "Size:"
@@ -18,19 +18,13 @@ suffix = "px"
is_global = true
[node name="FillCheckbox" type="CheckBox" parent="." index="3"]
-margin_top = 54.0
-margin_right = 116.0
-margin_bottom = 78.0
-hint_tooltip = "Fills the drawn shape with color, instead of drawing a hollow shape"
+layout_mode = 2
+tooltip_text = "Fills the drawn shape with color, instead of drawing a hollow shape"
mouse_default_cursor_shape = 2
-text = "Fill Shape"
+text = "Fill Shape3D"
[node name="Brush" parent="." index="4"]
visible = false
-[node name="ColorInterpolation" parent="." index="5"]
-margin_top = 66.0
-margin_bottom = 128.0
-
[connection signal="value_changed" from="ThicknessSlider" to="." method="_on_Thickness_value_changed"]
[connection signal="toggled" from="FillCheckbox" to="." method="_on_FillCheckbox_toggled"]
diff --git a/src/Tools/ToolButton.tscn b/src/Tools/ToolButton.tscn
index 8aec76f1a83..7b7076bf6af 100644
--- a/src/Tools/ToolButton.tscn
+++ b/src/Tools/ToolButton.tscn
@@ -1,64 +1,54 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://ddrry0n03t66c"]
-[ext_resource path="res://assets/graphics/tools/tool_background.png" type="Texture" id=1]
-[ext_resource path="res://assets/graphics/tools/rectselect.png" type="Texture" id=2]
+[ext_resource type="Texture2D" uid="uid://cnomk15kl7go0" path="res://assets/graphics/tools/tool_background.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://chg3ejelsgcwm" path="res://assets/graphics/tools/rectselect.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://4h6t2v7tf6r2" path="res://assets/graphics/tools/tool_background_right.png" id="2_sxm2f"]
[node name="Tool" type="Button" groups=["UIButtons"]]
-margin_right = 24.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 24, 24 )
-hint_tooltip = "Rectangular Selection
+custom_minimum_size = Vector2(24, 24)
+offset_right = 24.0
+offset_bottom = 24.0
+tooltip_text = "Rectangular Selection
%s for left mouse button
%s for right mouse button"
mouse_default_cursor_shape = 2
button_mask = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="BackgroundLeft" type="NinePatchRect" parent="."]
-visible = false
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 0.5
anchor_bottom = 1.0
-margin_right = 12.0
-texture = ExtResource( 1 )
-region_rect = Rect2( 0, 0, 11, 24 )
+grow_vertical = 2
+texture = ExtResource("1")
+region_rect = Rect2(0, 0, 11, 24)
patch_margin_left = 2
patch_margin_top = 1
patch_margin_right = 10
patch_margin_bottom = 1
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="BackgroundRight" type="NinePatchRect" parent="."]
-visible = false
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 24.0
-margin_top = 24.0
-margin_right = 36.0
-margin_bottom = 24.0
-rect_rotation = 180.0
-texture = ExtResource( 1 )
-region_rect = Rect2( 0, 0, 11, 24 )
-patch_margin_left = 2
+texture = ExtResource("2_sxm2f")
+patch_margin_left = 11
patch_margin_top = 1
-patch_margin_right = 10
+patch_margin_right = 1
patch_margin_bottom = 1
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ToolIcon" type="TextureRect" parent="."]
+layout_mode = 1
+anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
-texture = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
+texture = ExtResource("2")
diff --git a/src/Tools/Zoom.gd b/src/Tools/Zoom.gd
index e1db1cfed2a..fda2cb90c91 100644
--- a/src/Tools/Zoom.gd
+++ b/src/Tools/Zoom.gd
@@ -47,14 +47,12 @@ func update_config() -> void:
$ModeOptions.selected = _zoom_mode
-func draw_start(position: Vector2) -> void:
- .draw_start(position)
+func draw_start(pos: Vector2i) -> void:
+ super.draw_start(pos)
var mouse_pos := get_global_mouse_position()
- var viewport_rect := Rect2(
- Global.main_viewport.rect_global_position, Global.main_viewport.rect_size
- )
+ var viewport_rect := Rect2(Global.main_viewport.global_position, Global.main_viewport.size)
var viewport_rect_2 := Rect2(
- Global.second_viewport.rect_global_position, Global.second_viewport.rect_size
+ Global.second_viewport.global_position, Global.second_viewport.size
)
if viewport_rect.has_point(mouse_pos):
@@ -63,10 +61,10 @@ func draw_start(position: Vector2) -> void:
Global.camera2.zoom_camera(_zoom_mode * 2 - 1)
-func draw_move(position: Vector2) -> void:
- .draw_move(position)
+func draw_move(pos: Vector2i) -> void:
+ super.draw_move(pos)
Global.camera.zoom_camera(-_relative.x / 3)
-func draw_end(position: Vector2) -> void:
- .draw_end(position)
+func draw_end(pos: Vector2i) -> void:
+ super.draw_end(pos)
diff --git a/src/Tools/Zoom.tscn b/src/Tools/Zoom.tscn
index 6ae37b4df9d..b0bdc9e5e3b 100644
--- a/src/Tools/Zoom.tscn
+++ b/src/Tools/Zoom.tscn
@@ -1,48 +1,40 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://qyxbkvju2fbb"]
-[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Tools/Zoom.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"]
+[ext_resource type="Script" path="res://src/Tools/Zoom.gd" id="2"]
-[node name="ToolOptions" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="ToolOptions" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="Mode" type="Label" parent="." index="2"]
-margin_top = 26.0
-margin_right = 116.0
-margin_bottom = 40.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Mode:"
[node name="ModeOptions" type="OptionButton" parent="." index="3"]
-margin_top = 44.0
-margin_right = 116.0
-margin_bottom = 64.0
-rect_min_size = Vector2( 92, 0 )
+custom_minimum_size = Vector2(92, 0)
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Zoom in"
-items = [ "Zoom in", null, false, 0, null, "Zoom out", null, false, 1, null ]
-selected = 0
+item_count = 2
+popup/item_0/text = "Zoom in"
+popup/item_0/id = 0
+popup/item_1/text = "Zoom out"
+popup/item_1/id = 1
[node name="Options" type="Label" parent="." index="4"]
-margin_top = 68.0
-margin_right = 116.0
-margin_bottom = 82.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Options:"
[node name="FitToFrame" type="Button" parent="." index="5"]
-margin_top = 86.0
-margin_right = 116.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 92, 0 )
+custom_minimum_size = Vector2(92, 0)
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Fit to frame"
[node name="100%" type="Button" parent="." index="6"]
-margin_top = 110.0
-margin_right = 116.0
-margin_bottom = 130.0
-rect_min_size = Vector2( 92, 0 )
+custom_minimum_size = Vector2(92, 0)
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "100% Zoom"
diff --git a/src/UI/Buttons/BrushButton.gd b/src/UI/Buttons/BrushButton.gd
index 4462d722998..951e4d41abd 100644
--- a/src/UI/Buttons/BrushButton.gd
+++ b/src/UI/Buttons/BrushButton.gd
@@ -3,10 +3,6 @@ extends BaseButton
var brush = Global.brushes_popup.Brush.new()
-func _ready():
- $TransparentChecker.fit_rect($BrushTexture.get_rect())
-
-
func _on_BrushButton_pressed() -> void:
# Delete the brush on middle mouse press
if Input.is_action_just_released("middle_mouse"):
diff --git a/src/UI/Buttons/BrushButton.tscn b/src/UI/Buttons/BrushButton.tscn
index dd262292390..4df757891b1 100644
--- a/src/UI/Buttons/BrushButton.tscn
+++ b/src/UI/Buttons/BrushButton.tscn
@@ -1,47 +1,47 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://ckg78y8l0rmf3"]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Buttons/BrushButton.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Buttons/BrushButton.gd" id="2"]
[node name="BrushButton" type="Button"]
-margin_right = 36.0
-margin_bottom = 36.0
-rect_min_size = Vector2( 36, 36 )
+custom_minimum_size = Vector2(36, 36)
+offset_right = 36.0
+offset_bottom = 36.0
button_mask = 7
-script = ExtResource( 2 )
-__meta__ = {
-"_editor_description_": ""
-}
+script = ExtResource("2")
-[node name="TransparentChecker" parent="." instance=ExtResource( 1 )]
+[node name="BrushTexture" type="TextureRect" parent="."]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 2.0
-margin_top = 2.0
-margin_right = -2.0
-margin_bottom = -2.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+expand_mode = 1
+stretch_mode = 6
-[node name="BrushTexture" type="TextureRect" parent="."]
+[node name="TransparentChecker" parent="BrushTexture" instance=ExtResource("1")]
+show_behind_parent = true
+layout_mode = 1
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 2.0
-margin_top = 2.0
-margin_right = -2.0
-margin_bottom = -2.0
-rect_min_size = Vector2( 32, 32 )
-expand = true
-stretch_mode = 6
+grow_horizontal = 2
+grow_vertical = 2
[node name="DeleteButton" type="Button" parent="."]
visible = false
-modulate = Color( 1, 0.00392157, 0.00392157, 0.878431 )
+modulate = Color(1, 0.00392157, 0.00392157, 0.878431)
+layout_mode = 0
anchor_left = 1.0
anchor_right = 1.0
-margin_left = -12.0
-margin_top = 2.0
-margin_right = 8.0
-margin_bottom = 22.0
-rect_scale = Vector2( 0.5, 0.5 )
+offset_left = -12.0
+offset_top = 2.0
+offset_right = 8.0
+offset_bottom = 22.0
+scale = Vector2(0.5, 0.5)
text = "X"
[connection signal="mouse_entered" from="." to="." method="_on_BrushButton_mouse_entered"]
diff --git a/src/UI/Buttons/BrushesPopup.gd b/src/UI/Buttons/BrushesPopup.gd
index ad1d844aee9..426f5710b1e 100644
--- a/src/UI/Buttons/BrushesPopup.gd
+++ b/src/UI/Buttons/BrushesPopup.gd
@@ -19,27 +19,27 @@ class Brush:
func _ready() -> void:
var container = get_node("Background/Brushes/Categories/DefaultBrushContainer")
- var button := create_button(pixel_image)
+ var button := Brushes.create_button(pixel_image)
button.brush.type = PIXEL
- button.hint_tooltip = "Pixel brush"
+ button.tooltip_text = "Pixel brush"
container.add_child(button)
button.brush.index = button.get_index()
- button = create_button(circle_image)
+ button = Brushes.create_button(circle_image)
button.brush.type = CIRCLE
- button.hint_tooltip = "Circle brush"
+ button.tooltip_text = "Circle brush"
container.add_child(button)
button.brush.index = button.get_index()
- button = create_button(circle_filled_image)
+ button = Brushes.create_button(circle_filled_image)
button.brush.type = FILLED_CIRCLE
- button.hint_tooltip = "Filled circle brush"
+ button.tooltip_text = "Filled circle brush"
container.add_child(button)
button.brush.index = button.get_index()
func select_brush(brush: Brush) -> void:
- emit_signal("brush_selected", brush)
+ brush_selected.emit(brush)
hide()
@@ -51,9 +51,8 @@ static func get_default_brush() -> Brush:
static func create_button(image: Image) -> Node:
- var button: BaseButton = preload("res://src/UI/Buttons/BrushButton.tscn").instance()
- var tex := ImageTexture.new()
- tex.create_from_image(image, 0)
+ var button: BaseButton = preload("res://src/UI/Buttons/BrushButton.tscn").instantiate()
+ var tex := ImageTexture.create_from_image(image)
button.get_node("BrushTexture").texture = tex
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
return button
@@ -64,7 +63,7 @@ static func add_file_brush(images: Array, hint := "") -> void:
button.brush.type = FILE if images.size() == 1 else RANDOM_FILE
button.brush.image = images[0]
button.brush.random = images
- button.hint_tooltip = hint
+ button.tooltip_text = hint
var container
if button.brush.type == RANDOM_FILE:
container = Global.brushes_popup.get_node(
@@ -82,7 +81,7 @@ static func add_project_brush(image: Image, hint := "") -> void:
var button := create_button(image)
button.brush.type = CUSTOM
button.brush.image = image
- button.hint_tooltip = hint
+ button.tooltip_text = hint
var container = Global.brushes_popup.get_node(
"Background/Brushes/Categories/ProjectBrushContainer"
)
@@ -98,7 +97,7 @@ static func clear_project_brush() -> void:
)
for child in container.get_children():
child.queue_free()
- Global.brushes_popup.emit_signal("brush_removed", child.brush)
+ Global.brushes_popup.brush_removed.emit(child.brush)
func get_brush(type: int, index: int) -> Brush:
@@ -111,16 +110,16 @@ func get_brush(type: int, index: int) -> Brush:
RANDOM_FILE:
container = get_node("Background/Brushes/Categories/RandomFileBrushContainer")
- var brush := get_default_brush()
+ var brush := Brushes.get_default_brush()
if index < container.get_child_count():
brush = container.get_child(index).brush
return brush
func remove_brush(brush_button: Node) -> void:
- emit_signal("brush_removed", brush_button.brush)
+ brush_removed.emit(brush_button.brush)
- var project = Global.current_project
+ var project := Global.current_project
var undo_brushes: Array = project.brushes.duplicate()
project.brushes.erase(brush_button.brush.image)
@@ -135,15 +134,15 @@ func remove_brush(brush_button: Node) -> void:
project.undo_redo.create_action("Delete Custom Brush")
project.undo_redo.add_do_property(project, "brushes", project.brushes)
project.undo_redo.add_undo_property(project, "brushes", undo_brushes)
- project.undo_redo.add_do_method(self, "redo_custom_brush", brush_button)
- project.undo_redo.add_undo_method(self, "undo_custom_brush", brush_button)
+ project.undo_redo.add_do_method(redo_custom_brush.bind(brush_button))
+ project.undo_redo.add_undo_method(undo_custom_brush.bind(brush_button))
project.undo_redo.add_undo_reference(brush_button)
project.undo_redo.commit_action()
func undo_custom_brush(brush_button: BaseButton = null) -> void:
Global.general_undo()
- var action_name: String = Global.current_project.undo_redo.get_current_action_name()
+ var action_name := Global.current_project.undo_redo.get_current_action_name()
if action_name == "Delete Custom Brush":
$Background/Brushes/Categories/ProjectBrushContainer.add_child(brush_button)
$Background/Brushes/Categories/ProjectBrushContainer.move_child(
@@ -154,6 +153,6 @@ func undo_custom_brush(brush_button: BaseButton = null) -> void:
func redo_custom_brush(brush_button: BaseButton = null) -> void:
Global.general_redo()
- var action_name: String = Global.current_project.undo_redo.get_current_action_name()
+ var action_name := Global.current_project.undo_redo.get_current_action_name()
if action_name == "Delete Custom Brush":
$Background/Brushes/Categories/ProjectBrushContainer.remove_child(brush_button)
diff --git a/src/UI/Buttons/BrushesPopup.tscn b/src/UI/Buttons/BrushesPopup.tscn
index 6dbc887dd01..878a2d174b5 100644
--- a/src/UI/Buttons/BrushesPopup.tscn
+++ b/src/UI/Buttons/BrushesPopup.tscn
@@ -1,100 +1,79 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://c5x85ysdouh4t"]
-[ext_resource path="res://src/UI/Buttons/BrushesPopup.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Buttons/BrushesPopup.gd" id="1"]
[node name="BrushesPopup" type="Popup"]
-margin_right = 183.0
-margin_bottom = 271.0
-rect_min_size = Vector2( 0, 144 )
-script = ExtResource( 1 )
+canvas_item_default_texture_filter = 0
+script = ExtResource("1")
[node name="Background" type="PanelContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
[node name="Brushes" type="ScrollContainer" parent="Background"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 176.0
-margin_bottom = 264.0
-rect_min_size = Vector2( 0, 36 )
+custom_minimum_size = Vector2(0, 36)
+layout_mode = 2
size_flags_horizontal = 3
-scroll_horizontal_enabled = false
[node name="Categories" type="VBoxContainer" parent="Background/Brushes"]
-margin_right = 169.0
-margin_bottom = 257.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Label" type="Label" parent="Background/Brushes/Categories"]
-margin_right = 169.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Default Brushes"
-autowrap = true
[node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/Label"]
+layout_mode = 0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_top = -4.0
+offset_top = -4.0
[node name="DefaultBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"]
-margin_top = 18.0
-margin_right = 169.0
-margin_bottom = 18.0
+layout_mode = 2
[node name="ProjectLabel" type="Label" parent="Background/Brushes/Categories"]
visible = false
-margin_top = 56.0
-margin_right = 49.0
-margin_bottom = 104.0
+layout_mode = 2
text = "Project Brushes"
-autowrap = true
[node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/ProjectLabel"]
+layout_mode = 0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_top = -4.0
+offset_top = -4.0
[node name="ProjectBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"]
-margin_top = 22.0
-margin_right = 169.0
-margin_bottom = 22.0
+layout_mode = 2
[node name="FileLabel" type="Label" parent="Background/Brushes/Categories"]
-margin_top = 26.0
-margin_right = 169.0
-margin_bottom = 40.0
+layout_mode = 2
text = "File Brushes"
-autowrap = true
[node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/FileLabel"]
+layout_mode = 0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_top = -4.0
+offset_top = -4.0
[node name="FileBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"]
-margin_top = 44.0
-margin_right = 169.0
-margin_bottom = 44.0
+layout_mode = 2
[node name="RandomFileLabel" type="Label" parent="Background/Brushes/Categories"]
-margin_top = 48.0
-margin_right = 169.0
-margin_bottom = 62.0
+layout_mode = 2
text = "Random File Brushes"
-autowrap = true
[node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/RandomFileLabel"]
+layout_mode = 0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_top = -4.0
+offset_top = -4.0
[node name="RandomFileBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"]
-margin_top = 66.0
-margin_right = 169.0
-margin_bottom = 66.0
+layout_mode = 2
diff --git a/src/UI/Buttons/PatternButton.tscn b/src/UI/Buttons/PatternButton.tscn
index 6825b656bd0..5b3550209fd 100644
--- a/src/UI/Buttons/PatternButton.tscn
+++ b/src/UI/Buttons/PatternButton.tscn
@@ -21,21 +21,21 @@ corner_radius_bottom_left = 5
anti_aliasing = false
[node name="PatternButton" type="Button"]
-margin_right = 32.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-custom_styles/hover = SubResource( 2 )
-custom_styles/pressed = SubResource( 2 )
-custom_styles/focus = SubResource( 1 )
-custom_styles/disabled = SubResource( 1 )
-custom_styles/normal = SubResource( 2 )
+offset_right = 32.0
+offset_bottom = 32.0
+custom_minimum_size = Vector2( 32, 32 )
+theme_override_styles/hover = SubResource( 2 )
+theme_override_styles/pressed = SubResource( 2 )
+theme_override_styles/focus = SubResource( 1 )
+theme_override_styles/disabled = SubResource( 1 )
+theme_override_styles/normal = SubResource( 2 )
button_mask = 7
script = ExtResource( 2 )
[node name="PatternTexture" type="TextureRect" parent="."]
-margin_right = 32.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
+offset_right = 32.0
+offset_bottom = 32.0
+custom_minimum_size = Vector2( 32, 32 )
expand = true
stretch_mode = 6
__meta__ = {
diff --git a/src/UI/Buttons/PatternsPopup.gd b/src/UI/Buttons/PatternsPopup.gd
index 6b5f366be9d..51f59612d43 100644
--- a/src/UI/Buttons/PatternsPopup.gd
+++ b/src/UI/Buttons/PatternsPopup.gd
@@ -16,15 +16,15 @@ func _ready() -> void:
func select_pattern(pattern: Pattern) -> void:
- emit_signal("pattern_selected", pattern)
+ pattern_selected.emit(pattern)
hide()
func create_button(image: Image) -> Node:
- var button: BaseButton = preload("res://src/UI/Buttons/PatternButton.tscn").instance()
- var tex := ImageTexture.new()
+ var button: BaseButton = preload("res://src/UI/Buttons/PatternButton.tscn").instantiate()
+ var tex: ImageTexture
if !image.is_empty():
- tex.create_from_image(image, 0)
+ tex = ImageTexture.create_from_image(image)
button.get_child(0).texture = tex
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
return button
@@ -33,7 +33,7 @@ func create_button(image: Image) -> Node:
func add(image: Image, hint := "") -> void:
var button = create_button(image)
button.pattern.image = image
- button.hint_tooltip = hint
+ button.tooltip_text = hint
var container = get_node("ScrollContainer/PatternContainer")
container.add_child(button)
button.pattern.index = button.get_index()
diff --git a/src/UI/Buttons/PatternsPopup.tscn b/src/UI/Buttons/PatternsPopup.tscn
index 7bde3f996e8..b229a3a061c 100644
--- a/src/UI/Buttons/PatternsPopup.tscn
+++ b/src/UI/Buttons/PatternsPopup.tscn
@@ -1,25 +1,22 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://d1jyt8wleg8ft"]
-[ext_resource path="res://src/UI/Buttons/PatternsPopup.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Buttons/PatternsPopup.gd" id="1"]
[node name="PatternsPopup" type="PopupPanel"]
-margin_right = 226.0
-margin_bottom = 104.0
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+canvas_item_default_texture_filter = 0
+script = ExtResource("1")
[node name="ScrollContainer" type="ScrollContainer" parent="."]
+custom_minimum_size = Vector2(0, 36)
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 4.0
-margin_top = 4.0
-margin_right = -4.0
-margin_bottom = -4.0
-rect_min_size = Vector2( 0, 36 )
+offset_left = 4.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = -4.0
size_flags_horizontal = 3
-scroll_horizontal_enabled = false
[node name="PatternContainer" type="GridContainer" parent="ScrollContainer"]
+layout_mode = 2
columns = 6
diff --git a/src/UI/Canvas/CameraMovement.gd b/src/UI/Canvas/CameraMovement.gd
index eb4f4224d95..04794ca2d47 100644
--- a/src/UI/Canvas/CameraMovement.gd
+++ b/src/UI/Canvas/CameraMovement.gd
@@ -7,11 +7,11 @@ enum Cameras { MAIN, SECOND, SMALL }
const CAMERA_SPEED_RATE := 15.0
-export(Cameras) var index := 0
+@export var index := 0
-var zoom_min := Vector2(0.005, 0.005)
-var zoom_max := Vector2.ONE
-var viewport_container: ViewportContainer
+var zoom_in_max := Vector2(500, 500)
+var zoom_out_max := Vector2(0.01, 0.01)
+var viewport_container: SubViewportContainer
var transparent_checker: ColorRect
var mouse_pos := Vector2.ZERO
var drag := false
@@ -24,46 +24,40 @@ func _ready() -> void:
set_process_input(false)
if index == Cameras.MAIN:
rotation_slider = Global.top_menu_container.get_node("%RotationSlider")
- rotation_slider.connect("value_changed", self, "_rotation_value_changed")
+ rotation_slider.value_changed.connect(_rotation_value_changed)
zoom_slider = Global.top_menu_container.get_node("%ZoomSlider")
- zoom_slider.connect("value_changed", self, "_zoom_value_changed")
- set_zoom_max_value()
- connect("zoom_changed", self, "_zoom_changed")
- connect("rotation_changed", self, "_rotation_changed")
- rotating = true
+ zoom_slider.value_changed.connect(_zoom_value_changed)
+ zoom_changed.connect(_zoom_changed)
+ rotation_changed.connect(_rotation_changed)
+ ignore_rotation = false
viewport_container = get_parent().get_parent()
transparent_checker = get_parent().get_node("TransparentChecker")
update_transparent_checker_offset()
-func set_zoom_max_value() -> void:
- zoom_slider.max_value = 100.0 / zoom_min.x
-
-
func _rotation_value_changed(value: float) -> void:
# Negative makes going up rotate clockwise
var degrees := -value
var difference := degrees - rotation_degrees
var canvas_center: Vector2 = Global.current_project.size / 2
- offset = (offset - canvas_center).rotated(deg2rad(difference)) + canvas_center
+ offset = (offset - canvas_center).rotated(deg_to_rad(difference)) + canvas_center
rotation_degrees = wrapf(degrees, -180, 180)
- emit_signal("rotation_changed")
+ rotation_changed.emit()
func _zoom_value_changed(value: float) -> void:
if value <= 0:
value = 1
- var percent := 100.0 / value
- var new_zoom := Vector2(percent, percent)
+ var new_zoom := Vector2(value, value) / 100.0
if zoom == new_zoom:
return
if Global.smooth_zoom and should_tween:
var tween := create_tween().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_IN)
- tween.connect("step_finished", self, "_on_tween_step")
+ tween.step_finished.connect(_on_tween_step)
tween.tween_property(self, "zoom", new_zoom, 0.05)
else:
zoom = new_zoom
- emit_signal("zoom_changed")
+ zoom_changed.emit()
func update_transparent_checker_offset() -> void:
@@ -83,9 +77,9 @@ func _input(event: InputEvent) -> void:
elif event.is_action_released("pan"):
drag = false
elif event.is_action_pressed("zoom_in", false, true): # Wheel Up Event
- zoom_camera(-1)
- elif event.is_action_pressed("zoom_out", false, true): # Wheel Down Event
zoom_camera(1)
+ elif event.is_action_pressed("zoom_out", false, true): # Wheel Down Event
+ zoom_camera(-1)
elif event is InputEventMagnifyGesture: # Zoom Gesture on a laptop touchpad
if event.factor < 1:
@@ -94,16 +88,16 @@ func _input(event: InputEvent) -> void:
zoom_camera(-1)
elif event is InputEventPanGesture and OS.get_name() != "Android":
# Pan Gesture on a laptop touchpad
- offset = offset + event.delta.rotated(rotation) * zoom * 7
+ offset = offset + event.delta.rotated(rotation) * 7.0 / zoom
elif event is InputEventMouseMotion:
if drag:
- offset = offset - event.relative.rotated(rotation) * zoom
+ offset = offset - event.relative.rotated(rotation) / zoom
update_transparent_checker_offset()
_update_rulers()
else:
var velocity := Input.get_vector("camera_left", "camera_right", "camera_up", "camera_down")
if velocity != Vector2.ZERO and !_has_selection_tool():
- offset += velocity.rotated(rotation) * zoom * CAMERA_SPEED_RATE
+ offset += (velocity.rotated(rotation) / zoom) * CAMERA_SPEED_RATE
_update_rulers()
save_values_to_project()
@@ -118,9 +112,9 @@ func _has_selection_tool() -> bool:
# Rotate Camera
func _rotate_camera_around_point(degrees: float, point: Vector2) -> void:
- offset = (offset - point).rotated(deg2rad(degrees)) + point
+ offset = (offset - point).rotated(deg_to_rad(degrees)) + point
rotation_degrees = wrapf(rotation_degrees + degrees, -180, 180)
- emit_signal("rotation_changed")
+ rotation_changed.emit()
func _rotation_changed() -> void:
@@ -131,68 +125,69 @@ func _rotation_changed() -> void:
_update_rulers()
-# Zoom Camera
func zoom_camera(dir: int) -> void:
- var viewport_size := viewport_container.rect_size
+ var viewport_size := viewport_container.size
if Global.smooth_zoom:
var zoom_margin := zoom * dir / 5
var new_zoom := zoom + zoom_margin
if Global.integer_zoom:
- new_zoom = zoom / (Vector2.ONE - dir * zoom)
- if new_zoom == Vector2.INF:
- return
- if new_zoom > zoom_min && new_zoom <= zoom_max:
+ new_zoom = (zoom + Vector2.ONE * dir).floor()
+ if new_zoom < zoom_in_max && new_zoom > zoom_out_max:
var new_offset := (
offset
- + (-0.5 * viewport_size + mouse_pos).rotated(rotation) * (zoom - new_zoom)
+ + (
+ (-0.5 * viewport_size + mouse_pos).rotated(rotation)
+ * (Vector2.ONE / zoom - Vector2.ONE / new_zoom)
+ )
)
var tween := create_tween().set_parallel()
tween.set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_IN)
- tween.connect("step_finished", self, "_on_tween_step")
+ tween.step_finished.connect(_on_tween_step)
tween.tween_property(self, "zoom", new_zoom, 0.05)
tween.tween_property(self, "offset", new_offset, 0.05)
else:
var prev_zoom := zoom
var zoom_margin := zoom * dir / 10
if Global.integer_zoom:
- zoom_margin = (zoom / (Vector2.ONE - dir * zoom)) - zoom
- if zoom_margin == Vector2.INF:
- return
- if zoom + zoom_margin > zoom_min:
+ zoom_margin = (Vector2.ONE * dir).floor()
+ if zoom + zoom_margin < zoom_in_max:
zoom += zoom_margin
- if zoom > zoom_max:
- zoom = zoom_max
- offset = offset + (-0.5 * viewport_size + mouse_pos).rotated(rotation) * (prev_zoom - zoom)
- emit_signal("zoom_changed")
+ if zoom < zoom_out_max:
+ zoom = zoom_out_max
+ offset = (
+ offset
+ + (
+ (-0.5 * viewport_size + mouse_pos).rotated(rotation)
+ * (Vector2.ONE / prev_zoom - Vector2.ONE / zoom)
+ )
+ )
+ zoom_changed.emit()
func _zoom_changed() -> void:
update_transparent_checker_offset()
if index == Cameras.MAIN:
- zoom_slider.value = round(100 / zoom.x)
+ zoom_slider.value = zoom.x * 100.0
_update_rulers()
for guide in Global.current_project.guides:
- guide.width = zoom.x * 2
-
- elif index == Cameras.SMALL:
- Global.preview_zoom_slider.value = -zoom.x
+ guide.width = 1.0 / zoom.x * 2
func _update_rulers() -> void:
- Global.horizontal_ruler.update()
- Global.vertical_ruler.update()
+ Global.horizontal_ruler.queue_redraw()
+ Global.vertical_ruler.queue_redraw()
func _on_tween_step(_idx: int) -> void:
should_tween = false
- emit_signal("zoom_changed")
+ zoom_changed.emit()
should_tween = true
func zoom_100() -> void:
zoom = Vector2.ONE
offset = Global.current_project.size / 2
- emit_signal("zoom_changed")
+ zoom_changed.emit()
func fit_to_frame(size: Vector2) -> void:
@@ -211,29 +206,29 @@ func fit_to_frame(size: Vector2) -> void:
var d := Vector2(size.x, size.y).rotated(rotation) # Bottom right
# Find how far apart each opposite point is on each axis, and take the longer one
- size.x = max(abs(a.x - d.x), abs(b.x - c.x))
- size.y = max(abs(a.y - d.y), abs(b.y - c.y))
+ size.x = maxf(absf(a.x - d.x), absf(b.x - c.x))
+ size.y = maxf(absf(a.y - d.y), absf(b.y - c.y))
viewport_container = get_parent().get_parent()
- var h_ratio := viewport_container.rect_size.x / size.x
- var v_ratio := viewport_container.rect_size.y / size.y
- var ratio := min(h_ratio, v_ratio)
+ var h_ratio := viewport_container.size.x / size.x
+ var v_ratio := viewport_container.size.y / size.y
+ var ratio := minf(h_ratio, v_ratio)
if ratio == 0 or !viewport_container.visible:
ratio = 0.1 # Set it to a non-zero value just in case
# If the ratio is 0, it means that the viewport container is hidden
# in that case, use the other viewport to get the ratio
if index == Cameras.MAIN:
- h_ratio = Global.second_viewport.rect_size.x / size.x
- v_ratio = Global.second_viewport.rect_size.y / size.y
- ratio = min(h_ratio, v_ratio)
+ h_ratio = Global.second_viewport.size.x / size.x
+ v_ratio = Global.second_viewport.size.y / size.y
+ ratio = minf(h_ratio, v_ratio)
elif index == Cameras.SECOND:
- h_ratio = Global.main_viewport.rect_size.x / size.x
- v_ratio = Global.main_viewport.rect_size.y / size.y
- ratio = min(h_ratio, v_ratio)
+ h_ratio = Global.main_viewport.size.x / size.x
+ v_ratio = Global.main_viewport.size.y / size.y
+ ratio = minf(h_ratio, v_ratio)
- ratio = clamp(ratio, 0.1, ratio)
- zoom = Vector2(1 / ratio, 1 / ratio)
- emit_signal("zoom_changed")
+ ratio = clampf(ratio, 0.1, ratio)
+ zoom = Vector2(ratio, ratio)
+ zoom_changed.emit()
if reset_integer_zoom:
Global.integer_zoom = !Global.integer_zoom
@@ -242,4 +237,3 @@ func save_values_to_project() -> void:
Global.current_project.cameras_rotation[index] = rotation
Global.current_project.cameras_zoom[index] = zoom
Global.current_project.cameras_offset[index] = offset
- Global.current_project.cameras_zoom_max[index] = zoom_max
diff --git a/src/UI/Canvas/Canvas.gd b/src/UI/Canvas/Canvas.gd
index 3abc210f5cf..207fd3cd0cd 100644
--- a/src/UI/Canvas/Canvas.gd
+++ b/src/UI/Canvas/Canvas.gd
@@ -5,35 +5,38 @@ const MOVE_ACTIONS := ["move_mouse_left", "move_mouse_right", "move_mouse_up", "
const CURSOR_SPEED_RATE := 6.0
var current_pixel := Vector2.ZERO
-var sprite_changed_this_frame := false # For optimization purposes
+var sprite_changed_this_frame := false ## For optimization purposes
var move_preview_location := Vector2.ZERO
-onready var currently_visible_frame: Viewport = $CurrentlyVisibleFrame
-onready var current_frame_drawer = $CurrentlyVisibleFrame/CurrentFrameDrawer
-onready var tile_mode = $TileMode
-onready var pixel_grid = $PixelGrid
-onready var grid = $Grid
-onready var selection = $Selection
-onready var onion_past := $OnionPast as Node2D
-onready var onion_future := $OnionFuture as Node2D
-onready var crop_rect := $CropRect as CropRect
-onready var indicators = $Indicators
-onready var previews = $Previews
-onready var mouse_guide_container = $MouseGuideContainer
-onready var gizmos_3d: Node2D = $Gizmos3D
+@onready var currently_visible_frame := $CurrentlyVisibleFrame as SubViewport
+@onready var current_frame_drawer := $CurrentlyVisibleFrame/CurrentFrameDrawer as Node2D
+@onready var tile_mode := $TileMode as Node2D
+@onready var pixel_grid := $PixelGrid as Node2D
+@onready var grid := $Grid as Node2D
+@onready var selection := $Selection as Node2D
+@onready var onion_past := $OnionPast as Node2D
+@onready var onion_future := $OnionFuture as Node2D
+@onready var crop_rect := $CropRect as CropRect
+@onready var indicators := $Indicators as Node2D
+@onready var previews := $Previews as Node2D
+@onready var mouse_guide_container := $MouseGuideContainer as Node2D
+@onready var gizmos_3d := $Gizmos3D as Node2D
func _ready() -> void:
+ Global.project_changed.connect(queue_redraw)
onion_past.type = onion_past.PAST
onion_past.blue_red_color = Global.onion_skinning_past_color
onion_future.type = onion_future.FUTURE
onion_future.blue_red_color = Global.onion_skinning_future_color
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
camera_zoom()
func _draw() -> void:
- var current_cels: Array = Global.current_project.frames[Global.current_project.current_frame].cels
+ var current_cels: Array = (
+ Global.current_project.frames[Global.current_project.current_frame].cels
+ )
var position_tmp := position
var scale_tmp := scale
if Global.mirror_view:
@@ -60,9 +63,9 @@ func _draw() -> void:
if Global.onion_skinning:
refresh_onion()
currently_visible_frame.size = Global.current_project.size
- current_frame_drawer.update()
+ current_frame_drawer.queue_redraw()
if Global.current_project.tiles.mode != Tiles.MODE.NONE:
- tile_mode.update()
+ tile_mode.queue_redraw()
draw_set_transform(position, rotation, scale)
@@ -94,38 +97,25 @@ func _input(event: InputEvent) -> void:
current_pixel = tmp_transform.basis_xform(tmp_position) + tmp_transform.origin
if Global.has_focus:
- update()
+ queue_redraw()
sprite_changed_this_frame = false
- Tools.handle_draw(current_pixel.floor(), event)
+ Tools.handle_draw(Vector2i(current_pixel.floor()), event)
if sprite_changed_this_frame:
update_selected_cels_textures()
func camera_zoom() -> void:
- # Set camera zoom based on the sprite size
- var bigger_canvas_axis = max(Global.current_project.size.x, Global.current_project.size.y)
- var zoom_max := Vector2(bigger_canvas_axis, bigger_canvas_axis) * 0.01
-
for camera in Global.cameras:
- if zoom_max > Vector2.ONE:
- camera.zoom_max = zoom_max
- else:
- camera.zoom_max = Vector2.ONE
-
- if camera == Global.camera_preview:
- Global.preview_zoom_slider.max_value = -camera.zoom_min.x
- Global.preview_zoom_slider.min_value = -camera.zoom_max.x
-
camera.fit_to_frame(Global.current_project.size)
camera.save_values_to_project()
Global.transparent_checker.update_rect()
-func update_texture(layer_i: int, frame_i := -1, project: Project = Global.current_project) -> void:
+func update_texture(layer_i: int, frame_i := -1, project := Global.current_project) -> void:
if frame_i == -1:
frame_i = project.current_frame
@@ -134,7 +124,7 @@ func update_texture(layer_i: int, frame_i := -1, project: Project = Global.curre
current_cel.update_texture()
-func update_selected_cels_textures(project: Project = Global.current_project) -> void:
+func update_selected_cels_textures(project := Global.current_project) -> void:
for cel_index in project.selected_cels:
var frame_index: int = cel_index[0]
var layer_index: int = cel_index[1]
@@ -144,5 +134,5 @@ func update_selected_cels_textures(project: Project = Global.current_project) ->
func refresh_onion() -> void:
- onion_past.update()
- onion_future.update()
+ onion_past.queue_redraw()
+ onion_future.queue_redraw()
diff --git a/src/UI/Canvas/Canvas.tscn b/src/UI/Canvas/Canvas.tscn
index 1fff4a42489..b3b08229c74 100644
--- a/src/UI/Canvas/Canvas.tscn
+++ b/src/UI/Canvas/Canvas.tscn
@@ -1,86 +1,83 @@
-[gd_scene load_steps=18 format=2]
-
-[ext_resource path="res://src/UI/Canvas/Canvas.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Canvas/Grid.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Canvas/Indicators.gd" type="Script" id=3]
-[ext_resource path="res://src/UI/Canvas/TileMode.gd" type="Script" id=4]
-[ext_resource path="res://src/UI/Canvas/CurrentFrameDrawer.gd" type="Script" id=5]
-[ext_resource path="res://src/UI/Canvas/PixelGrid.gd" type="Script" id=6]
-[ext_resource path="res://src/UI/Canvas/Previews.gd" type="Script" id=7]
-[ext_resource path="res://src/UI/Canvas/Selection.gd" type="Script" id=8]
-[ext_resource path="res://src/Shaders/MarchingAntsOutline.shader" type="Shader" id=9]
-[ext_resource path="res://src/Shaders/AutoInvertColors.shader" type="Shader" id=10]
-[ext_resource path="res://src/UI/Canvas/MouseGuideContainer.tscn" type="PackedScene" id=11]
-[ext_resource path="res://src/UI/Canvas/OnionSkinning.gd" type="Script" id=12]
-[ext_resource path="res://src/UI/Canvas/CropRect.gd" type="Script" id=13]
-[ext_resource path="res://src/UI/Canvas/Gizmos3D.gd" type="Script" id=14]
-
-[sub_resource type="CanvasItemMaterial" id=1]
+[gd_scene load_steps=18 format=3 uid="uid://ba24iuv55m4l3"]
+
+[ext_resource type="Script" path="res://src/UI/Canvas/Canvas.gd" id="1"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Grid.gd" id="2"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Indicators.gd" id="3"]
+[ext_resource type="Script" path="res://src/UI/Canvas/TileMode.gd" id="4"]
+[ext_resource type="Script" path="res://src/UI/Canvas/CurrentFrameDrawer.gd" id="5"]
+[ext_resource type="Script" path="res://src/UI/Canvas/PixelGrid.gd" id="6"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Previews.gd" id="7"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Selection.gd" id="8"]
+[ext_resource type="Shader" path="res://src/Shaders/MarchingAntsOutline.gdshader" id="9"]
+[ext_resource type="Shader" path="res://src/Shaders/AutoInvertColors.gdshader" id="10"]
+[ext_resource type="PackedScene" uid="uid://no3w7e2264u4" path="res://src/UI/Canvas/MouseGuideContainer.tscn" id="11"]
+[ext_resource type="Script" path="res://src/UI/Canvas/OnionSkinning.gd" id="12"]
+[ext_resource type="Script" path="res://src/UI/Canvas/CropRect.gd" id="13"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Gizmos3D.gd" id="14"]
+
+[sub_resource type="CanvasItemMaterial" id="1"]
blend_mode = 4
-[sub_resource type="ShaderMaterial" id=2]
-shader = ExtResource( 9 )
-shader_param/first_color = Color( 1, 1, 1, 1 )
-shader_param/second_color = Color( 0, 0, 0, 1 )
-shader_param/animated = true
-shader_param/width = 0.05
-shader_param/frequency = 200.0
-shader_param/stripe_direction = 0.5
+[sub_resource type="ShaderMaterial" id="2"]
+shader = ExtResource("9")
+shader_parameter/first_color = Color(1, 1, 1, 1)
+shader_parameter/second_color = Color(0, 0, 0, 1)
+shader_parameter/animated = true
+shader_parameter/width = 0.05
+shader_parameter/frequency = 200.0
+shader_parameter/stripe_direction = 0.5
-[sub_resource type="ShaderMaterial" id=3]
-shader = ExtResource( 10 )
+[sub_resource type="ShaderMaterial" id="3"]
+shader = ExtResource("10")
[node name="Canvas" type="Node2D"]
-script = ExtResource( 1 )
+script = ExtResource("1")
-[node name="CurrentlyVisibleFrame" type="Viewport" parent="."]
+[node name="CurrentlyVisibleFrame" type="SubViewport" parent="."]
+disable_3d = true
transparent_bg = true
handle_input_locally = false
-hdr = false
-disable_3d = true
-usage = 0
-render_target_v_flip = true
render_target_update_mode = 3
[node name="CurrentFrameDrawer" type="Node2D" parent="CurrentlyVisibleFrame"]
-script = ExtResource( 5 )
+script = ExtResource("5")
[node name="TileMode" type="Node2D" parent="."]
show_behind_parent = true
-material = SubResource( 1 )
-script = ExtResource( 4 )
+material = SubResource("1")
+script = ExtResource("4")
[node name="PixelGrid" type="Node2D" parent="."]
-script = ExtResource( 6 )
+script = ExtResource("6")
[node name="Grid" type="Node2D" parent="."]
-script = ExtResource( 2 )
+script = ExtResource("2")
[node name="Selection" type="Node2D" parent="."]
-script = ExtResource( 8 )
+script = ExtResource("8")
-[node name="MarchingAntsOutline" type="Sprite" parent="Selection"]
-material = SubResource( 2 )
+[node name="MarchingAntsOutline" type="Sprite2D" parent="Selection"]
+material = SubResource("2")
centered = false
[node name="CropRect" type="Node2D" parent="."]
visible = false
-script = ExtResource( 13 )
+script = ExtResource("13")
[node name="Indicators" type="Node2D" parent="."]
-script = ExtResource( 3 )
+script = ExtResource("3")
[node name="Previews" type="Node2D" parent="."]
-material = SubResource( 3 )
-script = ExtResource( 7 )
+material = SubResource("3")
+script = ExtResource("7")
[node name="OnionPast" type="Node2D" parent="."]
-script = ExtResource( 12 )
+script = ExtResource("12")
[node name="OnionFuture" type="Node2D" parent="."]
-script = ExtResource( 12 )
+script = ExtResource("12")
-[node name="MouseGuideContainer" parent="." instance=ExtResource( 11 )]
+[node name="MouseGuideContainer" parent="." instance=ExtResource("11")]
[node name="Gizmos3D" type="Node2D" parent="."]
-script = ExtResource( 14 )
+script = ExtResource("14")
diff --git a/src/UI/Canvas/CanvasPreview.gd b/src/UI/Canvas/CanvasPreview.gd
index dae97fc07a1..784d7d3e2d2 100644
--- a/src/UI/Canvas/CanvasPreview.gd
+++ b/src/UI/Canvas/CanvasPreview.gd
@@ -10,30 +10,30 @@ var end_sprite_sheet_frame := 1
var sprite_frames := []
var frame_index := 0
-onready var animation_timer := $AnimationTimer as Timer
-onready var transparent_checker = get_parent().get_node("TransparentChecker") as ColorRect
+@onready var animation_timer := $AnimationTimer as Timer
+@onready var transparent_checker = get_parent().get_node("TransparentChecker") as ColorRect
func _ready() -> void:
- Global.connect("cel_changed", self, "_cel_changed")
+ Global.cel_changed.connect(_cel_changed)
func _draw() -> void:
- var current_project: Project = Global.current_project
+ var current_project := Global.current_project
match mode:
Mode.TIMELINE:
- var modulate_color := Color.white
+ var modulate_color := Color.WHITE
if frame_index >= current_project.frames.size():
frame_index = current_project.current_frame
if animation_timer.is_stopped():
frame_index = current_project.current_frame
- var frame: Frame = current_project.frames[frame_index]
+ var frame := current_project.frames[frame_index]
animation_timer.wait_time = frame.duration * (1.0 / current_project.fps)
- var current_cels: Array = frame.cels
+ var current_cels := frame.cels
# Draw current frame layers
for i in range(current_cels.size()):
- var cel: BaseCel = current_cels[i]
+ var cel := current_cels[i]
if cel is GroupCel:
continue
modulate_color = Color(1, 1, 1, cel.opacity)
@@ -45,8 +45,7 @@ func _draw() -> void:
Mode.SPRITESHEET:
var texture_to_draw: ImageTexture
var target_frame: Frame = current_project.frames[current_project.current_frame]
- var frame_image := Image.new()
- frame_image.create(
+ var frame_image := Image.create(
current_project.size.x, current_project.size.y, false, Image.FORMAT_RGBA8
)
Export.blend_all_layers(frame_image, target_frame)
@@ -63,16 +62,16 @@ func _draw() -> void:
texture_to_draw = sprite_frames[frame_index]
draw_texture(texture_to_draw, Vector2.ZERO)
- var rect := Rect2(Vector2.ZERO, texture_to_draw.get_data().get_size())
+ var rect := Rect2(Vector2.ZERO, texture_to_draw.get_image().get_size())
transparent_checker.fit_rect(rect)
func _on_AnimationTimer_timeout() -> void:
match mode:
Mode.TIMELINE:
- var current_project: Project = Global.current_project
+ var current_project := Global.current_project
var first_frame := 0
- var last_frame: int = current_project.frames.size() - 1
+ var last_frame := current_project.frames.size() - 1
if Global.play_only_tags:
for tag in current_project.animation_tags:
@@ -89,8 +88,7 @@ func _on_AnimationTimer_timeout() -> void:
frame_index = first_frame
animation_timer.wait_time = (
- current_project.frames[frame_index].duration
- * (1.0 / current_project.fps)
+ current_project.frames[frame_index].duration * (1.0 / current_project.fps)
)
Mode.SPRITESHEET:
@@ -98,26 +96,25 @@ func _on_AnimationTimer_timeout() -> void:
animation_timer.wait_time = (1.0 / Global.current_project.fps)
animation_timer.set_one_shot(true)
animation_timer.start()
- update()
+ queue_redraw()
func _cel_changed() -> void:
- update()
+ queue_redraw()
func _split_spritesheet(image: Image, horiz: int, vert: int) -> Array:
var result := []
- horiz = min(horiz, image.get_size().x)
- vert = min(vert, image.get_size().y)
+ horiz = mini(horiz, image.get_size().x)
+ vert = mini(vert, image.get_size().y)
var frame_width := image.get_size().x / horiz
var frame_height := image.get_size().y / vert
for yy in range(vert):
for xx in range(horiz):
- var tex := ImageTexture.new()
var cropped_image := Image.new()
var rect := Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height)
- cropped_image = image.get_rect(rect)
+ cropped_image = image.get_region(rect)
cropped_image.convert(Image.FORMAT_RGBA8)
- tex.create_from_image(cropped_image, 0)
+ var tex := ImageTexture.create_from_image(cropped_image)
result.append(tex)
return result
diff --git a/src/UI/Canvas/CanvasPreview.tscn b/src/UI/Canvas/CanvasPreview.tscn
index 04a302e2c77..f9be17c5a89 100644
--- a/src/UI/Canvas/CanvasPreview.tscn
+++ b/src/UI/Canvas/CanvasPreview.tscn
@@ -1,9 +1,9 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://c546tskdu53j1"]
-[ext_resource path="res://src/UI/Canvas/CanvasPreview.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Canvas/CanvasPreview.gd" id="1"]
[node name="CanvasPreview" type="Node2D"]
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="AnimationTimer" type="Timer" parent="."]
diff --git a/src/UI/Canvas/CropRect.gd b/src/UI/Canvas/CropRect.gd
index ef8954b2255..bc104100d81 100644
--- a/src/UI/Canvas/CropRect.gd
+++ b/src/UI/Canvas/CropRect.gd
@@ -1,27 +1,34 @@
class_name CropRect
extends Node2D
-# Draws the rectangle overlay for the crop tool
-# Stores the shared settings between left and right crop tools
+## Draws the rectangle overlay for the crop tool
+## Stores the shared settings between left and right crop tools
signal updated
enum Mode { MARGINS, POSITION_SIZE }
-const BIG = 100000 # Size of big rectangles used to darken background.
-const DARKEN_COLOR = Color(0, 0, 0, 0.5)
-const LINE_COLOR = Color.white
+const BIG := 100000 ## Size of big rectangles used to darken background.
+const DARKEN_COLOR := Color(0, 0, 0, 0.5)
+const LINE_COLOR := Color.WHITE
-var mode: int = Mode.MARGINS setget _set_mode
+var mode := Mode.MARGINS:
+ set(value):
+ mode = value
var locked_size := false
-var rect := Rect2(0, 0, 1, 1)
+var rect := Rect2i(0, 0, 1, 1)
-# How many crop tools are active (0-2), setter makes this visible if not 0
-var tool_count := 0 setget _set_tool_count
+## How many crop tools are active (0-2), setter makes this visible if not 0
+var tool_count := 0:
+ set(value):
+ if tool_count == 0 and value > 0:
+ reset() # Reset once 1 tool becomes the crop tool
+ tool_count = value
+ visible = tool_count
func _ready() -> void:
- connect("updated", self, "update")
- Global.connect("project_changed", self, "reset")
+ updated.connect(queue_redraw)
+ Global.project_changed.connect(reset)
mode = Global.config_cache.get_value("preferences", "crop_mode", 0)
locked_size = Global.config_cache.get_value("preferences", "crop_locked_size", false)
reset()
@@ -65,18 +72,4 @@ func apply() -> void:
func reset() -> void:
rect.position = Vector2.ZERO
rect.size = Global.current_project.size
- emit_signal("updated")
-
-
-# Setters
-
-
-func _set_mode(value: int) -> void:
- mode = value
-
-
-func _set_tool_count(value: int) -> void:
- if tool_count == 0 and value > 0:
- reset() # Reset once 1 tool becomes the crop tool
- tool_count = value
- visible = tool_count
+ updated.emit()
diff --git a/src/UI/Canvas/CurrentFrameDrawer.gd b/src/UI/Canvas/CurrentFrameDrawer.gd
index 5714f99640d..abb3d839f5d 100644
--- a/src/UI/Canvas/CurrentFrameDrawer.gd
+++ b/src/UI/Canvas/CurrentFrameDrawer.gd
@@ -2,7 +2,9 @@ extends Node2D
func _draw() -> void:
- var current_cels: Array = Global.current_project.frames[Global.current_project.current_frame].cels
+ var current_cels: Array = (
+ Global.current_project.frames[Global.current_project.current_frame].cels
+ )
for i in range(Global.current_project.layers.size()):
if current_cels[i] is GroupCel:
continue
diff --git a/src/UI/Canvas/Gizmos3D.gd b/src/UI/Canvas/Gizmos3D.gd
index 0d312ec3078..c04b8daa3ba 100644
--- a/src/UI/Canvas/Gizmos3D.gd
+++ b/src/UI/Canvas/Gizmos3D.gd
@@ -9,10 +9,10 @@ const SCALE_CIRCLE_LENGTH := 8
const SCALE_CIRCLE_RADIUS := 1
const CHAR_SCALE := 0.16
-var always_visible := {} # Key = Cel3DObject, Value = Texture
-var points_per_object := {} # Key = Cel3DObject, Value = PoolVector2Array
-var selected_color := Color.white
-var hovered_color := Color.gray
+var always_visible := {} ## Key = Cel3DObject, Value = Texture2D
+var points_per_object := {} ## Key = Cel3DObject, Value = PackedVector2Array
+var selected_color := Color.WHITE
+var hovered_color := Color.GRAY
var gizmos_origin: Vector2
var proj_right_local: Vector2
@@ -22,53 +22,53 @@ var proj_back_local: Vector2
var proj_right_local_scale: Vector2
var proj_up_local_scale: Vector2
var proj_back_local_scale: Vector2
-var gizmo_pos_x := PoolVector2Array()
-var gizmo_pos_y := PoolVector2Array()
-var gizmo_pos_z := PoolVector2Array()
-var gizmo_rot_x := PoolVector2Array()
-var gizmo_rot_y := PoolVector2Array()
-var gizmo_rot_z := PoolVector2Array()
+var gizmo_pos_x := PackedVector2Array()
+var gizmo_pos_y := PackedVector2Array()
+var gizmo_pos_z := PackedVector2Array()
+var gizmo_rot_x := PackedVector2Array()
+var gizmo_rot_y := PackedVector2Array()
+var gizmo_rot_z := PackedVector2Array()
func _ready() -> void:
set_process_input(false)
- Global.connect("cel_changed", self, "_cel_changed")
- Global.camera.connect("zoom_changed", self, "update")
+ Global.cel_changed.connect(_cel_changed)
+ Global.camera.zoom_changed.connect(queue_redraw)
func get_hovering_gizmo(pos: Vector2) -> int:
- var draw_scale := Global.camera.zoom * 10
+ var draw_scale := Vector2(10.0, 10.0) / Global.camera.zoom
pos -= gizmos_origin
# Scale the position based on the zoom, has the same effect as enlarging the shapes
pos /= draw_scale
# Inflate the rotation polylines by one to make them easier to click
- var rot_x_offset: PoolVector2Array = Geometry.offset_polyline_2d(gizmo_rot_x, 1)[0]
- var rot_y_offset: PoolVector2Array = Geometry.offset_polyline_2d(gizmo_rot_y, 1)[0]
- var rot_z_offset: PoolVector2Array = Geometry.offset_polyline_2d(gizmo_rot_z, 1)[0]
+ var rot_x_offset := Geometry2D.offset_polyline(gizmo_rot_x, 1)[0]
+ var rot_y_offset := Geometry2D.offset_polyline(gizmo_rot_y, 1)[0]
+ var rot_z_offset := Geometry2D.offset_polyline(gizmo_rot_z, 1)[0]
- if Geometry.point_is_inside_triangle(pos, gizmo_pos_x[0], gizmo_pos_x[1], gizmo_pos_x[2]):
+ if Geometry2D.point_is_inside_triangle(pos, gizmo_pos_x[0], gizmo_pos_x[1], gizmo_pos_x[2]):
return Cel3DObject.Gizmos.X_POS
- elif Geometry.point_is_inside_triangle(pos, gizmo_pos_y[0], gizmo_pos_y[1], gizmo_pos_y[2]):
+ elif Geometry2D.point_is_inside_triangle(pos, gizmo_pos_y[0], gizmo_pos_y[1], gizmo_pos_y[2]):
return Cel3DObject.Gizmos.Y_POS
- elif Geometry.point_is_inside_triangle(pos, gizmo_pos_z[0], gizmo_pos_z[1], gizmo_pos_z[2]):
+ elif Geometry2D.point_is_inside_triangle(pos, gizmo_pos_z[0], gizmo_pos_z[1], gizmo_pos_z[2]):
return Cel3DObject.Gizmos.Z_POS
- elif Geometry.is_point_in_circle(pos, proj_right_local_scale, SCALE_CIRCLE_RADIUS):
+ elif Geometry2D.is_point_in_circle(pos, proj_right_local_scale, SCALE_CIRCLE_RADIUS):
return Cel3DObject.Gizmos.X_SCALE
- elif Geometry.is_point_in_circle(pos, proj_up_local_scale, SCALE_CIRCLE_RADIUS):
+ elif Geometry2D.is_point_in_circle(pos, proj_up_local_scale, SCALE_CIRCLE_RADIUS):
return Cel3DObject.Gizmos.Y_SCALE
- elif Geometry.is_point_in_circle(pos, proj_back_local_scale, SCALE_CIRCLE_RADIUS):
+ elif Geometry2D.is_point_in_circle(pos, proj_back_local_scale, SCALE_CIRCLE_RADIUS):
return Cel3DObject.Gizmos.Z_SCALE
- elif Geometry.is_point_in_polygon(pos, rot_x_offset):
+ elif Geometry2D.is_point_in_polygon(pos, rot_x_offset):
return Cel3DObject.Gizmos.X_ROT
- elif Geometry.is_point_in_polygon(pos, rot_y_offset):
+ elif Geometry2D.is_point_in_polygon(pos, rot_y_offset):
return Cel3DObject.Gizmos.Y_ROT
- elif Geometry.is_point_in_polygon(pos, rot_z_offset):
+ elif Geometry2D.is_point_in_polygon(pos, rot_z_offset):
return Cel3DObject.Gizmos.Z_ROT
return Cel3DObject.Gizmos.NONE
func _cel_changed() -> void:
- update()
+ queue_redraw()
set_process_input(Global.current_project.get_current_cel() is Cel3D)
@@ -79,39 +79,38 @@ func _find_selected_object() -> Cel3DObject:
return null
-func add_always_visible(object3d: Cel3DObject, texture: Texture) -> void:
+func add_always_visible(object3d: Cel3DObject, texture: Texture2D) -> void:
always_visible[object3d] = texture
- update()
+ queue_redraw()
func remove_always_visible(object3d: Cel3DObject) -> void:
always_visible.erase(object3d)
- update()
+ queue_redraw()
-func get_points(camera: Camera, object3d: Cel3DObject) -> void:
+func get_points(camera: Camera3D, object3d: Cel3DObject) -> void:
var debug_mesh := object3d.box_shape.get_debug_mesh()
var arrays := debug_mesh.surface_get_arrays(0)
- var points := PoolVector2Array()
+ var points := PackedVector2Array()
for vertex in arrays[ArrayMesh.ARRAY_VERTEX]:
- var x_vertex: Vector3 = object3d.transform.xform(vertex)
+ var x_vertex: Vector3 = object3d.transform * (vertex)
var point := camera.unproject_position(x_vertex)
if not camera.is_position_behind(x_vertex):
points.append(point)
points_per_object[object3d] = points
if object3d.selected:
- gizmos_origin = camera.unproject_position(object3d.translation)
-
- var right: Vector3 = object3d.translation + object3d.transform.basis.x
- var left: Vector3 = object3d.translation - object3d.transform.basis.x
- var up: Vector3 = object3d.translation + object3d.transform.basis.y
- var down: Vector3 = object3d.translation - object3d.transform.basis.y
- var back: Vector3 = object3d.translation + object3d.transform.basis.z
- var front: Vector3 = object3d.translation - object3d.transform.basis.z
-
- var proj_right: Vector2 = object3d.camera.unproject_position(right)
- var proj_up: Vector2 = object3d.camera.unproject_position(up)
- var proj_back: Vector2 = object3d.camera.unproject_position(back)
+ gizmos_origin = camera.unproject_position(object3d.position)
+ var right := object3d.position + object3d.transform.basis.x
+ var left := object3d.position - object3d.transform.basis.x
+ var up := object3d.position + object3d.transform.basis.y
+ var down := object3d.position - object3d.transform.basis.y
+ var back := object3d.position + object3d.transform.basis.z
+ var front := object3d.position - object3d.transform.basis.z
+
+ var proj_right := object3d.camera.unproject_position(right)
+ var proj_up := object3d.camera.unproject_position(up)
+ var proj_back := object3d.camera.unproject_position(back)
proj_right_local = proj_right - gizmos_origin
proj_up_local = proj_up - gizmos_origin
@@ -120,11 +119,11 @@ func get_points(camera: Camera, object3d: Cel3DObject) -> void:
var curve_right_local := proj_right_local
var curve_up_local := proj_up_local
var curve_back_local := proj_back_local
- if right.distance_to(camera.translation) > left.distance_to(camera.translation):
+ if right.distance_to(camera.position) > left.distance_to(camera.position):
curve_right_local = object3d.camera.unproject_position(left) - gizmos_origin
- if up.distance_to(camera.translation) > down.distance_to(camera.translation):
+ if up.distance_to(camera.position) > down.distance_to(camera.position):
curve_up_local = object3d.camera.unproject_position(down) - gizmos_origin
- if back.distance_to(camera.translation) > front.distance_to(camera.translation):
+ if back.distance_to(camera.position) > front.distance_to(camera.position):
curve_back_local = object3d.camera.unproject_position(front) - gizmos_origin
proj_right_local = _resize_vector(proj_right_local, ARROW_LENGTH)
@@ -144,98 +143,98 @@ func get_points(camera: Camera, object3d: Cel3DObject) -> void:
gizmo_rot_y = _find_curve(curve_right_local, curve_back_local)
gizmo_rot_z = _find_curve(curve_right_local, curve_up_local)
- update()
+ queue_redraw()
func clear_points(object3d: Cel3DObject) -> void:
points_per_object.erase(object3d)
- update()
+ queue_redraw()
func _draw() -> void:
- var draw_scale := Global.camera.zoom * 10
+ var draw_scale := Vector2(10.0, 10.0) / Global.camera.zoom
for object in always_visible:
if not always_visible[object]:
continue
if not object.find_cel():
continue
- var texture: Texture = always_visible[object]
+ var texture: Texture2D = always_visible[object]
var center := Vector2(8, 8)
- var pos: Vector2 = object.camera.unproject_position(object.translation)
- var back: Vector3 = object.translation - object.transform.basis.z
+ var pos: Vector2 = object.camera.unproject_position(object.position)
+ var back: Vector3 = object.position - object.transform.basis.z
var back_proj: Vector2 = object.camera.unproject_position(back) - pos
back_proj = _resize_vector(back_proj, LIGHT_ARROW_LENGTH)
draw_set_transform(pos, 0, draw_scale / 4)
draw_texture(texture, -center)
draw_set_transform(pos, 0, draw_scale / 2)
if object.type == Cel3DObject.Type.DIR_LIGHT:
- draw_line(Vector2.ZERO, back_proj, Color.white)
+ draw_line(Vector2.ZERO, back_proj, Color.WHITE)
var arrow := _find_arrow(back_proj)
- _draw_arrow(arrow, Color.white)
+ _draw_arrow(arrow, Color.WHITE)
draw_set_transform_matrix(Transform2D())
- if points_per_object.empty():
+ if points_per_object.is_empty():
return
for object in points_per_object:
if not object.find_cel():
if object.selected:
- object.unselect()
+ object.deselect()
continue
- var points: PoolVector2Array = points_per_object[object]
- if points.empty():
+ var points: PackedVector2Array = points_per_object[object]
+ if points.is_empty():
continue
if object.selected:
# Draw bounding box outline
- draw_multiline(points, selected_color, 1.0, true)
+ draw_multiline(points, selected_color, 1.0)
if object.applying_gizmos == Cel3DObject.Gizmos.X_ROT:
- draw_line(gizmos_origin, Global.canvas.current_pixel, Color.red)
+ draw_line(gizmos_origin, Global.canvas.current_pixel, Color.RED)
continue
elif object.applying_gizmos == Cel3DObject.Gizmos.Y_ROT:
- draw_line(gizmos_origin, Global.canvas.current_pixel, Color.green)
+ draw_line(gizmos_origin, Global.canvas.current_pixel, Color.GREEN)
continue
elif object.applying_gizmos == Cel3DObject.Gizmos.Z_ROT:
- draw_line(gizmos_origin, Global.canvas.current_pixel, Color.blue)
+ draw_line(gizmos_origin, Global.canvas.current_pixel, Color.BLUE)
continue
draw_set_transform(gizmos_origin, 0, draw_scale)
# Draw position arrows
- draw_line(Vector2.ZERO, proj_right_local, Color.red)
- draw_line(Vector2.ZERO, proj_up_local, Color.green)
- draw_line(Vector2.ZERO, proj_back_local, Color.blue)
- _draw_arrow(gizmo_pos_x, Color.red)
- _draw_arrow(gizmo_pos_y, Color.green)
- _draw_arrow(gizmo_pos_z, Color.blue)
+ draw_line(Vector2.ZERO, proj_right_local, Color.RED)
+ draw_line(Vector2.ZERO, proj_up_local, Color.GREEN)
+ draw_line(Vector2.ZERO, proj_back_local, Color.BLUE)
+ _draw_arrow(gizmo_pos_x, Color.RED)
+ _draw_arrow(gizmo_pos_y, Color.GREEN)
+ _draw_arrow(gizmo_pos_z, Color.BLUE)
# Draw rotation curves
- draw_polyline(gizmo_rot_x, Color.red, GIZMO_WIDTH)
- draw_polyline(gizmo_rot_y, Color.green, GIZMO_WIDTH)
- draw_polyline(gizmo_rot_z, Color.blue, GIZMO_WIDTH)
+ draw_polyline(gizmo_rot_x, Color.RED, GIZMO_WIDTH)
+ draw_polyline(gizmo_rot_y, Color.GREEN, GIZMO_WIDTH)
+ draw_polyline(gizmo_rot_z, Color.BLUE, GIZMO_WIDTH)
# Draw scale circles
- draw_circle(proj_right_local_scale, SCALE_CIRCLE_RADIUS, Color.red)
- draw_circle(proj_up_local_scale, SCALE_CIRCLE_RADIUS, Color.green)
- draw_circle(proj_back_local_scale, SCALE_CIRCLE_RADIUS, Color.blue)
+ draw_circle(proj_right_local_scale, SCALE_CIRCLE_RADIUS, Color.RED)
+ draw_circle(proj_up_local_scale, SCALE_CIRCLE_RADIUS, Color.GREEN)
+ draw_circle(proj_back_local_scale, SCALE_CIRCLE_RADIUS, Color.BLUE)
# Draw X, Y, Z characters on top of the scale circles
var font: Font = Global.control.theme.default_font
var font_height := font.get_height()
var char_position := Vector2(-font_height, font_height) * CHAR_SCALE / 4 * draw_scale
draw_set_transform(gizmos_origin + char_position, 0, draw_scale * CHAR_SCALE)
- draw_char(font, proj_right_local_scale / CHAR_SCALE, "X", "")
- draw_char(font, proj_up_local_scale / CHAR_SCALE, "Y", "")
- draw_char(font, proj_back_local_scale / CHAR_SCALE, "Z", "")
+ draw_char(font, proj_right_local_scale / CHAR_SCALE, "X")
+ draw_char(font, proj_up_local_scale / CHAR_SCALE, "Y")
+ draw_char(font, proj_back_local_scale / CHAR_SCALE, "Z")
draw_set_transform_matrix(Transform2D())
elif object.hovered:
- draw_multiline(points, hovered_color, 1.0, true)
+ draw_multiline(points, hovered_color, 1.0)
func _resize_vector(v: Vector2, l: float) -> Vector2:
return (v.normalized() * l).limit_length(v.length())
-func _find_curve(a: Vector2, b: Vector2) -> PoolVector2Array:
+func _find_curve(a: Vector2, b: Vector2) -> PackedVector2Array:
var curve2d := Curve2D.new()
curve2d.bake_interval = 1
- var control := b.linear_interpolate(a, 0.5)
+ var control := b.lerp(a, 0.5)
a = _resize_vector(a, SCALE_CIRCLE_LENGTH)
b = _resize_vector(b, SCALE_CIRCLE_LENGTH)
control = control.normalized() * sqrt(pow(a.length() / 4, 2) * 2) # Thank you Pythagoras
@@ -244,11 +243,11 @@ func _find_curve(a: Vector2, b: Vector2) -> PoolVector2Array:
return curve2d.get_baked_points()
-func _find_arrow(a: Vector2, tilt := 0.5) -> PoolVector2Array:
+func _find_arrow(a: Vector2, tilt := 0.5) -> PackedVector2Array:
var b := a + Vector2(-tilt, 1).rotated(a.angle() + PI / 2) * 2
var c := a + Vector2(tilt, 1).rotated(a.angle() + PI / 2) * 2
- return PoolVector2Array([a, b, c])
+ return PackedVector2Array([a, b, c])
-func _draw_arrow(triangle: PoolVector2Array, color: Color) -> void:
+func _draw_arrow(triangle: PackedVector2Array, color: Color) -> void:
draw_primitive(triangle, [color, color, color], [])
diff --git a/src/UI/Canvas/Grid.gd b/src/UI/Canvas/Grid.gd
index e1c518a6708..edd4e81e9d8 100644
--- a/src/UI/Canvas/Grid.gd
+++ b/src/UI/Canvas/Grid.gd
@@ -1,19 +1,23 @@
extends Node2D
+func _ready() -> void:
+ Global.project_changed.connect(queue_redraw)
+
+
func _draw() -> void:
if not Global.draw_grid:
return
- var target_rect: Rect2
+ var target_rect: Rect2i
if Global.grid_draw_over_tile_mode:
target_rect = Global.current_project.tiles.get_bounding_rect()
else:
- target_rect = Rect2(Vector2.ZERO, Global.current_project.size)
- if target_rect.has_no_area():
+ target_rect = Rect2i(Vector2.ZERO, Global.current_project.size)
+ if not target_rect.has_area():
return
- var grid_type: int = Global.grid_type
+ var grid_type := Global.grid_type
if grid_type == Global.GridTypes.CARTESIAN || grid_type == Global.GridTypes.ALL:
_draw_cartesian_grid(target_rect)
@@ -21,12 +25,8 @@ func _draw() -> void:
_draw_isometric_grid(target_rect)
-func _draw_cartesian_grid(target_rect: Rect2) -> void:
- # Using Array instead of PoolVector2Array to avoid kinda
- # random "resize: Can't resize PoolVector if locked" errors.
- # See: https://github.com/Orama-Interactive/Pixelorama/issues/331
- # It will be converted to PoolVector2Array before being sent to be rendered.
- var grid_multiline_points := []
+func _draw_cartesian_grid(target_rect: Rect2i) -> void:
+ var grid_multiline_points := PackedVector2Array()
var x: float = (
target_rect.position.x
@@ -46,32 +46,28 @@ func _draw_cartesian_grid(target_rect: Rect2) -> void:
grid_multiline_points.push_back(Vector2(target_rect.end.x, y))
y += Global.grid_size.y
- if not grid_multiline_points.empty():
+ if not grid_multiline_points.is_empty():
draw_multiline(grid_multiline_points, Global.grid_color)
-func _draw_isometric_grid(target_rect: Rect2) -> void:
- # Using Array instead of PoolVector2Array to avoid kinda
- # random "resize: Can't resize PoolVector if locked" errors.
- # See: https://github.com/Orama-Interactive/Pixelorama/issues/331
- # It will be converted to PoolVector2Array before being sent to be rendered.
- var grid_multiline_points := []
+func _draw_isometric_grid(target_rect: Rect2i) -> void:
+ var grid_multiline_points := PackedVector2Array()
var cell_size := Global.isometric_grid_size
- var max_cell_count: Vector2 = target_rect.size / cell_size
- var origin_offset: Vector2 = (Global.grid_offset - target_rect.position).posmodv(cell_size)
+ var max_cell_count := target_rect.size / cell_size
+ var origin_offset := Vector2(Global.grid_offset - target_rect.position).posmodv(cell_size)
# lines โโโ (from bottom-left to top-right)
- var per_cell_offset := cell_size * Vector2(1, -1)
+ var per_cell_offset := cell_size * Vector2i(1, -1)
# lines โโโ starting from the rect's left side (top to bottom):
var y: float = fposmod(
origin_offset.y + cell_size.y * (0.5 + origin_offset.x / cell_size.x), cell_size.y
)
while y < target_rect.size.y:
- var start: Vector2 = target_rect.position + Vector2(0, y)
- var cells_to_rect_bounds: float = min(max_cell_count.x, y / cell_size.y)
- var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset
+ var start: Vector2 = target_rect.position + Vector2i(0, y)
+ var cells_to_rect_bounds := minf(max_cell_count.x, y / cell_size.y)
+ var end := start + cells_to_rect_bounds * per_cell_offset
grid_multiline_points.push_back(start)
grid_multiline_points.push_back(end)
y += cell_size.y
@@ -79,8 +75,8 @@ func _draw_isometric_grid(target_rect: Rect2) -> void:
# lines โโโ starting from the rect's bottom side (left to right):
var x: float = (y - target_rect.size.y) / cell_size.y * cell_size.x
while x < target_rect.size.x:
- var start: Vector2 = target_rect.position + Vector2(x, target_rect.size.y)
- var cells_to_rect_bounds: float = min(max_cell_count.y, max_cell_count.x - x / cell_size.x)
+ var start: Vector2 = target_rect.position + Vector2i(x, target_rect.size.y)
+ var cells_to_rect_bounds := minf(max_cell_count.y, max_cell_count.x - x / cell_size.x)
var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset
grid_multiline_points.push_back(start)
grid_multiline_points.push_back(end)
@@ -92,8 +88,8 @@ func _draw_isometric_grid(target_rect: Rect2) -> void:
# lines โโโ starting from the rect's left side (top to bottom):
y = fposmod(origin_offset.y - cell_size.y * (0.5 + origin_offset.x / cell_size.x), cell_size.y)
while y < target_rect.size.y:
- var start: Vector2 = target_rect.position + Vector2(0, y)
- var cells_to_rect_bounds: float = min(max_cell_count.x, max_cell_count.y - y / cell_size.y)
+ var start: Vector2 = target_rect.position + Vector2i(0, y)
+ var cells_to_rect_bounds := minf(max_cell_count.x, max_cell_count.y - y / cell_size.y)
var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset
grid_multiline_points.push_back(start)
grid_multiline_points.push_back(end)
@@ -102,12 +98,12 @@ func _draw_isometric_grid(target_rect: Rect2) -> void:
# lines โโโ starting from the rect's top side (left to right):
x = fposmod(origin_offset.x - cell_size.x * (0.5 + origin_offset.y / cell_size.y), cell_size.x)
while x < target_rect.size.x:
- var start: Vector2 = target_rect.position + Vector2(x, 0)
- var cells_to_rect_bounds: float = min(max_cell_count.y, max_cell_count.x - x / cell_size.x)
+ var start: Vector2 = target_rect.position + Vector2i(x, 0)
+ var cells_to_rect_bounds := minf(max_cell_count.y, max_cell_count.x - x / cell_size.x)
var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset
grid_multiline_points.push_back(start)
grid_multiline_points.push_back(end)
x += cell_size.x
- if not grid_multiline_points.empty():
+ if not grid_multiline_points.is_empty():
draw_multiline(grid_multiline_points, Global.grid_color)
diff --git a/src/UI/Canvas/Indicators.gd b/src/UI/Canvas/Indicators.gd
index 0e83841a216..08ceb727a9e 100644
--- a/src/UI/Canvas/Indicators.gd
+++ b/src/UI/Canvas/Indicators.gd
@@ -4,7 +4,7 @@ extends Node2D
func _input(event: InputEvent) -> void:
if Global.has_focus:
if event is InputEventMouse or event is InputEventKey:
- update()
+ queue_redraw()
func _draw() -> void:
diff --git a/src/UI/Canvas/MouseGuide.gd b/src/UI/Canvas/MouseGuide.gd
index 8e288cf25c5..d7841c5191c 100644
--- a/src/UI/Canvas/MouseGuide.gd
+++ b/src/UI/Canvas/MouseGuide.gd
@@ -2,13 +2,13 @@ extends Line2D
enum Types { VERTICAL, HORIZONTAL }
const INPUT_WIDTH := 4
-export var type := 0
+@export var type := 0
var track_mouse := true
func _ready() -> void:
# Add a subtle difference to the normal guide color by mixing in some green
- default_color = Global.guide_color.linear_interpolate(Color(0.2, 0.92, 0.2), .6)
+ default_color = Global.guide_color.lerp(Color(0.2, 0.92, 0.2), .6)
width = Global.camera.zoom.x * 2
draw_guide_line()
@@ -46,12 +46,12 @@ func _input(event: InputEvent) -> void:
else:
points[0].x = mouse_point.x
points[1].x = mouse_point.x
- update()
+ queue_redraw()
func _draw() -> void:
width = Global.camera.zoom.x * 2
- var viewport_size: Vector2 = Global.main_viewport.rect_size
+ var viewport_size: Vector2 = Global.main_viewport.size
var zoom: Vector2 = Global.camera.zoom
# viewport_poly is an array of the points that make up the corners of the viewport
diff --git a/src/UI/Canvas/MouseGuideContainer.tscn b/src/UI/Canvas/MouseGuideContainer.tscn
index f1f467d8519..67a5ccaf384 100644
--- a/src/UI/Canvas/MouseGuideContainer.tscn
+++ b/src/UI/Canvas/MouseGuideContainer.tscn
@@ -1,31 +1,25 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://no3w7e2264u4"]
-[ext_resource path="res://assets/graphics/dotted_line.png" type="Texture" id=1]
-[ext_resource path="res://src/UI/Canvas/MouseGuide.gd" type="Script" id=2]
+[ext_resource type="Texture2D" uid="uid://xnqvppcpt7jb" path="res://assets/graphics/dotted_line.png" id="1"]
+[ext_resource type="Script" path="res://src/UI/Canvas/MouseGuide.gd" id="2"]
-[sub_resource type="AtlasTexture" id=1]
-flags = 2
-atlas = ExtResource( 1 )
-region = Rect2( 0, 0, 8, 1 )
+[sub_resource type="AtlasTexture" id="1"]
+atlas = ExtResource("1")
+region = Rect2(0, 0, 8, 1)
[node name="MouseGuideContainer" type="Node2D"]
[node name="Vertical" type="Line2D" parent="."]
visible = false
-points = PoolVector2Array( 0, 19999, 0, -19999 )
-default_color = Color( 1, 1, 1, 1 )
-texture = SubResource( 1 )
+points = PackedVector2Array(0, 19999, 0, -19999)
+texture = SubResource("1")
texture_mode = 1
-script = ExtResource( 2 )
+script = ExtResource("2")
[node name="Horizontal" type="Line2D" parent="."]
visible = false
-points = PoolVector2Array( -19999, 0, 19999, 0 )
-default_color = Color( 1, 1, 1, 1 )
-texture = SubResource( 1 )
+points = PackedVector2Array(-19999, 0, 19999, 0)
+texture = SubResource("1")
texture_mode = 1
-script = ExtResource( 2 )
-__meta__ = {
-"_editor_description_": ""
-}
+script = ExtResource("2")
type = 1
diff --git a/src/UI/Canvas/OnionSkinning.gd b/src/UI/Canvas/OnionSkinning.gd
index ccd531641d1..ebec39c0649 100644
--- a/src/UI/Canvas/OnionSkinning.gd
+++ b/src/UI/Canvas/OnionSkinning.gd
@@ -3,19 +3,19 @@ extends Node2D
enum { PAST, FUTURE }
var type := PAST
-var blue_red_color := Color.blue
+var blue_red_color := Color.BLUE
var rate := Global.onion_skinning_past_rate
func _draw() -> void:
- var project = Global.current_project
+ var project := Global.current_project
if !Global.onion_skinning:
return
rate = Global.onion_skinning_past_rate if type == PAST else Global.onion_skinning_future_rate
if rate <= 0:
return
- var color := blue_red_color if Global.onion_skinning_blue_red else Color.white
+ var color := blue_red_color if Global.onion_skinning_blue_red else Color.WHITE
var position_tmp := position
var scale_tmp := scale
if Global.mirror_view:
diff --git a/src/UI/Canvas/PixelGrid.gd b/src/UI/Canvas/PixelGrid.gd
index 2147a01da2a..57406910418 100644
--- a/src/UI/Canvas/PixelGrid.gd
+++ b/src/UI/Canvas/PixelGrid.gd
@@ -2,34 +2,29 @@ extends Node2D
func _ready() -> void:
- Global.camera.connect("zoom_changed", self, "update")
+ Global.camera.zoom_changed.connect(queue_redraw)
func _draw() -> void:
if not Global.draw_pixel_grid:
return
- var zoom_percentage := 100.0 / Global.camera.zoom.x
+ var zoom_percentage := 100.0 * Global.camera.zoom.x
if zoom_percentage < Global.pixel_grid_show_at_zoom:
return
- var target_rect: Rect2 = Global.current_project.tiles.get_bounding_rect()
- if target_rect.has_no_area():
+ var target_rect := Global.current_project.tiles.get_bounding_rect()
+ if not target_rect.has_area():
return
- # Using Array instead of PoolVector2Array to avoid kinda
- # random "resize: Can't resize PoolVector if locked" errors.
- # See: https://github.com/Orama-Interactive/Pixelorama/issues/331
- # It will be converted to PoolVector2Array before being sent to be rendered.
- var grid_multiline_points := []
-
- for x in range(ceil(target_rect.position.x), floor(target_rect.end.x) + 1):
+ var grid_multiline_points := PackedVector2Array()
+ for x in range(ceili(target_rect.position.x), floori(target_rect.end.x) + 1):
grid_multiline_points.push_back(Vector2(x, target_rect.position.y))
grid_multiline_points.push_back(Vector2(x, target_rect.end.y))
- for y in range(ceil(target_rect.position.y), floor(target_rect.end.y) + 1):
+ for y in range(ceili(target_rect.position.y), floori(target_rect.end.y) + 1):
grid_multiline_points.push_back(Vector2(target_rect.position.x, y))
grid_multiline_points.push_back(Vector2(target_rect.end.x, y))
- if not grid_multiline_points.empty():
+ if not grid_multiline_points.is_empty():
draw_multiline(grid_multiline_points, Global.pixel_grid_color)
diff --git a/src/UI/Canvas/Previews.gd b/src/UI/Canvas/Previews.gd
index e2fbcc8d6c9..2f90d6cefa2 100644
--- a/src/UI/Canvas/Previews.gd
+++ b/src/UI/Canvas/Previews.gd
@@ -4,7 +4,7 @@ extends Node2D
func _input(event: InputEvent) -> void:
if Global.has_focus:
if event is InputEventMouse or event is InputEventKey:
- update()
+ queue_redraw()
func _draw() -> void:
diff --git a/src/UI/Canvas/Rulers/Guide.gd b/src/UI/Canvas/Rulers/Guide.gd
index b6eaf446102..9dcc602b2bc 100644
--- a/src/UI/Canvas/Rulers/Guide.gd
+++ b/src/UI/Canvas/Rulers/Guide.gd
@@ -5,15 +5,15 @@ enum Types { HORIZONTAL, VERTICAL }
const INPUT_WIDTH := 4
-var font := preload("res://assets/fonts/Roboto-Regular.tres")
+var font: Font = Global.control.theme.default_font
var has_focus := true
var mouse_pos := Vector2.ZERO
-var type: int = Types.HORIZONTAL
-var project = Global.current_project
+var type := Types.HORIZONTAL
+var project := Global.current_project
func _ready() -> void:
- width = Global.camera.zoom.x * 2
+ width = 2.0 / Global.camera.zoom.x
default_color = Global.guide_color
project.guides.append(self)
if _outside_canvas():
@@ -49,33 +49,33 @@ func _input(_event: InputEvent) -> void:
or Global.move_guides_on_canvas
):
has_focus = true
- Global.has_focus = false
- update()
+ Global.can_draw = false
+ queue_redraw()
if has_focus:
if Input.is_action_pressed("left_mouse"):
if type == Types.HORIZONTAL:
- var yy := stepify(mouse_pos.y, 0.5)
+ var yy := snappedf(mouse_pos.y, 0.5)
points[0].y = yy
points[1].y = yy
else:
- var xx := stepify(mouse_pos.x, 0.5)
+ var xx := snappedf(mouse_pos.x, 0.5)
points[0].x = xx
points[1].x = xx
modulate.a = 0.5 if _outside_canvas() else 1.0
elif Input.is_action_just_released("left_mouse"):
- Global.has_focus = true
+ Global.can_draw = true
has_focus = false
if _outside_canvas():
project.guides.erase(self)
queue_free()
else:
- update()
+ queue_redraw()
func _draw() -> void:
if !has_focus:
return
- var viewport_size: Vector2 = Global.main_viewport.rect_size
+ var viewport_size: Vector2 = Global.main_viewport.size
var zoom: Vector2 = Global.camera.zoom
# viewport_poly is an array of the points that make up the corners of the viewport
@@ -89,18 +89,17 @@ func _draw() -> void:
+ Vector2(
(
Global.camera.offset.x
- - (viewport_size.rotated(Global.camera.rotation).x / 2) * zoom.x
+ - (viewport_size.rotated(Global.camera.rotation).x / 2) / zoom.x
),
(
Global.camera.offset.y
- - (viewport_size.rotated(Global.camera.rotation).y / 2) * zoom.y
+ - (viewport_size.rotated(Global.camera.rotation).y / 2) / zoom.y
)
)
)
var string := (
- "%spx"
- % str(stepify(mouse_pos.y if type == Types.HORIZONTAL else mouse_pos.x, 0.5))
+ "%spx" % str(snappedf(mouse_pos.y if type == Types.HORIZONTAL else mouse_pos.x, 0.5))
)
var color: Color = Global.control.theme.get_color("font_color", "Label")
# X and Y offsets for nicer looking spacing
@@ -111,53 +110,105 @@ func _draw() -> void:
var font_height := font.get_height()
# Draw the string where the guide intersects with the viewport poly
# Priority is top edge, then left, then right
- var intersection = Geometry.segment_intersects_segment_2d(
+ var intersection = Geometry2D.segment_intersects_segment(
points[0], points[1], viewport_poly[0], viewport_poly[1]
)
if intersection:
- draw_set_transform(intersection, Global.camera.rotation, zoom * 2)
+ draw_set_transform(intersection, Global.camera.rotation, Vector2(2.0, 2.0) / zoom)
if (
intersection.distance_squared_to(viewport_poly[0])
< intersection.distance_squared_to(viewport_poly[1])
):
- draw_string(font, Vector2(x_offset, font_height), string, color)
+ draw_string(
+ font,
+ Vector2(x_offset, font_height),
+ string,
+ HORIZONTAL_ALIGNMENT_LEFT,
+ -1,
+ 16,
+ color
+ )
else:
- draw_string(font, Vector2(-font_string_size.x - x_offset, font_height), string, color)
+ draw_string(
+ font,
+ Vector2(-font_string_size.x - x_offset, font_height),
+ string,
+ HORIZONTAL_ALIGNMENT_LEFT,
+ -1,
+ 16,
+ color
+ )
return
- intersection = Geometry.segment_intersects_segment_2d(
+ intersection = Geometry2D.segment_intersects_segment(
points[0], points[1], viewport_poly[3], viewport_poly[0]
)
if intersection:
- draw_set_transform(intersection, Global.camera.rotation, zoom * 2)
+ draw_set_transform(intersection, Global.camera.rotation, Vector2(2.0, 2.0) / zoom)
if (
intersection.distance_squared_to(viewport_poly[3])
< intersection.distance_squared_to(viewport_poly[0])
):
- draw_string(font, Vector2(x_offset, y_offset), string, color)
+ draw_string(
+ font, Vector2(x_offset, y_offset), string, HORIZONTAL_ALIGNMENT_LEFT, -1, 16, color
+ )
else:
- draw_string(font, Vector2(x_offset, font_height), string, color)
+ draw_string(
+ font,
+ Vector2(x_offset, font_height),
+ string,
+ HORIZONTAL_ALIGNMENT_LEFT,
+ -1,
+ 16,
+ color
+ )
return
- intersection = Geometry.segment_intersects_segment_2d(
+ intersection = Geometry2D.segment_intersects_segment(
points[0], points[1], viewport_poly[1], viewport_poly[2]
)
if intersection:
- draw_set_transform(intersection, Global.camera.rotation, zoom * 2)
+ draw_set_transform(intersection, Global.camera.rotation, Vector2(2.0, 2.0) / zoom)
if (
intersection.distance_squared_to(viewport_poly[1])
< intersection.distance_squared_to(viewport_poly[2])
):
- draw_string(font, Vector2(-font_string_size.x - x_offset, font_height), string, color)
+ draw_string(
+ font,
+ Vector2(-font_string_size.x - x_offset, font_height),
+ string,
+ HORIZONTAL_ALIGNMENT_LEFT,
+ -1,
+ 16,
+ color
+ )
else:
- draw_string(font, Vector2(-font_string_size.x - x_offset, y_offset), string, color)
+ draw_string(
+ font,
+ Vector2(-font_string_size.x - x_offset, y_offset),
+ string,
+ HORIZONTAL_ALIGNMENT_LEFT,
+ -1,
+ 16,
+ color
+ )
return
# If there's no intersection with a viewport edge, show string in top left corner
- draw_set_transform(viewport_poly[0], Global.camera.rotation, zoom * 2)
- draw_string(font, Vector2(x_offset, font_height), string, color)
+ draw_set_transform(viewport_poly[0], Global.camera.rotation, Vector2(2.0, 2.0) / zoom)
+ draw_string(
+ font, Vector2(x_offset, font_height), string, HORIZONTAL_ALIGNMENT_LEFT, -1, 16, color
+ )
+
+
+func force_input(event: InputEvent) -> void:
+ _input(event)
+
+
+func set_color(color: Color) -> void:
+ default_color = color
func _outside_canvas() -> bool:
diff --git a/src/UI/Canvas/Rulers/HorizontalRuler.gd b/src/UI/Canvas/Rulers/HorizontalRuler.gd
index 7c6e6297e1a..aa499f45f48 100644
--- a/src/UI/Canvas/Rulers/HorizontalRuler.gd
+++ b/src/UI/Canvas/Rulers/HorizontalRuler.gd
@@ -2,7 +2,6 @@ extends Button
const RULER_WIDTH := 16
-var font := preload("res://assets/fonts/Roboto-Small.tres")
var major_subdivision := 2
var minor_subdivision := 4
@@ -11,21 +10,28 @@ var last: Vector2
func _ready() -> void:
- Global.main_viewport.connect("item_rect_changed", self, "update")
+ Global.project_changed.connect(queue_redraw)
+ Global.main_viewport.item_rect_changed.connect(queue_redraw)
+
+
+func _gui_input(event: InputEvent) -> void:
+ for guide in Global.current_project.guides:
+ guide.force_input(event)
# Code taken and modified from Godot's source code
func _draw() -> void:
+ var font: Font = Global.control.theme.default_font
var transform := Transform2D()
var ruler_transform := Transform2D()
var major_subdivide := Transform2D()
var minor_subdivide := Transform2D()
- var zoom: float = 1 / Global.camera.zoom.x
+ var zoom := Global.camera.zoom.x
transform.x = Vector2(zoom, zoom)
# This tracks the "true" top left corner of the drawing:
transform.origin = (
- Global.main_viewport.rect_size / 2
+ Global.main_viewport.size / 2
+ Global.camera.offset.rotated(-Global.camera.rotation) * -zoom
)
@@ -36,7 +42,7 @@ func _draw() -> void:
var b := Vector2(proj_size.x, 0).rotated(-Global.camera.rotation) # Top right
var c := Vector2(0, proj_size.y).rotated(-Global.camera.rotation) # Bottom left
var d := Vector2(proj_size.x, proj_size.y).rotated(-Global.camera.rotation) # Bottom right
- transform.origin.x += min(min(a.x, b.x), min(c.x, d.x)) * zoom
+ transform.origin.x += minf(minf(a.x, b.x), minf(c.x, d.x)) * zoom
var basic_rule := 100.0
var i := 0
@@ -57,41 +63,43 @@ func _draw() -> void:
Vector2(1.0 / minor_subdivision, 1.0 / minor_subdivision)
)
- first = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(
- Vector2.ZERO
+ first = (
+ (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse()
+ * (Vector2.ZERO)
)
- last = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(
- Global.main_viewport.rect_size
+ last = (
+ (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse()
+ * (Global.main_viewport.size)
)
- for j in range(ceil(first.x), ceil(last.x)):
- var position: Vector2 = (transform * ruler_transform * major_subdivide * minor_subdivide).xform(
- Vector2(j, 0)
+ for j in range(ceili(first.x), ceili(last.x)):
+ var pos: Vector2 = (
+ (transform * ruler_transform * major_subdivide * minor_subdivide) * (Vector2(j, 0))
)
if j % (major_subdivision * minor_subdivision) == 0:
draw_line(
- Vector2(position.x + RULER_WIDTH, 0),
- Vector2(position.x + RULER_WIDTH, RULER_WIDTH),
- Color.white
+ Vector2(pos.x + RULER_WIDTH, 0),
+ Vector2(pos.x + RULER_WIDTH, RULER_WIDTH),
+ Color.WHITE
)
- var val = (ruler_transform * major_subdivide * minor_subdivide).xform(Vector2(j, 0)).x
+ var val := ((ruler_transform * major_subdivide * minor_subdivide) * Vector2(j, 0)).x
draw_string(
font,
- Vector2(position.x + RULER_WIDTH + 2, font.get_height() - 4),
- str(stepify(val, 0.1))
+ Vector2(pos.x + RULER_WIDTH + 2, font.get_height() - 4),
+ str(snappedf(val, 0.1))
)
else:
if j % minor_subdivision == 0:
draw_line(
- Vector2(position.x + RULER_WIDTH, RULER_WIDTH * 0.33),
- Vector2(position.x + RULER_WIDTH, RULER_WIDTH),
- Color.white
+ Vector2(pos.x + RULER_WIDTH, RULER_WIDTH * 0.33),
+ Vector2(pos.x + RULER_WIDTH, RULER_WIDTH),
+ Color.WHITE
)
else:
draw_line(
- Vector2(position.x + RULER_WIDTH, RULER_WIDTH * 0.66),
- Vector2(position.x + RULER_WIDTH, RULER_WIDTH),
- Color.white
+ Vector2(pos.x + RULER_WIDTH, RULER_WIDTH * 0.66),
+ Vector2(pos.x + RULER_WIDTH, RULER_WIDTH),
+ Color.WHITE
)
@@ -106,7 +114,7 @@ func create_guide() -> void:
if mouse_pos.x < RULER_WIDTH: # For double guides
Global.vertical_ruler.create_guide()
var guide := Guide.new()
- if abs(Global.camera.rotation_degrees) < 45 or abs(Global.camera.rotation_degrees) > 135:
+ if absf(Global.camera.rotation_degrees) < 45 or absf(Global.camera.rotation_degrees) > 135:
guide.type = guide.Types.HORIZONTAL
guide.add_point(Vector2(-19999, Global.canvas.current_pixel.y))
guide.add_point(Vector2(19999, Global.canvas.current_pixel.y))
@@ -115,8 +123,7 @@ func create_guide() -> void:
guide.add_point(Vector2(Global.canvas.current_pixel.x, -19999))
guide.add_point(Vector2(Global.canvas.current_pixel.x, 19999))
Global.canvas.add_child(guide)
- Global.has_focus = false
- update()
+ queue_redraw()
func _on_HorizontalRuler_mouse_entered() -> void:
diff --git a/src/UI/Canvas/Rulers/SymmetryGuide.gd b/src/UI/Canvas/Rulers/SymmetryGuide.gd
index 72bcac6565f..f4edb515550 100644
--- a/src/UI/Canvas/Rulers/SymmetryGuide.gd
+++ b/src/UI/Canvas/Rulers/SymmetryGuide.gd
@@ -1,32 +1,38 @@
class_name SymmetryGuide
extends Guide
-var _texture: Texture = preload("res://assets/graphics/dotted_line.png")
+var _texture := preload("res://assets/graphics/dotted_line.png")
func _ready() -> void:
+ super._ready()
has_focus = false
visible = false
texture = _texture
+ texture_repeat = CanvasItem.TEXTURE_REPEAT_ENABLED
texture_mode = Line2D.LINE_TEXTURE_TILE
- width = Global.camera.zoom.x * 4
- # Add a subtle difference to the normal guide color by mixing in some blue
- default_color = Global.guide_color.linear_interpolate(Color(0.2, 0.2, .65), .6)
+ width = 4.0 / Global.camera.zoom.x
+ set_color(Global.guide_color)
func _input(_event: InputEvent) -> void:
if !visible:
return
- ._input(_event)
+ super._input(_event)
if type == Types.HORIZONTAL:
project.y_symmetry_point = points[0].y * 2 - 1
- points[0].y = clamp(points[0].y, 0, Global.current_project.size.y)
- points[1].y = clamp(points[1].y, 0, Global.current_project.size.y)
+ points[0].y = clampf(points[0].y, 0, Global.current_project.size.y)
+ points[1].y = clampf(points[1].y, 0, Global.current_project.size.y)
elif type == Types.VERTICAL:
- points[0].x = clamp(points[0].x, 0, Global.current_project.size.x)
- points[1].x = clamp(points[1].x, 0, Global.current_project.size.x)
+ points[0].x = clampf(points[0].x, 0, Global.current_project.size.x)
+ points[1].x = clampf(points[1].x, 0, Global.current_project.size.x)
project.x_symmetry_point = points[0].x * 2 - 1
+## Add a subtle difference to the normal guide color by mixing in some blue
+func set_color(color: Color) -> void:
+ default_color = color.lerp(Color(.2, .2, .65), .6)
+
+
func _outside_canvas() -> bool:
return false
diff --git a/src/UI/Canvas/Rulers/VerticalRuler.gd b/src/UI/Canvas/Rulers/VerticalRuler.gd
index 8cd12064cb8..89b851e5bfa 100644
--- a/src/UI/Canvas/Rulers/VerticalRuler.gd
+++ b/src/UI/Canvas/Rulers/VerticalRuler.gd
@@ -2,7 +2,6 @@ extends Button
const RULER_WIDTH := 16
-var font := preload("res://assets/fonts/Roboto-Small.tres")
var major_subdivision := 2
var minor_subdivision := 4
@@ -11,21 +10,28 @@ var last: Vector2
func _ready() -> void:
- Global.main_viewport.connect("item_rect_changed", self, "update")
+ Global.project_changed.connect(queue_redraw)
+ Global.main_viewport.item_rect_changed.connect(queue_redraw)
+
+
+func _gui_input(event: InputEvent) -> void:
+ for guide in Global.current_project.guides:
+ guide.force_input(event)
# Code taken and modified from Godot's source code
func _draw() -> void:
+ var font: Font = Global.control.theme.default_font
var transform := Transform2D()
var ruler_transform := Transform2D()
var major_subdivide := Transform2D()
var minor_subdivide := Transform2D()
- var zoom: float = 1 / Global.camera.zoom.x
+ var zoom := Global.camera.zoom.x
transform.y = Vector2(zoom, zoom)
# This tracks the "true" top left corner of the drawing:
transform.origin = (
- Global.main_viewport.rect_size / 2
+ Global.main_viewport.size / 2
+ Global.camera.offset.rotated(-Global.camera.rotation) * -zoom
)
@@ -36,7 +42,7 @@ func _draw() -> void:
var b := Vector2(proj_size.x, 0).rotated(-Global.camera.rotation) # Top right
var c := Vector2(0, proj_size.y).rotated(-Global.camera.rotation) # Bottom left
var d := Vector2(proj_size.x, proj_size.y).rotated(-Global.camera.rotation) # Bottom right
- transform.origin.y += min(min(a.y, b.y), min(c.y, d.y)) * zoom
+ transform.origin.y += minf(minf(a.y, b.y), minf(c.y, d.y)) * zoom
var basic_rule := 100.0
var i := 0
@@ -57,36 +63,34 @@ func _draw() -> void:
Vector2(1.0 / minor_subdivision, 1.0 / minor_subdivision)
)
- first = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(
- Vector2.ZERO
+ first = (
+ (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse()
+ * (Vector2.ZERO)
)
- last = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(
- Global.main_viewport.rect_size
+ last = (
+ (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse()
+ * (Global.main_viewport.size)
)
- for j in range(ceil(first.y), ceil(last.y)):
- var position: Vector2 = (transform * ruler_transform * major_subdivide * minor_subdivide).xform(
- Vector2(0, j)
+ for j in range(ceili(first.y), ceili(last.y)):
+ var pos: Vector2 = (
+ (transform * ruler_transform * major_subdivide * minor_subdivide) * (Vector2(0, j))
)
if j % (major_subdivision * minor_subdivision) == 0:
- draw_line(Vector2(0, position.y), Vector2(RULER_WIDTH, position.y), Color.white)
- var text_xform = Transform2D(-PI / 2, Vector2(font.get_height() - 4, position.y - 2))
+ draw_line(Vector2(0, pos.y), Vector2(RULER_WIDTH, pos.y), Color.WHITE)
+ var text_xform := Transform2D(-PI / 2, Vector2(font.get_height() - 4, pos.y - 2))
draw_set_transform_matrix(get_transform() * text_xform)
- var val = (ruler_transform * major_subdivide * minor_subdivide).xform(Vector2(0, j)).y
- draw_string(font, Vector2(), str(stepify(val, 0.1)))
+ var val := ((ruler_transform * major_subdivide * minor_subdivide) * Vector2(0, j)).y
+ draw_string(font, Vector2(), str(snappedf(val, 0.1)))
draw_set_transform_matrix(get_transform())
else:
if j % minor_subdivision == 0:
draw_line(
- Vector2(RULER_WIDTH * 0.33, position.y),
- Vector2(RULER_WIDTH, position.y),
- Color.white
+ Vector2(RULER_WIDTH * 0.33, pos.y), Vector2(RULER_WIDTH, pos.y), Color.WHITE
)
else:
draw_line(
- Vector2(RULER_WIDTH * 0.66, position.y),
- Vector2(RULER_WIDTH, position.y),
- Color.white
+ Vector2(RULER_WIDTH * 0.66, pos.y), Vector2(RULER_WIDTH, pos.y), Color.WHITE
)
@@ -98,7 +102,7 @@ func create_guide() -> void:
if !Global.show_guides:
return
var guide := Guide.new()
- if abs(Global.camera.rotation_degrees) < 45 or abs(Global.camera.rotation_degrees) > 135:
+ if absf(Global.camera.rotation_degrees) < 45 or absf(Global.camera.rotation_degrees) > 135:
guide.type = guide.Types.VERTICAL
guide.add_point(Vector2(Global.canvas.current_pixel.x, -19999))
guide.add_point(Vector2(Global.canvas.current_pixel.x, 19999))
@@ -107,5 +111,4 @@ func create_guide() -> void:
guide.add_point(Vector2(-19999, Global.canvas.current_pixel.y))
guide.add_point(Vector2(19999, Global.canvas.current_pixel.y))
Global.canvas.add_child(guide)
- Global.has_focus = false
- update()
+ queue_redraw()
diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd
index 0d66602303d..749342921cd 100644
--- a/src/UI/Canvas/Selection.gd
+++ b/src/UI/Canvas/Selection.gd
@@ -1,24 +1,30 @@
extends Node2D
enum SelectionOperation { ADD, SUBTRACT, INTERSECT }
-const KEY_MOVE_ACTION_NAMES := ["ui_up", "ui_down", "ui_left", "ui_right"]
+const KEY_MOVE_ACTION_NAMES: PackedStringArray = ["ui_up", "ui_down", "ui_left", "ui_right"]
const CLIPBOARD_FILE_PATH := "user://clipboard.txt"
# flags (additional properties of selection that can be toggled)
-var flag_tilemode = false
+var flag_tilemode := false
var is_moving_content := false
var arrow_key_move := false
var is_pasting := false
-var big_bounding_rectangle := Rect2() setget _big_bounding_rectangle_changed
-var image_current_pixel := Vector2.ZERO # The ACTUAL pixel coordinate of image
+var big_bounding_rectangle := Rect2i():
+ set(value):
+ big_bounding_rectangle = value
+ for slot in Tools._slots.values():
+ if slot.tool_node is SelectionTool:
+ slot.tool_node.set_spinbox_values()
+ _update_gizmos()
+var image_current_pixel := Vector2.ZERO ## The ACTUAL pixel coordinate of image
var temp_rect := Rect2()
var rect_aspect_ratio := 0.0
var temp_rect_size := Vector2.ZERO
var temp_rect_pivot := Vector2.ZERO
-var original_big_bounding_rectangle := Rect2()
+var original_big_bounding_rectangle := Rect2i()
var original_preview_image := Image.new()
var original_bitmap := SelectionMap.new()
var original_offset := Vector2.ZERO
@@ -26,58 +32,58 @@ var original_offset := Vector2.ZERO
var preview_image := Image.new()
var preview_image_texture := ImageTexture.new()
var undo_data: Dictionary
-var gizmos := [] # Array of Gizmos
+var gizmos: Array[Gizmo] = []
var dragged_gizmo: Gizmo = null
var prev_angle := 0
var mouse_pos_on_gizmo_drag := Vector2.ZERO
var resize_keep_ratio := false
-onready var canvas: Canvas = get_parent()
-onready var marching_ants_outline: Sprite = $MarchingAntsOutline
+@onready var canvas: Canvas = get_parent()
+@onready var marching_ants_outline: Sprite2D = $MarchingAntsOutline
class Gizmo:
enum Type { SCALE, ROTATE }
var rect: Rect2
- var direction := Vector2.ZERO
+ var direction := Vector2i.ZERO
var type: int
- func _init(_type: int = Type.SCALE, _direction := Vector2.ZERO) -> void:
+ func _init(_type: int = Type.SCALE, _direction := Vector2i.ZERO) -> void:
type = _type
direction = _direction
- func get_cursor() -> int:
- var cursor := Input.CURSOR_MOVE
- if direction == Vector2.ZERO:
- return Input.CURSOR_POINTING_HAND
- elif direction == Vector2(-1, -1) or direction == Vector2(1, 1): # Top left or bottom right
+ func get_cursor() -> Control.CursorShape:
+ var cursor := Control.CURSOR_MOVE
+ if direction == Vector2i.ZERO:
+ return Control.CURSOR_POINTING_HAND
+ elif direction == Vector2i(-1, -1) or direction == Vector2i(1, 1): # Top left or bottom right
if Global.mirror_view:
- cursor = Input.CURSOR_BDIAGSIZE
+ cursor = Control.CURSOR_BDIAGSIZE
else:
- cursor = Input.CURSOR_FDIAGSIZE
- elif direction == Vector2(1, -1) or direction == Vector2(-1, 1): # Top right or bottom left
+ cursor = Control.CURSOR_FDIAGSIZE
+ elif direction == Vector2i(1, -1) or direction == Vector2i(-1, 1): # Top right or bottom left
if Global.mirror_view:
- cursor = Input.CURSOR_FDIAGSIZE
+ cursor = Control.CURSOR_FDIAGSIZE
else:
- cursor = Input.CURSOR_BDIAGSIZE
- elif direction == Vector2(0, -1) or direction == Vector2(0, 1): # Center top or center bottom
- cursor = Input.CURSOR_VSIZE
- elif direction == Vector2(-1, 0) or direction == Vector2(1, 0): # Center left or center right
- cursor = Input.CURSOR_HSIZE
+ cursor = Control.CURSOR_BDIAGSIZE
+ elif direction == Vector2i(0, -1) or direction == Vector2i(0, 1): # Center top or center bottom
+ cursor = Control.CURSOR_VSIZE
+ elif direction == Vector2i(-1, 0) or direction == Vector2i(1, 0): # Center left or center right
+ cursor = Control.CURSOR_HSIZE
return cursor
func _ready() -> void:
- Global.camera.connect("zoom_changed", self, "_update_on_zoom")
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(-1, -1))) # Top left
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(0, -1))) # Center top
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(1, -1))) # Top right
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(1, 0))) # Center right
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(1, 1))) # Bottom right
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(0, 1))) # Center bottom
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(-1, 1))) # Bottom left
- gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(-1, 0))) # Center left
+ Global.camera.zoom_changed.connect(_update_on_zoom)
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(-1, -1))) # Top left
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(0, -1))) # Center top
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(1, -1))) # Top right
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(1, 0))) # Center right
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(1, 1))) # Bottom right
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(0, 1))) # Center bottom
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(-1, 1))) # Bottom left
+ gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(-1, 0))) # Center left
# gizmos.append(Gizmo.new(Gizmo.Type.ROTATE)) # Rotation gizmo (temp)
@@ -87,15 +93,13 @@ func _input(event: InputEvent) -> void:
image_current_pixel = canvas.current_pixel
if Global.mirror_view:
image_current_pixel.x = Global.current_project.size.x - image_current_pixel.x
- if not Global.can_draw:
- return
if is_moving_content:
if Input.is_action_just_pressed("transformation_confirm"):
transform_content_confirm()
elif Input.is_action_just_pressed("transformation_cancel"):
transform_content_cancel()
- var project: Project = Global.current_project
+ var project := Global.current_project
if not project.layers[project.current_layer].can_layer_get_drawn():
return
if event is InputEventKey:
@@ -104,16 +108,16 @@ func _input(event: InputEvent) -> void:
if not event is InputEventMouse:
return
var gizmo_hover: Gizmo
- if big_bounding_rectangle.size != Vector2.ZERO:
+ if big_bounding_rectangle.size != Vector2i.ZERO:
for g in gizmos:
if g.rect.has_point(image_current_pixel):
gizmo_hover = Gizmo.new(g.type, g.direction)
break
- if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
+ if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
if gizmo_hover and not dragged_gizmo: # Select a gizmo
- Global.has_focus = false
+ Global.can_draw = false
mouse_pos_on_gizmo_drag = image_current_pixel
dragged_gizmo = gizmo_hover
if Input.is_action_pressed("transform_move_selection_only"):
@@ -126,14 +130,14 @@ func _input(event: InputEvent) -> void:
transform_content_start()
project.selection_offset = Vector2.ZERO
if dragged_gizmo.type == Gizmo.Type.ROTATE:
- var img_size := max(
+ var img_size := maxi(
original_preview_image.get_width(), original_preview_image.get_height()
)
original_preview_image.crop(img_size, img_size)
else:
var prev_temp_rect := temp_rect
- dragged_gizmo.direction.x *= sign(temp_rect.size.x)
- dragged_gizmo.direction.y *= sign(temp_rect.size.y)
+ dragged_gizmo.direction.x *= signi(temp_rect.size.x)
+ dragged_gizmo.direction.y *= signi(temp_rect.size.y)
temp_rect = big_bounding_rectangle
# If prev_temp_rect, which used to be the previous temp_rect, has negative size,
# switch the position and end point in temp_rect
@@ -145,15 +149,12 @@ func _input(event: InputEvent) -> void:
var pos := temp_rect.position.y
temp_rect.position.y = temp_rect.end.y
temp_rect.end.y = pos
- rect_aspect_ratio = abs(temp_rect.size.y / temp_rect.size.x)
+ rect_aspect_ratio = absf(temp_rect.size.y / temp_rect.size.x)
temp_rect_size = temp_rect.size
- temp_rect_pivot = (
- temp_rect.position
- + ((temp_rect.end - temp_rect.position) / 2).floor()
- )
+ temp_rect_pivot = (temp_rect.position + ((temp_rect.end - temp_rect.position) / 2))
- elif dragged_gizmo: # Mouse released, unselect gizmo
- Global.has_focus = true
+ elif dragged_gizmo: # Mouse released, deselect gizmo
+ Global.can_draw = true
dragged_gizmo = null
if not is_moving_content:
commit_undo("Select", undo_data)
@@ -203,15 +204,15 @@ func _move_with_arrow_keys(event: InputEvent) -> void:
if _is_action_direction(event) and arrow_key_move:
var step := Vector2.ONE
- if Input.is_key_pressed(KEY_CONTROL):
+ if Input.is_key_pressed(KEY_CTRL):
step = Global.grid_size
var input := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
- var move := input.rotated(stepify(Global.camera.rotation, PI / 2))
+ var move := input.rotated(snappedf(Global.camera.rotation, PI / 2))
# These checks are needed to fix a bug where the selection got stuck
# to the canvas boundaries when they were 1px away from them
- if is_equal_approx(abs(move.x), 0):
+ if is_equal_approx(absf(move.x), 0.0):
move.x = 0
- if is_equal_approx(abs(move.y), 0):
+ if is_equal_approx(absf(move.y), 0.0):
move.y = 0
move_content(move * step)
@@ -241,7 +242,7 @@ func _is_action_direction_released(event: InputEvent) -> bool:
func _draw() -> void:
- if big_bounding_rectangle.size == Vector2.ZERO:
+ if big_bounding_rectangle.size == Vector2i.ZERO:
return
var position_tmp := position
var scale_tmp := scale
@@ -262,18 +263,10 @@ func _draw() -> void:
draw_set_transform(position, rotation, scale)
-func _big_bounding_rectangle_changed(value: Rect2) -> void:
- big_bounding_rectangle = value
- for slot in Tools._slots.values():
- if slot.tool_node is SelectionTool:
- slot.tool_node.set_spinbox_values()
- _update_gizmos()
-
-
func _update_gizmos() -> void:
var rect_pos: Vector2 = big_bounding_rectangle.position
var rect_end: Vector2 = big_bounding_rectangle.end
- var size: Vector2 = Vector2.ONE * Global.camera.zoom * 10
+ var size: Vector2 = Vector2.ONE / Global.camera.zoom * 10
# Clockwise, starting from top-left corner
gizmos[0].rect = Rect2(rect_pos - size, size)
gizmos[1].rect = Rect2(
@@ -292,17 +285,17 @@ func _update_gizmos() -> void:
# gizmos[8].rect = Rect2(
# Vector2((rect_end.x + rect_pos.x - size.x) / 2, rect_pos.y - size.y - (size.y * 2)), size
# )
- update()
+ queue_redraw()
func _update_on_zoom() -> void:
var zoom := Global.camera.zoom.x
- var size := max(
+ var size := maxi(
Global.current_project.selection_map.get_size().x,
Global.current_project.selection_map.get_size().y
)
- marching_ants_outline.material.set_shader_param("width", zoom)
- marching_ants_outline.material.set_shader_param("frequency", (1.0 / zoom) * 10 * size / 64)
+ marching_ants_outline.material.set_shader_parameter("width", 1.0 / zoom)
+ marching_ants_outline.material.set_shader_parameter("frequency", zoom * 10 * size / 64)
for gizmo in gizmos:
if gizmo.rect.size == Vector2.ZERO:
return
@@ -314,7 +307,7 @@ func _gizmo_resize() -> void:
if Input.is_action_pressed("shape_center"):
# Code inspired from https://github.com/GDQuest/godot-open-rpg
if dir.x != 0 and dir.y != 0: # Border gizmos
- temp_rect.size = ((image_current_pixel - temp_rect_pivot) * 2.0 * dir)
+ temp_rect.size = ((image_current_pixel - temp_rect_pivot) * 2.0 * Vector2(dir))
elif dir.y == 0: # Center left and right gizmos
temp_rect.size.x = (image_current_pixel.x - temp_rect_pivot.x) * 2.0 * dir.x
elif dir.x == 0: # Center top and bottom gizmos
@@ -325,33 +318,33 @@ func _gizmo_resize() -> void:
if Input.is_action_pressed("shape_perfect") or resize_keep_ratio: # Maintain aspect ratio
var end_y := temp_rect.end.y
- if dir == Vector2(1, -1) or dir.x == 0: # Top right corner, center top and center bottom
+ if dir == Vector2i(1, -1) or dir.x == 0: # Top right corner, center top and center bottom
var size := temp_rect.size.y
# Needed in order for resizing to work properly in negative sizes
- if sign(size) != sign(temp_rect.size.x):
- size = abs(size) if temp_rect.size.x > 0 else -abs(size)
+ if signf(size) != signf(temp_rect.size.x):
+ size = absf(size) if temp_rect.size.x > 0 else -absf(size)
temp_rect.size.x = size / rect_aspect_ratio
else: # The rest of the corners
var size := temp_rect.size.x
# Needed in order for resizing to work properly in negative sizes
- if sign(size) != sign(temp_rect.size.y):
- size = abs(size) if temp_rect.size.y > 0 else -abs(size)
+ if signf(size) != signf(temp_rect.size.y):
+ size = absf(size) if temp_rect.size.y > 0 else -absf(size)
temp_rect.size.y = size * rect_aspect_ratio
# Inspired by the solution answered in https://stackoverflow.com/a/50271547
- if dir == Vector2(-1, -1): # Top left corner
+ if dir == Vector2i(-1, -1): # Top left corner
temp_rect.position.y = end_y - temp_rect.size.y
big_bounding_rectangle = temp_rect.abs()
- big_bounding_rectangle.position = big_bounding_rectangle.position.ceil()
- big_bounding_rectangle.size = big_bounding_rectangle.size.floor()
+# big_bounding_rectangle.position = Vector2(big_bounding_rectangle.position).ceil()
+# big_bounding_rectangle.size = big_bounding_rectangle.size.floor()
if big_bounding_rectangle.size.x == 0:
big_bounding_rectangle.size.x = 1
if big_bounding_rectangle.size.y == 0:
big_bounding_rectangle.size.y = 1
- self.big_bounding_rectangle = big_bounding_rectangle # Call the setter method
+ big_bounding_rectangle = big_bounding_rectangle # Call the setter method
resize_selection()
@@ -386,7 +379,7 @@ func resize_selection() -> void:
preview_image.flip_x()
if temp_rect.size.y < 0:
preview_image.flip_y()
- preview_image_texture.create_from_image(preview_image, 0)
+ preview_image_texture = ImageTexture.create_from_image(preview_image)
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(selection_map)
@@ -395,30 +388,30 @@ func resize_selection() -> void:
)
Global.current_project.selection_map = selection_map_copy
Global.current_project.selection_map_changed()
- update()
+ queue_redraw()
func _gizmo_rotate() -> void: # Does not work properly yet
var angle := image_current_pixel.angle_to_point(mouse_pos_on_gizmo_drag)
- angle = deg2rad(floor(rad2deg(angle)))
+ angle = deg_to_rad(floorf(rad_to_deg(angle)))
if angle == prev_angle:
return
prev_angle = angle
# var img_size := max(original_preview_image.get_width(), original_preview_image.get_height())
-# warning-ignore:integer_division
-# warning-ignore:integer_division
# var pivot = Vector2(original_preview_image.get_width()/2, original_preview_image.get_height()/2)
- var pivot := Vector2(big_bounding_rectangle.size.x / 2, big_bounding_rectangle.size.y / 2)
+ var pivot := Vector2(big_bounding_rectangle.size.x / 2.0, big_bounding_rectangle.size.y / 2.0)
preview_image.copy_from(original_preview_image)
if original_big_bounding_rectangle.position != big_bounding_rectangle.position:
preview_image.fill(Color(0, 0, 0, 0))
- var pos_diff := (original_big_bounding_rectangle.position - big_bounding_rectangle.position).abs()
+ var pos_diff := (
+ (original_big_bounding_rectangle.position - big_bounding_rectangle.position).abs()
+ )
# pos_diff.y = 0
preview_image.blit_rect(
original_preview_image, Rect2(Vector2.ZERO, preview_image.get_size()), pos_diff
)
DrawingAlgos.nn_rotate(preview_image, angle, pivot)
- preview_image_texture.create_from_image(preview_image, 0)
+ preview_image_texture = ImageTexture.create_from_image(preview_image)
var bitmap_image := original_bitmap
var bitmap_pivot := (
@@ -428,17 +421,17 @@ func _gizmo_rotate() -> void: # Does not work properly yet
DrawingAlgos.nn_rotate(bitmap_image, angle, bitmap_pivot)
Global.current_project.selection_map = bitmap_image
Global.current_project.selection_map_changed()
- self.big_bounding_rectangle = bitmap_image.get_used_rect()
- update()
+ big_bounding_rectangle = bitmap_image.get_used_rect()
+ queue_redraw()
-func select_rect(rect: Rect2, operation: int = SelectionOperation.ADD) -> void:
- var project: Project = Global.current_project
+func select_rect(rect: Rect2i, operation: int = SelectionOperation.ADD) -> void:
+ var project := Global.current_project
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
# Used only if the selection is outside of the canvas boundaries,
# on the left and/or above (negative coords)
- var offset_position := Vector2.ZERO
+ var offset_position := Vector2i.ZERO
if big_bounding_rectangle.position.x < 0:
rect.position.x -= big_bounding_rectangle.position.x
offset_position.x = big_bounding_rectangle.position.x
@@ -446,7 +439,7 @@ func select_rect(rect: Rect2, operation: int = SelectionOperation.ADD) -> void:
rect.position.y -= big_bounding_rectangle.position.y
offset_position.y = big_bounding_rectangle.position.y
- if offset_position != Vector2.ZERO:
+ if offset_position != Vector2i.ZERO:
big_bounding_rectangle.position -= offset_position
selection_map_copy.move_bitmap_values(project)
@@ -458,30 +451,30 @@ func select_rect(rect: Rect2, operation: int = SelectionOperation.ADD) -> void:
selection_map_copy.clear()
for x in range(rect.position.x, rect.end.x):
for y in range(rect.position.y, rect.end.y):
- var pos := Vector2(x, y)
- if !Rect2(Vector2.ZERO, selection_map_copy.get_size()).has_point(pos):
+ var pos := Vector2i(x, y)
+ if !Rect2i(Vector2i.ZERO, selection_map_copy.get_size()).has_point(pos):
continue
selection_map_copy.select_pixel(pos, project.selection_map.is_pixel_selected(pos))
big_bounding_rectangle = selection_map_copy.get_used_rect()
- if offset_position != Vector2.ZERO:
+ if offset_position != Vector2i.ZERO:
big_bounding_rectangle.position += offset_position
selection_map_copy.move_bitmap_values(project)
project.selection_map = selection_map_copy
- self.big_bounding_rectangle = big_bounding_rectangle # call getter method
+ big_bounding_rectangle = big_bounding_rectangle # call getter method
func move_borders_start() -> void:
undo_data = get_undo_data(false)
-func move_borders(move: Vector2) -> void:
- if move == Vector2.ZERO:
+func move_borders(move: Vector2i) -> void:
+ if move == Vector2i.ZERO:
return
- marching_ants_outline.offset += move
- self.big_bounding_rectangle.position += move
- update()
+ marching_ants_outline.offset += Vector2(move)
+ big_bounding_rectangle.position += move
+ queue_redraw()
func move_borders_end() -> void:
@@ -493,7 +486,7 @@ func move_borders_end() -> void:
commit_undo("Select", undo_data)
else:
Global.current_project.selection_map_changed()
- update()
+ queue_redraw()
func transform_content_start() -> void:
@@ -509,7 +502,7 @@ func transform_content_start() -> void:
original_bitmap.copy_from(Global.current_project.selection_map)
original_big_bounding_rectangle = big_bounding_rectangle
original_offset = Global.current_project.selection_offset
- update()
+ queue_redraw()
func move_content(move: Vector2) -> void:
@@ -519,7 +512,7 @@ func move_content(move: Vector2) -> void:
func transform_content_confirm() -> void:
if not is_moving_content:
return
- var project: Project = Global.current_project
+ var project := Global.current_project
for cel in _get_selected_draw_cels():
var cel_image: Image = cel.get_image()
var src: Image = preview_image
@@ -553,17 +546,17 @@ func transform_content_confirm() -> void:
original_bitmap = SelectionMap.new()
is_moving_content = false
is_pasting = false
- update()
+ queue_redraw()
func transform_content_cancel() -> void:
if preview_image.is_empty():
return
- var project: Project = Global.current_project
+ var project := Global.current_project
project.selection_offset = original_offset
is_moving_content = false
- self.big_bounding_rectangle = original_big_bounding_rectangle
+ big_bounding_rectangle = original_big_bounding_rectangle
project.selection_map = original_bitmap
project.selection_map_changed()
preview_image = original_preview_image
@@ -583,7 +576,7 @@ func transform_content_cancel() -> void:
preview_image = Image.new()
original_bitmap = SelectionMap.new()
is_pasting = false
- update()
+ queue_redraw()
func commit_undo(action: String, undo_data_tmp: Dictionary) -> void:
@@ -591,7 +584,7 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void:
print("No undo data found!")
return
var redo_data := get_undo_data(undo_data_tmp["undo_image"])
- var project: Project = Global.current_project
+ var project := Global.current_project
project.undos += 1
project.undo_redo.create_action(action)
@@ -614,15 +607,14 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void:
if not image is Image:
continue
project.undo_redo.add_do_property(image, "data", redo_data[image])
- image.unlock()
for image in undo_data_tmp:
if not image is Image:
continue
project.undo_redo.add_undo_property(image, "data", undo_data_tmp[image])
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_do_method(project, "selection_map_changed")
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_undo_method(project, "selection_map_changed")
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_do_method(project.selection_map_changed)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_undo_method(project.selection_map_changed)
project.undo_redo.commit_action()
undo_data.clear()
@@ -630,7 +622,7 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void:
func get_undo_data(undo_image: bool) -> Dictionary:
var data := {}
- var project: Project = Global.current_project
+ var project := Global.current_project
data["selection_map"] = project.selection_map
data["big_bounding_rectangle"] = big_bounding_rectangle
data["outline_offset"] = Global.current_project.selection_offset
@@ -639,16 +631,14 @@ func get_undo_data(undo_image: bool) -> Dictionary:
if undo_image:
var images := _get_selected_draw_images()
for image in images:
- image.unlock()
data[image] = image.data
- image.lock()
return data
-func _get_selected_draw_cels() -> Array: # Array of BaseCel(s)
- var cels := []
- var project: Project = Global.current_project
+func _get_selected_draw_cels() -> Array[BaseCel]:
+ var cels: Array[BaseCel] = []
+ var project := Global.current_project
for cel_index in project.selected_cels:
var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
if not cel is PixelCel:
@@ -658,9 +648,9 @@ func _get_selected_draw_cels() -> Array: # Array of BaseCel(s)
return cels
-func _get_selected_draw_images() -> Array: # Array of Image(s)
- var images := []
- var project: Project = Global.current_project
+func _get_selected_draw_images() -> Array[Image]:
+ var images: Array[Image] = []
+ var project := Global.current_project
for cel_index in project.selected_cels:
var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
if not cel is PixelCel:
@@ -671,7 +661,7 @@ func _get_selected_draw_images() -> Array: # Array of Image(s)
func cut() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if !project.layers[project.current_layer].can_layer_get_drawn():
return
copy()
@@ -679,7 +669,7 @@ func cut() -> void:
func copy() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var cl_image := Image.new()
var cl_selection_map := SelectionMap.new()
var cl_big_bounding_rectangle := Rect2()
@@ -700,20 +690,18 @@ func copy() -> void:
selection_map_copy.move_bitmap_values(project, false)
cl_selection_map = selection_map_copy
else:
- to_copy = image.get_rect(big_bounding_rectangle)
- to_copy.lock()
+ to_copy = image.get_region(big_bounding_rectangle)
# Remove unincluded pixels if the selection is not a single rectangle
var offset_pos := big_bounding_rectangle.position
for x in to_copy.get_size().x:
for y in to_copy.get_size().y:
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
if offset_pos.x < 0:
offset_pos.x = 0
if offset_pos.y < 0:
offset_pos.y = 0
if not project.selection_map.is_pixel_selected(pos + offset_pos):
to_copy.set_pixelv(pos, Color(0))
- to_copy.unlock()
cl_selection_map.copy_from(project.selection_map)
cl_big_bounding_rectangle = big_bounding_rectangle
@@ -726,25 +714,22 @@ func copy() -> void:
"selection_offset": cl_selection_offset,
}
- var clipboard_file := File.new()
- clipboard_file.open(CLIPBOARD_FILE_PATH, File.WRITE)
+ var clipboard_file := FileAccess.open(CLIPBOARD_FILE_PATH, FileAccess.WRITE)
clipboard_file.store_var(transfer_clipboard, true)
clipboard_file.close()
if !to_copy.is_empty():
var pattern: Patterns.Pattern = Global.patterns_popup.get_pattern(0)
pattern.image = to_copy
- var tex := ImageTexture.new()
- tex.create_from_image(to_copy, 0)
+ var tex := ImageTexture.create_from_image(to_copy)
var container = Global.patterns_popup.get_node("ScrollContainer/PatternContainer")
container.get_child(0).get_child(0).texture = tex
func paste(in_place := false) -> void:
- var clipboard_file := File.new()
- if !clipboard_file.file_exists(CLIPBOARD_FILE_PATH):
+ if !FileAccess.file_exists(CLIPBOARD_FILE_PATH):
return
- clipboard_file.open(CLIPBOARD_FILE_PATH, File.READ)
+ var clipboard_file := FileAccess.open(CLIPBOARD_FILE_PATH, FileAccess.READ)
var clipboard = clipboard_file.get_var(true)
clipboard_file.close()
@@ -760,7 +745,7 @@ func paste(in_place := false) -> void:
transform_content_confirm()
undo_data = get_undo_data(true)
clear_selection()
- var project: Project = Global.current_project
+ var project := Global.current_project
var clip_map := SelectionMap.new()
clip_map.data = clipboard.selection_map
@@ -774,21 +759,21 @@ func paste(in_place := false) -> void:
project.selection_offset = clipboard.selection_offset
big_bounding_rectangle = clipboard.big_bounding_rectangle
if not in_place: # If "Paste" is selected, and not "Paste in Place"
- var camera_center := Global.camera.get_camera_screen_center()
- camera_center -= big_bounding_rectangle.size / 2
+ var camera_center := Global.camera.get_screen_center_position()
+ camera_center -= Vector2(big_bounding_rectangle.size) / 2.0
var max_pos := project.size - big_bounding_rectangle.size
if max_pos.x >= 0:
- camera_center.x = clamp(camera_center.x, 0, max_pos.x)
+ camera_center.x = clampf(camera_center.x, 0, max_pos.x)
else:
camera_center.x = 0
if max_pos.y >= 0:
- camera_center.y = clamp(camera_center.y, 0, max_pos.y)
+ camera_center.y = clampf(camera_center.y, 0, max_pos.y)
else:
camera_center.y = 0
big_bounding_rectangle.position = camera_center.floor()
project.selection_map.move_bitmap_values(Global.current_project, false)
- self.big_bounding_rectangle = big_bounding_rectangle
+ big_bounding_rectangle = big_bounding_rectangle
temp_rect = big_bounding_rectangle
is_moving_content = true
is_pasting = true
@@ -797,12 +782,12 @@ func paste(in_place := false) -> void:
original_offset = project.selection_offset
original_bitmap.copy_from(project.selection_map)
preview_image.copy_from(original_preview_image)
- preview_image_texture.create_from_image(preview_image, 0)
+ preview_image_texture = ImageTexture.create_from_image(preview_image)
project.selection_map_changed()
func delete(selected_cels := true) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if !project.layers[project.current_layer].can_layer_get_drawn():
return
if is_moving_content:
@@ -811,20 +796,19 @@ func delete(selected_cels := true) -> void:
preview_image = Image.new()
original_bitmap = SelectionMap.new()
is_pasting = false
- update()
+ queue_redraw()
commit_undo("Draw", undo_data)
return
var undo_data_tmp := get_undo_data(true)
- var images: Array
+ var images: Array[Image]
if selected_cels:
images = _get_selected_draw_images()
else:
images = [project.get_current_cel().get_image()]
if project.has_selection:
- var blank := Image.new()
- blank.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ var blank := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
# In case the selection map is bigger than the canvas
@@ -840,7 +824,7 @@ func delete(selected_cels := true) -> void:
func new_brush() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if !project.has_selection:
return
@@ -851,7 +835,7 @@ func new_brush() -> void:
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
selection_map_copy.move_bitmap_values(project, false)
- var clipboard = str2var(OS.get_clipboard())
+ var clipboard = str_to_var(DisplayServer.clipboard_get())
if typeof(clipboard) == TYPE_DICTIONARY: # A sanity check
if not clipboard.has_all(
["image", "selection_map", "big_bounding_rectangle", "selection_offset"]
@@ -859,12 +843,11 @@ func new_brush() -> void:
return
clipboard.selection_map = selection_map_copy
else:
- brush = image.get_rect(big_bounding_rectangle)
- brush.lock()
+ brush = image.get_region(big_bounding_rectangle)
# Remove unincluded pixels if the selection is not a single rectangle
for x in brush.get_size().x:
for y in brush.get_size().y:
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
var offset_pos := big_bounding_rectangle.position
if offset_pos.x < 0:
offset_pos.x = 0
@@ -872,10 +855,9 @@ func new_brush() -> void:
offset_pos.y = 0
if not project.selection_map.is_pixel_selected(pos + offset_pos):
brush.set_pixelv(pos, Color(0))
- brush.unlock()
if !brush.is_invisible():
- var brush_used: Image = brush.get_rect(brush.get_used_rect())
+ var brush_used: Image = brush.get_region(brush.get_used_rect())
project.brushes.append(brush_used)
Brushes.add_project_brush(brush_used)
@@ -883,14 +865,14 @@ func new_brush() -> void:
func select_all() -> void:
var undo_data_tmp := get_undo_data(false)
clear_selection()
- var full_rect := Rect2(Vector2.ZERO, Global.current_project.size)
+ var full_rect := Rect2i(Vector2.ZERO, Global.current_project.size)
select_rect(full_rect)
commit_undo("Select", undo_data_tmp)
func invert() -> void:
transform_content_confirm()
- var project: Project = Global.current_project
+ var project := Global.current_project
var undo_data_tmp := get_undo_data(false)
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(project.selection_map)
@@ -898,13 +880,13 @@ func invert() -> void:
selection_map_copy.invert()
project.selection_map = selection_map_copy
project.selection_map_changed()
- self.big_bounding_rectangle = selection_map_copy.get_used_rect()
+ big_bounding_rectangle = selection_map_copy.get_used_rect()
project.selection_offset = Vector2.ZERO
commit_undo("Select", undo_data_tmp)
func clear_selection(use_undo := false) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if !project.has_selection:
return
transform_content_confirm()
@@ -915,37 +897,33 @@ func clear_selection(use_undo := false) -> void:
selection_map_copy.clear()
project.selection_map = selection_map_copy
- self.big_bounding_rectangle = Rect2()
+ big_bounding_rectangle = Rect2()
project.selection_offset = Vector2.ZERO
- update()
+ queue_redraw()
if use_undo:
commit_undo("Clear Selection", undo_data_tmp)
func _get_preview_image() -> void:
- var project: Project = Global.current_project
- var blended_image := Image.new()
- blended_image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ var project := Global.current_project
+ var blended_image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
Export.blend_selected_cels(blended_image, project.frames[project.current_frame])
if original_preview_image.is_empty():
- original_preview_image = blended_image.get_rect(big_bounding_rectangle)
- original_preview_image.lock()
+ original_preview_image = blended_image.get_region(big_bounding_rectangle)
# For non-rectangular selections
for x in range(0, big_bounding_rectangle.size.x):
for y in range(0, big_bounding_rectangle.size.y):
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
if !project.can_pixel_get_drawn(pos + big_bounding_rectangle.position):
original_preview_image.set_pixelv(pos, Color(0, 0, 0, 0))
- original_preview_image.unlock()
if original_preview_image.is_invisible():
original_preview_image = Image.new()
return
preview_image.copy_from(original_preview_image)
- preview_image_texture.create_from_image(preview_image, 0)
+ preview_image_texture = ImageTexture.create_from_image(preview_image)
- var clear_image := Image.new()
- clear_image.create(
+ var clear_image := Image.create(
original_preview_image.get_width(),
original_preview_image.get_height(),
false,
@@ -965,16 +943,13 @@ func _get_preview_image() -> void:
func _get_selected_image(cel_image: Image) -> Image:
- var project: Project = Global.current_project
+ var project := Global.current_project
var image := Image.new()
- image = cel_image.get_rect(big_bounding_rectangle)
- image.lock()
+ image = cel_image.get_region(big_bounding_rectangle)
# For non-rectangular selections
for x in range(0, big_bounding_rectangle.size.x):
for y in range(0, big_bounding_rectangle.size.y):
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
if !project.can_pixel_get_drawn(pos + big_bounding_rectangle.position):
image.set_pixelv(pos, Color(0, 0, 0, 0))
-
- image.unlock()
return image
diff --git a/src/UI/Canvas/TileMode.gd b/src/UI/Canvas/TileMode.gd
index b949ec9ed85..316f2eeca16 100644
--- a/src/UI/Canvas/TileMode.gd
+++ b/src/UI/Canvas/TileMode.gd
@@ -16,37 +16,33 @@ func _draw() -> void:
var modulate_color := Color(
tilemode_opacity, tilemode_opacity, tilemode_opacity, tilemode_opacity
) # premultiply alpha blending is applied
- var current_frame_texture: Texture = Global.canvas.currently_visible_frame.get_texture()
+ var current_frame_texture: Texture2D = Global.canvas.currently_visible_frame.get_texture()
for pos in positions:
draw_texture(current_frame_texture, pos, modulate_color)
draw_set_transform(Vector2.ZERO, 0, Vector2.ONE)
-func get_tile_positions() -> Array:
+func get_tile_positions() -> Array[Vector2i]:
var defaulted_tiles := tiles
if defaulted_tiles == null:
defaulted_tiles = Global.current_project.tiles
- var x_basis: Vector2 = defaulted_tiles.x_basis
- var y_basis: Vector2 = defaulted_tiles.y_basis
- var tile_mode: int = defaulted_tiles.mode
+ var x_basis := defaulted_tiles.x_basis
+ var y_basis := defaulted_tiles.y_basis
+ var tile_mode := defaulted_tiles.mode
var x_range := (
- range(-1, 2)
- if tile_mode in [Tiles.MODE.X_AXIS, Tiles.MODE.BOTH]
- else range(0, 1)
+ range(-1, 2) if tile_mode in [Tiles.MODE.X_AXIS, Tiles.MODE.BOTH] else range(0, 1)
)
var y_range := (
- range(-1, 2)
- if tile_mode in [Tiles.MODE.Y_AXIS, Tiles.MODE.BOTH]
- else range(0, 1)
+ range(-1, 2) if tile_mode in [Tiles.MODE.Y_AXIS, Tiles.MODE.BOTH] else range(0, 1)
)
- var positions := []
+ var positions: Array[Vector2i] = []
for r in y_range:
for c in x_range:
if not draw_center and r == 0 and c == 0:
continue
- var position: Vector2 = r * y_basis + c * x_basis
- positions.append(position)
+ var pos: Vector2i = r * y_basis + c * x_basis
+ positions.append(pos)
return positions
diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd
index 164fdfebab9..26c355a49e9 100644
--- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd
+++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd
@@ -1,14 +1,23 @@
extends PanelContainer
-onready var canvas_preview := $"%CanvasPreview" as Node2D
-onready var camera := $"%CameraPreview" as Camera2D
-onready var play_button := $"%PlayButton" as Button
-onready var start_frame := $"%StartFrame" as ValueSlider
-onready var end_frame := $"%EndFrame" as ValueSlider
+@onready var preview_zoom_slider := $VBox/HBox/VBoxContainer/PreviewZoomSlider as VSlider
+@onready var canvas_preview := $"%CanvasPreview" as Node2D
+@onready var camera := $"%CameraPreview" as Camera2D
+@onready var play_button := $"%PlayButton" as Button
+@onready var start_frame := $"%StartFrame" as ValueSlider
+@onready var end_frame := $"%EndFrame" as ValueSlider
+
+
+func _ready() -> void:
+ camera.zoom_changed.connect(_zoom_changed)
+
+
+func _zoom_changed() -> void:
+ preview_zoom_slider.value = camera.zoom.x
func _on_PreviewZoomSlider_value_changed(value: float) -> void:
- camera.zoom = -Vector2(value, value)
+ camera.zoom = Vector2(value, value)
camera.save_values_to_project()
camera.update_transparent_checker_offset()
@@ -17,11 +26,11 @@ func _on_PlayButton_toggled(button_pressed: bool) -> void:
if button_pressed:
if canvas_preview.mode == canvas_preview.Mode.TIMELINE:
if Global.current_project.frames.size() <= 1:
- play_button.pressed = false
+ play_button.button_pressed = false
return
else:
if start_frame.value == end_frame.value:
- play_button.pressed = false
+ play_button.button_pressed = false
return
canvas_preview.animation_timer.start()
Global.change_button_texturerect(play_button.get_child(0), "pause.png")
@@ -31,7 +40,7 @@ func _on_PlayButton_toggled(button_pressed: bool) -> void:
func _on_OptionButton_item_selected(index: int) -> void:
- play_button.pressed = false
+ play_button.button_pressed = false
canvas_preview.mode = index
if index == 0:
$VBox/Animation/VBoxContainer/Options.visible = false
@@ -40,7 +49,7 @@ func _on_OptionButton_item_selected(index: int) -> void:
)
else:
$VBox/Animation/VBoxContainer/Options.visible = true
- canvas_preview.update()
+ canvas_preview.queue_redraw()
func _on_HFrames_value_changed(value: float) -> void:
@@ -48,7 +57,7 @@ func _on_HFrames_value_changed(value: float) -> void:
var frames: int = canvas_preview.h_frames * canvas_preview.v_frames
start_frame.max_value = frames
end_frame.max_value = frames
- canvas_preview.update()
+ canvas_preview.queue_redraw()
func _on_VFrames_value_changed(value: float) -> void:
@@ -56,7 +65,7 @@ func _on_VFrames_value_changed(value: float) -> void:
var frames: int = canvas_preview.h_frames * canvas_preview.v_frames
start_frame.max_value = frames
end_frame.max_value = frames
- canvas_preview.update()
+ canvas_preview.queue_redraw()
func _on_StartFrame_value_changed(value: float) -> void:
@@ -64,7 +73,7 @@ func _on_StartFrame_value_changed(value: float) -> void:
canvas_preview.start_sprite_sheet_frame = value
if end_frame.value < value:
end_frame.value = value
- canvas_preview.update()
+ canvas_preview.queue_redraw()
func _on_EndFrame_value_changed(value: float) -> void:
@@ -72,7 +81,7 @@ func _on_EndFrame_value_changed(value: float) -> void:
if start_frame.value > value:
start_frame.value = value
canvas_preview.frame_index = value - 1
- canvas_preview.update()
+ canvas_preview.queue_redraw()
func _on_PreviewViewportContainer_mouse_entered() -> void:
diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn
index 295a9f40e3f..5f3aebff2ad 100644
--- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn
+++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn
@@ -1,175 +1,153 @@
-[gd_scene load_steps=10 format=2]
-
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=2]
-[ext_resource path="res://src/UI/Canvas/CameraMovement.gd" type="Script" id=3]
-[ext_resource path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd" type="Script" id=4]
-[ext_resource path="res://src/UI/Canvas/CanvasPreview.tscn" type="PackedScene" id=5]
-[ext_resource path="res://assets/graphics/timeline/play.png" type="Texture" id=6]
-[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.tscn" type="PackedScene" id=7]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=8]
-
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 2 )
-shader_param/size = 10.0
-shader_param/alpha = 1.0
-shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0, 0 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = false
+[gd_scene load_steps=10 format=3 uid="uid://ccsihk3yxwei5"]
+
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"]
+[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="2"]
+[ext_resource type="Script" path="res://src/UI/Canvas/CameraMovement.gd" id="3"]
+[ext_resource type="Script" path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd" id="4"]
+[ext_resource type="PackedScene" uid="uid://c546tskdu53j1" path="res://src/UI/Canvas/CanvasPreview.tscn" id="5"]
+[ext_resource type="Texture2D" uid="uid://c7smxwfa8826j" path="res://assets/graphics/timeline/play.png" id="6"]
+[ext_resource type="PackedScene" uid="uid://cii2hpylme60s" path="res://src/UI/Nodes/CollapsibleContainer.tscn" id="7"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="8"]
+
+[sub_resource type="ShaderMaterial" id="1"]
+shader = ExtResource("2")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0, 0)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = false
[node name="CanvasPreviewContainer" type="PanelContainer"]
-margin_right = 328.0
-margin_bottom = 174.0
-rect_min_size = Vector2( 0, 110 )
-script = ExtResource( 4 )
+custom_minimum_size = Vector2(0, 110)
+offset_right = 328.0
+offset_bottom = 174.0
+script = ExtResource("4")
[node name="VBox" type="VBoxContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 321.0
-margin_bottom = 167.0
+layout_mode = 2
[node name="HBox" type="HBoxContainer" parent="VBox"]
-margin_right = 314.0
-margin_bottom = 136.0
+layout_mode = 2
size_flags_vertical = 3
[node name="VBoxContainer" type="VBoxContainer" parent="VBox/HBox"]
-margin_right = 16.0
-margin_bottom = 136.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBox/HBox/VBoxContainer"]
-margin_left = 4.0
-margin_right = 12.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 4
text = "+"
-align = 1
[node name="PreviewZoomSlider" type="VSlider" parent="VBox/HBox/VBoxContainer"]
-margin_top = 18.0
-margin_right = 16.0
-margin_bottom = 118.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 3
+mouse_default_cursor_shape = 2
+min_value = 1.0
+max_value = 5.0
step = 0.01
+value = 1.0
[node name="Label2" type="Label" parent="VBox/HBox/VBoxContainer"]
-margin_left = 5.0
-margin_top = 122.0
-margin_right = 10.0
-margin_bottom = 136.0
+layout_mode = 2
size_flags_horizontal = 4
text = "-"
-align = 1
-[node name="PreviewViewportContainer" type="ViewportContainer" parent="VBox/HBox"]
-margin_left = 20.0
-margin_right = 314.0
-margin_bottom = 136.0
+[node name="PreviewViewportContainer" type="SubViewportContainer" parent="VBox/HBox"]
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
stretch = true
-[node name="Viewport" type="Viewport" parent="VBox/HBox/PreviewViewportContainer"]
-size = Vector2( 294, 136 )
+[node name="SubViewport" type="SubViewport" parent="VBox/HBox/PreviewViewportContainer"]
transparent_bg = true
handle_input_locally = false
-render_target_update_mode = 3
+canvas_item_default_texture_filter = 0
+size = Vector2i(308, 139)
+render_target_update_mode = 4
-[node name="TransparentChecker" parent="VBox/HBox/PreviewViewportContainer/Viewport" instance=ExtResource( 1 )]
-material = SubResource( 1 )
+[node name="TransparentChecker" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("1")]
+material = SubResource("1")
+anchors_preset = 0
-[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/Viewport" instance=ExtResource( 5 )]
+[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("5")]
unique_name_in_owner = true
-[node name="CameraPreview" type="Camera2D" parent="VBox/HBox/PreviewViewportContainer/Viewport"]
+[node name="CameraPreview" type="Camera2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport"]
unique_name_in_owner = true
-offset = Vector2( 32, 32 )
-current = true
-zoom = Vector2( 0.15, 0.15 )
-script = ExtResource( 3 )
+offset = Vector2(32, 32)
+zoom = Vector2(0.15, 0.15)
+script = ExtResource("3")
index = 2
[node name="Animation" type="HBoxContainer" parent="VBox"]
-margin_top = 140.0
-margin_right = 314.0
-margin_bottom = 160.0
+layout_mode = 2
[node name="PlayButton" type="Button" parent="VBox/Animation" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_right = 20.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 0 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
size_flags_vertical = 0
+mouse_default_cursor_shape = 2
toggle_mode = true
[node name="TextureRect" type="TextureRect" parent="VBox/Animation/PlayButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -3.5
-margin_top = -6.0
-margin_right = 3.5
-margin_bottom = 6.0
+offset_left = -3.5
+offset_top = -6.0
+offset_right = 3.5
+offset_bottom = 6.0
mouse_default_cursor_shape = 2
-texture = ExtResource( 6 )
+texture = ExtResource("6")
[node name="VBoxContainer" type="VBoxContainer" parent="VBox/Animation"]
-margin_left = 24.0
-margin_right = 314.0
-margin_bottom = 20.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Mode" type="HBoxContainer" parent="VBox/Animation/VBoxContainer"]
-margin_right = 290.0
-margin_bottom = 20.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBox/Animation/VBoxContainer/Mode"]
-margin_top = 3.0
-margin_right = 111.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Animation mode:"
[node name="OptionButton" type="OptionButton" parent="VBox/Animation/VBoxContainer/Mode"]
-margin_left = 115.0
-margin_right = 290.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "All frames"
+mouse_default_cursor_shape = 2
clip_text = true
-align = 1
-items = [ "All frames", null, false, 0, null, "Current frame as spritesheet", null, false, 1, null ]
+item_count = 2
selected = 0
+popup/item_0/text = "All frames"
+popup/item_0/id = 0
+popup/item_1/text = "Current frame as spritesheet"
+popup/item_1/id = 1
-[node name="Options" parent="VBox/Animation/VBoxContainer" instance=ExtResource( 7 )]
+[node name="Options" parent="VBox/Animation/VBoxContainer" instance=ExtResource("7")]
visible = false
-margin_top = 24.0
-margin_right = 290.0
-margin_bottom = 44.0
+layout_mode = 2
text = "Spritesheet options"
[node name="GridContainer" type="GridContainer" parent="VBox/Animation/VBoxContainer/Options"]
visible = false
-margin_right = 290.0
-margin_bottom = 52.0
+layout_mode = 2
columns = 2
-[node name="HFrames" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
-margin_right = 6.0
-margin_bottom = 6.0
-rect_min_size = Vector2( 0, 24 )
-mouse_default_cursor_shape = 2
+[node name="HFrames" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
allow_greater = true
@@ -178,16 +156,16 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
prefix = "Horizontal frames:"
-[node name="VFrames" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
-margin_right = 6.0
-margin_bottom = 6.0
-rect_min_size = Vector2( 0, 24 )
-mouse_default_cursor_shape = 2
+[node name="VFrames" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
allow_greater = true
@@ -196,17 +174,17 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
prefix = "Vertical frames:"
-[node name="StartFrame" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
+[node name="StartFrame" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-rect_min_size = Vector2( 0, 24 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
max_value = 1.0
value = 1.0
@@ -215,17 +193,17 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
prefix = "Start frame:"
-[node name="EndFrame" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
+[node name="EndFrame" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"]
unique_name_in_owner = true
-margin_right = 6.0
-margin_bottom = 6.0
-rect_min_size = Vector2( 0, 24 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = 1.0
max_value = 1.0
value = 1.0
@@ -234,7 +212,7 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 8 )
+script = ExtResource("8")
prefix = "End frame:"
[connection signal="value_changed" from="VBox/HBox/VBoxContainer/PreviewZoomSlider" to="." method="_on_PreviewZoomSlider_value_changed"]
diff --git a/src/UI/ColorPickers/ColorPickers.gd b/src/UI/ColorPickers/ColorPickers.gd
index b667bb4b0d7..9620e4bef44 100644
--- a/src/UI/ColorPickers/ColorPickers.gd
+++ b/src/UI/ColorPickers/ColorPickers.gd
@@ -1,18 +1,15 @@
extends Container
-onready var left_picker := $ColorPickersHorizontal/LeftColorPickerButton
-onready var right_picker := $ColorPickersHorizontal/RightColorPickerButton
-onready var average_color = $"%AverageColor"
-onready var transparent_checker = $"%TransparentChecker"
+@onready var left_picker := $ColorPickersHorizontal/LeftColorPickerButton as ColorPickerButton
+@onready var right_picker := $ColorPickersHorizontal/RightColorPickerButton as ColorPickerButton
+@onready var average_color := $"%AverageColor" as ColorRect
func _ready() -> void:
- Tools.connect("color_changed", self, "update_color")
+ Tools.color_changed.connect(update_color)
left_picker.get_picker().presets_visible = false
right_picker.get_picker().presets_visible = false
_average(left_picker.color, right_picker.color)
- transparent_checker.rect_position = average_color.rect_position
- transparent_checker.rect_size = average_color.rect_size
func _on_ColorSwitch_pressed() -> void:
@@ -20,27 +17,27 @@ func _on_ColorSwitch_pressed() -> void:
func _on_ColorPickerButton_color_changed(color: Color, right: bool):
- var button := BUTTON_RIGHT if right else BUTTON_LEFT
+ var button := MOUSE_BUTTON_RIGHT if right else MOUSE_BUTTON_LEFT
Tools.assign_color(color, button)
_average(left_picker.color, right_picker.color)
func _on_ToLeft_pressed():
- Tools.assign_color(average_color.color, BUTTON_LEFT)
+ Tools.assign_color(average_color.color, MOUSE_BUTTON_LEFT)
func _on_ToRight_pressed():
- Tools.assign_color(average_color.color, BUTTON_RIGHT)
+ Tools.assign_color(average_color.color, MOUSE_BUTTON_RIGHT)
func _on_ColorPickerButton_pressed() -> void:
Global.can_draw = false
- Tools.disconnect("color_changed", self, "update_color")
+ Tools.color_changed.disconnect(update_color)
func _on_ColorPickerButton_popup_closed() -> void:
Global.can_draw = true
- Tools.connect("color_changed", self, "update_color")
+ Tools.color_changed.connect(update_color)
func _on_ColorDefaults_pressed() -> void:
@@ -48,7 +45,7 @@ func _on_ColorDefaults_pressed() -> void:
func update_color(color: Color, button: int) -> void:
- if button == BUTTON_LEFT:
+ if button == MOUSE_BUTTON_LEFT:
left_picker.color = color
else:
right_picker.color = color
@@ -56,23 +53,20 @@ func update_color(color: Color, button: int) -> void:
func _average(color_1: Color, color_2: Color) -> void:
- var average_r = (color_1.r + color_2.r) / 2.0
- var average_g = (color_1.g + color_2.g) / 2.0
- var average_b = (color_1.b + color_2.b) / 2.0
- var average_a = (color_1.a + color_2.a) / 2.0
+ var average_r := (color_1.r + color_2.r) / 2.0
+ var average_g := (color_1.g + color_2.g) / 2.0
+ var average_b := (color_1.b + color_2.b) / 2.0
+ var average_a := (color_1.a + color_2.a) / 2.0
var average := Color(average_r, average_g, average_b, average_a)
var copy_button = average_color.get_parent()
- copy_button.hint_tooltip = str("Average Color:\n#", average.to_html(), "\n(Press to Copy)")
+ copy_button.tooltip_text = str("Average Color:\n#", average.to_html(), "\n(Press to Copy)")
average_color.color = average
func _on_CopyAverage_button_down():
- transparent_checker.visible = false
average_color.visible = false
- OS.clipboard = average_color.color.to_html()
func _on_CopyAverage_button_up():
- transparent_checker.visible = true
average_color.visible = true
diff --git a/src/UI/ColorPickers/ColorPickers.tscn b/src/UI/ColorPickers/ColorPickers.tscn
index f8e47b5fb64..68777f3906d 100644
--- a/src/UI/ColorPickers/ColorPickers.tscn
+++ b/src/UI/ColorPickers/ColorPickers.tscn
@@ -1,187 +1,163 @@
-[gd_scene load_steps=10 format=2]
-
-[ext_resource path="res://assets/graphics/misc/color_defaults.png" type="Texture" id=1]
-[ext_resource path="res://assets/graphics/misc/color_switch.png" type="Texture" id=2]
-[ext_resource path="res://src/UI/ColorPickers/ColorPickers.gd" type="Script" id=3]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=4]
-[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=5]
-[ext_resource path="res://assets/graphics/timeline/move_arrow.png" type="Texture" id=6]
-
-[sub_resource type="InputEventAction" id=20]
-action = "switch_colors"
-
-[sub_resource type="ShortCut" id=19]
-shortcut = SubResource( 20 )
-
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 5 )
-shader_param/size = 10.0
-shader_param/alpha = 1.0
-shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0, 0 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = false
+[gd_scene load_steps=11 format=3 uid="uid://c3vcvhh4d8hd7"]
+
+[ext_resource type="Texture2D" uid="uid://dkpxkdk1xf0ea" path="res://assets/graphics/misc/color_defaults.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://d0v821l01w7go" path="res://assets/graphics/misc/color_switch.png" id="2"]
+[ext_resource type="Script" path="res://src/UI/ColorPickers/ColorPickers.gd" id="3"]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="4"]
+[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="5"]
+[ext_resource type="Texture2D" uid="uid://d1oxrkwndy5fi" path="res://assets/graphics/timeline/move_arrow.png" id="6"]
+
+[sub_resource type="Shortcut" id="19"]
+
+[sub_resource type="ShaderMaterial" id="1"]
+shader = ExtResource("5")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0, 0)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = false
+
+[sub_resource type="InputEventAction" id="InputEventAction_nptxe"]
+action = &"reset_colors_default"
+
+[sub_resource type="Shortcut" id="Shortcut_uay2n"]
+events = [SubResource("InputEventAction_nptxe")]
[node name="ColorPickers" type="PanelContainer"]
-margin_left = 958.0
-margin_top = 170.0
-margin_right = 1276.0
-margin_bottom = 229.062
-script = ExtResource( 3 )
+offset_left = 958.0
+offset_top = 170.0
+offset_right = 1276.0
+offset_bottom = 229.062
+script = ExtResource("3")
[node name="ColorPickersHorizontal" type="HBoxContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 311.0
-margin_bottom = 55.0
-custom_constants/separation = 13
+layout_mode = 2
+theme_override_constants/separation = 13
alignment = 1
[node name="LeftColorPickerButton" type="ColorPickerButton" parent="ColorPickersHorizontal"]
-margin_left = 19.0
-margin_top = 8.0
-margin_right = 83.0
-margin_bottom = 40.0
-rect_min_size = Vector2( 64, 32 )
-hint_tooltip = "Choose a color for the left tool"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(64, 32)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
+tooltip_text = "Choose a color for the left tool"
+mouse_default_cursor_shape = 2
[node name="ColorButtonsVertical" type="VBoxContainer" parent="ColorPickersHorizontal"]
-margin_left = 96.0
-margin_right = 207.0
-margin_bottom = 48.0
+layout_mode = 2
alignment = 1
[node name="ColorSwitch" type="TextureButton" parent="ColorPickersHorizontal/ColorButtonsVertical" groups=["UIButtons"]]
-margin_left = 43.0
-margin_right = 68.0
-margin_bottom = 7.0
-hint_tooltip = "Switch left and right colors
+layout_mode = 2
+size_flags_horizontal = 4
+tooltip_text = "Switch left and right colors
(%s)"
mouse_default_cursor_shape = 2
-size_flags_horizontal = 4
+shortcut = SubResource("19")
shortcut_in_tooltip = false
-shortcut = SubResource( 19 )
-texture_normal = ExtResource( 2 )
+texture_normal = ExtResource("2")
[node name="HBoxContainer" type="HBoxContainer" parent="ColorPickersHorizontal/ColorButtonsVertical"]
-margin_top = 11.0
-margin_right = 111.0
-margin_bottom = 36.0
+layout_mode = 2
alignment = 1
[node name="ToLeft" type="Button" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"]
-margin_right = 25.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 25, 25 )
-hint_tooltip = "Interpolate the (Left Color)
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+tooltip_text = "Interpolate the (Left Color)
towards the (Right Color)"
[node name="TextureRect" type="TextureRect" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/ToLeft"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 4.0
-margin_top = 4.0
-margin_right = -4.0
-margin_bottom = -4.0
-texture = ExtResource( 6 )
-expand = true
+offset_left = 4.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = -4.0
+texture = ExtResource("6")
+expand_mode = 1
stretch_mode = 6
flip_h = true
-__meta__ = {
-"_editor_description_": ""
-}
[node name="Line1" type="HSeparator" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"]
-margin_left = 29.0
-margin_right = 39.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 10, 0 )
+custom_minimum_size = Vector2(10, 0)
+layout_mode = 2
size_flags_horizontal = 3
[node name="CopyAverage" type="Button" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"]
-margin_left = 43.0
-margin_right = 68.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 25, 25 )
-
-[node name="TransparentChecker" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage" instance=ExtResource( 4 )]
-unique_name_in_owner = true
-material = SubResource( 1 )
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
-__meta__ = {
-"_editor_description_": ""
-}
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
[node name="AverageColor" type="ColorRect" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage"]
unique_name_in_owner = true
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.5
-margin_top = -10.5
-margin_right = 10.5
-margin_bottom = 10.5
+offset_left = -10.5
+offset_top = -10.5
+offset_right = 10.5
+offset_bottom = 10.5
mouse_filter = 2
+[node name="TransparentChecker" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage/AverageColor" instance=ExtResource("4")]
+unique_name_in_owner = true
+show_behind_parent = true
+material = SubResource("1")
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
[node name="Line2" type="HSeparator" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"]
-margin_left = 72.0
-margin_right = 82.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 10, 0 )
+custom_minimum_size = Vector2(10, 0)
+layout_mode = 2
size_flags_horizontal = 3
[node name="ToRight" type="Button" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"]
-margin_left = 86.0
-margin_right = 111.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 25, 25 )
-hint_tooltip = "Interpolate the (Right Color)
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+tooltip_text = "Interpolate the (Right Color)
towards the (Left Color)"
[node name="TextureRect" type="TextureRect" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/ToRight"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 4.0
-margin_top = 4.0
-margin_right = -4.0
-margin_bottom = -4.0
-texture = ExtResource( 6 )
-expand = true
+offset_left = 4.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = -4.0
+texture = ExtResource("6")
+expand_mode = 1
stretch_mode = 6
[node name="ColorDefaults" type="TextureButton" parent="ColorPickersHorizontal/ColorButtonsVertical"]
-margin_left = 43.0
-margin_top = 40.0
-margin_right = 68.0
-margin_bottom = 48.0
-hint_tooltip = "Reset the colors to their default state (black for left, white for right)"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 4
-texture_normal = ExtResource( 1 )
+tooltip_text = "Reset the colors to their default state (black for left, white for right)"
+mouse_default_cursor_shape = 2
+shortcut = SubResource("Shortcut_uay2n")
+texture_normal = ExtResource("1")
[node name="RightColorPickerButton" type="ColorPickerButton" parent="ColorPickersHorizontal"]
-margin_left = 220.0
-margin_top = 8.0
-margin_right = 284.0
-margin_bottom = 40.0
-rect_min_size = Vector2( 64, 32 )
-hint_tooltip = "Choose a color for the right tool"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(64, 32)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
-color = Color( 1, 1, 1, 1 )
+tooltip_text = "Choose a color for the right tool"
+mouse_default_cursor_shape = 2
+color = Color(1, 1, 1, 1)
-[connection signal="color_changed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [ false ]]
+[connection signal="color_changed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [false]]
[connection signal="popup_closed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_popup_closed"]
[connection signal="pressed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_pressed"]
[connection signal="pressed" from="ColorPickersHorizontal/ColorButtonsVertical/ColorSwitch" to="." method="_on_ColorSwitch_pressed"]
@@ -190,6 +166,6 @@ color = Color( 1, 1, 1, 1 )
[connection signal="button_up" from="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage" to="." method="_on_CopyAverage_button_up"]
[connection signal="pressed" from="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/ToRight" to="." method="_on_ToRight_pressed"]
[connection signal="pressed" from="ColorPickersHorizontal/ColorButtonsVertical/ColorDefaults" to="." method="_on_ColorDefaults_pressed"]
-[connection signal="color_changed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [ true ]]
+[connection signal="color_changed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [true]]
[connection signal="popup_closed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_popup_closed"]
[connection signal="pressed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_pressed"]
diff --git a/src/UI/Dialogs/AboutDialog.gd b/src/UI/Dialogs/AboutDialog.gd
index 2db7d244317..692d2672d88 100644
--- a/src/UI/Dialogs/AboutDialog.gd
+++ b/src/UI/Dialogs/AboutDialog.gd
@@ -1,6 +1,6 @@
-extends WindowDialog
+extends Window
-const CONTRIBUTORS := [
+const CONTRIBUTORS: PackedStringArray = [
"20kdc",
"Aaron Franke (aaronfranke)",
"AbhinavKDev (abhinav3967)",
@@ -23,6 +23,7 @@ const CONTRIBUTORS := [
"gschwind",
"Haoyu Qiu (timothyqiu)",
"Hugo Locurcio (Calinou)",
+ "huskee",
"Igor Santarek (jegor377)",
"Jeremy Behreandt (behreajj)",
"John Jerome Romero (Wishdream)",
@@ -50,12 +51,11 @@ const CONTRIBUTORS := [
"TheLsbt",
"THWLF",
"Vriska Weaver (henlo-birb)",
- "Xenofon Konitsas (huskee)",
]
const TRANSLATORS_DICTIONARY := {
"Emmanouil Papadeas (Overloaded)": ["Greek"],
- "Xenofon Konitsas (huskee)": ["Greek"],
+ "huskee": ["Greek"],
"Lena Louloudaki (Soliscital)": ["Greek"],
"Hugo Locurcio (Calinou)": ["French"],
"blackjoker77777": ["French"],
@@ -174,7 +174,7 @@ const TRANSLATORS_DICTIONARY := {
],
}
-const DONORS := [
+const DONORS: PackedStringArray = [
"BasicIncomePlz",
"Benedikt",
"David Maziarka",
@@ -194,22 +194,22 @@ const DONORS := [
"ฮ ฮฟฮปฮนฯฮนฯฮผฯฯ ฮคฯฯฮฟฯ
1",
]
-export(Array, String, MULTILINE) var licenses: Array
+@export_multiline var licenses: PackedStringArray
-onready var credits := $AboutUI/Credits as HSplitContainer
-onready var groups := $AboutUI/Credits/Groups as Tree
-onready var developer_container := $AboutUI/Credits/Developers as VBoxContainer
-onready var contributors_container := $AboutUI/Credits/Contributors as VBoxContainer
-onready var donors_container := $AboutUI/Credits/Donors as VBoxContainer
-onready var translators_container := $AboutUI/Credits/Translators as VBoxContainer
-onready var licenses_container := $AboutUI/Credits/Licenses as VBoxContainer
+@onready var credits := $AboutUI/Credits as HSplitContainer
+@onready var groups := $AboutUI/Credits/Groups as Tree
+@onready var developer_container := $AboutUI/Credits/Developers as VBoxContainer
+@onready var contributors_container := $AboutUI/Credits/Contributors as VBoxContainer
+@onready var donors_container := $AboutUI/Credits/Donors as VBoxContainer
+@onready var translators_container := $AboutUI/Credits/Translators as VBoxContainer
+@onready var licenses_container := $AboutUI/Credits/Licenses as VBoxContainer
-onready var developers := $AboutUI/Credits/Developers/DeveloperTree as Tree
-onready var contributors := $AboutUI/Credits/Contributors/ContributorTree as Tree
-onready var donors := $AboutUI/Credits/Donors/DonorTree as Tree
-onready var translators := $AboutUI/Credits/Translators/TranslatorTree as Tree
-onready var license_tabs := $AboutUI/Credits/Licenses/LicenseTabs as Tabs
-onready var license_text := $AboutUI/Credits/Licenses/LicenseText as TextEdit
+@onready var developers := $AboutUI/Credits/Developers/DeveloperTree as Tree
+@onready var contributors := $AboutUI/Credits/Contributors/ContributorTree as Tree
+@onready var donors := $AboutUI/Credits/Donors/DonorTree as Tree
+@onready var translators := $AboutUI/Credits/Translators/TranslatorTree as Tree
+@onready var license_tabs := $AboutUI/Credits/Licenses/LicenseTabs as TabBar
+@onready var license_text := $AboutUI/Credits/Licenses/LicenseText as TextEdit
func _ready() -> void:
@@ -221,7 +221,6 @@ func _ready() -> void:
license_tabs.add_tab("mbed TLS")
license_tabs.add_tab("Keychain")
license_tabs.add_tab("Roboto")
- license_tabs.add_tab("DroidSansFallback")
license_tabs.add_tab("Dockable Container")
license_tabs.add_tab("aimgio")
license_tabs.add_tab("godot-gdgifexporter")
@@ -232,7 +231,7 @@ func _ready() -> void:
func _on_AboutDialog_about_to_show() -> void:
- window_title = tr("About Pixelorama") + " " + Global.current_version
+ title = tr("About Pixelorama") + " " + Global.current_version
var groups_root := groups.create_item()
var developers_button := groups.create_item(groups_root)
@@ -258,10 +257,13 @@ func _on_AboutDialog_about_to_show() -> void:
create_translators()
-func _on_AboutDialog_popup_hide() -> void:
+func _on_visibility_changed() -> void:
+ if visible:
+ return
groups.clear()
developers.clear()
translators.clear()
+ Global.dialog_open(false)
func _on_Groups_item_selected() -> void:
@@ -332,3 +334,7 @@ func create_translators() -> void:
func _on_LicenseTabs_tab_changed(tab: int) -> void:
license_text.text = licenses[tab]
+
+
+func _on_close_requested() -> void:
+ hide()
diff --git a/src/UI/Dialogs/AboutDialog.tscn b/src/UI/Dialogs/AboutDialog.tscn
index f4a3e9f2e67..0baa1f52aa0 100644
--- a/src/UI/Dialogs/AboutDialog.tscn
+++ b/src/UI/Dialogs/AboutDialog.tscn
@@ -1,709 +1,178 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=7 format=3 uid="uid://w1v6plnv6ppt"]
-[ext_resource path="res://src/UI/Dialogs/AboutDialog.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/icons/icon.png" type="Texture" id=2]
-[ext_resource path="res://assets/fonts/Roboto-Italic.tres" type="DynamicFont" id=3]
-[ext_resource path="res://assets/graphics/splash_screen/orama_64x64.png" type="Texture" id=4]
-[ext_resource path="res://assets/fonts/Roboto-Small.tres" type="DynamicFont" id=5]
+[ext_resource type="Script" path="res://src/UI/Dialogs/AboutDialog.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://b47r0c6auaqk6" path="res://assets/graphics/icons/icon.png" id="2"]
+[ext_resource type="FontFile" uid="uid://cy5lkye8vdr5t" path="res://assets/fonts/Roboto-Italic.ttf" id="3_jqhhb"]
+[ext_resource type="Texture2D" uid="uid://s25pa611bpvj" path="res://assets/graphics/splash_screen/orama_64x64.png" id="4"]
-[node name="AboutDialog" type="WindowDialog"]
-margin_right = 600.0
-margin_bottom = 400.0
-rect_min_size = Vector2( 600, 400 )
-window_title = "About Pixelorama"
-resizable = true
-script = ExtResource( 1 )
-licenses = [ "MIT License
-
-Copyright (c) 2019-present Orama Interactive and contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "This software uses Godot Engine, available under the following license:
-
-Copyright (c) 2014-present Godot Engine contributors.
-Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the \"Software\"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-", "Portions of this software are copyright ยฉ 2021 The FreeType Project (www.freetype.org). All rights reserved.", "Copyright The Mbed TLS Contributors
-
-Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-", "MIT License
-
-Copyright (c) 2022-present Orama Interactive
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- \"License\" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- \"Licensor\" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- \"Legal Entity\" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- \"control\" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- \"You\" (or \"Your\") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- \"Source\" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- \"Object\" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- \"Work\" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- \"Derivative Works\" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- \"Contribution\" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, \"submitted\"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as \"Not a Contribution.\"
-
- \"Contributor\" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a \"NOTICE\" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an \"AS IS\" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets \"[]\"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same \"printed page\" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the \"License\");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an \"AS IS\" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.", "Copyright (C) 2008 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the \"License\");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an \"AS IS\" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-##########
-
-This directory contains the fonts for the platform. They are licensed
-under the Apache 2 license.", "Creative Commons Legal Code
-
-CC0 1.0 Universal
-
- CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
- LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
- ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
- INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
- REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
- PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
- THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
- HEREUNDER.
-
-Statement of Purpose
-
-The laws of most jurisdictions throughout the world automatically confer
-exclusive Copyright and Related Rights (defined below) upon the creator
-and subsequent owner(s) (each and all, an \"owner\") of an original work of
-authorship and/or a database (each, a \"Work\").
-
-Certain owners wish to permanently relinquish those rights to a Work for
-the purpose of contributing to a commons of creative, cultural and
-scientific works (\"Commons\") that the public can reliably and without fear
-of later claims of infringement build upon, modify, incorporate in other
-works, reuse and redistribute as freely as possible in any form whatsoever
-and for any purposes, including without limitation commercial purposes.
-These owners may contribute to the Commons to promote the ideal of a free
-culture and the further production of creative, cultural and scientific
-works, or to gain reputation or greater distribution for their Work in
-part through the use and efforts of others.
-
-For these and/or other purposes and motivations, and without any
-expectation of additional consideration or compensation, the person
-associating CC0 with a Work (the \"Affirmer\"), to the extent that he or she
-is an owner of Copyright and Related Rights in the Work, voluntarily
-elects to apply CC0 to the Work and publicly distribute the Work under its
-terms, with knowledge of his or her Copyright and Related Rights in the
-Work and the meaning and intended legal effect of CC0 on those rights.
-
-1. Copyright and Related Rights. A Work made available under CC0 may be
-protected by copyright and related or neighboring rights (\"Copyright and
-Related Rights\"). Copyright and Related Rights include, but are not
-limited to, the following:
-
- i. the right to reproduce, adapt, distribute, perform, display,
- communicate, and translate a Work;
- ii. moral rights retained by the original author(s) and/or performer(s);
-iii. publicity and privacy rights pertaining to a person's image or
- likeness depicted in a Work;
- iv. rights protecting against unfair competition in regards to a Work,
- subject to the limitations in paragraph 4(a), below;
- v. rights protecting the extraction, dissemination, use and reuse of data
- in a Work;
- vi. database rights (such as those arising under Directive 96/9/EC of the
- European Parliament and of the Council of 11 March 1996 on the legal
- protection of databases, and under any national implementation
- thereof, including any amended or successor version of such
- directive); and
-vii. other similar, equivalent or corresponding rights throughout the
- world based on applicable law or treaty, and any national
- implementations thereof.
-
-2. Waiver. To the greatest extent permitted by, but not in contravention
-of, applicable law, Affirmer hereby overtly, fully, permanently,
-irrevocably and unconditionally waives, abandons, and surrenders all of
-Affirmer's Copyright and Related Rights and associated claims and causes
-of action, whether now known or unknown (including existing as well as
-future claims and causes of action), in the Work (i) in all territories
-worldwide, (ii) for the maximum duration provided by applicable law or
-treaty (including future time extensions), (iii) in any current or future
-medium and for any number of copies, and (iv) for any purpose whatsoever,
-including without limitation commercial, advertising or promotional
-purposes (the \"Waiver\"). Affirmer makes the Waiver for the benefit of each
-member of the public at large and to the detriment of Affirmer's heirs and
-successors, fully intending that such Waiver shall not be subject to
-revocation, rescission, cancellation, termination, or any other legal or
-equitable action to disrupt the quiet enjoyment of the Work by the public
-as contemplated by Affirmer's express Statement of Purpose.
-
-3. Public License Fallback. Should any part of the Waiver for any reason
-be judged legally invalid or ineffective under applicable law, then the
-Waiver shall be preserved to the maximum extent permitted taking into
-account Affirmer's express Statement of Purpose. In addition, to the
-extent the Waiver is so judged Affirmer hereby grants to each affected
-person a royalty-free, non transferable, non sublicensable, non exclusive,
-irrevocable and unconditional license to exercise Affirmer's Copyright and
-Related Rights in the Work (i) in all territories worldwide, (ii) for the
-maximum duration provided by applicable law or treaty (including future
-time extensions), (iii) in any current or future medium and for any number
-of copies, and (iv) for any purpose whatsoever, including without
-limitation commercial, advertising or promotional purposes (the
-\"License\"). The License shall be deemed effective as of the date CC0 was
-applied by Affirmer to the Work. Should any part of the License for any
-reason be judged legally invalid or ineffective under applicable law, such
-partial invalidity or ineffectiveness shall not invalidate the remainder
-of the License, and in such case Affirmer hereby affirms that he or she
-will not (i) exercise any of his or her remaining Copyright and Related
-Rights in the Work or (ii) assert any associated claims and causes of
-action with respect to the Work, in either case contrary to Affirmer's
-express Statement of Purpose.
-
-4. Limitations and Disclaimers.
-
- a. No trademark or patent rights held by Affirmer are waived, abandoned,
- surrendered, licensed or otherwise affected by this document.
- b. Affirmer offers the Work as-is and makes no representations or
- warranties of any kind concerning the Work, express, implied,
- statutory or otherwise, including without limitation warranties of
- title, merchantability, fitness for a particular purpose, non
- infringement, or the absence of latent or other defects, accuracy, or
- the present or absence of errors, whether or not discoverable, all to
- the greatest extent permissible under applicable law.
- c. Affirmer disclaims responsibility for clearing rights of other persons
- that may apply to the Work or any use thereof, including without
- limitation any person's Copyright and Related Rights in the Work.
- Further, Affirmer disclaims responsibility for obtaining any necessary
- consents, permissions or other rights required for any use of the
- Work.
- d. Affirmer understands and acknowledges that Creative Commons is not a
- party to this document and has no duty or obligation with respect to
- this CC0 or use of the Work.
-", "This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to ", "MIT License
-
-Copyright (c) 2020 Igor Santarek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "MIT License
-
-Copyright (c) 2022 torcado
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the \"Software\"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.", "MIT License
-
-Copyright (c) 2018 Nobuyuki
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the \"Software\"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.", "MIT License
-
-Copyright (c) 2018-2019 Ezcha
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the \"Software\"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE." ]
+[sub_resource type="LabelSettings" id="LabelSettings_bkh2e"]
+font = ExtResource("3_jqhhb")
+
+[sub_resource type="LabelSettings" id="LabelSettings_aewb6"]
+font_size = 12
+
+[node name="AboutDialog" type="Popup"]
+size = Vector2i(700, 470)
+unresizable = false
+borderless = false
+script = ExtResource("1")
+licenses = PackedStringArray("MIT License\n\nCopyright (c) 2019-present Orama Interactive and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "This software uses Godot Engine, available under the following license:\n\nCopyright (c) 2014-present Godot Engine contributors.\nCopyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", "Portions of this software are copyright ยฉ 2021 The FreeType Project (www.freetype.org). All rights reserved.", "Copyright The Mbed TLS Contributors\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n", "MIT License\n\nCopyright (c) 2022-present Orama Interactive\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "\n Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or position of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don\'t include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.", "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN\n ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS\n INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES\n REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS\n PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM\n THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED\n HEREUNDER.\n\nStatement of Purpose\n\nThe laws of most jurisdictions throughout the world automatically confer\nexclusive Copyright and Related Rights (defined below) upon the creator\nand subsequent owner(s) (each and all, an \"owner\") of an original work of\nauthorship and/or a database (each, a \"Work\").\n\nCertain owners wish to permanently relinquish those rights to a Work for\nthe purpose of contributing to a commons of creative, cultural and\nscientific works (\"Commons\") that the public can reliably and without fear\nof later claims of infringement build upon, modify, incorporate in other\nworks, reuse and redistribute as freely as possible in any form whatsoever\nand for any purposes, including without limitation commercial purposes.\nThese owners may contribute to the Commons to promote the ideal of a free\nculture and the further production of creative, cultural and scientific\nworks, or to gain reputation or greater distribution for their Work in\npart through the use and efforts of others.\n\nFor these and/or other purposes and motivations, and without any\nexpectation of additional consideration or compensation, the person\nassociating CC0 with a Work (the \"Affirmer\"), to the extent that he or she\nis an owner of Copyright and Related Rights in the Work, voluntarily\nelects to apply CC0 to the Work and publicly distribute the Work under its\nterms, with knowledge of his or her Copyright and Related Rights in the\nWork and the meaning and intended legal effect of CC0 on those rights.\n\n1. Copyright and Related Rights. A Work made available under CC0 may be\nprotected by copyright and related or neighboring rights (\"Copyright and\nRelated Rights\"). Copyright and Related Rights include, but are not\nlimited to, the following:\n\n i. the right to reproduce, adapt, distribute, perform, display,\n communicate, and translate a Work;\n ii. moral rights retained by the original author(s) and/or performer(s);\niii. publicity and privacy rights pertaining to a person\'s image or\n likeness depicted in a Work;\n iv. rights protecting against unfair competition in regards to a Work,\n subject to the limitations in paragraph 4(a), below;\n v. rights protecting the extraction, dissemination, use and reuse of data\n in a Work;\n vi. database rights (such as those arising under Directive 96/9/EC of the\n European Parliament and of the Council of 11 March 1996 on the legal\n protection of databases, and under any national implementation\n thereof, including any amended or successor version of such\n directive); and\nvii. other similar, equivalent or corresponding rights throughout the\n world based on applicable law or treaty, and any national\n implementations thereof.\n\n2. Waiver. To the greatest extent permitted by, but not in contravention\nof, applicable law, Affirmer hereby overtly, fully, permanently,\nirrevocably and unconditionally waives, abandons, and surrenders all of\nAffirmer\'s Copyright and Related Rights and associated claims and causes\nof action, whether now known or unknown (including existing as well as\nfuture claims and causes of action), in the Work (i) in all territories\nworldwide, (ii) for the maximum duration provided by applicable law or\ntreaty (including future time extensions), (iii) in any current or future\nmedium and for any number of copies, and (iv) for any purpose whatsoever,\nincluding without limitation commercial, advertising or promotional\npurposes (the \"Waiver\"). Affirmer makes the Waiver for the benefit of each\nmember of the public at large and to the detriment of Affirmer\'s heirs and\nsuccessors, fully intending that such Waiver shall not be subject to\nrevocation, rescission, cancellation, termination, or any other legal or\nequitable action to disrupt the quiet enjoyment of the Work by the public\nas contemplated by Affirmer\'s express Statement of Purpose.\n\n3. Public License Fallback. Should any part of the Waiver for any reason\nbe judged legally invalid or ineffective under applicable law, then the\nWaiver shall be preserved to the maximum extent permitted taking into\naccount Affirmer\'s express Statement of Purpose. In addition, to the\nextent the Waiver is so judged Affirmer hereby grants to each affected\nperson a royalty-free, non transferable, non sublicensable, non exclusive,\nirrevocable and unconditional license to exercise Affirmer\'s Copyright and\nRelated Rights in the Work (i) in all territories worldwide, (ii) for the\nmaximum duration provided by applicable law or treaty (including future\ntime extensions), (iii) in any current or future medium and for any number\nof copies, and (iv) for any purpose whatsoever, including without\nlimitation commercial, advertising or promotional purposes (the\n\"License\"). The License shall be deemed effective as of the date CC0 was\napplied by Affirmer to the Work. Should any part of the License for any\nreason be judged legally invalid or ineffective under applicable law, such\npartial invalidity or ineffectiveness shall not invalidate the remainder\nof the License, and in such case Affirmer hereby affirms that he or she\nwill not (i) exercise any of his or her remaining Copyright and Related\nRights in the Work or (ii) assert any associated claims and causes of\naction with respect to the Work, in either case contrary to Affirmer\'s\nexpress Statement of Purpose.\n\n4. Limitations and Disclaimers.\n\n a. No trademark or patent rights held by Affirmer are waived, abandoned,\n surrendered, licensed or otherwise affected by this document.\n b. Affirmer offers the Work as-is and makes no representations or\n warranties of any kind concerning the Work, express, implied,\n statutory or otherwise, including without limitation warranties of\n title, merchantability, fitness for a particular purpose, non\n infringement, or the absence of latent or other defects, accuracy, or\n the present or absence of errors, whether or not discoverable, all to\n the greatest extent permissible under applicable law.\n c. Affirmer disclaims responsibility for clearing rights of other persons\n that may apply to the Work or any use thereof, including without\n limitation any person\'s Copyright and Related Rights in the Work.\n Further, Affirmer disclaims responsibility for obtaining any necessary\n consents, permissions or other rights required for any use of the\n Work.\n d. Affirmer understands and acknowledges that Creative Commons is not a\n party to this document and has no duty or obligation with respect to\n this CC0 or use of the Work.\n", "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that _recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to ", "MIT License\n\nCopyright (c) 2020 Igor Santarek\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "MIT License\n\nCopyright (c) 2022 torcado\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.", "MIT License\n\nCopyright (c) 2018 Nobuyuki\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", "MIT License\n\nCopyright (c) 2018-2019 Ezcha\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.")
[node name="AboutUI" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 12.0
-margin_top = 4.0
-margin_right = -12.0
-margin_bottom = -8.0
+offset_left = 12.0
+offset_top = 4.0
+offset_right = -12.0
+offset_bottom = -8.0
alignment = 1
[node name="IconsButtons" type="HBoxContainer" parent="AboutUI"]
-margin_right = 576.0
-margin_bottom = 64.0
+layout_mode = 2
[node name="PixeloramaLogo" type="TextureRect" parent="AboutUI/IconsButtons"]
-margin_right = 64.0
-margin_bottom = 64.0
-rect_min_size = Vector2( 64, 64 )
-texture = ExtResource( 2 )
-expand = true
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 2
+texture = ExtResource("2")
+expand_mode = 1
[node name="SloganAndLinks" type="CenterContainer" parent="AboutUI/IconsButtons"]
-margin_left = 68.0
-margin_right = 508.0
-margin_bottom = 64.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="VBoxContainer" type="VBoxContainer" parent="AboutUI/IconsButtons/SloganAndLinks"]
-margin_left = 108.0
-margin_top = 12.0
-margin_right = 332.0
-margin_bottom = 51.0
+layout_mode = 2
[node name="PixeloramaSlogan" type="Label" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer"]
-margin_right = 224.0
-margin_bottom = 15.0
-custom_fonts/font = ExtResource( 3 )
+layout_mode = 2
text = "Pixelorama - Pixelate your dreams!"
-align = 1
+label_settings = SubResource("LabelSettings_bkh2e")
[node name="LinkButtons" type="HBoxContainer" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer"]
-margin_top = 19.0
-margin_right = 224.0
-margin_bottom = 39.0
+layout_mode = 2
[node name="Website" type="Button" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons"]
-margin_right = 65.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Website"
[node name="GitHub" type="Button" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons"]
-margin_left = 69.0
-margin_right = 162.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "GitHub Repo"
[node name="Donate" type="Button" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons"]
-margin_left = 166.0
-margin_right = 224.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Donate"
[node name="OramaLogo" type="TextureRect" parent="AboutUI/IconsButtons"]
-margin_left = 512.0
-margin_right = 576.0
-margin_bottom = 64.0
-texture = ExtResource( 4 )
+layout_mode = 2
+texture = ExtResource("4")
[node name="HSeparator" type="HSeparator" parent="AboutUI"]
-margin_top = 68.0
-margin_right = 576.0
-margin_bottom = 72.0
+layout_mode = 2
[node name="Credits" type="HSplitContainer" parent="AboutUI"]
-margin_top = 76.0
-margin_right = 576.0
-margin_bottom = 345.0
+layout_mode = 2
size_flags_vertical = 3
[node name="Groups" type="Tree" parent="AboutUI/Credits"]
-margin_right = 576.0
-margin_bottom = 269.0
-rect_min_size = Vector2( 120, 120 )
-custom_constants/item_margin = -2
+custom_minimum_size = Vector2(120, 120)
+layout_mode = 2
+theme_override_constants/item_margin = -2
hide_root = true
[node name="Developers" type="VBoxContainer" parent="AboutUI/Credits"]
visible = false
-margin_left = 132.0
-margin_right = 576.0
-margin_bottom = 269.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="AboutUI/Credits/Developers"]
-margin_right = 444.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Development Team"
[node name="DeveloperTree" type="Tree" parent="AboutUI/Credits/Developers"]
-margin_top = 18.0
-margin_right = 444.0
-margin_bottom = 269.0
+layout_mode = 2
size_flags_vertical = 3
-custom_constants/item_margin = -2
-custom_constants/button_margin = 2
+theme_override_constants/item_margin = -2
+theme_override_constants/button_margin = 2
hide_root = true
[node name="Contributors" type="VBoxContainer" parent="AboutUI/Credits"]
visible = false
-margin_left = 254.0
-margin_right = 496.0
-margin_bottom = 126.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="AboutUI/Credits/Contributors"]
-margin_right = 242.0
-margin_bottom = 14.0
+layout_mode = 2
text = "GitHub Contributors"
[node name="ContributorTree" type="Tree" parent="AboutUI/Credits/Contributors"]
-margin_top = 18.0
-margin_right = 242.0
-margin_bottom = 126.0
+layout_mode = 2
size_flags_vertical = 3
-custom_constants/item_margin = -2
+theme_override_constants/item_margin = -2
hide_root = true
[node name="Donors" type="VBoxContainer" parent="AboutUI/Credits"]
visible = false
-margin_left = 254.0
-margin_right = 496.0
-margin_bottom = 126.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="AboutUI/Credits/Donors"]
-margin_right = 242.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Donors"
[node name="DonorTree" type="Tree" parent="AboutUI/Credits/Donors"]
-margin_top = 18.0
-margin_right = 242.0
-margin_bottom = 126.0
+layout_mode = 2
size_flags_vertical = 3
-custom_constants/item_margin = -2
+theme_override_constants/item_margin = -2
hide_root = true
[node name="Translators" type="VBoxContainer" parent="AboutUI/Credits"]
visible = false
-margin_left = 254.0
-margin_right = 496.0
-margin_bottom = 126.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="AboutUI/Credits/Translators"]
-margin_right = 242.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Translators"
[node name="TranslatorTree" type="Tree" parent="AboutUI/Credits/Translators"]
-margin_top = 18.0
-margin_right = 242.0
-margin_bottom = 126.0
+layout_mode = 2
size_flags_vertical = 3
-custom_constants/item_margin = -2
+theme_override_constants/item_margin = -2
hide_root = true
[node name="Licenses" type="VBoxContainer" parent="AboutUI/Credits"]
visible = false
-margin_left = 132.0
-margin_right = 576.0
-margin_bottom = 269.0
+layout_mode = 2
size_flags_horizontal = 3
-[node name="LicenseTabs" type="Tabs" parent="AboutUI/Credits/Licenses"]
-margin_right = 444.0
-margin_bottom = 24.0
+[node name="LicenseTabs" type="TabBar" parent="AboutUI/Credits/Licenses"]
+layout_mode = 2
mouse_default_cursor_shape = 2
[node name="LicenseText" type="TextEdit" parent="AboutUI/Credits/Licenses"]
-margin_top = 28.0
-margin_right = 444.0
-margin_bottom = 269.0
+layout_mode = 2
size_flags_vertical = 3
-readonly = true
-wrap_enabled = true
[node name="HSeparator2" type="HSeparator" parent="AboutUI"]
-margin_top = 349.0
-margin_right = 576.0
-margin_bottom = 353.0
+layout_mode = 2
[node name="MadeBy" type="Label" parent="AboutUI"]
-margin_top = 357.0
-margin_right = 576.0
-margin_bottom = 371.0
+layout_mode = 2
text = "Developed by Orama Interactive"
-align = 1
[node name="Copyright" type="Label" parent="AboutUI"]
-margin_top = 375.0
-margin_right = 576.0
-margin_bottom = 388.0
-custom_fonts/font = ExtResource( 5 )
+layout_mode = 2
text = "ยฉ2019-present by Orama Interactive and contributors"
-align = 1
+label_settings = SubResource("LabelSettings_aewb6")
-[connection signal="about_to_show" from="." to="." method="_on_AboutDialog_about_to_show"]
-[connection signal="popup_hide" from="." to="." method="_on_AboutDialog_popup_hide"]
+[connection signal="about_to_popup" from="." to="." method="_on_AboutDialog_about_to_show"]
+[connection signal="close_requested" from="." to="." method="_on_close_requested"]
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="pressed" from="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons/Website" to="." method="_on_Website_pressed"]
[connection signal="pressed" from="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons/GitHub" to="." method="_on_GitHub_pressed"]
[connection signal="pressed" from="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons/Donate" to="." method="_on_Donate_pressed"]
diff --git a/src/UI/Dialogs/CreateNewImage.gd b/src/UI/Dialogs/CreateNewImage.gd
index 32ea84657c4..d4809a9487f 100644
--- a/src/UI/Dialogs/CreateNewImage.gd
+++ b/src/UI/Dialogs/CreateNewImage.gd
@@ -2,65 +2,65 @@ extends ConfirmationDialog
var aspect_ratio := 1.0
var recent_sizes := []
-var templates := [
+var templates: Array[Template] = [
# Basic
- Template.new(Vector2(16, 16)),
- Template.new(Vector2(32, 32)),
- Template.new(Vector2(64, 64)),
- Template.new(Vector2(128, 128)),
+ Template.new(Vector2i(16, 16)),
+ Template.new(Vector2i(32, 32)),
+ Template.new(Vector2i(64, 64)),
+ Template.new(Vector2i(128, 128)),
# Nintendo
- Template.new(Vector2(160, 144), "GB"),
- Template.new(Vector2(240, 160), "GBA"),
- Template.new(Vector2(256, 224), "NES (NTSC)"),
- Template.new(Vector2(256, 240), "NES (PAL)"),
- Template.new(Vector2(512, 448), "SNES (NTSC)"),
- Template.new(Vector2(512, 480), "SNES (PAL)"),
- Template.new(Vector2(646, 486), "N64 (NTSC)"),
- Template.new(Vector2(786, 576), "N64 (PAL)"),
+ Template.new(Vector2i(160, 144), "GB"),
+ Template.new(Vector2i(240, 160), "GBA"),
+ Template.new(Vector2i(256, 224), "NES (NTSC)"),
+ Template.new(Vector2i(256, 240), "NES (PAL)"),
+ Template.new(Vector2i(512, 448), "SNES (NTSC)"),
+ Template.new(Vector2i(512, 480), "SNES (PAL)"),
+ Template.new(Vector2i(646, 486), "N64 (NTSC)"),
+ Template.new(Vector2i(786, 576), "N64 (PAL)"),
# Sega
- Template.new(Vector2(256, 192), "SMS (NTSC)"),
- Template.new(Vector2(256, 224), "SMS (PAL)"),
- Template.new(Vector2(160, 144), "GG"),
- Template.new(Vector2(320, 224), "MD (NTSC)"),
- Template.new(Vector2(320, 240), "MD (PAL)"),
+ Template.new(Vector2i(256, 192), "SMS (NTSC)"),
+ Template.new(Vector2i(256, 224), "SMS (PAL)"),
+ Template.new(Vector2i(160, 144), "GG"),
+ Template.new(Vector2i(320, 224), "MD (NTSC)"),
+ Template.new(Vector2i(320, 240), "MD (PAL)"),
# NEC
- Template.new(Vector2(256, 239), "PC Engine"), #256ร224 to 512ร242 (mostly 256ร239)
+ Template.new(Vector2i(256, 239), "PC Engine"), #256ร224 to 512ร242 (mostly 256ร239)
# DOS
- Template.new(Vector2(320, 200), "DOS EGA"),
- Template.new(Vector2(320, 200), "DOS VGA"),
- Template.new(Vector2(620, 480), "DOS SVGA"),
- Template.new(Vector2(640, 200), "DOS CGA (2-Colour)"),
- Template.new(Vector2(320, 200), "DOS CGA (4-Colour)"),
- Template.new(Vector2(160, 240), "DOS CGA (Composite)"),
- Template.new(Vector2(160, 240), "Tandy"),
+ Template.new(Vector2i(320, 200), "DOS EGA"),
+ Template.new(Vector2i(320, 200), "DOS VGA"),
+ Template.new(Vector2i(620, 480), "DOS SVGA"),
+ Template.new(Vector2i(640, 200), "DOS CGA (2-Colour)"),
+ Template.new(Vector2i(320, 200), "DOS CGA (4-Colour)"),
+ Template.new(Vector2i(160, 240), "DOS CGA (Composite)"),
+ Template.new(Vector2i(160, 240), "Tandy"),
# Commodore
- Template.new(Vector2(320, 200), "Amiga OCS LowRes (NTSC)"),
- Template.new(Vector2(320, 256), "Amiga OCS LowRes (PAL)"),
- Template.new(Vector2(640, 200), "Amiga OCS HiRes (NTSC)"),
- Template.new(Vector2(640, 256), "Amiga OCS HiRes (PAL)"),
- Template.new(Vector2(1280, 200), "Amiga ECS Super-HiRes (NTSC)"),
- Template.new(Vector2(1280, 256), "Amiga ECS SuperHiRes (PAL)"),
- Template.new(Vector2(640, 480), "Amiga ECS Multiscan"),
- Template.new(Vector2(320, 200), "C64"),
+ Template.new(Vector2i(320, 200), "Amiga OCS LowRes (NTSC)"),
+ Template.new(Vector2i(320, 256), "Amiga OCS LowRes (PAL)"),
+ Template.new(Vector2i(640, 200), "Amiga OCS HiRes (NTSC)"),
+ Template.new(Vector2i(640, 256), "Amiga OCS HiRes (PAL)"),
+ Template.new(Vector2i(1280, 200), "Amiga ECS Super-HiRes (NTSC)"),
+ Template.new(Vector2i(1280, 256), "Amiga ECS SuperHiRes (PAL)"),
+ Template.new(Vector2i(640, 480), "Amiga ECS Multiscan"),
+ Template.new(Vector2i(320, 200), "C64"),
# Sinclair
- Template.new(Vector2(256, 192), "ZX Spectrum"),
+ Template.new(Vector2i(256, 192), "ZX Spectrum"),
]
-onready var recent_templates_list = find_node("RecentTemplates")
-onready var templates_options = find_node("TemplatesOptions")
-onready var ratio_box = find_node("AspectRatioButton")
-onready var width_value = find_node("WidthValue")
-onready var height_value = find_node("HeightValue")
-onready var portrait_button = find_node("PortraitButton")
-onready var landscape_button = find_node("LandscapeButton")
-onready var fill_color_node = find_node("FillColor")
+@onready var templates_options := %TemplatesOptions as OptionButton
+@onready var ratio_box := %AspectRatioButton as TextureButton
+@onready var width_value := %WidthValue as SpinBox
+@onready var height_value := %HeightValue as SpinBox
+@onready var portrait_button := %PortraitButton as Button
+@onready var landscape_button := %LandscapeButton as Button
+@onready var fill_color_node := %FillColor as ColorPickerButton
+@onready var recent_templates_list := %RecentTemplates as ItemList
class Template:
- var resolution: Vector2
+ var resolution: Vector2i
var name: String
- func _init(_resolution: Vector2, _name := "") -> void:
+ func _init(_resolution: Vector2i, _name := "") -> void:
resolution = _resolution
name = _name
@@ -107,19 +107,19 @@ func _create_option_list() -> void:
func _create_recent_list() -> void:
recent_templates_list.clear()
- for size in recent_sizes:
+ for recent_size in recent_sizes:
recent_templates_list.add_item(
- "{width}x{height}".format({"width": size.x, "height": size.y})
+ "{width}x{height}".format({"width": recent_size.x, "height": recent_size.y})
)
func _on_CreateNewImage_confirmed() -> void:
var width: int = width_value.value
var height: int = height_value.value
- var size = Vector2(width, height)
- if size in recent_sizes:
- recent_sizes.erase(size)
- recent_sizes.insert(0, size)
+ var image_size := Vector2i(width, height)
+ if image_size in recent_sizes:
+ recent_sizes.erase(image_size)
+ recent_sizes.insert(0, image_size)
if recent_sizes.size() > 10:
recent_sizes.resize(10)
Global.config_cache.set_value("templates", "recent_sizes", recent_sizes)
@@ -129,7 +129,7 @@ func _on_CreateNewImage_confirmed() -> void:
if !proj_name.is_valid_filename():
proj_name = tr("untitled")
- var new_project := Project.new([], proj_name, Vector2(width, height).floor())
+ var new_project := Project.new([], proj_name, image_size)
new_project.layers.append(PixelLayer.new(new_project))
new_project.fill_color = fill_color
new_project.frames.append(new_project.new_empty_frame())
@@ -143,7 +143,7 @@ func _on_AspectRatioButton_toggled(_button_pressed: bool) -> void:
func _on_SizeValue_value_changed(value: float) -> void:
- if ratio_box.pressed:
+ if ratio_box.button_pressed:
if width_value.value == value:
height_value.value = width_value.value / aspect_ratio
if height_value.value == value:
@@ -153,20 +153,20 @@ func _on_SizeValue_value_changed(value: float) -> void:
func toggle_size_buttons() -> void:
- portrait_button.disconnect("toggled", self, "_on_PortraitButton_toggled")
- landscape_button.disconnect("toggled", self, "_on_LandscapeButton_toggled")
- portrait_button.pressed = width_value.value < height_value.value
- landscape_button.pressed = width_value.value > height_value.value
+ portrait_button.toggled.disconnect(_on_PortraitButton_toggled)
+ landscape_button.toggled.disconnect(_on_LandscapeButton_toggled)
+ portrait_button.button_pressed = width_value.value < height_value.value
+ landscape_button.button_pressed = width_value.value > height_value.value
- portrait_button.connect("toggled", self, "_on_PortraitButton_toggled")
- landscape_button.connect("toggled", self, "_on_LandscapeButton_toggled")
+ portrait_button.toggled.connect(_on_PortraitButton_toggled)
+ landscape_button.toggled.connect(_on_LandscapeButton_toggled)
func _on_TemplatesOptions_item_selected(id: int) -> void:
- #if a template is chosen while "ratio button" is pressed then temporarily release it
- var temporary_release = false
- if ratio_box.pressed:
- ratio_box.pressed = false
+ # If a template is chosen while "ratio button" is pressed then temporarily release it
+ var temporary_release := false
+ if ratio_box.button_pressed:
+ ratio_box.button_pressed = false
temporary_release = true
if id > 0:
@@ -177,21 +177,21 @@ func _on_TemplatesOptions_item_selected(id: int) -> void:
height_value.value = Global.default_height
if temporary_release:
- ratio_box.pressed = true
+ ratio_box.button_pressed = true
func _on_RecentTemplates_item_selected(id):
#if a template is chosen while "ratio button" is pressed then temporarily release it
var temporary_release = false
- if ratio_box.pressed:
- ratio_box.pressed = false
+ if ratio_box.button_pressed:
+ ratio_box.button_pressed = false
temporary_release = true
width_value.value = recent_sizes[id].x
height_value.value = recent_sizes[id].y
if temporary_release:
- ratio_box.pressed = true
+ ratio_box.button_pressed = true
func _on_PortraitButton_toggled(button_pressed: bool) -> void:
@@ -209,13 +209,13 @@ func _on_LandscapeButton_toggled(button_pressed: bool) -> void:
func switch_width_height() -> void:
- width_value.disconnect("value_changed", self, "_on_SizeValue_value_changed")
- height_value.disconnect("value_changed", self, "_on_SizeValue_value_changed")
+ width_value.value_changed.disconnect(_on_SizeValue_value_changed)
+ height_value.value_changed.disconnect(_on_SizeValue_value_changed)
- var height = height_value.value
+ var height := height_value.value
height_value.value = width_value.value
width_value.value = height
toggle_size_buttons()
- width_value.connect("value_changed", self, "_on_SizeValue_value_changed")
- height_value.connect("value_changed", self, "_on_SizeValue_value_changed")
+ width_value.value_changed.connect(_on_SizeValue_value_changed)
+ height_value.value_changed.connect(_on_SizeValue_value_changed)
diff --git a/src/UI/Dialogs/CreateNewImage.tscn b/src/UI/Dialogs/CreateNewImage.tscn
index 1277136c54b..9e4c99c2be3 100644
--- a/src/UI/Dialogs/CreateNewImage.tscn
+++ b/src/UI/Dialogs/CreateNewImage.tscn
@@ -1,274 +1,221 @@
-[gd_scene load_steps=7 format=2]
+[gd_scene load_steps=7 format=3 uid="uid://btjf3lj873q1t"]
-[ext_resource path="res://src/UI/Dialogs/CreateNewImage.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/misc/portrait.png" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/misc/landscape.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=6]
+[ext_resource type="Script" path="res://src/UI/Dialogs/CreateNewImage.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://kj867tldofxi" path="res://assets/graphics/misc/portrait.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://0vc1pn1sn2ud" path="res://assets/graphics/misc/landscape.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://cancw70yw0pv7" path="res://assets/graphics/misc/lock_aspect_2.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://beqermx8s5q8y" path="res://assets/graphics/misc/lock_aspect.png" id="5"]
+[ext_resource type="Texture2D" uid="uid://kd10jfc1dxf5" path="res://assets/graphics/misc/lock_aspect_guides.png" id="6"]
[node name="CreateNewImage" type="ConfirmationDialog"]
-margin_right = 471.0
-margin_bottom = 284.0
-rect_min_size = Vector2( 375, 222 )
-window_title = "New..."
-resizable = true
-script = ExtResource( 1 )
+title = "New..."
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
size_flags_horizontal = 0
[node name="ProjectName" type="HBoxContainer" parent="VBoxContainer"]
-margin_right = 455.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="NameLabel" type="Label" parent="VBoxContainer/ProjectName"]
-margin_top = 5.0
-margin_right = 100.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
text = "Project Name:"
[node name="NameInput" type="LineEdit" parent="VBoxContainer/ProjectName"]
-margin_left = 104.0
-margin_right = 455.0
-margin_bottom = 24.0
+layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "Enter name... (Default \"untitled\")"
[node name="ImageSize" type="Label" parent="VBoxContainer"]
-margin_top = 28.0
-margin_right = 455.0
-margin_bottom = 42.0
+layout_mode = 2
text = "Image Size"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
-margin_top = 46.0
-margin_right = 455.0
-margin_bottom = 50.0
+layout_mode = 2
[node name="VBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 54.0
-margin_right = 455.0
-margin_bottom = 192.0
+layout_mode = 2
size_flags_vertical = 3
[node name="Templates" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"]
-margin_right = 293.0
-margin_bottom = 138.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="TemplatesContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates"]
-margin_right = 293.0
-margin_bottom = 20.0
+layout_mode = 2
[node name="TemplatesLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/TemplatesContainer"]
-margin_top = 3.0
-margin_right = 100.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
text = "Templates:"
[node name="TemplatesOptions" type="OptionButton" parent="VBoxContainer/VBoxContainer/Templates/TemplatesContainer"]
-margin_left = 104.0
-margin_right = 293.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
toggle_mode = false
-text = "Default"
-items = [ "Default", null, false, 0, null ]
+item_count = 1
selected = 0
+popup/item_0/text = "Default"
+popup/item_0/id = 0
[node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates"]
-margin_top = 24.0
-margin_right = 293.0
-margin_bottom = 76.0
+layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer"]
-margin_right = 280.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer"]
-margin_right = 280.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="WidthLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer"]
-margin_top = 5.0
-margin_right = 100.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
text = "Width:"
[node name="WidthValue" type="SpinBox" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer"]
-margin_left = 104.0
-margin_right = 280.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
suffix = "px"
[node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer"]
-margin_top = 28.0
-margin_right = 280.0
-margin_bottom = 52.0
+layout_mode = 2
[node name="HeightLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer"]
-margin_top = 5.0
-margin_right = 100.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
text = "Height:"
[node name="HeightValue" type="SpinBox" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer"]
-margin_left = 104.0
-margin_right = 280.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
suffix = "px"
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer" groups=["UIButtons"]]
-margin_left = 284.0
-margin_right = 293.0
-margin_bottom = 52.0
-texture = ExtResource( 6 )
+layout_mode = 2
+texture = ExtResource("6")
[node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/TextureRect" groups=["UIButtons"]]
+unique_name_in_owner = true
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -4.5
-margin_top = -9.0
-margin_right = 11.5
-margin_bottom = 7.0
-hint_tooltip = "Lock aspect ratio"
+offset_left = -4.5
+offset_top = -9.0
+offset_right = 11.5
+offset_bottom = 7.0
+tooltip_text = "Lock aspect ratio"
mouse_default_cursor_shape = 2
toggle_mode = true
-texture_normal = ExtResource( 4 )
-texture_pressed = ExtResource( 5 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture_normal = ExtResource("4")
+texture_pressed = ExtResource("5")
[node name="VSeparator" type="VSeparator" parent="VBoxContainer/VBoxContainer"]
-margin_left = 297.0
-margin_right = 301.0
-margin_bottom = 138.0
+layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"]
-margin_left = 305.0
-margin_right = 455.0
-margin_bottom = 138.0
-rect_min_size = Vector2( 150, 0 )
-rect_clip_content = true
+clip_contents = true
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
focus_mode = 2
mouse_filter = 0
-__meta__ = {
-"_editor_description_": ""
-}
[node name="Label" type="Label" parent="VBoxContainer/VBoxContainer/VBoxContainer"]
-margin_right = 150.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Recent:"
[node name="RecentTemplates" type="ItemList" parent="VBoxContainer/VBoxContainer/VBoxContainer"]
-margin_top = 18.0
-margin_right = 150.0
-margin_bottom = 138.0
+unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
allow_reselect = true
[node name="SizeButtonsContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 196.0
-margin_right = 455.0
-margin_bottom = 216.0
+layout_mode = 2
[node name="PortraitButton" type="Button" parent="VBoxContainer/SizeButtonsContainer" groups=["UIButtons"]]
-margin_right = 20.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Portrait"
+unique_name_in_owner = true
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Portrait"
focus_mode = 0
mouse_default_cursor_shape = 2
toggle_mode = true
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeButtonsContainer/PortraitButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -8.0
-margin_top = -8.0
-margin_right = 8.0
-margin_bottom = 8.0
-texture = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -8.0
+offset_top = -8.0
+offset_right = 8.0
+offset_bottom = 8.0
+texture = ExtResource("2")
[node name="LandscapeButton" type="Button" parent="VBoxContainer/SizeButtonsContainer" groups=["UIButtons"]]
-margin_left = 24.0
-margin_right = 44.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Landscape"
+unique_name_in_owner = true
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Landscape"
focus_mode = 0
mouse_default_cursor_shape = 2
toggle_mode = true
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeButtonsContainer/LandscapeButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -8.0
-margin_top = -8.0
-margin_right = 8.0
-margin_bottom = 8.0
-texture = ExtResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -8.0
+offset_top = -8.0
+offset_right = 8.0
+offset_bottom = 8.0
+texture = ExtResource("3")
[node name="FillColorContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 220.0
-margin_right = 455.0
-margin_bottom = 240.0
+layout_mode = 2
[node name="FillColorLabel" type="Label" parent="VBoxContainer/FillColorContainer"]
-margin_top = 3.0
-margin_right = 100.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
text = "Fill with color:"
[node name="FillColor" type="ColorPickerButton" parent="VBoxContainer/FillColorContainer"]
-margin_left = 104.0
-margin_right = 455.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 64, 20 )
-mouse_default_cursor_shape = 2
+unique_name_in_owner = true
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
size_flags_horizontal = 3
-color = Color( 0, 0, 0, 0 )
+mouse_default_cursor_shape = 2
+color = Color(0, 0, 0, 0)
-[connection signal="about_to_show" from="." to="." method="_on_CreateNewImage_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_CreateNewImage_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_CreateNewImage_confirmed"]
[connection signal="item_selected" from="VBoxContainer/VBoxContainer/Templates/TemplatesContainer/TemplatesOptions" to="." method="_on_TemplatesOptions_item_selected"]
[connection signal="value_changed" from="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer/WidthValue" to="." method="_on_SizeValue_value_changed"]
diff --git a/src/UI/Dialogs/ExportDialog.gd b/src/UI/Dialogs/ExportDialog.gd
index 75a88f28395..c3a074ce27e 100644
--- a/src/UI/Dialogs/ExportDialog.gd
+++ b/src/UI/Dialogs/ExportDialog.gd
@@ -1,45 +1,45 @@
extends ConfirmationDialog
-# called when user resumes export after filename collision
+## Called when user resumes export after filename collision
signal resume_export_function
var preview_current_frame := 0
var preview_frames := []
-# allow custom exporters to be added
+## Allow custom exporters to be added
var image_exports := [Export.FileFormat.PNG, Export.FileFormat.GIF, Export.FileFormat.APNG]
var spritesheet_exports := [Export.FileFormat.PNG]
-onready var tabs: Tabs = $VBoxContainer/Tabs
-onready var checker: ColorRect = $"%TransparentChecker"
-onready var previews: GridContainer = $"%Previews"
+@onready var tabs: TabBar = $VBoxContainer/TabBar
+@onready var checker: ColorRect = $"%TransparentChecker"
+@onready var previews: GridContainer = $"%Previews"
-onready var spritesheet_orientation: OptionButton = $"%Orientation"
-onready var spritesheet_lines_count: SpinBox = $"%LinesCount"
-onready var spritesheet_lines_count_label: Label = $"%LinesCountLabel"
+@onready var spritesheet_orientation: OptionButton = $"%Orientation"
+@onready var spritesheet_lines_count: SpinBox = $"%LinesCount"
+@onready var spritesheet_lines_count_label: Label = $"%LinesCountLabel"
-onready var frames_option_button: OptionButton = $"%Frames"
-onready var layers_option_button: OptionButton = $"%Layers"
-onready var options_resize: ValueSlider = $"%Resize"
-onready var dimension_label: Label = $"%DimensionLabel"
+@onready var frames_option_button: OptionButton = $"%Frames"
+@onready var layers_option_button: OptionButton = $"%Layers"
+@onready var options_resize: ValueSlider = $"%Resize"
+@onready var dimension_label: Label = $"%DimensionLabel"
-onready var path_line_edit: LineEdit = $"%PathLineEdit"
-onready var file_line_edit: LineEdit = $"%FileLineEdit"
-onready var file_format_options: OptionButton = $"%FileFormat"
+@onready var path_line_edit: LineEdit = $"%PathLineEdit"
+@onready var file_line_edit: LineEdit = $"%FileLineEdit"
+@onready var file_format_options: OptionButton = $"%FileFormat"
-onready var options_interpolation: OptionButton = $"%Interpolation"
+@onready var options_interpolation: OptionButton = $"%Interpolation"
-onready var file_exists_alert_popup: AcceptDialog = $Popups/FileExistsAlert
-onready var path_validation_alert_popup: AcceptDialog = $Popups/PathValidationAlert
-onready var path_dialog_popup: FileDialog = $Popups/PathDialog
-onready var export_progress_popup: WindowDialog = $Popups/ExportProgressBar
-onready var export_progress_bar: ProgressBar = $Popups/ExportProgressBar/MarginContainer/ProgressBar
-onready var frame_timer: Timer = $FrameTimer
+@onready var file_exists_alert_popup: AcceptDialog = $Popups/FileExistsAlert
+@onready var path_validation_alert_popup: AcceptDialog = $Popups/PathValidationAlert
+@onready var path_dialog_popup: FileDialog = $Popups/PathDialog
+@onready var export_progress_popup: Window = $Popups/ExportProgressBar
+@onready var export_progress_bar := %ProgressBar as ProgressBar
+@onready var frame_timer: Timer = $FrameTimer
func _ready() -> void:
- get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL
- get_cancel().size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ get_cancel_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL
tabs.add_tab("Image")
tabs.add_tab("Spritesheet")
if OS.get_name() == "Windows":
@@ -47,9 +47,6 @@ func _ready() -> void:
else:
file_exists_alert_popup.add_button("Cancel Export", false, "cancel")
- # Remove close button from export progress bar
- export_progress_popup.get_close_button().hide()
-
func show_tab() -> void:
get_tree().call_group("ExportImageOptions", "hide")
@@ -95,7 +92,7 @@ func set_preview() -> void:
previews.columns = 1
add_animated_preview()
else:
- previews.columns = ceil(sqrt(Export.processed_images.size()))
+ previews.columns = ceili(sqrt(Export.processed_images.size()))
for i in range(Export.processed_images.size()):
add_image_preview(Export.processed_images[i], i + 1)
@@ -112,14 +109,13 @@ func _on_GifWarning_meta_clicked(meta) -> void:
func add_image_preview(image: Image, canvas_number: int = -1) -> void:
var container := create_preview_container()
var preview := create_preview_rect()
- preview.texture = ImageTexture.new()
- preview.texture.create_from_image(image, 0)
+ preview.texture = ImageTexture.create_from_image(image)
container.add_child(preview)
if canvas_number != -1:
var label := Label.new()
- label.align = Label.ALIGN_CENTER
- label.text = String(canvas_number)
+ label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
+ label.text = str(canvas_number)
container.add_child(label)
previews.add_child(container)
@@ -130,8 +126,7 @@ func add_animated_preview() -> void:
preview_frames = []
for processed_image in Export.processed_images:
- var texture := ImageTexture.new()
- texture.create_from_image(processed_image, 0)
+ var texture := ImageTexture.create_from_image(processed_image)
preview_frames.push_back(texture)
var container := create_preview_container()
@@ -149,17 +144,17 @@ func add_animated_preview() -> void:
func create_preview_container() -> VBoxContainer:
var container := VBoxContainer.new()
- container.size_flags_horizontal = SIZE_EXPAND_FILL
- container.size_flags_vertical = SIZE_EXPAND_FILL
- container.rect_min_size = Vector2(0, 128)
+ container.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ container.size_flags_vertical = Control.SIZE_EXPAND_FILL
+ container.custom_minimum_size = Vector2(0, 128)
return container
func create_preview_rect() -> TextureRect:
var preview := TextureRect.new()
preview.expand = true
- preview.size_flags_horizontal = SIZE_EXPAND_FILL
- preview.size_flags_vertical = SIZE_EXPAND_FILL
+ preview.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ preview.size_flags_vertical = Control.SIZE_EXPAND_FILL
preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
return preview
@@ -177,10 +172,10 @@ func set_file_format_selector() -> void:
_set_file_format_selector_suitable_file_formats(spritesheet_exports)
-# Updates the suitable list of file formats. First is preferred.
-# Note that if the current format is in the list, it stays for consistency.
+## Updates the suitable list of file formats. First is preferred.
+## Note that if the current format is in the list, it stays for consistency.
func _set_file_format_selector_suitable_file_formats(formats: Array) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
file_format_options.clear()
var needs_update := true
for i in formats:
@@ -231,9 +226,9 @@ func update_dimensions_label() -> void:
func open_path_validation_alert_popup(path_or_name: int = -1) -> void:
# 0 is invalid path, 1 is invalid name
- var error_text := "Directory path and file name are not valid!"
+ var error_text := "DirAccess path and file name are not valid!"
if path_or_name == 0:
- error_text = "Directory path is not valid!"
+ error_text = "DirAccess path is not valid!"
elif path_or_name == 1:
error_text = "File name is not valid!"
@@ -242,8 +237,8 @@ func open_path_validation_alert_popup(path_or_name: int = -1) -> void:
path_validation_alert_popup.popup_centered()
-func open_file_exists_alert_popup(dialog_text: String) -> void:
- file_exists_alert_popup.dialog_text = dialog_text
+func open_file_exists_alert_popup(text: String) -> void:
+ file_exists_alert_popup.dialog_text = text
file_exists_alert_popup.popup_centered()
@@ -259,15 +254,15 @@ func set_export_progress_bar(value: float) -> void:
func _on_ExportDialog_about_to_show() -> void:
- get_ok().text = "Export"
+ get_ok_button().text = "Export"
Global.canvas.selection.transform_content_confirm()
- var project: Project = Global.current_project
- # If we're on HTML5, don't let the user change the directory path
- if OS.get_name() == "HTML5":
+ var project := Global.current_project
+ # If we're on Web, don't let the user change the directory path
+ if OS.get_name() == "Web":
get_tree().call_group("NotHTML5", "hide")
project.directory_path = "user://"
- if project.directory_path.empty():
+ if project.directory_path.is_empty():
project.directory_path = Global.config_cache.get_value(
"data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP)
)
@@ -282,15 +277,15 @@ func _on_ExportDialog_about_to_show() -> void:
show_tab()
# Set the size of the preview checker
- checker.rect_size = checker.get_parent().rect_size
+ checker.size = checker.get_parent().size
-func _on_Tabs_tab_clicked(tab: int) -> void:
+func _on_Tabs_tab_clicked(tab: Export.ExportTab) -> void:
Export.current_tab = tab
show_tab()
-func _on_Orientation_item_selected(id: int) -> void:
+func _on_Orientation_item_selected(id: Export.Orientation) -> void:
Export.orientation = id
if Export.orientation == Export.Orientation.ROWS:
spritesheet_lines_count_label.text = "Columns:"
@@ -309,7 +304,7 @@ func _on_LinesCount_value_changed(value: float) -> void:
set_preview()
-func _on_Direction_item_selected(id: int) -> void:
+func _on_Direction_item_selected(id: Export.AnimationDirection) -> void:
Export.direction = id
preview_current_frame = 0
Export.process_data()
@@ -321,13 +316,13 @@ func _on_Resize_value_changed(value: float) -> void:
update_dimensions_label()
-func _on_Interpolation_item_selected(id: int) -> void:
+func _on_Interpolation_item_selected(id: Image.Interpolation) -> void:
Export.interpolation = id
func _on_ExportDialog_confirmed() -> void:
Global.current_project.export_overwrite = false
- if Export.export_processed_images(false, self, Global.current_project):
+ if await Export.export_processed_images(false, self, Global.current_project):
hide()
@@ -349,7 +344,7 @@ func _on_FileDialog_dir_selected(dir: String) -> void:
func _on_FileFormat_item_selected(idx: int) -> void:
- var id := file_format_options.get_item_id(idx)
+ var id := file_format_options.get_item_id(idx) as Export.FileFormat
Global.current_project.file_format = id
if not Export.is_single_file_format():
get_tree().set_group("ExportMultipleFilesOptions", "disabled", false)
@@ -365,7 +360,7 @@ func _on_FileExistsAlert_confirmed() -> void:
# Overwrite existing file
file_exists_alert_popup.dialog_text = Export.file_exists_alert
Export.stop_export = false
- emit_signal("resume_export_function")
+ resume_export_function.emit()
func _on_FileExistsAlert_custom_action(action: String) -> void:
@@ -373,7 +368,7 @@ func _on_FileExistsAlert_custom_action(action: String) -> void:
# Cancel export
file_exists_alert_popup.dialog_text = Export.file_exists_alert
Export.stop_export = true
- emit_signal("resume_export_function")
+ resume_export_function.emit()
file_exists_alert_popup.hide()
diff --git a/src/UI/Dialogs/ExportDialog.tscn b/src/UI/Dialogs/ExportDialog.tscn
index 8121de8d499..b0c3f128685 100644
--- a/src/UI/Dialogs/ExportDialog.tscn
+++ b/src/UI/Dialogs/ExportDialog.tscn
@@ -1,63 +1,55 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://clgu8wb5o6oup"]
-[ext_resource path="res://src/UI/Dialogs/ExportDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=3]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=4]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ExportDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"]
+[ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="3"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4"]
[node name="ExportDialog" type="ConfirmationDialog"]
-margin_right = 532.0
-margin_bottom = 530.0
-rect_min_size = Vector2( 170, 59.5 )
-window_title = "Export..."
-resizable = true
+canvas_item_default_texture_filter = 0
+title = "Export..."
+size = Vector2i(700, 600)
+exclusive = false
dialog_hide_on_ok = false
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 524.0
-margin_bottom = 494.0
-rect_min_size = Vector2( 330, 0 )
+custom_minimum_size = Vector2(330, 0)
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 524.0
+offset_bottom = 494.0
size_flags_vertical = 3
-[node name="Tabs" type="Tabs" parent="VBoxContainer"]
-margin_right = 516.0
-margin_bottom = 24.0
+[node name="TabBar" type="TabBar" parent="VBoxContainer"]
+layout_mode = 2
size_flags_vertical = 0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
-margin_top = 28.0
-margin_right = 516.0
-margin_bottom = 32.0
+layout_mode = 2
[node name="PreviewLabel" type="Label" parent="VBoxContainer"]
-margin_top = 36.0
-margin_right = 516.0
-margin_bottom = 50.0
+layout_mode = 2
text = "Preview:"
[node name="VSplitContainer" type="VSplitContainer" parent="VBoxContainer"]
-margin_top = 54.0
-margin_right = 516.0
-margin_bottom = 486.0
+layout_mode = 2
size_flags_vertical = 3
[node name="PreviewPanel" type="Panel" parent="VBoxContainer/VSplitContainer"]
-margin_right = 516.0
-margin_bottom = 168.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-[node name="TransparentChecker" parent="VBoxContainer/VSplitContainer/PreviewPanel" instance=ExtResource( 2 )]
+[node name="TransparentChecker" parent="VBoxContainer/VSplitContainer/PreviewPanel" instance=ExtResource("2")]
unique_name_in_owner = true
+layout_mode = 0
+anchors_preset = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
[node name="PreviewScroll" type="ScrollContainer" parent="VBoxContainer/VSplitContainer/PreviewPanel"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_horizontal = 3
@@ -65,134 +57,108 @@ size_flags_vertical = 3
[node name="Previews" type="GridContainer" parent="VBoxContainer/VSplitContainer/PreviewPanel/PreviewScroll"]
unique_name_in_owner = true
-margin_right = 516.0
-margin_bottom = 168.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
columns = 3
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VSplitContainer"]
-margin_top = 180.0
-margin_right = 516.0
-margin_bottom = 432.0
+layout_mode = 2
size_flags_vertical = 3
[node name="GridContainer" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
-margin_right = 516.0
-margin_bottom = 156.0
+layout_mode = 2
columns = 2
[node name="OrientationLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]]
-margin_top = 3.0
-margin_right = 256.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Orientation:"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="Orientation" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]]
unique_name_in_owner = true
-margin_left = 260.0
-margin_right = 516.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Rows"
-items = [ "Rows", null, false, 0, null, "Columns", null, false, 1, null ]
+mouse_default_cursor_shape = 2
+item_count = 2
selected = 0
+popup/item_0/text = "Rows"
+popup/item_0/id = 0
+popup/item_1/text = "Columns"
+popup/item_1/id = 1
[node name="LinesCountLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]]
unique_name_in_owner = true
-margin_top = 29.0
-margin_right = 256.0
-margin_bottom = 43.0
+layout_mode = 2
text = "Columns:"
[node name="LinesCount" type="SpinBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]]
unique_name_in_owner = true
-margin_left = 260.0
-margin_top = 24.0
-margin_right = 516.0
-margin_bottom = 48.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 1000.0
value = 1.0
[node name="FramesLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
-margin_top = 55.0
-margin_right = 256.0
-margin_bottom = 69.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Frames:"
[node name="Frames" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
unique_name_in_owner = true
-margin_left = 260.0
-margin_top = 52.0
-margin_right = 516.0
-margin_bottom = 72.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "All frames"
-items = [ "All frames", null, false, 0, null, "Selected frames", null, false, 1, null ]
-selected = 0
+mouse_default_cursor_shape = 2
+item_count = 2
+popup/item_0/text = "All frames"
+popup/item_0/id = 0
+popup/item_1/text = "Selected frames"
+popup/item_1/id = 1
[node name="LayersLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
-margin_top = 79.0
-margin_right = 256.0
-margin_bottom = 93.0
+layout_mode = 2
text = "Layers:"
[node name="Layers" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
unique_name_in_owner = true
-margin_left = 260.0
-margin_top = 76.0
-margin_right = 516.0
-margin_bottom = 96.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Visible layers"
-items = [ "Visible layers", null, false, 0, null, "Selected layers", null, false, 1, null ]
-selected = 0
+item_count = 2
+popup/item_0/text = "Visible layers"
+popup/item_0/id = 0
+popup/item_1/text = "Selected layers"
+popup/item_1/id = 1
[node name="DirectionLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
-margin_top = 103.0
-margin_right = 256.0
-margin_bottom = 117.0
+layout_mode = 2
text = "Direction:"
[node name="Direction" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
-margin_left = 260.0
-margin_top = 100.0
-margin_right = 516.0
-margin_bottom = 120.0
-rect_min_size = Vector2( 100, 0 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
size_flags_horizontal = 3
-text = "Forward"
-items = [ "Forward", null, false, 0, null, "Backwards", null, false, 1, null, "Ping-Pong", null, false, 2, null ]
+mouse_default_cursor_shape = 2
+item_count = 3
selected = 0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+popup/item_0/text = "Forward"
+popup/item_0/id = 0
+popup/item_1/text = "Backwards"
+popup/item_1/id = 1
+popup/item_2/text = "Ping-pong"
+popup/item_2/id = 2
[node name="ResizeLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
-margin_top = 124.0
-margin_right = 256.0
-margin_bottom = 138.0
-rect_min_size = Vector2( 30, 0 )
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
text = "Resize:"
-[node name="Resize" type="TextureProgress" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
+[node name="Resize" type="TextureProgressBar" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
unique_name_in_owner = true
-margin_left = 260.0
-margin_top = 124.0
-margin_right = 516.0
-margin_bottom = 138.0
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
min_value = 50.0
max_value = 1000.0
step = 50.0
@@ -202,256 +168,180 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 4 )
+script = ExtResource("4")
suffix = "%"
snap_step = 100.0
[node name="DimensionLabelText" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
-margin_top = 142.0
-margin_right = 256.0
-margin_bottom = 156.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Export dimensions:"
[node name="DimensionLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
unique_name_in_owner = true
-margin_left = 260.0
-margin_top = 142.0
-margin_right = 516.0
-margin_bottom = 156.0
+layout_mode = 2
size_flags_horizontal = 3
text = "64ร64"
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
-margin_top = 160.0
-margin_right = 516.0
-margin_bottom = 164.0
+layout_mode = 2
[node name="FilePath" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
-margin_top = 168.0
-margin_right = 516.0
-margin_bottom = 220.0
+layout_mode = 2
columns = 3
[node name="Label" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath" groups=["NotHTML5"]]
-margin_top = 5.0
-margin_right = 32.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 30, 0 )
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
text = "Path:"
[node name="PathLineEdit" type="LineEdit" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath" groups=["NotHTML5"]]
unique_name_in_owner = true
-margin_left = 36.0
-margin_right = 382.0
-margin_bottom = 24.0
+layout_mode = 2
size_flags_horizontal = 3
caret_blink = true
-caret_blink_speed = 0.5
+caret_blink_interval = 0.5
[node name="PathButton" type="Button" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath" groups=["NotHTML5"]]
-margin_left = 386.0
-margin_right = 516.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Browse"
[node name="Label2" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath"]
-margin_top = 33.0
-margin_right = 32.0
-margin_bottom = 47.0
-rect_min_size = Vector2( 30, 0 )
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
text = "File:"
[node name="FileLineEdit" type="LineEdit" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath"]
unique_name_in_owner = true
-margin_left = 36.0
-margin_top = 28.0
-margin_right = 382.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
text = "untitled"
caret_blink = true
-caret_blink_speed = 0.5
+caret_blink_interval = 0.5
[node name="FileFormat" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath"]
unique_name_in_owner = true
-margin_left = 386.0
-margin_top = 28.0
-margin_right = 516.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 130, 0 )
+custom_minimum_size = Vector2(130, 0)
+layout_mode = 2
mouse_default_cursor_shape = 2
[node name="HSeparator3" type="HSeparator" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
-margin_top = 224.0
-margin_right = 516.0
-margin_bottom = 228.0
+layout_mode = 2
[node name="GifWarning" type="RichTextLabel" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
unique_name_in_owner = true
visible = false
-margin_top = 232.0
-margin_right = 516.0
-margin_bottom = 262.0
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
bbcode_enabled = true
-bbcode_text = "[center]If exported GIF is distorted, it is recommended to convert to APNG and then use any online tool like [color=blue][url]https://ezgif.com/apng-to-gif[/url][/color] to turn it to GIF[/center]"
-text = "If exported GIF is distorted, it is recommended to convert to APNG and then use any online tool like https://ezgif.com/apng-to-gif to turn it to GIF"
-fit_content_height = true
+text = "[center]If exported GIF is distorted, it is recommended to convert to APNG and then use any online tool like [color=blue][url]https://ezgif.com/apng-to-gif[/url][/color] to turn it to GIF[/center]"
[node name="CollapsibleContainer" type="VBoxContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
-margin_top = 232.0
-margin_right = 516.0
-margin_bottom = 252.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 3 )
+layout_mode = 2
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("3")
text = "Advanced options"
[node name="GridContainer" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer"]
visible = false
-margin_top = 24.0
-margin_right = 516.0
-margin_bottom = 44.0
+layout_mode = 2
columns = 2
[node name="InterpolationLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer"]
-margin_top = 3.0
-margin_right = 256.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 30, 0 )
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
size_flags_horizontal = 3
text = "Interpolation:"
[node name="Interpolation" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer"]
unique_name_in_owner = true
-margin_left = 260.0
-margin_right = 516.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Nearest"
-items = [ "Nearest", null, false, 0, null, "Bilinear", null, false, 1, null, "Cubic", null, false, 2, null, "Trilinear", null, false, 3, null, "Lanczos", null, false, 4, null ]
+mouse_default_cursor_shape = 2
+item_count = 5
selected = 0
+popup/item_0/text = "Nearest"
+popup/item_0/id = 0
+popup/item_1/text = "Bilinear"
+popup/item_1/id = 1
+popup/item_2/text = "Cubic"
+popup/item_2/id = 2
+popup/item_3/text = "Trilinear"
+popup/item_3/id = 3
+popup/item_4/text = "Lanczos"
+popup/item_4/id = 4
[node name="IncludeTagsInFilename" type="CheckBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesOptions"]]
-margin_top = 24.0
-margin_right = 516.0
-margin_bottom = 48.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Include frame tags in the file name"
[node name="MultipleAnimationsDirectories" type="CheckBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesOptions"]]
visible = false
-margin_top = 24.0
-margin_right = 516.0
-margin_bottom = 48.0
-hint_tooltip = "Creates multiple files but every file is stored in different folder that corresponds to its frame tag"
+layout_mode = 2
+tooltip_text = "Creates multiple files but every file is stored in different folder that corresponds to its frame tag"
mouse_default_cursor_shape = 2
text = "Create new folder for each frame tag"
[node name="SeparatorCharacterLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions"]]
-margin_top = 3.0
-margin_right = 256.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 30, 0 )
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
size_flags_horizontal = 3
text = "Separator character(s):"
[node name="SeparatorCharacter" type="LineEdit" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesEditableOptions"]]
-margin_right = 58.0
-margin_bottom = 24.0
-hint_tooltip = "The character(s) that separate the file name and the frame number"
+layout_mode = 2
+tooltip_text = "The character(s) that separate the file name and the frame number"
text = "_"
[node name="Popups" type="Control" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 524.0
-margin_bottom = 494.0
+layout_mode = 3
+anchors_preset = 0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 524.0
+offset_bottom = 494.0
mouse_filter = 2
[node name="PathDialog" type="FileDialog" parent="Popups"]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 448.0
-margin_bottom = 494.0
-rect_min_size = Vector2( 440, 300 )
-size_flags_horizontal = 0
-size_flags_vertical = 0
-window_title = "Open a Directory"
-resizable = true
mode = 2
+title = "Open a Directory"
+size = Vector2i(675, 500)
+ok_button_text = "Select Current Folder"
+file_mode = 2
access = 2
show_hidden_files = true
[node name="PathValidationAlert" type="AcceptDialog" parent="Popups"]
-margin_left = 8.0
-margin_top = 180.0
-margin_right = 448.0
-margin_bottom = 280.0
-size_flags_horizontal = 0
-size_flags_vertical = 0
-window_title = "Alarm!"
-resizable = true
-dialog_text = "Directory path and file name are not valid!"
-__meta__ = {
-"_edit_use_anchors_": false
-}
+dialog_text = "DirAccess path and file name are not valid!"
[node name="FileExistsAlert" type="AcceptDialog" parent="Popups"]
-margin_left = 10.5227
-margin_top = 176.636
-margin_right = 450.523
-margin_bottom = 276.636
-size_flags_horizontal = 0
-size_flags_vertical = 0
-window_title = "Alarm!"
-resizable = true
dialog_text = "File %s already exists. Overwrite?"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="ExportProgressBar" type="WindowDialog" parent="Popups"]
-margin_left = 63.0
-margin_top = 215.0
-margin_right = 402.0
-margin_bottom = 256.0
-popup_exclusive = true
-window_title = "Exporting in progress..."
-__meta__ = {
-"_edit_group_": true,
-"_edit_use_anchors_": false
-}
+
+[node name="ExportProgressBar" type="Window" parent="Popups"]
+visible = false
+exclusive = true
[node name="MarginContainer" type="MarginContainer" parent="Popups/ExportProgressBar"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 5.0
-margin_top = 5.0
-margin_right = -5.0
-margin_bottom = -5.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 5.0
+offset_top = 5.0
+offset_right = -5.0
+offset_bottom = -5.0
[node name="ProgressBar" type="ProgressBar" parent="Popups/ExportProgressBar/MarginContainer"]
-margin_right = 329.0
-margin_bottom = 14.0
+unique_name_in_owner = true
+layout_mode = 2
size_flags_horizontal = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="FrameTimer" type="Timer" parent="."]
-__meta__ = {
-"_editor_description_": "Timer to advance animation frames in animation preview."
-}
-[connection signal="about_to_show" from="." to="." method="_on_ExportDialog_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_ExportDialog_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_ExportDialog_confirmed"]
-[connection signal="popup_hide" from="." to="." method="_on_ExportDialog_popup_hide"]
-[connection signal="tab_clicked" from="VBoxContainer/Tabs" to="." method="_on_Tabs_tab_clicked"]
+[connection signal="tab_clicked" from="VBoxContainer/TabBar" to="." method="_on_Tabs_tab_clicked"]
[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Orientation" to="." method="_on_Orientation_item_selected"]
[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/LinesCount" to="." method="_on_LinesCount_value_changed"]
[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Frames" to="." method="_on_Frames_item_selected"]
diff --git a/src/UI/Dialogs/HelperScripts/RowColumnLines.gd b/src/UI/Dialogs/HelperScripts/RowColumnLines.gd
index 46dc6d606b4..e45461cdaf2 100644
--- a/src/UI/Dialogs/HelperScripts/RowColumnLines.gd
+++ b/src/UI/Dialogs/HelperScripts/RowColumnLines.gd
@@ -1,39 +1,39 @@
extends Control
-var color: Color = Color("6680ff") # Set this to a theme color later
-var _spritesheet_vertical
-var _spritesheet_horizontal
+var color := Color("6680ff") # Set this to a theme color later
+var _spritesheet_vertical: int
+var _spritesheet_horizontal: int
-func show_preview(spritesheet_vertical, spritesheet_horizontal) -> void:
+func show_preview(spritesheet_vertical: int, spritesheet_horizontal: int) -> void:
_spritesheet_vertical = spritesheet_vertical
_spritesheet_horizontal = spritesheet_horizontal
- update()
+ queue_redraw()
func _draw() -> void:
var texture_rect: TextureRect = get_parent()
- var image = texture_rect.texture.get_data()
- var image_size_y = texture_rect.rect_size.y
- var image_size_x = texture_rect.rect_size.x
+ var image := texture_rect.texture.get_image()
+ var image_size_y := texture_rect.size.y
+ var image_size_x := texture_rect.size.x
if image.get_size().x > image.get_size().y:
- var scale_ratio = image.get_size().x / image_size_x
+ var scale_ratio := image.get_size().x / image_size_x
image_size_y = image.get_size().y / scale_ratio
else:
- var scale_ratio = image.get_size().y / image_size_y
+ var scale_ratio := image.get_size().y / image_size_y
image_size_x = image.get_size().x / scale_ratio
- var offset_x = (texture_rect.rect_size.x - image_size_x) / 2
- var offset_y = (texture_rect.rect_size.y - image_size_y) / 2
+ var offset_x := (texture_rect.size.x - image_size_x) / 2
+ var offset_y := (texture_rect.size.y - image_size_y) / 2
- var line_distance_vertical = image_size_y / _spritesheet_vertical
- var line_distance_horizontal = image_size_x / _spritesheet_horizontal
+ var line_distance_vertical := image_size_y / _spritesheet_vertical
+ var line_distance_horizontal := image_size_x / _spritesheet_horizontal
for i in range(1, _spritesheet_vertical):
- var from = Vector2(offset_x, i * line_distance_vertical + offset_y)
- var to = Vector2(image_size_x + offset_x, i * line_distance_vertical + offset_y)
+ var from := Vector2(offset_x, i * line_distance_vertical + offset_y)
+ var to := Vector2(image_size_x + offset_x, i * line_distance_vertical + offset_y)
draw_line(from, to, color)
for i in range(1, _spritesheet_horizontal):
- var from = Vector2(i * line_distance_horizontal + offset_x, offset_y)
- var to = Vector2(i * line_distance_horizontal + offset_x, image_size_y + offset_y)
+ var from := Vector2(i * line_distance_horizontal + offset_x, offset_y)
+ var to := Vector2(i * line_distance_horizontal + offset_x, image_size_y + offset_y)
draw_line(from, to, color)
diff --git a/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd b/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd
index f3e3e58e8c7..a53ee617a37 100644
--- a/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd
+++ b/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd
@@ -1,27 +1,29 @@
extends Control
-# add this as a child of the texturerect that contains the main spritesheet
-var color: Color = Color("6680ff") # Set this to a theme color later
-var _sliced_rects: Array
+## Add this as a child of the texturerect that contains the main spritesheet
+var color := Color("6680ff") ## Set this to a theme color later
+var _sliced_rects: Array[Rect2i]
var _stretch_amount: float
var _offset: Vector2
-func show_preview(sliced_rects: Array) -> void:
- var image = get_parent().texture.get_data()
+func show_preview(sliced_rects: Array[Rect2i]) -> void:
+ if not is_instance_valid(get_parent().texture):
+ return
+ var image: Image = get_parent().texture.get_image()
if image.get_size().x > image.get_size().y:
- _stretch_amount = rect_size.x / image.get_size().x
+ _stretch_amount = size.x / image.get_size().x
else:
- _stretch_amount = rect_size.y / image.get_size().y
+ _stretch_amount = size.y / image.get_size().y
_sliced_rects = sliced_rects.duplicate()
- _offset = (0.5 * (rect_size - (image.get_size() * _stretch_amount))).floor()
- update()
+ _offset = (0.5 * (size - (image.get_size() * _stretch_amount))).floor()
+ queue_redraw()
func _draw() -> void:
draw_set_transform(_offset, 0, Vector2.ONE)
for i in _sliced_rects.size():
- var rect = _sliced_rects[i]
+ var rect := _sliced_rects[i]
var scaled_rect: Rect2 = rect
scaled_rect.position = (scaled_rect.position * _stretch_amount)
scaled_rect.size *= _stretch_amount
diff --git a/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd b/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd
index 1544eef8664..fd54405d1e5 100644
--- a/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd
@@ -5,30 +5,31 @@ var green := true
var blue := true
var alpha := false
-var shader: Shader = preload("res://src/Shaders/Desaturate.shader")
+var shader := preload("res://src/Shaders/Desaturate.gdshader")
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {
"red": red, "blue": blue, "green": green, "alpha": alpha, "selection": selection_tex
}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_RButton_toggled(button_pressed: bool) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn b/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn
index bb67b90d76a..2b2e2184435 100644
--- a/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn
@@ -1,74 +1,51 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://5gqka7tkg17k"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"]
-[node name="DesaturateDialog" instance=ExtResource( 2 )]
-window_title = "Desaturation"
-script = ExtResource( 1 )
+[node name="DesaturateDialog" instance=ExtResource("2")]
+title = "Desaturation"
+script = ExtResource("1")
[node name="ShowAnimate" parent="VBoxContainer" index="0"]
visible = false
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 238.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 73.0
-margin_right = 287.0
-margin_bottom = 214.0
-
[node name="RGBAContainer" type="HBoxContainer" parent="VBoxContainer" index="2"]
-margin_top = 242.0
-margin_right = 360.0
-margin_bottom = 262.0
+layout_mode = 2
alignment = 1
[node name="RButton" type="Button" parent="VBoxContainer/RGBAContainer" index="0"]
-margin_right = 87.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Red Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Red Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
-pressed = true
text = "R"
[node name="GButton" type="Button" parent="VBoxContainer/RGBAContainer" index="1"]
-margin_left = 91.0
-margin_right = 178.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Green Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Green Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
-pressed = true
text = "G"
[node name="BButton" type="Button" parent="VBoxContainer/RGBAContainer" index="2"]
-margin_left = 182.0
-margin_right = 269.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Blue Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Blue Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
-pressed = true
text = "B"
[node name="AButton" type="Button" parent="VBoxContainer/RGBAContainer" index="3"]
-margin_left = 273.0
-margin_right = 360.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Alpha Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Alpha Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
text = "A"
-[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"]
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
-
[connection signal="toggled" from="VBoxContainer/RGBAContainer/RButton" to="." method="_on_RButton_toggled"]
[connection signal="toggled" from="VBoxContainer/RGBAContainer/GButton" to="." method="_on_GButton_toggled"]
[connection signal="toggled" from="VBoxContainer/RGBAContainer/BButton" to="." method="_on_BButton_toggled"]
diff --git a/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd b/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd
index d4868467de3..b8e898c366c 100644
--- a/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd
@@ -1,13 +1,14 @@
extends ImageEffect
enum Animate { OFFSET_X, OFFSET_Y }
-var color := Color.black
-var shader: Shader = preload("res://src/Shaders/DropShadow.tres")
+var color := Color.BLACK
+var shader := preload("res://src/Shaders/DropShadow.gdshader")
-onready var shadow_color := $VBoxContainer/ShadowOptions/ShadowColor as ColorPickerButton
+@onready var shadow_color := $VBoxContainer/ShadowOptions/ShadowColor as ColorPickerButton
func _ready() -> void:
+ super._ready()
shadow_color.get_picker().presets_visible = false
color = shadow_color.color
var sm := ShaderMaterial.new()
@@ -16,32 +17,32 @@ func _ready() -> void:
# set as in enum
animate_panel.add_float_property(
- "Offset X", $VBoxContainer/ShadowOptions/OffsetSliders.find_node("X")
+ "Offset X", $VBoxContainer/ShadowOptions/OffsetSliders.find_child("X")
)
animate_panel.add_float_property(
- "Offset Y", $VBoxContainer/ShadowOptions/OffsetSliders.find_node("Y")
+ "Offset Y", $VBoxContainer/ShadowOptions/OffsetSliders.find_child("Y")
)
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
+func commit_action(cel: Image, project := Global.current_project) -> void:
var offset_x := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_X)
var offset_y := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_Y)
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {
"shadow_offset": Vector2(offset_x, offset_y),
"shadow_color": color,
"selection": selection_tex,
}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_OffsetSliders_value_changed(_value: Vector2) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn b/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn
index f69aa514e50..3f0f55a8f0b 100644
--- a/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn
@@ -1,48 +1,44 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://duse1w3q7whmm"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=3]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.gd" id="2"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="3"]
-[node name="DropShadowDialog" instance=ExtResource( 1 )]
-window_title = "Drop Shadow"
-script = ExtResource( 2 )
+[node name="DropShadowDialog" instance=ExtResource("1")]
+title = "Drop Shadow"
+script = ExtResource("2")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 340.0
+offset_bottom = 340.0
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
+[node name="TextureRect" parent="VBoxContainer/ShowAnimate" index="0"]
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 0.0
+offset_bottom = 0.0
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
+[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" index="0"]
+anchor_right = 0.0
+anchor_bottom = 0.0
[node name="ShadowOptions" type="GridContainer" parent="VBoxContainer" index="2"]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 304.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="Label" type="Label" parent="VBoxContainer/ShadowOptions" index="0"]
-margin_top = 19.0
-margin_right = 178.0
-margin_bottom = 33.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Offset:"
-[node name="OffsetSliders" parent="VBoxContainer/ShadowOptions" index="1" instance=ExtResource( 3 )]
-margin_left = 182.0
-margin_right = 360.0
-value = Vector2( 5, 5 )
-min_value = Vector2( -64, -64 )
-max_value = Vector2( 64, 64 )
+[node name="OffsetSliders" parent="VBoxContainer/ShadowOptions" index="1" instance=ExtResource("3")]
+layout_mode = 2
+value = Vector2(5, 5)
+min_value = Vector2(-64, -64)
+max_value = Vector2(64, 64)
allow_greater = true
allow_lesser = true
show_ratio = true
@@ -50,30 +46,22 @@ suffix_x = "px"
suffix_y = "px"
[node name="ShadowColorLabel" type="Label" parent="VBoxContainer/ShadowOptions" index="2"]
-margin_top = 59.0
-margin_right = 178.0
-margin_bottom = 73.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Shadow color:"
[node name="ShadowColor" type="ColorPickerButton" parent="VBoxContainer/ShadowOptions" index="3"]
-margin_left = 182.0
-margin_top = 56.0
-margin_right = 360.0
-margin_bottom = 76.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
size_flags_horizontal = 3
-color = Color( 0.0823529, 0.0823529, 0.0823529, 0.627451 )
-
-[node name="OptionsContainer" parent="VBoxContainer" index="3"]
-margin_top = 308.0
-margin_bottom = 332.0
+color = Color(0.0823529, 0.0823529, 0.0823529, 0.627451)
[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"]
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
+selected = -1
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 340.0
+[node name="AnimatePanel" parent="AnimateDialog" index="0"]
+grow_horizontal = 2
+grow_vertical = 2
[connection signal="value_changed" from="VBoxContainer/ShadowOptions/OffsetSliders" to="." method="_on_OffsetSliders_value_changed"]
[connection signal="color_changed" from="VBoxContainer/ShadowOptions/ShadowColor" to="." method="_on_ShadowColor_color_changed"]
diff --git a/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd b/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd
index aee63a937f0..b33944a62f8 100644
--- a/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd
@@ -1,11 +1,11 @@
extends ImageEffect
-onready var flip_h := $VBoxContainer/FlipOptions/FlipHorizontal as CheckBox
-onready var flip_v := $VBoxContainer/FlipOptions/FlipVertical as CheckBox
+@onready var flip_h := $VBoxContainer/FlipOptions/FlipHorizontal as CheckBox
+@onready var flip_v := $VBoxContainer/FlipOptions/FlipVertical as CheckBox
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- _flip_image(cel, selection_checkbox.pressed, project)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ _flip_image(cel, selection_checkbox.button_pressed, project)
func _on_FlipHorizontal_toggled(_button_pressed: bool) -> void:
@@ -18,35 +18,31 @@ func _on_FlipVertical_toggled(_button_pressed: bool) -> void:
func _flip_image(cel: Image, affect_selection: bool, project: Project) -> void:
if !(affect_selection and project.has_selection):
- if flip_h.pressed:
+ if flip_h.button_pressed:
cel.flip_x()
- if flip_v.pressed:
+ if flip_v.button_pressed:
cel.flip_y()
else:
# Create a temporary image that only has the selected pixels in it
var selected := Image.new()
- var rectangle: Rect2 = Global.canvas.selection.big_bounding_rectangle
+ var rectangle: Rect2i = Global.canvas.selection.big_bounding_rectangle
if project != Global.current_project:
rectangle = project.selection_map.get_used_rect()
- selected = cel.get_rect(rectangle)
- selected.lock()
- cel.lock()
+ selected = cel.get_region(rectangle)
for x in selected.get_width():
for y in selected.get_height():
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
var cel_pos := pos + rectangle.position
if project.can_pixel_get_drawn(cel_pos):
cel.set_pixelv(cel_pos, Color(0, 0, 0, 0))
else:
selected.set_pixelv(pos, Color(0, 0, 0, 0))
- selected.unlock()
- cel.unlock()
- if flip_h.pressed:
+ if flip_h.button_pressed:
selected.flip_x()
- if flip_v.pressed:
+ if flip_v.button_pressed:
selected.flip_y()
- cel.blend_rect(selected, Rect2(Vector2.ZERO, selected.get_size()), rectangle.position)
+ cel.blend_rect(selected, Rect2i(Vector2i.ZERO, selected.get_size()), rectangle.position)
func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> void:
@@ -64,15 +60,14 @@ func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> vo
if not image is Image:
continue
project.undo_redo.add_do_property(image, "data", redo_data[image])
- image.unlock()
for image in undo_data:
if not image is Image:
continue
project.undo_redo.add_undo_property(image, "data", undo_data[image])
- project.undo_redo.add_do_method(Global, "undo_or_redo", false, -1, -1, project)
- project.undo_redo.add_do_method(project, "selection_map_changed")
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true, -1, -1, project)
- project.undo_redo.add_undo_method(project, "selection_map_changed")
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, -1, -1, project))
+ project.undo_redo.add_do_method(project.selection_map_changed)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, -1, -1, project))
+ project.undo_redo.add_undo_method(project.selection_map_changed)
project.undo_redo.commit_action()
@@ -85,30 +80,29 @@ func _get_undo_data(project: Project) -> Dictionary:
var images := _get_selected_draw_images(project)
for image in images:
- image.unlock()
data[image] = image.data
return data
-func _flip_selection(project: Project = Global.current_project) -> void:
- if !(selection_checkbox.pressed and project.has_selection):
+func _flip_selection(project := Global.current_project) -> void:
+ if !(selection_checkbox.button_pressed and project.has_selection):
return
var bitmap_image := SelectionMap.new()
bitmap_image.copy_from(project.selection_map)
var selection_rect := bitmap_image.get_used_rect()
- var smaller_bitmap_image := bitmap_image.get_rect(selection_rect)
+ var smaller_bitmap_image := bitmap_image.get_region(selection_rect)
- if flip_h.pressed:
+ if flip_h.button_pressed:
smaller_bitmap_image.flip_x()
- if flip_v.pressed:
+ if flip_v.button_pressed:
smaller_bitmap_image.flip_y()
bitmap_image.fill(Color(0, 0, 0, 0))
bitmap_image.blend_rect(
smaller_bitmap_image,
- Rect2(Vector2.ZERO, smaller_bitmap_image.get_size()),
+ Rect2i(Vector2.ZERO, smaller_bitmap_image.get_size()),
selection_rect.position
)
project.selection_map = bitmap_image
diff --git a/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn b/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn
index 5487adecdac..1ab72eb79b7 100644
--- a/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn
@@ -1,59 +1,34 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://c7hnynip21y6u"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"]
-[node name="FlipImageDialog" instance=ExtResource( 2 )]
-margin_right = 376.0
-margin_bottom = 324.0
-window_title = "Mirror Image"
-script = ExtResource( 1 )
+[node name="FlipImageDialog" instance=ExtResource("2")]
+title = "Mirror Image"
+script = ExtResource("1")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 288.0
+offset_bottom = 288.0
[node name="ShowAnimate" parent="VBoxContainer" index="0"]
visible = false
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
-
[node name="FlipOptions" type="GridContainer" parent="VBoxContainer" index="2"]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 252.0
+layout_mode = 2
columns = 2
[node name="FlipHorizontal" type="CheckBox" parent="VBoxContainer/FlipOptions" index="0"]
-margin_right = 178.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "Horizontal"
[node name="FlipVertical" type="CheckBox" parent="VBoxContainer/FlipOptions" index="1"]
-margin_left = 182.0
-margin_right = 360.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "Vertical"
-[node name="OptionsContainer" parent="VBoxContainer" index="3"]
-margin_top = 256.0
-margin_bottom = 280.0
-
-[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"]
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 288.0
-
[connection signal="toggled" from="VBoxContainer/FlipOptions/FlipHorizontal" to="." method="_on_FlipHorizontal_toggled"]
[connection signal="toggled" from="VBoxContainer/FlipOptions/FlipVertical" to="." method="_on_FlipVertical_toggled"]
diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.gd b/src/UI/Dialogs/ImageEffects/GradientDialog.gd
index 410084b8dbc..f7007d6369c 100644
--- a/src/UI/Dialogs/ImageEffects/GradientDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/GradientDialog.gd
@@ -3,40 +3,41 @@ extends ImageEffect
enum { LINEAR, RADIAL, LINEAR_DITHERING, RADIAL_DITHERING }
enum Animate { POSITION, SIZE, ANGLE, CENTER_X, CENTER_Y, RADIUS_X, RADIUS_Y }
-var shader_linear: Shader = preload("res://src/Shaders/Gradients/Linear.gdshader")
-var shader_linear_dither: Shader = preload("res://src/Shaders/Gradients/LinearDithering.gdshader")
+var shader_linear := preload("res://src/Shaders/Gradients/Linear.gdshader")
+var shader_linear_dither := preload("res://src/Shaders/Gradients/LinearDithering.gdshader")
-var shader: Shader = shader_linear
-var dither_matrices := [
+var shader := shader_linear
+var dither_matrices: Array[DitherMatrix] = [
DitherMatrix.new(preload("res://assets/dither-matrices/bayer2.png"), "Bayer 2x2"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer4.png"), "Bayer 4x4"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer8.png"), "Bayer 8x8"),
DitherMatrix.new(preload("res://assets/dither-matrices/bayer16.png"), "Bayer 16x16"),
]
-var selected_dither_matrix: DitherMatrix = dither_matrices[0]
+var selected_dither_matrix := dither_matrices[0]
-onready var options_cont: Container = $VBoxContainer/GradientOptions
-onready var gradient_edit: GradientEditNode = $VBoxContainer/GradientEdit
-onready var shape_option_button: OptionButton = $"%ShapeOptionButton"
-onready var dithering_option_button: OptionButton = $"%DitheringOptionButton"
-onready var repeat_option_button: OptionButton = $"%RepeatOptionButton"
-onready var position_slider: ValueSlider = $"%PositionSlider"
-onready var size_slider: ValueSlider = $"%SizeSlider"
-onready var angle_slider: ValueSlider = $"%AngleSlider"
-onready var center_slider := $"%CenterSlider" as ValueSliderV2
-onready var radius_slider := $"%RadiusSlider" as ValueSliderV2
+@onready var options_cont: Container = $VBoxContainer/GradientOptions
+@onready var gradient_edit: GradientEditNode = $VBoxContainer/GradientEdit
+@onready var shape_option_button: OptionButton = $"%ShapeOptionButton"
+@onready var dithering_option_button: OptionButton = $"%DitheringOptionButton"
+@onready var repeat_option_button: OptionButton = $"%RepeatOptionButton"
+@onready var position_slider: ValueSlider = $"%PositionSlider"
+@onready var size_slider: ValueSlider = $"%SizeSlider"
+@onready var angle_slider: ValueSlider = $"%AngleSlider"
+@onready var center_slider := $"%CenterSlider" as ValueSliderV2
+@onready var radius_slider := $"%RadiusSlider" as ValueSliderV2
class DitherMatrix:
- var texture: Texture
+ var texture: Texture2D
var name: String
- func _init(_texture: Texture, _name: String) -> void:
+ func _init(_texture: Texture2D, _name: String) -> void:
texture = _texture
name = _name
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
@@ -54,44 +55,30 @@ func _ready() -> void:
animate_panel.add_float_property("Radius Y", radius_slider.get_sliders()[1])
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- var selection: Image
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection = project.selection_map
- else: # This is needed to prevent a weird bug with the dithering shaders and GLES2
- selection = Image.new()
- selection.create(project.size.x, project.size.y, false, Image.FORMAT_L8)
- selection_tex.create_from_image(selection, 0)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
- var dither_texture: Texture = selected_dither_matrix.texture
- var pixel_size := dither_texture.get_width()
- var gradient: Gradient = gradient_edit.gradient
+ var dither_texture := selected_dither_matrix.texture
+ var gradient := gradient_edit.gradient
var n_of_colors := gradient.offsets.size()
# Pass the gradient offsets as an array to the shader
# ...but since Godot 3.x doesn't support uniform arrays, instead we construct
# a nx1 grayscale texture with each offset stored in each pixel, and pass it to the shader
- var offsets_image := Image.new()
- offsets_image.create(n_of_colors, 1, false, Image.FORMAT_L8)
+ var offsets_image := Image.create(n_of_colors, 1, false, Image.FORMAT_L8)
# Construct an image that contains the selected colors of the gradient without interpolation
- var gradient_image := Image.new()
- gradient_image.create(n_of_colors, 1, false, Image.FORMAT_RGBA8)
- offsets_image.lock()
- gradient_image.lock()
+ var gradient_image := Image.create(n_of_colors, 1, false, Image.FORMAT_RGBA8)
for i in n_of_colors:
var c := gradient.offsets[i]
offsets_image.set_pixel(i, 0, Color(c, c, c, c))
gradient_image.set_pixel(i, 0, gradient.colors[i])
- offsets_image.unlock()
- gradient_image.unlock()
- var offsets_tex := ImageTexture.new()
- offsets_tex.create_from_image(offsets_image, 0)
- var gradient_tex: Texture
+ var offsets_tex := ImageTexture.create_from_image(offsets_image)
+ var gradient_tex: Texture2D
if shader == shader_linear:
gradient_tex = gradient_edit.texture
else:
- gradient_tex = ImageTexture.new()
- gradient_tex.create_from_image(gradient_image, 0)
+ gradient_tex = ImageTexture.create_from_image(gradient_image)
var center := Vector2(
animate_panel.get_animated_value(commit_idx, Animate.CENTER_X),
animate_panel.get_animated_value(commit_idx, Animate.CENTER_Y)
@@ -111,20 +98,17 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi
"center": center / 100.0,
"radius": radius,
"dither_texture": dither_texture,
- "image_size": project.size,
- "pixel_size": pixel_size,
"shape": shape_option_button.selected,
- "n_of_colors": n_of_colors
}
- if !confirmed:
+ if !has_been_confirmed:
preview.material.shader = shader
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_ShapeOptionButton_item_selected(index: int) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.tscn b/src/UI/Dialogs/ImageEffects/GradientDialog.tscn
index 08378537c5c..004eea72b75 100644
--- a/src/UI/Dialogs/ImageEffects/GradientDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/GradientDialog.tscn
@@ -1,105 +1,86 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://u0y5xogg636e"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Nodes/GradientEdit.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=4]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=5]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/GradientDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"]
+[ext_resource type="PackedScene" uid="uid://bn4aw27dj7pwi" path="res://src/UI/Nodes/GradientEdit.tscn" id="3"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="5"]
-[node name="GradientDialog" instance=ExtResource( 2 )]
-window_title = "Gradient"
-script = ExtResource( 1 )
+[node name="GradientDialog" instance=ExtResource("2")]
+title = "Gradient"
+size = Vector2i(700, 603)
+script = ExtResource("1")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 444.0
+offset_right = 692.0
+offset_bottom = 554.0
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
-
-[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource( 3 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 306.0
+[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource("3")]
+layout_mode = 2
[node name="GradientOptions" type="GridContainer" parent="VBoxContainer" index="3"]
-margin_top = 310.0
-margin_right = 360.0
-margin_bottom = 432.0
+layout_mode = 2
columns = 2
[node name="ShapeLabel" type="Label" parent="VBoxContainer/GradientOptions" index="0" groups=["gradient_common"]]
-margin_top = 3.0
-margin_right = 178.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Shape:"
[node name="ShapeOptionButton" type="OptionButton" parent="VBoxContainer/GradientOptions" index="1" groups=["gradient_common"]]
unique_name_in_owner = true
-margin_left = 182.0
-margin_right = 360.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Linear"
-items = [ "Linear", null, false, 0, null, "Radial", null, false, 1, null ]
+mouse_default_cursor_shape = 2
+item_count = 2
selected = 0
+popup/item_0/text = "Linear"
+popup/item_0/id = 0
+popup/item_1/text = "Radial"
+popup/item_1/id = 1
[node name="DitheringLabel" type="Label" parent="VBoxContainer/GradientOptions" index="2" groups=["gradient_common"]]
-margin_top = 27.0
-margin_right = 178.0
-margin_bottom = 41.0
+layout_mode = 2
text = "Dithering pattern:"
[node name="DitheringOptionButton" type="OptionButton" parent="VBoxContainer/GradientOptions" index="3" groups=["gradient_common"]]
unique_name_in_owner = true
-margin_left = 182.0
-margin_top = 24.0
-margin_right = 360.0
-margin_bottom = 44.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "None"
-items = [ "None", null, false, 0, null ]
+item_count = 1
selected = 0
+popup/item_0/text = "None"
+popup/item_0/id = 0
[node name="RepeatLabel" type="Label" parent="VBoxContainer/GradientOptions" index="4" groups=["gradient_common"]]
-margin_top = 51.0
-margin_right = 178.0
-margin_bottom = 65.0
+layout_mode = 2
text = "Repeat:"
[node name="RepeatOptionButton" type="OptionButton" parent="VBoxContainer/GradientOptions" index="5" groups=["gradient_common"]]
unique_name_in_owner = true
-margin_left = 182.0
-margin_top = 48.0
-margin_right = 360.0
-margin_bottom = 68.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "None"
-items = [ "None", null, false, 0, null, "Repeat", null, false, 1, null, "Mirror", null, false, 2, null, "Truncate", null, false, 3, null ]
+item_count = 4
selected = 0
+popup/item_0/text = "None"
+popup/item_0/id = 0
+popup/item_1/text = "Repeat"
+popup/item_1/id = 1
+popup/item_2/text = "Mirror"
+popup/item_2/id = 2
+popup/item_3/text = "Truncate"
+popup/item_3/id = 3
[node name="PositionLabel" type="Label" parent="VBoxContainer/GradientOptions" index="6" groups=["gradient_linear"]]
-margin_top = 72.0
-margin_right = 178.0
-margin_bottom = 86.0
+layout_mode = 2
text = "Position:"
-[node name="PositionSlider" type="TextureProgress" parent="VBoxContainer/GradientOptions" index="7" groups=["gradient_linear"]]
+[node name="PositionSlider" type="TextureProgressBar" parent="VBoxContainer/GradientOptions" index="7" groups=["gradient_linear"]]
unique_name_in_owner = true
-margin_left = 182.0
-margin_top = 72.0
-margin_right = 360.0
-margin_bottom = 86.0
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
value = 50.0
allow_greater = true
allow_lesser = true
@@ -108,25 +89,21 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 4 )
+script = ExtResource("4")
suffix = "%"
snap_step = 10.0
[node name="SizeLabel" type="Label" parent="VBoxContainer/GradientOptions" index="8" groups=["gradient_linear"]]
-margin_top = 90.0
-margin_right = 178.0
-margin_bottom = 104.0
+layout_mode = 2
text = "Size:"
-[node name="SizeSlider" type="TextureProgress" parent="VBoxContainer/GradientOptions" index="9" groups=["gradient_linear"]]
+[node name="SizeSlider" type="TextureProgressBar" parent="VBoxContainer/GradientOptions" index="9" groups=["gradient_linear"]]
unique_name_in_owner = true
-margin_left = 182.0
-margin_top = 90.0
-margin_right = 360.0
-margin_bottom = 104.0
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
-min_value = 0.01
+theme_type_variation = &"ValueSlider"
+min_value = 1.0
max_value = 200.0
value = 100.0
allow_greater = true
@@ -135,46 +112,41 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 4 )
+script = ExtResource("4")
suffix = "%"
snap_step = 10.0
[node name="AngleLabel" type="Label" parent="VBoxContainer/GradientOptions" index="10" groups=["gradient_linear"]]
-margin_top = 108.0
-margin_right = 178.0
-margin_bottom = 122.0
+layout_mode = 2
text = "Angle:"
-[node name="AngleSlider" type="TextureProgress" parent="VBoxContainer/GradientOptions" index="11" groups=["gradient_linear"]]
+[node name="AngleSlider" type="TextureProgressBar" parent="VBoxContainer/GradientOptions" index="11" groups=["gradient_linear"]]
unique_name_in_owner = true
-margin_left = 182.0
-margin_top = 108.0
-margin_right = 360.0
-margin_bottom = 122.0
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
max_value = 360.0
nine_patch_stretch = true
stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 4 )
+script = ExtResource("4")
suffix = "ยฐ"
snap_step = 45.0
[node name="CenterLabel" type="Label" parent="VBoxContainer/GradientOptions" index="12" groups=["gradient_radial"]]
visible = false
-margin_top = 60.0
-margin_right = 160.0
-margin_bottom = 74.0
+layout_mode = 2
size_flags_vertical = 1
text = "Center:"
-[node name="CenterSlider" parent="VBoxContainer/GradientOptions" index="13" groups=["gradient_radial"] instance=ExtResource( 5 )]
+[node name="CenterSlider" parent="VBoxContainer/GradientOptions" index="13" groups=["gradient_radial"] instance=ExtResource("5")]
unique_name_in_owner = true
visible = false
-value = Vector2( 50, 50 )
+layout_mode = 2
+value = Vector2(50, 50)
allow_greater = true
allow_lesser = true
snap_step = 10.0
@@ -183,30 +155,21 @@ suffix_y = "%"
[node name="RadiusLabel" type="Label" parent="VBoxContainer/GradientOptions" index="14" groups=["gradient_radial"]]
visible = false
-margin_top = 193.0
-margin_right = 160.0
-margin_bottom = 207.0
+layout_mode = 2
size_flags_vertical = 1
text = "Radius:"
-[node name="RadiusSlider" parent="VBoxContainer/GradientOptions" index="15" groups=["gradient_radial"] instance=ExtResource( 5 )]
+[node name="RadiusSlider" parent="VBoxContainer/GradientOptions" index="15" groups=["gradient_radial"] instance=ExtResource("5")]
unique_name_in_owner = true
visible = false
-margin_right = 52.0
-value = Vector2( 1, 1 )
-min_value = Vector2( 0.01, 0.01 )
-max_value = Vector2( 10, 10 )
+layout_mode = 2
+value = Vector2(1, 1)
+min_value = Vector2(0.01, 0.01)
+max_value = Vector2(10, 10)
step = 0.01
allow_greater = true
show_ratio = true
-[node name="OptionsContainer" parent="VBoxContainer" index="4"]
-margin_top = 436.0
-margin_bottom = 460.0
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 444.0
-
[connection signal="updated" from="VBoxContainer/GradientEdit" to="." method="_on_GradientEdit_updated"]
[connection signal="item_selected" from="VBoxContainer/GradientOptions/ShapeOptionButton" to="." method="_on_ShapeOptionButton_item_selected"]
[connection signal="item_selected" from="VBoxContainer/GradientOptions/DitheringOptionButton" to="." method="_on_DitheringOptionButton_item_selected"]
diff --git a/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd b/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd
index 7527fed04fd..754e347bb6a 100644
--- a/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd
@@ -1,29 +1,30 @@
extends ImageEffect
-var shader: Shader = preload("res://src/Shaders/GradientMap.gdshader")
+var shader := preload("res://src/Shaders/GradientMap.gdshader")
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {"selection": selection_tex, "map": $VBoxContainer/GradientEdit.texture}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
-func _on_GradientEdit_updated(_gradient, _cc) -> void:
+func _on_GradientEdit_updated(_gradient: Gradient, _cc: bool) -> void:
update_preview()
diff --git a/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn b/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn
index 541e8c09f5f..37e254df22d 100644
--- a/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn
@@ -1,40 +1,18 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://cjd5sjemyea4a"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Nodes/GradientEdit.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.gd" type="Script" id=3]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"]
+[ext_resource type="PackedScene" uid="uid://bn4aw27dj7pwi" path="res://src/UI/Nodes/GradientEdit.tscn" id="2"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.gd" id="3"]
-[node name="GradientMapDialog" instance=ExtResource( 1 )]
-window_title = "Gradient Map"
-script = ExtResource( 3 )
+[node name="GradientMapDialog" instance=ExtResource("1")]
+title = "Gradient Map"
+script = ExtResource("3")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 342.0
+offset_bottom = 342.0
[node name="ShowAnimate" parent="VBoxContainer" index="0"]
visible = false
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
-
-[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource( 2 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 306.0
-
-[node name="OptionsContainer" parent="VBoxContainer" index="3"]
-margin_top = 310.0
-margin_bottom = 334.0
-
-[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"]
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 342.0
+[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource("2")]
+layout_mode = 2
diff --git a/src/UI/Dialogs/ImageEffects/HSVDialog.gd b/src/UI/Dialogs/ImageEffects/HSVDialog.gd
index 5fe593f96c4..cee1c2fe8ba 100644
--- a/src/UI/Dialogs/ImageEffects/HSVDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/HSVDialog.gd
@@ -1,14 +1,15 @@
extends ImageEffect
enum Animate { HUE, SATURATION, VALUE }
-var shader: Shader = preload("res://src/Shaders/HSV.shader")
+var shader := preload("res://src/Shaders/HSV.gdshader")
-onready var hue_slider := $VBoxContainer/HueSlider as ValueSlider
-onready var sat_slider := $VBoxContainer/SaturationSlider as ValueSlider
-onready var val_slider := $VBoxContainer/ValueSlider as ValueSlider
+@onready var hue_slider := $VBoxContainer/HueSlider as ValueSlider
+@onready var sat_slider := $VBoxContainer/SaturationSlider as ValueSlider
+@onready var val_slider := $VBoxContainer/ValueSlider as ValueSlider
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
@@ -18,34 +19,34 @@ func _ready() -> void:
animate_panel.add_float_property("Value", val_slider)
-func _about_to_show() -> void:
+func _about_to_popup() -> void:
_reset()
- ._about_to_show()
+ super._about_to_popup()
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
+func commit_action(cel: Image, project := Global.current_project) -> void:
var hue = animate_panel.get_animated_value(commit_idx, Animate.HUE) / 360
var sat = animate_panel.get_animated_value(commit_idx, Animate.SATURATION) / 100
var val = animate_panel.get_animated_value(commit_idx, Animate.VALUE) / 100
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {"hue_shift": hue, "sat_shift": sat, "val_shift": val, "selection": selection_tex}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _reset() -> void:
hue_slider.value = 0
sat_slider.value = 0
val_slider.value = 0
- confirmed = false
+ has_been_confirmed = false
func _on_HueSlider_value_changed(_value: float) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/HSVDialog.tscn b/src/UI/Dialogs/ImageEffects/HSVDialog.tscn
index 6b413df0c09..bbc2f04e357 100644
--- a/src/UI/Dialogs/ImageEffects/HSVDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/HSVDialog.tscn
@@ -1,54 +1,32 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://oq036vr10yvk"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/HSVDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/HSVDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
-[node name="HSVDialog" instance=ExtResource( 2 )]
-visible = false
-window_title = "Adjust HSV"
-script = ExtResource( 1 )
+[node name="HSVDialog" instance=ExtResource("2")]
+title = "Adjust Hue/Saturation/Value"
+script = ExtResource("1")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 344.0
+offset_bottom = 344.0
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
-
-[node name="HueSlider" parent="VBoxContainer" index="2" instance=ExtResource( 3 )]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 252.0
+[node name="HueSlider" parent="VBoxContainer" index="2" instance=ExtResource("3")]
+layout_mode = 2
min_value = -180.0
max_value = 180.0
prefix = "Hue:"
-[node name="SaturationSlider" parent="VBoxContainer" index="3" instance=ExtResource( 3 )]
-margin_top = 256.0
-margin_right = 360.0
-margin_bottom = 280.0
+[node name="SaturationSlider" parent="VBoxContainer" index="3" instance=ExtResource("3")]
+layout_mode = 2
min_value = -100.0
prefix = "Saturation:"
-[node name="ValueSlider" parent="VBoxContainer" index="4" instance=ExtResource( 3 )]
-margin_top = 284.0
-margin_right = 360.0
-margin_bottom = 308.0
+[node name="ValueSlider" parent="VBoxContainer" index="4" instance=ExtResource("3")]
+layout_mode = 2
min_value = -100.0
prefix = "Value:"
-[node name="OptionsContainer" parent="VBoxContainer" index="5"]
-margin_top = 312.0
-margin_bottom = 336.0
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 344.0
-
[connection signal="value_changed" from="VBoxContainer/HueSlider" to="." method="_on_HueSlider_value_changed"]
[connection signal="value_changed" from="VBoxContainer/SaturationSlider" to="." method="_on_SaturationSlider_value_changed"]
[connection signal="value_changed" from="VBoxContainer/ValueSlider" to="." method="_on_ValueSlider_value_changed"]
diff --git a/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn b/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn
index 13f4f91f805..f73483fd379 100644
--- a/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn
+++ b/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn
@@ -1,98 +1,92 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://bybqhhayl5ay5"]
-[ext_resource path="res://src/UI/Nodes/AnimatePanel.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/Classes/ImageEffect.gd" type="Script" id=3]
-[ext_resource path="res://assets/graphics/misc/animate.png" type="Texture" id=4]
+[ext_resource type="PackedScene" uid="uid://dmlgx1jgau8a5" path="res://src/UI/Nodes/AnimatePanel.tscn" id="1"]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"]
+[ext_resource type="Script" path="res://src/Classes/ImageEffect.gd" id="3"]
+[ext_resource type="Texture2D" uid="uid://blrd4x0ma7b3h" path="res://assets/graphics/misc/animate.png" id="4"]
[node name="ImageEffectParent" type="ConfirmationDialog"]
-margin_right = 294.0
-margin_bottom = 334.0
-rect_min_size = Vector2( 172, 60.2 )
-resizable = true
-script = ExtResource( 3 )
+canvas_item_default_texture_filter = 0
+size = Vector2i(360, 316)
+exclusive = false
+script = ExtResource("3")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 368.0
-margin_bottom = 298.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 352.0
+offset_bottom = 267.0
[node name="ShowAnimate" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true
-margin_left = 340.0
-margin_right = 360.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 0 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(20, 20)
+layout_mode = 2
size_flags_horizontal = 8
+mouse_default_cursor_shape = 2
toggle_mode = true
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/ShowAnimate"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 2.0
-margin_top = 2.0
-margin_right = -2.0
-margin_bottom = -2.0
-texture = ExtResource( 4 )
-expand = true
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+texture = ExtResource("4")
+expand_mode = 1
stretch_mode = 6
[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
-margin_top = 24.0
-margin_right = 360.0
-margin_bottom = 262.0
+layout_mode = 2
size_flags_vertical = 3
[node name="Preview" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"]
-margin_left = 61.0
-margin_right = 299.0
-margin_bottom = 238.0
-rect_min_size = Vector2( 200, 200 )
-expand = true
+custom_minimum_size = Vector2(200, 200)
+layout_mode = 2
+expand_mode = 1
stretch_mode = 5
-[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 2 )]
+[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("2")]
show_behind_parent = true
+layout_mode = 0
+anchors_preset = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
[node name="OptionsContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 266.0
-margin_right = 360.0
-margin_bottom = 290.0
+layout_mode = 2
[node name="SelectionCheckBox" type="CheckBox" parent="VBoxContainer/OptionsContainer"]
-margin_right = 178.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-pressed = true
+mouse_default_cursor_shape = 2
+button_pressed = true
text = "Only affect selection"
[node name="AffectOptionButton" type="OptionButton" parent="VBoxContainer/OptionsContainer"]
-margin_left = 182.0
-margin_right = 360.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Selected cels"
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
+mouse_default_cursor_shape = 2
+item_count = 4
selected = 0
+popup/item_0/text = "Selected cels"
+popup/item_0/id = 0
+popup/item_1/text = "Current frame"
+popup/item_1/id = 1
+popup/item_2/text = "All frames"
+popup/item_2/id = 2
+popup/item_3/text = "All projects"
+popup/item_3/id = 3
[node name="AnimateDialog" type="Popup" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 368.0
-margin_bottom = 298.0
-rect_min_size = Vector2( 360, 270 )
+size = Vector2i(350, 200)
+unresizable = false
-[node name="AnimatePanel" parent="AnimateDialog" instance=ExtResource( 1 )]
+[node name="AnimatePanel" parent="AnimateDialog" instance=ExtResource("1")]
unique_name_in_owner = true
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
+offset_right = 0.0
+offset_bottom = 0.0
diff --git a/src/UI/Dialogs/ImageEffects/ImageEffects.tscn b/src/UI/Dialogs/ImageEffects/ImageEffects.tscn
index 5c917c49002..c05245db452 100644
--- a/src/UI/Dialogs/ImageEffects/ImageEffects.tscn
+++ b/src/UI/Dialogs/ImageEffects/ImageEffects.tscn
@@ -1,55 +1,49 @@
-[gd_scene load_steps=15 format=2]
-
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn" type="PackedScene" id=4]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn" type="PackedScene" id=5]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/Posterize.tscn" type="PackedScene" id=6]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/OffsetImage.tscn" type="PackedScene" id=7]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn" type="PackedScene" id=8]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/RotateImage.tscn" type="PackedScene" id=9]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.tscn" type="PackedScene" id=10]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/HSVDialog.tscn" type="PackedScene" id=11]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientDialog.tscn" type="PackedScene" id=12]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.tscn" type="PackedScene" id=13]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ScaleImage.tscn" type="PackedScene" id=14]
+[gd_scene load_steps=15 format=3 uid="uid://cfihuvhy4ocx7"]
+
+[ext_resource type="PackedScene" uid="uid://c7hnynip21y6u" path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn" id="1"]
+[ext_resource type="PackedScene" uid="uid://bl1t33abu7kl8" path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn" id="2"]
+[ext_resource type="PackedScene" uid="uid://5gqka7tkg17k" path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn" id="3"]
+[ext_resource type="PackedScene" uid="uid://duse1w3q7whmm" path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn" id="4"]
+[ext_resource type="PackedScene" uid="uid://cjd5sjemyea4a" path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn" id="5"]
+[ext_resource type="PackedScene" uid="uid://cnryslyvxv4ye" path="res://src/UI/Dialogs/ImageEffects/Posterize.tscn" id="6"]
+[ext_resource type="PackedScene" uid="uid://q355qqjvuajs" path="res://src/UI/Dialogs/ImageEffects/OffsetImage.tscn" id="7"]
+[ext_resource type="PackedScene" uid="uid://birggxam3fjnb" path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn" id="8"]
+[ext_resource type="PackedScene" uid="uid://bvr6j8sohxob3" path="res://src/UI/Dialogs/ImageEffects/RotateImage.tscn" id="9"]
+[ext_resource type="PackedScene" uid="uid://bkr47ocij684y" path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.tscn" id="10"]
+[ext_resource type="PackedScene" uid="uid://oq036vr10yvk" path="res://src/UI/Dialogs/ImageEffects/HSVDialog.tscn" id="11"]
+[ext_resource type="PackedScene" uid="uid://u0y5xogg636e" path="res://src/UI/Dialogs/ImageEffects/GradientDialog.tscn" id="12"]
+[ext_resource type="PackedScene" uid="uid://ci2qpf6t3dyyr" path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.tscn" id="13"]
+[ext_resource type="PackedScene" uid="uid://omm7xmtf5kbj" path="res://src/UI/Dialogs/ImageEffects/ScaleImage.tscn" id="14"]
[node name="ImageEffects" type="Control"]
+layout_mode = 3
+anchors_preset = 0
mouse_filter = 2
-[node name="OffsetImage" parent="." instance=ExtResource( 7 )]
-margin_right = 376.0
-margin_bottom = 370.0
+[node name="OffsetImage" parent="." instance=ExtResource("7")]
-[node name="ScaleImage" parent="." instance=ExtResource( 14 )]
-margin_bottom = 127.0
+[node name="ScaleImage" parent="." instance=ExtResource("14")]
-[node name="ResizeCanvas" parent="." instance=ExtResource( 8 )]
-margin_right = 216.0
-margin_bottom = 392.0
+[node name="ResizeCanvas" parent="." instance=ExtResource("8")]
-[node name="RotateImage" parent="." instance=ExtResource( 9 )]
+[node name="RotateImage" parent="." instance=ExtResource("9")]
-[node name="FlipImageDialog" parent="." instance=ExtResource( 1 )]
+[node name="FlipImageDialog" parent="." instance=ExtResource("1")]
-[node name="InvertColorsDialog" parent="." instance=ExtResource( 2 )]
+[node name="InvertColorsDialog" parent="." instance=ExtResource("2")]
-[node name="DesaturateDialog" parent="." instance=ExtResource( 3 )]
+[node name="DesaturateDialog" parent="." instance=ExtResource("3")]
-[node name="OutlineDialog" parent="." instance=ExtResource( 13 )]
-margin_right = 217.0
-margin_bottom = 106.0
+[node name="OutlineDialog" parent="." instance=ExtResource("13")]
-[node name="DropShadowDialog" parent="." instance=ExtResource( 4 )]
+[node name="DropShadowDialog" parent="." instance=ExtResource("4")]
-[node name="HSVDialog" parent="." instance=ExtResource( 11 )]
+[node name="HSVDialog" parent="." instance=ExtResource("11")]
-[node name="GradientDialog" parent="." instance=ExtResource( 12 )]
-margin_bottom = 214.0
+[node name="GradientDialog" parent="." instance=ExtResource("12")]
-[node name="GradientMapDialog" parent="." instance=ExtResource( 5 )]
+[node name="GradientMapDialog" parent="." instance=ExtResource("5")]
-[node name="Posterize" parent="." instance=ExtResource( 6 )]
+[node name="Posterize" parent="." instance=ExtResource("6")]
-[node name="ShaderEffect" parent="." instance=ExtResource( 10 )]
+[node name="ShaderEffect" parent="." instance=ExtResource("10")]
diff --git a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd
index 16270cb29e9..5693d7da687 100644
--- a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd
@@ -5,31 +5,32 @@ var green := true
var blue := true
var alpha := false
-var shader: Shader = preload("res://src/Shaders/Invert.shader")
+var shader := preload("res://src/Shaders/Invert.gdshader")
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {
"red": red, "blue": blue, "green": green, "alpha": alpha, "selection": selection_tex
}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_RButton_toggled(button_pressed: bool) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn
index d1228253b43..9e3c2c8de85 100644
--- a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn
@@ -1,74 +1,51 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://bl1t33abu7kl8"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"]
-[node name="InvertColorsDialog" instance=ExtResource( 2 )]
-window_title = "Invert Colors"
-script = ExtResource( 1 )
+[node name="InvertColorsDialog" instance=ExtResource("2")]
+title = "Invert Colors"
+script = ExtResource("1")
[node name="ShowAnimate" parent="VBoxContainer" index="0"]
visible = false
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 238.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 73.0
-margin_right = 287.0
-margin_bottom = 214.0
-
[node name="RGBAContainer" type="HBoxContainer" parent="VBoxContainer" index="2"]
-margin_top = 242.0
-margin_right = 360.0
-margin_bottom = 262.0
+layout_mode = 2
alignment = 1
[node name="RButton" type="Button" parent="VBoxContainer/RGBAContainer" index="0"]
-margin_right = 87.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Red Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Red Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
-pressed = true
text = "R"
[node name="GButton" type="Button" parent="VBoxContainer/RGBAContainer" index="1"]
-margin_left = 91.0
-margin_right = 178.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Green Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Green Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
-pressed = true
text = "G"
[node name="BButton" type="Button" parent="VBoxContainer/RGBAContainer" index="2"]
-margin_left = 182.0
-margin_right = 269.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Blue Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Blue Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
-pressed = true
text = "B"
[node name="AButton" type="Button" parent="VBoxContainer/RGBAContainer" index="3"]
-margin_left = 273.0
-margin_right = 360.0
-margin_bottom = 20.0
-hint_tooltip = "Modify Alpha Channel"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+tooltip_text = "Modify Alpha Channel"
+mouse_default_cursor_shape = 2
toggle_mode = true
text = "A"
-[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"]
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
-
[connection signal="toggled" from="VBoxContainer/RGBAContainer/RButton" to="." method="_on_RButton_toggled"]
[connection signal="toggled" from="VBoxContainer/RGBAContainer/GButton" to="." method="_on_GButton_toggled"]
[connection signal="toggled" from="VBoxContainer/RGBAContainer/BButton" to="." method="_on_BButton_toggled"]
diff --git a/src/UI/Dialogs/ImageEffects/OffsetImage.gd b/src/UI/Dialogs/ImageEffects/OffsetImage.gd
index e44ef86279e..3f0e3694abe 100644
--- a/src/UI/Dialogs/ImageEffects/OffsetImage.gd
+++ b/src/UI/Dialogs/ImageEffects/OffsetImage.gd
@@ -2,17 +2,18 @@ extends ImageEffect
enum Animate { OFFSET_X, OFFSET_Y }
-var shader: Shader = preload("res://src/Shaders/OffsetPixels.gdshader")
+var shader := preload("res://src/Shaders/OffsetPixels.gdshader")
var wrap_around := false
-onready var offset_sliders := $VBoxContainer/OffsetOptions/OffsetSliders as ValueSliderV2
+@onready var offset_sliders := $VBoxContainer/OffsetOptions/OffsetSliders as ValueSliderV2
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
- # Set as in the Animate enum
+ # Set in the order of the Animate enum
animate_panel.add_float_property(
"Offset X", $VBoxContainer/OffsetOptions/OffsetSliders.get_sliders()[0]
)
@@ -21,28 +22,28 @@ func _ready() -> void:
)
-func _about_to_show() -> void:
+func _about_to_popup() -> void:
offset_sliders.min_value = -Global.current_project.size
offset_sliders.max_value = Global.current_project.size
- ._about_to_show()
+ super._about_to_popup()
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
+func commit_action(cel: Image, project := Global.current_project) -> void:
var offset_x := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_X)
var offset_y := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_Y)
var offset := Vector2(offset_x, offset_y)
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {"offset": offset, "wrap_around": wrap_around, "selection": selection_tex}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_OffsetSliders_value_changed(_value: Vector2) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/OffsetImage.tscn b/src/UI/Dialogs/ImageEffects/OffsetImage.tscn
index ced6a84a298..75bb0f3afc2 100644
--- a/src/UI/Dialogs/ImageEffects/OffsetImage.tscn
+++ b/src/UI/Dialogs/ImageEffects/OffsetImage.tscn
@@ -1,43 +1,30 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://q355qqjvuajs"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/OffsetImage.gd" type="Script" id=3]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/OffsetImage.gd" id="3"]
-[node name="OffsetImage" instance=ExtResource( 1 )]
-window_title = "Offset Image"
-script = ExtResource( 3 )
+[node name="OffsetImage" instance=ExtResource("1")]
+title = "Offset Image"
+script = ExtResource("3")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 344.0
-
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
+offset_bottom = 344.0
[node name="OffsetOptions" type="GridContainer" parent="VBoxContainer" index="2"]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 308.0
+layout_mode = 2
columns = 2
[node name="OffsetLabel" type="Label" parent="VBoxContainer/OffsetOptions" index="0"]
-margin_top = 19.0
-margin_right = 178.0
-margin_bottom = 33.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Offset:"
-[node name="OffsetSliders" parent="VBoxContainer/OffsetOptions" index="1" instance=ExtResource( 2 )]
-margin_left = 182.0
-margin_right = 360.0
+[node name="OffsetSliders" parent="VBoxContainer/OffsetOptions" index="1" instance=ExtResource("2")]
+layout_mode = 2
size_flags_horizontal = 3
-min_value = Vector2( -64, -64 )
-max_value = Vector2( 64, 64 )
+min_value = Vector2(-64, -64)
+max_value = Vector2(64, 64)
allow_greater = true
allow_lesser = true
show_ratio = true
@@ -45,27 +32,15 @@ suffix_x = "px"
suffix_y = "px"
[node name="WrapLabel" type="Label" parent="VBoxContainer/OffsetOptions" index="2"]
-margin_top = 61.0
-margin_right = 178.0
-margin_bottom = 75.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Wrap around:"
[node name="WrapCheckBox" type="CheckBox" parent="VBoxContainer/OffsetOptions" index="3"]
-margin_left = 182.0
-margin_top = 56.0
-margin_right = 360.0
-margin_bottom = 80.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "On"
-[node name="OptionsContainer" parent="VBoxContainer" index="3"]
-margin_top = 312.0
-margin_bottom = 336.0
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 344.0
-
[connection signal="value_changed" from="VBoxContainer/OffsetOptions/OffsetSliders" to="." method="_on_OffsetSliders_value_changed"]
[connection signal="toggled" from="VBoxContainer/OffsetOptions/WrapCheckBox" to="." method="_on_WrapCheckBox_toggled"]
diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd
index d89cf7b5a33..e900fb47e53 100644
--- a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd
+++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd
@@ -1,41 +1,31 @@
extends ImageEffect
enum Animate { THICKNESS }
-var color := Color.black
+var color := Color.BLACK
var thickness := 1
var pattern := 0
var inside_image := false
-var shader: Shader
+var shader := preload("res://src/Shaders/OutlineInline.gdshader")
-onready var outline_color := $VBoxContainer/OutlineOptions/OutlineColor as ColorPickerButton
+@onready var outline_color := $VBoxContainer/OutlineOptions/OutlineColor as ColorPickerButton
func _ready() -> void:
- if _is_webgl1():
- $VBoxContainer/OptionsContainer/PatternOptionButton.disabled = true
- else:
- shader = load("res://src/Shaders/OutlineInline.gdshader")
- var sm := ShaderMaterial.new()
- sm.shader = shader
- preview.set_material(sm)
+ super._ready()
+ var sm := ShaderMaterial.new()
+ sm.shader = shader
+ preview.set_material(sm)
outline_color.get_picker().presets_visible = false
color = outline_color.color
- # set as in enum
+ # Set in the order of the Animate enum
animate_panel.add_float_property("Thickness", $VBoxContainer/OutlineOptions/ThickValue)
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- var anim_thickness = animate_panel.get_animated_value(commit_idx, Animate.THICKNESS)
-
- if !shader: # Web version
- DrawingAlgos.generate_outline(
- cel, selection_checkbox.pressed, project, color, anim_thickness, false, inside_image
- )
- return
-
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ var anim_thickness := animate_panel.get_animated_value(commit_idx, Animate.THICKNESS)
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {
"color": color,
@@ -44,13 +34,13 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi
"inside": inside_image,
"selection": selection_tex
}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_ThickValue_value_changed(value: int) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn b/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn
index 4616d23b6b1..c6192084b34 100644
--- a/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn
+++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn
@@ -1,48 +1,32 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://ci2qpf6t3dyyr"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=3]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.gd" id="1"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="2"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="3"]
-[node name="OutlineDialog" instance=ExtResource( 3 )]
-visible = false
-window_title = "Outline"
-script = ExtResource( 1 )
+[node name="OutlineDialog" instance=ExtResource("3")]
+title = "Outline"
+script = ExtResource("1")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 354.0
-
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
+offset_bottom = 354.0
[node name="OutlineOptions" type="GridContainer" parent="VBoxContainer" index="2"]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 318.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 4
+layout_mode = 2
+theme_override_constants/h_separation = 4
+theme_override_constants/v_separation = 4
columns = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ThickLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="0"]
-margin_right = 178.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Thickness:"
-[node name="ThickValue" type="TextureProgress" parent="VBoxContainer/OutlineOptions" index="1"]
-margin_left = 182.0
-margin_right = 360.0
-margin_bottom = 14.0
+[node name="ThickValue" type="TextureProgressBar" parent="VBoxContainer/OutlineOptions" index="1"]
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
min_value = 1.0
value = 1.0
allow_greater = true
@@ -51,65 +35,48 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 2 )
+script = ExtResource("2")
suffix = "px"
[node name="OutlineColorLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="2"]
-margin_top = 21.0
-margin_right = 178.0
-margin_bottom = 35.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Fill with color:"
[node name="OutlineColor" type="ColorPickerButton" parent="VBoxContainer/OutlineOptions" index="3"]
-margin_left = 182.0
-margin_top = 18.0
-margin_right = 360.0
-margin_bottom = 38.0
-rect_min_size = Vector2( 64, 20 )
+custom_minimum_size = Vector2(64, 20)
+layout_mode = 2
size_flags_horizontal = 3
[node name="PatternLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="4"]
-margin_top = 45.0
-margin_right = 178.0
-margin_bottom = 59.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Pattern:"
[node name="PatternOptionButton" type="OptionButton" parent="VBoxContainer/OutlineOptions" index="5"]
-margin_left = 182.0
-margin_top = 42.0
-margin_right = 360.0
-margin_bottom = 62.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Diamond"
-items = [ "Diamond", null, false, 0, null, "Circle", null, false, 1, null, "Square", null, false, 2, null ]
+mouse_default_cursor_shape = 2
+item_count = 3
selected = 0
+popup/item_0/text = "Diamond"
+popup/item_0/id = 0
+popup/item_1/text = "Square"
+popup/item_1/id = 1
+popup/item_2/text = "Circle"
+popup/item_2/id = 2
[node name="InsideImageLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="6"]
-margin_top = 71.0
-margin_right = 178.0
-margin_bottom = 85.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Place inside image"
[node name="InsideImageCheckBox" type="CheckBox" parent="VBoxContainer/OutlineOptions" index="7"]
-margin_left = 182.0
-margin_top = 66.0
-margin_right = 360.0
-margin_bottom = 90.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "On"
-[node name="OptionsContainer" parent="VBoxContainer" index="3"]
-margin_top = 322.0
-margin_bottom = 346.0
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 354.0
-
[connection signal="value_changed" from="VBoxContainer/OutlineOptions/ThickValue" to="." method="_on_ThickValue_value_changed"]
[connection signal="color_changed" from="VBoxContainer/OutlineOptions/OutlineColor" to="." method="_on_OutlineColor_color_changed"]
[connection signal="item_selected" from="VBoxContainer/OutlineOptions/PatternOptionButton" to="." method="_on_PatternOptionButton_item_selected"]
diff --git a/src/UI/Dialogs/ImageEffects/Posterize.gd b/src/UI/Dialogs/ImageEffects/Posterize.gd
index 0b443b5ce44..c76fbca5822 100644
--- a/src/UI/Dialogs/ImageEffects/Posterize.gd
+++ b/src/UI/Dialogs/ImageEffects/Posterize.gd
@@ -1,30 +1,31 @@
extends ImageEffect
-var shader: Shader = preload("res://src/Shaders/Posterize.gdshader")
+var shader := preload("res://src/Shaders/Posterize.gdshader")
var levels := 2.0
var dither := 0.0
func _ready() -> void:
+ super._ready()
var sm := ShaderMaterial.new()
sm.shader = shader
preview.set_material(sm)
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
- var selection_tex := ImageTexture.new()
- if selection_checkbox.pressed and project.has_selection:
- selection_tex.create_from_image(project.selection_map, 0)
+func commit_action(cel: Image, project := Global.current_project) -> void:
+ var selection_tex: ImageTexture
+ if selection_checkbox.button_pressed and project.has_selection:
+ selection_tex = ImageTexture.create_from_image(project.selection_map)
var params := {"colors": levels, "dither": dither, "selection": selection_tex}
- if !confirmed:
+ if !has_been_confirmed:
for param in params:
- preview.material.set_shader_param(param, params[param])
+ preview.material.set_shader_parameter(param, params[param])
else:
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- yield(gen, "done")
+ await gen.done
func _on_LevelsSlider_value_changed(value: float) -> void:
diff --git a/src/UI/Dialogs/ImageEffects/Posterize.tscn b/src/UI/Dialogs/ImageEffects/Posterize.tscn
index 3265ed0b0a2..a97486c1caa 100644
--- a/src/UI/Dialogs/ImageEffects/Posterize.tscn
+++ b/src/UI/Dialogs/ImageEffects/Posterize.tscn
@@ -1,34 +1,25 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://cnryslyvxv4ye"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/Posterize.gd" type="Script" id=3]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="2"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/Posterize.gd" id="3"]
-[node name="Posterize" instance=ExtResource( 1 )]
-window_title = "Posterize"
-script = ExtResource( 3 )
+[node name="Posterize" instance=ExtResource("1")]
+title = "Posterize"
+script = ExtResource("3")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 316.0
+offset_bottom = 316.0
[node name="ShowAnimate" parent="VBoxContainer" index="0"]
visible = false
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
-
-[node name="LevelsSlider" type="TextureProgress" parent="VBoxContainer" index="2"]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 252.0
-rect_min_size = Vector2( 0, 24 )
+[node name="LevelsSlider" type="TextureProgressBar" parent="VBoxContainer" index="2"]
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
min_value = 2.0
max_value = 256.0
step = 0.01
@@ -38,17 +29,16 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 2 )
+script = ExtResource("2")
prefix = "Posterize levels:"
snap_by_default = true
-[node name="DitherSlider" type="TextureProgress" parent="VBoxContainer" index="3"]
-margin_top = 256.0
-margin_right = 360.0
-margin_bottom = 280.0
-rect_min_size = Vector2( 0, 24 )
+[node name="DitherSlider" type="TextureProgressBar" parent="VBoxContainer" index="3"]
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
+focus_mode = 2
mouse_default_cursor_shape = 2
-theme_type_variation = "ValueSlider"
+theme_type_variation = &"ValueSlider"
max_value = 0.5
step = 0.01
nine_patch_stretch = true
@@ -56,19 +46,9 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 2 )
+script = ExtResource("2")
prefix = "Dither intensity:"
snap_step = 0.1
-[node name="OptionsContainer" parent="VBoxContainer" index="4"]
-margin_top = 284.0
-margin_bottom = 308.0
-
-[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"]
-items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ]
-
-[node name="AnimateDialog" parent="." index="4"]
-margin_bottom = 316.0
-
[connection signal="value_changed" from="VBoxContainer/LevelsSlider" to="." method="_on_LevelsSlider_value_changed"]
[connection signal="value_changed" from="VBoxContainer/DitherSlider" to="." method="_on_DitherSlider_value_changed"]
diff --git a/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd b/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd
index d87d8dac9f9..134e0af6d60 100644
--- a/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd
+++ b/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd
@@ -6,17 +6,16 @@ var offset_x := 0
var offset_y := 0
var image: Image
-onready var width_spinbox: SpinBox = $VBoxContainer/OptionsContainer/WidthValue
-onready var height_spinbox: SpinBox = $VBoxContainer/OptionsContainer/HeightValue
-onready var x_spinbox: SpinBox = $VBoxContainer/OptionsContainer/XSpinBox
-onready var y_spinbox: SpinBox = $VBoxContainer/OptionsContainer/YSpinBox
-onready var preview_rect: TextureRect = $VBoxContainer/AspectRatioContainer/Preview
+@onready var width_spinbox: SpinBox = $VBoxContainer/OptionsContainer/WidthValue
+@onready var height_spinbox: SpinBox = $VBoxContainer/OptionsContainer/HeightValue
+@onready var x_spinbox: SpinBox = $VBoxContainer/OptionsContainer/XSpinBox
+@onready var y_spinbox: SpinBox = $VBoxContainer/OptionsContainer/YSpinBox
+@onready var preview_rect: TextureRect = $VBoxContainer/AspectRatioContainer/Preview
func _on_ResizeCanvas_about_to_show() -> void:
Global.canvas.selection.transform_content_confirm()
- image = Image.new()
- image.create(
+ image = Image.create(
Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8
)
@@ -24,19 +23,15 @@ func _on_ResizeCanvas_about_to_show() -> void:
for cel in Global.current_project.frames[Global.current_project.current_frame].cels:
if cel is PixelCel and Global.current_project.layers[layer_i].is_visible_in_hierarchy():
var cel_image := Image.new()
- cel_image.copy_from(cel.image)
- cel_image.lock()
+ cel_image.copy_from(cel.get_image())
if cel.opacity < 1: # If we have cel transparency
for xx in cel_image.get_size().x:
for yy in cel_image.get_size().y:
var pixel_color := cel_image.get_pixel(xx, yy)
- var alpha: float = pixel_color.a * cel.opacity
- cel_image.set_pixel(
- xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)
- )
- cel_image.unlock()
+ pixel_color.a *= cel.opacity
+ cel_image.set_pixel(xx, yy, pixel_color)
image.blend_rect(
- cel_image, Rect2(Vector2.ZERO, Global.current_project.size), Vector2.ZERO
+ cel_image, Rect2i(Vector2i.ZERO, Global.current_project.size), Vector2i.ZERO
)
layer_i += 1
@@ -51,17 +46,17 @@ func _on_ResizeCanvas_confirmed() -> void:
func _on_WidthValue_value_changed(value: int) -> void:
width = value
- x_spinbox.min_value = min(width - Global.current_project.size.x, 0)
- x_spinbox.max_value = max(width - Global.current_project.size.x, 0)
- x_spinbox.value = clamp(x_spinbox.value, x_spinbox.min_value, x_spinbox.max_value)
+ x_spinbox.min_value = mini(width - Global.current_project.size.x, 0)
+ x_spinbox.max_value = maxi(width - Global.current_project.size.x, 0)
+ x_spinbox.value = clampi(x_spinbox.value, x_spinbox.min_value, x_spinbox.max_value)
update_preview()
func _on_HeightValue_value_changed(value: int) -> void:
height = value
- y_spinbox.min_value = min(height - Global.current_project.size.y, 0)
- y_spinbox.max_value = max(height - Global.current_project.size.y, 0)
- y_spinbox.value = clamp(y_spinbox.value, y_spinbox.min_value, y_spinbox.max_value)
+ y_spinbox.min_value = mini(height - Global.current_project.size.y, 0)
+ y_spinbox.max_value = maxi(height - Global.current_project.size.y, 0)
+ y_spinbox.value = clampi(y_spinbox.value, y_spinbox.min_value, y_spinbox.max_value)
update_preview()
@@ -82,30 +77,28 @@ func _on_CenterButton_pressed() -> void:
func update_preview() -> void:
# preview_image is the same as image but offsetted
- var preview_image := Image.new()
- preview_image.create(width, height, false, Image.FORMAT_RGBA8)
+ var preview_image := Image.create(width, height, false, Image.FORMAT_RGBA8)
preview_image.blend_rect(
- image, Rect2(Vector2.ZERO, Global.current_project.size), Vector2(offset_x, offset_y)
+ image, Rect2i(Vector2i.ZERO, Global.current_project.size), Vector2i(offset_x, offset_y)
)
- var preview_texture := ImageTexture.new()
- preview_texture.create_from_image(preview_image, 0)
+ var preview_texture := ImageTexture.create_from_image(preview_image)
preview_rect.texture = preview_texture
update_transparent_background_size(preview_image)
func update_transparent_background_size(preview_image: Image) -> void:
- var image_size_y = preview_rect.rect_size.y
- var image_size_x = preview_rect.rect_size.x
+ var image_size_y := preview_rect.size.y
+ var image_size_x := preview_rect.size.x
if preview_image.get_size().x > preview_image.get_size().y:
- var scale_ratio = preview_image.get_size().x / image_size_x
+ var scale_ratio := preview_image.get_size().x / image_size_x
image_size_y = preview_image.get_size().y / scale_ratio
else:
- var scale_ratio = preview_image.get_size().y / image_size_y
+ var scale_ratio := preview_image.get_size().y / image_size_y
image_size_x = preview_image.get_size().x / scale_ratio
- preview_rect.get_node("TransparentChecker").rect_size.x = image_size_x
- preview_rect.get_node("TransparentChecker").rect_size.y = image_size_y
+ preview_rect.get_node("TransparentChecker").size.x = image_size_x
+ preview_rect.get_node("TransparentChecker").size.y = image_size_y
-func _on_ResizeCanvas_popup_hide() -> void:
+func _on_visibility_changed() -> void:
Global.dialog_open(false)
diff --git a/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn b/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn
index 8d285b58413..f51b7ff7e37 100644
--- a/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn
+++ b/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn
@@ -1,154 +1,117 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://birggxam3fjnb"]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.gd" id="2"]
[node name="ResizeCanvas" type="ConfirmationDialog"]
-margin_right = 200.0
-margin_bottom = 114.0
-rect_min_size = Vector2( 172, 60.2 )
-window_title = "Resize Canvas"
-resizable = true
-script = ExtResource( 2 )
+canvas_item_default_texture_filter = 0
+title = "Resize Canvas"
+exclusive = false
+script = ExtResource("2")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 208.0
-margin_bottom = 380.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 208.0
+offset_bottom = 380.0
[node name="ImageSize" type="Label" parent="VBoxContainer"]
-margin_right = 200.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Canvas Size"
[node name="OptionsContainer" type="GridContainer" parent="VBoxContainer"]
-margin_top = 18.0
-margin_right = 200.0
-margin_bottom = 168.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 2
+layout_mode = 2
+theme_override_constants/h_separation = 2
+theme_override_constants/v_separation = 4
columns = 2
[node name="WidthLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
-margin_top = 5.0
-margin_right = 99.0
-margin_bottom = 19.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Width:"
[node name="WidthValue" type="SpinBox" parent="VBoxContainer/OptionsContainer"]
-margin_left = 101.0
-margin_right = 200.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
suffix = "px"
[node name="Height" type="Label" parent="VBoxContainer/OptionsContainer"]
-margin_top = 33.0
-margin_right = 99.0
-margin_bottom = 47.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Height:"
[node name="HeightValue" type="SpinBox" parent="VBoxContainer/OptionsContainer"]
-margin_left = 101.0
-margin_top = 28.0
-margin_right = 200.0
-margin_bottom = 52.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
suffix = "px"
[node name="OffsetLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
-margin_top = 56.0
-margin_right = 99.0
-margin_bottom = 70.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Offset"
[node name="EmptySpacer" type="Control" parent="VBoxContainer/OptionsContainer"]
-margin_left = 101.0
-margin_top = 56.0
-margin_right = 200.0
-margin_bottom = 70.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="XLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
-margin_top = 79.0
-margin_right = 99.0
-margin_bottom = 93.0
+layout_mode = 2
size_flags_horizontal = 3
text = "X:"
[node name="XSpinBox" type="SpinBox" parent="VBoxContainer/OptionsContainer"]
-margin_left = 101.0
-margin_top = 74.0
-margin_right = 200.0
-margin_bottom = 98.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
max_value = 0.0
suffix = "px"
[node name="YLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
-margin_top = 107.0
-margin_right = 99.0
-margin_bottom = 121.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Y:"
[node name="YSpinBox" type="SpinBox" parent="VBoxContainer/OptionsContainer"]
-margin_left = 101.0
-margin_top = 102.0
-margin_right = 200.0
-margin_bottom = 126.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
max_value = 0.0
suffix = "px"
[node name="CenterButton" type="Button" parent="VBoxContainer/OptionsContainer"]
-margin_top = 130.0
-margin_right = 99.0
-margin_bottom = 150.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "Center"
[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
-margin_top = 172.0
-margin_right = 200.0
-margin_bottom = 372.0
+layout_mode = 2
size_flags_vertical = 3
[node name="Preview" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"]
-margin_right = 200.0
-margin_bottom = 200.0
-rect_min_size = Vector2( 200, 200 )
-expand = true
+custom_minimum_size = Vector2(200, 200)
+layout_mode = 2
+expand_mode = 1
stretch_mode = 5
-[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 1 )]
+[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("1")]
show_behind_parent = true
+layout_mode = 0
+anchors_preset = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
-[connection signal="about_to_show" from="." to="." method="_on_ResizeCanvas_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_ResizeCanvas_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_ResizeCanvas_confirmed"]
-[connection signal="popup_hide" from="." to="." method="_on_ResizeCanvas_popup_hide"]
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="value_changed" from="VBoxContainer/OptionsContainer/WidthValue" to="." method="_on_WidthValue_value_changed"]
[connection signal="value_changed" from="VBoxContainer/OptionsContainer/HeightValue" to="." method="_on_HeightValue_value_changed"]
[connection signal="value_changed" from="VBoxContainer/OptionsContainer/XSpinBox" to="." method="_on_XSpinBox_value_changed"]
diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.gd b/src/UI/Dialogs/ImageEffects/RotateImage.gd
index aff16a5b5bd..6594e0fd165 100644
--- a/src/UI/Dialogs/ImageEffects/RotateImage.gd
+++ b/src/UI/Dialogs/ImageEffects/RotateImage.gd
@@ -3,54 +3,52 @@ extends ImageEffect
enum { ROTXEL_SMEAR, CLEANEDGE, OMNISCALE, NNS, NN, ROTXEL, URD }
enum Animate { ANGLE, INITIAL_ANGLE }
-var live_preview: bool = true
-var rotxel_shader: Shader
-var nn_shader: Shader = preload("res://src/Shaders/Rotation/NearestNeighbour.shader")
+var live_preview := true
+var rotxel_shader := preload("res://src/Shaders/Rotation/SmearRotxel.gdshader")
+var nn_shader := preload("res://src/Shaders/Rotation/NearestNeighbour.gdshader")
var pivot := Vector2.INF
var drag_pivot := false
-onready var type_option_button: OptionButton = $VBoxContainer/HBoxContainer2/TypeOptionButton
-onready var pivot_indicator: Control = $VBoxContainer/AspectRatioContainer/Indicator
-onready var pivot_sliders := $VBoxContainer/PivotOptions/Pivot as ValueSliderV2
-onready var angle_slider: ValueSlider = $VBoxContainer/AngleSlider
-onready var smear_options: Container = $VBoxContainer/SmearOptions
-onready var init_angle_slider: ValueSlider = smear_options.get_node("InitialAngleSlider")
-onready var tolerance_slider: ValueSlider = smear_options.get_node("ToleranceSlider")
-onready var wait_apply_timer: Timer = $WaitApply
-onready var wait_time_slider: ValueSlider = $VBoxContainer/WaitTime
+@onready var type_option_button: OptionButton = $VBoxContainer/HBoxContainer2/TypeOptionButton
+@onready var pivot_indicator: Control = $VBoxContainer/AspectRatioContainer/Indicator
+@onready var pivot_sliders := $VBoxContainer/PivotOptions/Pivot as ValueSliderV2
+@onready var angle_slider: ValueSlider = $VBoxContainer/AngleSlider
+@onready var smear_options: Container = $VBoxContainer/SmearOptions
+@onready var init_angle_slider: ValueSlider = smear_options.get_node("InitialAngleSlider")
+@onready var tolerance_slider: ValueSlider = smear_options.get_node("ToleranceSlider")
+@onready var wait_apply_timer: Timer = $WaitApply
+@onready var wait_time_slider: ValueSlider = $VBoxContainer/WaitTime
func _ready() -> void:
- # set as in enum
+ super._ready()
+ # Set as in the Animate enum
animate_panel.add_float_property("Angle", angle_slider)
animate_panel.add_float_property("Initial Angle", init_angle_slider)
- if not _is_webgl1():
- type_option_button.add_item("Rotxel with Smear", ROTXEL_SMEAR)
- rotxel_shader = load("res://src/Shaders/Rotation/SmearRotxel.shader")
+ type_option_button.add_item("Rotxel with Smear", ROTXEL_SMEAR)
type_option_button.add_item("cleanEdge", CLEANEDGE)
type_option_button.add_item("OmniScale", OMNISCALE)
- type_option_button.set_item_disabled(OMNISCALE, not DrawingAlgos.omniscale_shader)
type_option_button.add_item("Nearest neighbour (Shader)", NNS)
type_option_button.add_item("Nearest neighbour", NN)
type_option_button.add_item("Rotxel", ROTXEL)
type_option_button.add_item("Upscale, Rotate and Downscale", URD)
- type_option_button.emit_signal("item_selected", 0)
+ type_option_button.item_selected.emit(0)
-func _about_to_show() -> void:
+func _about_to_popup() -> void:
if DrawingAlgos.clean_edge_shader == null:
DrawingAlgos.clean_edge_shader = load("res://src/Shaders/Rotation/cleanEdge.gdshader")
drag_pivot = false
if pivot == Vector2.INF:
_calculate_pivot()
- confirmed = false
- ._about_to_show()
+ has_been_confirmed = false
+ super._about_to_popup()
wait_apply_timer.wait_time = wait_time_slider.value / 1000.0
func _calculate_pivot() -> void:
- var size := Global.current_project.size
- pivot = size / 2
+ var project_size := Global.current_project.size
+ pivot = project_size / 2.0
# Pivot correction in case of even size
if (
@@ -58,13 +56,13 @@ func _calculate_pivot() -> void:
and type_option_button.get_selected_id() != CLEANEDGE
and type_option_button.get_selected_id() != OMNISCALE
):
- if int(size.x) % 2 == 0:
+ if project_size.x % 2 == 0:
pivot.x -= 0.5
- if int(size.y) % 2 == 0:
+ if project_size.y % 2 == 0:
pivot.y -= 0.5
- if Global.current_project.has_selection and selection_checkbox.pressed:
- var selection_rectangle: Rect2 = Global.current_project.selection_map.get_used_rect()
+ if Global.current_project.has_selection and selection_checkbox.button_pressed:
+ var selection_rectangle := Global.current_project.selection_map.get_used_rect()
pivot = (
selection_rectangle.position
+ ((selection_rectangle.end - selection_rectangle.position) / 2)
@@ -75,120 +73,75 @@ func _calculate_pivot() -> void:
and type_option_button.get_selected_id() != OMNISCALE
):
# Pivot correction in case of even size
- if int(selection_rectangle.end.x - selection_rectangle.position.x) % 2 == 0:
+ if (selection_rectangle.end.x - selection_rectangle.position.x) % 2 == 0:
pivot.x -= 0.5
- if int(selection_rectangle.end.y - selection_rectangle.position.y) % 2 == 0:
+ if (selection_rectangle.end.y - selection_rectangle.position.y) % 2 == 0:
pivot.y -= 0.5
pivot_sliders.value = pivot
_on_Pivot_value_changed(pivot)
-func commit_action(cel: Image, _project: Project = Global.current_project) -> void:
- var angle: float = deg2rad(animate_panel.get_animated_value(commit_idx, Animate.ANGLE))
- var init_angle: float = animate_panel.get_animated_value(commit_idx, Animate.INITIAL_ANGLE)
-
- var selection_size := cel.get_size()
- var selection_tex := ImageTexture.new()
+func commit_action(cel: Image, _project := Global.current_project) -> void:
+ var angle := deg_to_rad(animate_panel.get_animated_value(commit_idx, Animate.ANGLE))
+ var init_angle := animate_panel.get_animated_value(commit_idx, Animate.INITIAL_ANGLE)
+ var selection_tex: ImageTexture
var image := Image.new()
image.copy_from(cel)
- if _project.has_selection and selection_checkbox.pressed:
- var selection_rectangle: Rect2 = _project.selection_map.get_used_rect()
- selection_size = selection_rectangle.size
-
- var selection: Image = _project.selection_map
- selection_tex.create_from_image(selection, 0)
+ if _project.has_selection and selection_checkbox.button_pressed:
+ var selection := _project.selection_map
+ selection_tex = ImageTexture.create_from_image(selection)
if !_type_is_shader():
- image.lock()
- cel.lock()
for x in _project.size.x:
for y in _project.size.y:
- var pos := Vector2(x, y)
+ var pos := Vector2i(x, y)
if !_project.can_pixel_get_drawn(pos):
image.set_pixelv(pos, Color(0, 0, 0, 0))
else:
cel.set_pixelv(pos, Color(0, 0, 0, 0))
- image.unlock()
- cel.unlock()
- match type_option_button.get_selected_id():
- ROTXEL_SMEAR:
- var params := {
- "initial_angle": init_angle,
- "ending_angle": rad2deg(angle),
- "tolerance": tolerance_slider.value,
- "selection_tex": selection_tex,
- "origin": pivot / cel.get_size(),
- "selection_size": selection_size
- }
- if !confirmed:
- for param in params:
- preview.material.set_shader_param(param, params[param])
- else:
- var gen := ShaderImageEffect.new()
- gen.generate_image(cel, rotxel_shader, params, _project.size)
- yield(gen, "done")
-
- CLEANEDGE:
- var params := {
- "angle": angle,
- "selection_tex": selection_tex,
- "selection_pivot": pivot,
- "selection_size": selection_size,
- "slope": true,
- "cleanup": false,
- "preview": true
- }
- if !confirmed:
- for param in params:
- preview.material.set_shader_param(param, params[param])
- else:
- params["preview"] = false
- var gen := ShaderImageEffect.new()
- gen.generate_image(cel, DrawingAlgos.clean_edge_shader, params, _project.size)
- yield(gen, "done")
- OMNISCALE:
- var params := {
- "angle": angle,
- "selection_tex": selection_tex,
- "selection_pivot": pivot,
- "selection_size": selection_size,
- "preview": true
- }
- if !confirmed:
- for param in params:
- preview.material.set_shader_param(param, params[param])
- else:
- params["preview"] = false
- var gen := ShaderImageEffect.new()
- gen.generate_image(cel, DrawingAlgos.omniscale_shader, params, _project.size)
- yield(gen, "done")
- NNS:
- var params := {
- "angle": angle,
- "selection_tex": selection_tex,
- "selection_pivot": pivot,
- "selection_size": selection_size
- }
- if !confirmed:
- for param in params:
- preview.material.set_shader_param(param, params[param])
- else:
- var gen := ShaderImageEffect.new()
- gen.generate_image(cel, nn_shader, params, _project.size)
- yield(gen, "done")
- ROTXEL:
- DrawingAlgos.rotxel(image, angle, pivot)
- NN:
- DrawingAlgos.nn_rotate(image, angle, pivot)
- URD:
- DrawingAlgos.fake_rotsprite(image, angle, pivot)
-
- if _project.has_selection and selection_checkbox.pressed and !_type_is_shader():
- cel.blend_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO)
+ if _type_is_shader():
+ var shader := rotxel_shader
+ var params := {
+ "angle": angle, "selection_tex": selection_tex, "pivot_pixel": pivot, "preview": true
+ }
+ match type_option_button.get_selected_id():
+ ROTXEL_SMEAR:
+ params = {
+ "initial_angle": init_angle,
+ "ending_angle": rad_to_deg(angle),
+ "tolerance": tolerance_slider.value,
+ "selection_tex": selection_tex,
+ "origin": pivot / Vector2(cel.get_size()),
+ }
+ CLEANEDGE:
+ shader = DrawingAlgos.clean_edge_shader
+ OMNISCALE:
+ shader = DrawingAlgos.omniscale_shader
+ NNS:
+ shader = nn_shader
+ if !has_been_confirmed:
+ for param in params:
+ preview.material.set_shader_parameter(param, params[param])
+ else:
+ params["preview"] = false
+ var gen := ShaderImageEffect.new()
+ gen.generate_image(cel, shader, params, _project.size)
+ await gen.done
+ else:
+ match type_option_button.get_selected_id():
+ ROTXEL:
+ DrawingAlgos.rotxel(image, angle, pivot)
+ NN:
+ DrawingAlgos.nn_rotate(image, angle, pivot)
+ URD:
+ DrawingAlgos.fake_rotsprite(image, angle, pivot)
+
+ if _project.has_selection and selection_checkbox.button_pressed and !_type_is_shader():
+ cel.blend_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO)
else:
- cel.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO)
+ cel.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO)
func _type_is_shader() -> bool:
@@ -257,7 +210,7 @@ func _on_LiveCheckbox_toggled(button_pressed: bool) -> void:
wait_time_slider.editable = !live_preview
wait_time_slider.visible = !live_preview
if !button_pressed:
- rect_size.y += 1 # Reset rect_size of dialog
+ size.y += 1 # Reset size of dialog
func _on_quick_change_angle_pressed(angle_value: int) -> void:
@@ -280,7 +233,7 @@ func _on_Centre_pressed() -> void:
func _on_Pivot_value_changed(value: Vector2) -> void:
pivot = value
# Refresh the indicator
- pivot_indicator.update()
+ pivot_indicator.queue_redraw()
if angle_slider.value != 0:
update_preview()
@@ -288,7 +241,7 @@ func _on_Pivot_value_changed(value: Vector2) -> void:
func _on_Indicator_draw() -> void:
var img_size := preview_image.get_size()
# find the scale using the larger measurement
- var ratio := pivot_indicator.rect_size / img_size
+ var ratio := pivot_indicator.size / Vector2(img_size)
# we need to set the scale according to the larger side
var conversion_scale: float
if img_size.x > img_size.y:
@@ -296,13 +249,13 @@ func _on_Indicator_draw() -> void:
else:
conversion_scale = ratio.y
var pivot_position := pivot * conversion_scale
- pivot_indicator.draw_arc(pivot_position, 2, 0, 360, 360, Color.yellow, 0.5)
- pivot_indicator.draw_arc(pivot_position, 6, 0, 360, 360, Color.white, 0.5)
+ pivot_indicator.draw_arc(pivot_position, 2, 0, 360, 360, Color.YELLOW, 0.5)
+ pivot_indicator.draw_arc(pivot_position, 6, 0, 360, 360, Color.WHITE, 0.5)
pivot_indicator.draw_line(
- pivot_position - Vector2.UP * 10, pivot_position - Vector2.DOWN * 10, Color.white, 0.5
+ pivot_position - Vector2.UP * 10, pivot_position - Vector2.DOWN * 10, Color.WHITE, 0.5
)
pivot_indicator.draw_line(
- pivot_position - Vector2.RIGHT * 10, pivot_position - Vector2.LEFT * 10, Color.white, 0.5
+ pivot_position - Vector2.RIGHT * 10, pivot_position - Vector2.LEFT * 10, Color.WHITE, 0.5
)
@@ -313,8 +266,9 @@ func _on_Indicator_gui_input(event: InputEvent) -> void:
drag_pivot = false
if drag_pivot:
var img_size := preview_image.get_size()
- var mouse_pos := get_local_mouse_position() - pivot_indicator.rect_position
- var ratio := img_size / pivot_indicator.rect_size
+# var mouse_pos := get_local_mouse_position() - pivot_indicator.position
+ var mouse_pos := pivot_indicator.position
+ var ratio := Vector2(img_size) / pivot_indicator.size
# we need to set the scale according to the larger side
var conversion_scale: float
if img_size.x > img_size.y:
diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.tscn b/src/UI/Dialogs/ImageEffects/RotateImage.tscn
index 04a7e3d1bd2..59570855488 100644
--- a/src/UI/Dialogs/ImageEffects/RotateImage.tscn
+++ b/src/UI/Dialogs/ImageEffects/RotateImage.tscn
@@ -1,51 +1,33 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://bvr6j8sohxob3"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/RotateImage.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=4]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/RotateImage.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"]
+[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="4"]
-[node name="RotateImage" instance=ExtResource( 2 )]
-visible = false
-window_title = "Rotate Image"
-script = ExtResource( 1 )
+[node name="RotateImage" instance=ExtResource("2")]
+title = "Rotate Image"
+script = ExtResource("1")
[node name="VBoxContainer" parent="." index="3"]
-margin_bottom = 416.0
-
-[node name="AspectRatioContainer" parent="VBoxContainer" index="1"]
-margin_bottom = 224.0
-
-[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
+offset_bottom = 416.0
[node name="Indicator" type="Control" parent="VBoxContainer/AspectRatioContainer" index="1"]
-margin_left = 80.0
-margin_right = 280.0
-margin_bottom = 200.0
+layout_mode = 2
mouse_default_cursor_shape = 2
[node name="LiveSettings" type="HBoxContainer" parent="VBoxContainer" index="2"]
-margin_top = 228.0
-margin_right = 360.0
-margin_bottom = 252.0
+layout_mode = 2
alignment = 1
[node name="LiveCheckbox" type="CheckBox" parent="VBoxContainer/LiveSettings" index="0"]
-margin_left = 126.0
-margin_right = 234.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-pressed = true
text = "Live Preview"
-[node name="WaitTime" parent="VBoxContainer" index="3" instance=ExtResource( 3 )]
+[node name="WaitTime" parent="VBoxContainer" index="3" instance=ExtResource("3")]
visible = false
-margin_top = 232.0
-margin_right = 326.0
-margin_bottom = 256.0
+layout_mode = 2
min_value = 1.0
max_value = 1000.0
value = 200.0
@@ -54,37 +36,26 @@ prefix = "Preview delay:"
suffix = "ms"
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer" index="4"]
-margin_top = 256.0
-margin_right = 360.0
-margin_bottom = 276.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer2" index="0"]
-margin_top = 3.0
-margin_right = 34.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Type:"
[node name="TypeOptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer2" index="1"]
-margin_left = 38.0
-margin_right = 360.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
+mouse_default_cursor_shape = 2
[node name="HSeparator" type="HSeparator" parent="VBoxContainer" index="5"]
-margin_top = 280.0
-margin_right = 360.0
-margin_bottom = 284.0
+layout_mode = 2
[node name="PivotOptions" type="HBoxContainer" parent="VBoxContainer" index="6"]
-margin_top = 288.0
-margin_right = 360.0
-margin_bottom = 312.0
+layout_mode = 2
-[node name="Pivot" parent="VBoxContainer/PivotOptions" index="0" instance=ExtResource( 4 )]
-margin_right = 302.0
-margin_bottom = 24.0
+[node name="Pivot" parent="VBoxContainer/PivotOptions" index="0" instance=ExtResource("4")]
+layout_mode = 2
size_flags_horizontal = 3
step = 0.5
allow_greater = true
@@ -94,100 +65,74 @@ prefix_x = "Pivot x:"
prefix_y = "Pivot y:"
[node name="Centre" type="Button" parent="VBoxContainer/PivotOptions" index="1"]
-margin_left = 306.0
-margin_right = 360.0
-margin_bottom = 24.0
-hint_tooltip = "Places the pivot at the center of the image, or at the center of the selection, if it is present."
+layout_mode = 2
+tooltip_text = "Places the pivot at the center of the image, or at the center of the selection, if it is present."
mouse_default_cursor_shape = 2
text = "Center"
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer" index="7"]
-margin_top = 316.0
-margin_right = 360.0
-margin_bottom = 320.0
-
-[node name="AngleSlider" parent="VBoxContainer" index="8" instance=ExtResource( 3 )]
-margin_top = 324.0
-margin_right = 360.0
-margin_bottom = 348.0
+layout_mode = 2
+
+[node name="AngleSlider" parent="VBoxContainer" index="8" instance=ExtResource("3")]
+layout_mode = 2
max_value = 359.0
prefix = "Angle:"
suffix = "ยฐ"
snap_step = 45.0
[node name="QuickRotations" type="HBoxContainer" parent="VBoxContainer" index="9"]
-margin_top = 352.0
-margin_right = 360.0
-margin_bottom = 372.0
+layout_mode = 2
alignment = 1
[node name="Deduct90" type="Button" parent="VBoxContainer/QuickRotations" index="0"]
-margin_right = 68.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "-90"
[node name="Deduct45" type="Button" parent="VBoxContainer/QuickRotations" index="1"]
-margin_left = 72.0
-margin_right = 141.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "-45"
[node name="Zero" type="Button" parent="VBoxContainer/QuickRotations" index="2"]
-margin_left = 145.0
-margin_right = 214.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "0"
[node name="Add45" type="Button" parent="VBoxContainer/QuickRotations" index="3"]
-margin_left = 218.0
-margin_right = 287.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "+45"
[node name="Add90" type="Button" parent="VBoxContainer/QuickRotations" index="4"]
-margin_left = 291.0
-margin_right = 360.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
text = "+90"
[node name="SmearOptions" type="VBoxContainer" parent="VBoxContainer" index="10"]
visible = false
-margin_top = 352.0
-margin_right = 326.0
-margin_bottom = 430.0
+layout_mode = 2
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/SmearOptions" index="0"]
-margin_right = 326.0
-margin_bottom = 4.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/SmearOptions" index="1"]
-margin_top = 8.0
-margin_right = 326.0
-margin_bottom = 22.0
+layout_mode = 2
text = "Smear options:"
-[node name="ToleranceSlider" parent="VBoxContainer/SmearOptions" index="2" instance=ExtResource( 3 )]
-margin_top = 26.0
-margin_right = 326.0
-margin_bottom = 50.0
+[node name="ToleranceSlider" parent="VBoxContainer/SmearOptions" index="2" instance=ExtResource("3")]
+layout_mode = 2
max_value = 255.0
value = 100.0
prefix = "Tolerance:"
-[node name="InitialAngleSlider" parent="VBoxContainer/SmearOptions" index="3" instance=ExtResource( 3 )]
-margin_top = 54.0
-margin_right = 326.0
-margin_bottom = 78.0
+[node name="InitialAngleSlider" parent="VBoxContainer/SmearOptions" index="3" instance=ExtResource("3")]
+layout_mode = 2
max_value = 359.0
value = 359.0
prefix = "Initial angle:"
@@ -195,18 +140,9 @@ suffix = "ยฐ"
snap_step = 45.0
[node name="HSeparator3" type="HSeparator" parent="VBoxContainer" index="11"]
-margin_top = 376.0
-margin_right = 360.0
-margin_bottom = 380.0
-
-[node name="OptionsContainer" parent="VBoxContainer" index="12"]
-margin_top = 384.0
-margin_bottom = 408.0
-
-[node name="WaitApply" type="Timer" parent="." index="4"]
+layout_mode = 2
-[node name="AnimateDialog" parent="." index="5"]
-margin_bottom = 416.0
+[node name="WaitApply" type="Timer" parent="." index="5"]
[connection signal="draw" from="VBoxContainer/AspectRatioContainer/Indicator" to="." method="_on_Indicator_draw"]
[connection signal="gui_input" from="VBoxContainer/AspectRatioContainer/Indicator" to="." method="_on_Indicator_gui_input"]
@@ -216,11 +152,11 @@ margin_bottom = 416.0
[connection signal="value_changed" from="VBoxContainer/PivotOptions/Pivot" to="." method="_on_Pivot_value_changed"]
[connection signal="pressed" from="VBoxContainer/PivotOptions/Centre" to="." method="_on_Centre_pressed"]
[connection signal="value_changed" from="VBoxContainer/AngleSlider" to="." method="_on_AngleSlider_value_changed"]
-[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct90" to="." method="_on_quick_change_angle_pressed" binds= [ -90 ]]
-[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct45" to="." method="_on_quick_change_angle_pressed" binds= [ -45 ]]
-[connection signal="pressed" from="VBoxContainer/QuickRotations/Zero" to="." method="_on_quick_change_angle_pressed" binds= [ 0 ]]
-[connection signal="pressed" from="VBoxContainer/QuickRotations/Add45" to="." method="_on_quick_change_angle_pressed" binds= [ 45 ]]
-[connection signal="pressed" from="VBoxContainer/QuickRotations/Add90" to="." method="_on_quick_change_angle_pressed" binds= [ 90 ]]
+[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct90" to="." method="_on_quick_change_angle_pressed" binds= [-90]]
+[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct45" to="." method="_on_quick_change_angle_pressed" binds= [-45]]
+[connection signal="pressed" from="VBoxContainer/QuickRotations/Zero" to="." method="_on_quick_change_angle_pressed" binds= [0]]
+[connection signal="pressed" from="VBoxContainer/QuickRotations/Add45" to="." method="_on_quick_change_angle_pressed" binds= [45]]
+[connection signal="pressed" from="VBoxContainer/QuickRotations/Add90" to="." method="_on_quick_change_angle_pressed" binds= [90]]
[connection signal="value_changed" from="VBoxContainer/SmearOptions/ToleranceSlider" to="." method="_on_ToleranceSlider_value_changed"]
[connection signal="value_changed" from="VBoxContainer/SmearOptions/InitialAngleSlider" to="." method="_on_InitialAngleSlider_value_changed"]
[connection signal="timeout" from="WaitApply" to="." method="_on_WaitApply_timeout"]
diff --git a/src/UI/Dialogs/ImageEffects/ScaleImage.gd b/src/UI/Dialogs/ImageEffects/ScaleImage.gd
index 5f3ccddbcdc..c6cb21fcdbe 100644
--- a/src/UI/Dialogs/ImageEffects/ScaleImage.gd
+++ b/src/UI/Dialogs/ImageEffects/ScaleImage.gd
@@ -2,12 +2,12 @@ extends ConfirmationDialog
var aspect_ratio := 1.0
-onready var width_value: SpinBox = find_node("WidthValue")
-onready var height_value: SpinBox = find_node("HeightValue")
-onready var width_value_perc: SpinBox = find_node("WidthValuePerc")
-onready var height_value_perc: SpinBox = find_node("HeightValuePerc")
-onready var interpolation_type: OptionButton = find_node("InterpolationType")
-onready var ratio_box: BaseButton = find_node("AspectRatioButton")
+@onready var width_value: SpinBox = find_child("WidthValue")
+@onready var height_value: SpinBox = find_child("HeightValue")
+@onready var width_value_perc: SpinBox = find_child("WidthValuePerc")
+@onready var height_value_perc: SpinBox = find_child("HeightValuePerc")
+@onready var interpolation_type: OptionButton = find_child("InterpolationType")
+@onready var ratio_box: BaseButton = find_child("AspectRatioButton")
func _ready() -> void:
@@ -19,15 +19,13 @@ func _ready() -> void:
interpolation_type.add_item("Scale3X", DrawingAlgos.Interpolation.SCALE3X)
interpolation_type.add_item("cleanEdge", DrawingAlgos.Interpolation.CLEANEDGE)
interpolation_type.add_item("OmniScale", DrawingAlgos.Interpolation.OMNISCALE)
- if not DrawingAlgos.omniscale_shader:
- interpolation_type.set_item_disabled(DrawingAlgos.Interpolation.OMNISCALE, true)
func _on_ScaleImage_about_to_show() -> void:
if DrawingAlgos.clean_edge_shader == null:
DrawingAlgos.clean_edge_shader = load("res://src/Shaders/Rotation/cleanEdge.gdshader")
Global.canvas.selection.transform_content_confirm()
- aspect_ratio = Global.current_project.size.x / Global.current_project.size.y
+ aspect_ratio = float(Global.current_project.size.x) / float(Global.current_project.size.y)
width_value.value = Global.current_project.size.x
height_value.value = Global.current_project.size.y
width_value_perc.value = 100
@@ -41,18 +39,18 @@ func _on_ScaleImage_confirmed() -> void:
DrawingAlgos.scale_image(width, height, interpolation)
-func _on_ScaleImage_popup_hide() -> void:
+func _on_visibility_changed() -> void:
Global.dialog_open(false)
func _on_WidthValue_value_changed(value: float) -> void:
- if ratio_box.pressed:
+ if ratio_box.button_pressed:
height_value.value = width_value.value / aspect_ratio
width_value_perc.value = (value * 100) / Global.current_project.size.x
func _on_HeightValue_value_changed(value: float) -> void:
- if ratio_box.pressed:
+ if ratio_box.button_pressed:
width_value.value = height_value.value * aspect_ratio
height_value_perc.value = (value * 100) / Global.current_project.size.y
diff --git a/src/UI/Dialogs/ImageEffects/ScaleImage.tscn b/src/UI/Dialogs/ImageEffects/ScaleImage.tscn
index f86c556db24..0c8c0df7bea 100644
--- a/src/UI/Dialogs/ImageEffects/ScaleImage.tscn
+++ b/src/UI/Dialogs/ImageEffects/ScaleImage.tscn
@@ -1,159 +1,116 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://omm7xmtf5kbj"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ScaleImage.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=4]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/ScaleImage.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://kd10jfc1dxf5" path="res://assets/graphics/misc/lock_aspect_guides.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://cancw70yw0pv7" path="res://assets/graphics/misc/lock_aspect_2.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://beqermx8s5q8y" path="res://assets/graphics/misc/lock_aspect.png" id="4"]
[node name="ScaleImage" type="ConfirmationDialog"]
-margin_right = 200.0
-margin_bottom = 114.0
-rect_min_size = Vector2( 250, 87.5 )
-window_title = "Scale Image"
-resizable = true
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+title = "Scale Image"
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 242.0
-margin_bottom = 218.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 242.0
+offset_bottom = 218.0
size_flags_horizontal = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ImageSize" type="Label" parent="VBoxContainer"]
-margin_right = 234.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Image Size"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
-margin_top = 18.0
-margin_right = 234.0
-margin_bottom = 22.0
+layout_mode = 2
[node name="PixelsLabel" type="Label" parent="VBoxContainer"]
-margin_top = 26.0
-margin_right = 234.0
-margin_bottom = 40.0
+layout_mode = 2
text = "Pixels"
[node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 44.0
-margin_right = 234.0
-margin_bottom = 96.0
+layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/SizeContainer"]
-margin_right = 221.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"]
-margin_right = 221.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="WidthLabel" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"]
-margin_top = 5.0
-margin_right = 90.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 90, 0 )
+custom_minimum_size = Vector2(90, 0)
+layout_mode = 2
text = "Width:"
[node name="WidthValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"]
-margin_left = 94.0
-margin_right = 221.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
suffix = "px"
[node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"]
-margin_top = 28.0
-margin_right = 221.0
-margin_bottom = 52.0
+layout_mode = 2
[node name="Height" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"]
-margin_top = 5.0
-margin_right = 90.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 90, 0 )
+custom_minimum_size = Vector2(90, 0)
+layout_mode = 2
text = "Height:"
[node name="HeightValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"]
-margin_left = 94.0
-margin_right = 221.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
value = 64.0
suffix = "px"
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeContainer" groups=["UIButtons"]]
-margin_left = 225.0
-margin_right = 234.0
-margin_bottom = 52.0
-texture = ExtResource( 2 )
+layout_mode = 2
+texture = ExtResource("2")
[node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/SizeContainer/TextureRect" groups=["UIButtons"]]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -4.5
-margin_top = -9.0
-margin_right = 11.5
-margin_bottom = 7.0
-hint_tooltip = "Lock aspect ratio"
+offset_left = -4.5
+offset_top = -9.0
+offset_right = 11.5
+offset_bottom = 7.0
+tooltip_text = "Lock aspect ratio"
mouse_default_cursor_shape = 2
toggle_mode = true
-texture_normal = ExtResource( 3 )
-texture_pressed = ExtResource( 4 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture_normal = ExtResource("3")
+texture_pressed = ExtResource("4")
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer"]
-margin_top = 100.0
-margin_right = 234.0
-margin_bottom = 104.0
+layout_mode = 2
[node name="PercentageLabel" type="Label" parent="VBoxContainer"]
-margin_top = 108.0
-margin_right = 234.0
-margin_bottom = 122.0
+layout_mode = 2
text = "Percentage"
[node name="PercentageContainer" type="VBoxContainer" parent="VBoxContainer"]
-margin_top = 126.0
-margin_right = 234.0
-margin_bottom = 178.0
+layout_mode = 2
[node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/PercentageContainer"]
-margin_right = 234.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="WidthLabel" type="Label" parent="VBoxContainer/PercentageContainer/WidthContainer"]
-margin_top = 5.0
-margin_right = 90.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 90, 0 )
+custom_minimum_size = Vector2(90, 0)
+layout_mode = 2
text = "Width:"
[node name="WidthValuePerc" type="SpinBox" parent="VBoxContainer/PercentageContainer/WidthContainer"]
-margin_left = 94.0
-margin_right = 234.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
step = 0.01
@@ -161,23 +118,17 @@ value = 100.0
suffix = "%"
[node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/PercentageContainer"]
-margin_top = 28.0
-margin_right = 234.0
-margin_bottom = 52.0
+layout_mode = 2
[node name="Height" type="Label" parent="VBoxContainer/PercentageContainer/HeightContainer"]
-margin_top = 5.0
-margin_right = 90.0
-margin_bottom = 19.0
-rect_min_size = Vector2( 90, 0 )
+custom_minimum_size = Vector2(90, 0)
+layout_mode = 2
text = "Height:"
[node name="HeightValuePerc" type="SpinBox" parent="VBoxContainer/PercentageContainer/HeightContainer"]
-margin_left = 94.0
-margin_right = 234.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 16384.0
step = 0.01
@@ -185,32 +136,24 @@ value = 100.0
suffix = "%"
[node name="HSeparator3" type="HSeparator" parent="VBoxContainer"]
-margin_top = 182.0
-margin_right = 234.0
-margin_bottom = 186.0
+layout_mode = 2
[node name="InterpolationContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 190.0
-margin_right = 234.0
-margin_bottom = 210.0
+layout_mode = 2
[node name="InterpolationLabel" type="Label" parent="VBoxContainer/InterpolationContainer"]
-margin_top = 3.0
-margin_right = 90.0
-margin_bottom = 17.0
-rect_min_size = Vector2( 90, 0 )
+custom_minimum_size = Vector2(90, 0)
+layout_mode = 2
text = "Interpolation:"
[node name="InterpolationType" type="OptionButton" parent="VBoxContainer/InterpolationContainer"]
-margin_left = 94.0
-margin_right = 234.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
-[connection signal="about_to_show" from="." to="." method="_on_ScaleImage_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_ScaleImage_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_ScaleImage_confirmed"]
-[connection signal="popup_hide" from="." to="." method="_on_ScaleImage_popup_hide"]
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="value_changed" from="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer/WidthValue" to="." method="_on_WidthValue_value_changed"]
[connection signal="value_changed" from="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer/HeightValue" to="." method="_on_HeightValue_value_changed"]
[connection signal="toggled" from="VBoxContainer/SizeContainer/TextureRect/AspectRatioButton" to="." method="_on_AspectRatioButton_toggled"]
diff --git a/src/UI/Dialogs/ImageEffects/ShaderEffect.gd b/src/UI/Dialogs/ImageEffects/ShaderEffect.gd
index 974adf62446..afe443125ed 100644
--- a/src/UI/Dialogs/ImageEffects/ShaderEffect.gd
+++ b/src/UI/Dialogs/ImageEffects/ShaderEffect.gd
@@ -1,40 +1,38 @@
extends ImageEffect
var shader: Shader
-var param_names := [] # String[]
-var value_slider_tscn := preload("res://src/UI/Nodes/ValueSlider.tscn")
+var param_names: PackedStringArray = []
-onready var shader_loaded_label: Label = $VBoxContainer/ShaderLoadedLabel
-onready var shader_params: BoxContainer = $VBoxContainer/ShaderParams
+@onready var shader_loaded_label: Label = $VBoxContainer/ShaderLoadedLabel
+@onready var shader_params: BoxContainer = $VBoxContainer/ShaderParams
-func _about_to_show() -> void:
+func _about_to_popup() -> void:
Global.canvas.selection.transform_content_confirm()
- var frame: Frame = Global.current_project.frames[Global.current_project.current_frame]
+ var frame := Global.current_project.frames[Global.current_project.current_frame]
Export.blend_selected_cels(selected_cels, frame)
preview_image.copy_from(selected_cels)
- preview_texture.create_from_image(preview_image, 0)
+ preview_texture = ImageTexture.create_from_image(preview_image)
preview.texture = preview_texture
- ._about_to_show()
+ super._about_to_popup()
-func commit_action(cel: Image, project: Project = Global.current_project) -> void:
+func commit_action(cel: Image, project := Global.current_project) -> void:
if !shader:
return
var params := {}
for param in param_names:
- var param_data = preview.material.get_shader_param(param)
+ var param_data = preview.material.get_shader_parameter(param)
params[param] = param_data
var gen := ShaderImageEffect.new()
gen.generate_image(cel, shader, params, project.size)
- selected_cels.unlock()
- yield(gen, "done")
+ await gen.done
func _on_ChooseShader_pressed() -> void:
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
Html5FileExchange.load_shader()
else:
$FileDialog.popup_centered(Vector2(300, 340))
@@ -51,16 +49,16 @@ func set_nodes() -> void:
preview = $VBoxContainer/AspectRatioContainer/Preview
-func change_shader(shader_tmp: Shader, name: String) -> void:
+func change_shader(shader_tmp: Shader, shader_name: String) -> void:
shader = shader_tmp
preview.material.shader = shader_tmp
- shader_loaded_label.text = tr("Shader loaded:") + " " + name
+ shader_loaded_label.text = tr("Shader loaded:") + " " + shader_name
param_names.clear()
for child in shader_params.get_children():
child.queue_free()
var code := shader.code.split("\n")
- var uniforms := []
+ var uniforms: PackedStringArray = []
for line in code:
if line.begins_with("uniform"):
uniforms.append(line)
@@ -68,33 +66,33 @@ func change_shader(shader_tmp: Shader, name: String) -> void:
for uniform in uniforms:
# Example uniform:
# uniform float parameter_name : hint_range(0, 255) = 100.0;
- var uniform_split: PoolStringArray = uniform.split("=")
+ var uniform_split := uniform.split("=")
var u_value := ""
if uniform_split.size() > 1:
u_value = uniform_split[1].replace(";", "").strip_edges()
else:
uniform_split[0] = uniform_split[0].replace(";", "").strip_edges()
- var u_left_side: PoolStringArray = uniform_split[0].split(":")
+ var u_left_side := uniform_split[0].split(":")
var u_hint := ""
if u_left_side.size() > 1:
u_hint = u_left_side[1].strip_edges()
u_hint = u_hint.replace(";", "")
- var u_init: PoolStringArray = u_left_side[0].split(" ")
- var u_type: String = u_init[1]
- var u_name: String = u_init[2]
+ var u_init := u_left_side[0].split(" ")
+ var u_type := u_init[1]
+ var u_name := u_init[2]
param_names.append(u_name)
if u_type == "float" or u_type == "int":
var label := Label.new()
label.text = u_name
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
- var slider: ValueSlider = value_slider_tscn.instance()
+ var slider := ValueSlider.new()
var min_value := 0.0
var max_value := 255.0
var step := 1.0
- var range_values_array: PoolStringArray
+ var range_values_array: PackedStringArray
if "hint_range" in u_hint:
var range_values: String = u_hint.replace("hint_range(", "")
range_values = range_values.replace(")", "").strip_edges()
@@ -131,7 +129,7 @@ func change_shader(shader_tmp: Shader, name: String) -> void:
slider.min_value = min_value
slider.max_value = max_value
slider.step = step
- slider.connect("value_changed", self, "set_shader_param", [u_name])
+ slider.value_changed.connect(set_shader_parameter.bind(u_name))
var hbox := HBoxContainer.new()
hbox.add_child(label)
hbox.add_child(slider)
@@ -141,27 +139,27 @@ func change_shader(shader_tmp: Shader, name: String) -> void:
label.text = u_name
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var vector2 := _vec2str_to_vector2(u_value)
- var slider1: ValueSlider = value_slider_tscn.instance()
+ var slider1 := ValueSlider.new()
slider1.value = vector2.x
- slider1.connect("value_changed", self, "_set_vector2_shader_param", [u_name, true])
- var slider2: ValueSlider = value_slider_tscn.instance()
+ slider1.value_changed.connect(_set_vector2_shader_param.bind(u_name, true))
+ var slider2 := ValueSlider.new()
slider2.value = vector2.y
- slider2.connect("value_changed", self, "_set_vector2_shader_param", [u_name, false])
+ slider2.value_changed.connect(_set_vector2_shader_param.bind(u_name, false))
var hbox := HBoxContainer.new()
hbox.add_child(label)
hbox.add_child(slider1)
hbox.add_child(slider2)
shader_params.add_child(hbox)
elif u_type == "vec4":
- if "hint_color" in u_hint:
+ if "source_color" in u_hint:
var label := Label.new()
label.text = u_name
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var color := _vec4str_to_color(u_value)
var color_button := ColorPickerButton.new()
- color_button.rect_min_size = Vector2(20, 20)
+ color_button.custom_minimum_size = Vector2(20, 20)
color_button.color = color
- color_button.connect("color_changed", self, "set_shader_param", [u_name])
+ color_button.color_changed.connect(set_shader_parameter.bind(u_name))
color_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var hbox := HBoxContainer.new()
hbox.add_child(label)
@@ -172,15 +170,15 @@ func change_shader(shader_tmp: Shader, name: String) -> void:
label.text = u_name
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var file_dialog := FileDialog.new()
- file_dialog.mode = FileDialog.MODE_OPEN_FILE
+ file_dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE
file_dialog.access = FileDialog.ACCESS_FILESYSTEM
file_dialog.resizable = true
- file_dialog.rect_min_size = Vector2(200, 70)
- file_dialog.rect_size = Vector2(384, 281)
- file_dialog.connect("file_selected", self, "_load_texture", [u_name])
+ file_dialog.custom_minimum_size = Vector2(200, 70)
+ file_dialog.size = Vector2(384, 281)
+ file_dialog.file_selected.connect(_load_texture.bind(u_name))
var button := Button.new()
button.text = "Load texture"
- button.connect("pressed", file_dialog, "popup_centered")
+ button.pressed.connect(file_dialog.popup_centered)
button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var hbox := HBoxContainer.new()
hbox.add_child(label)
@@ -194,8 +192,8 @@ func change_shader(shader_tmp: Shader, name: String) -> void:
var checkbox := CheckBox.new()
checkbox.text = "On"
if u_value == "true":
- checkbox.pressed = true
- checkbox.connect("toggled", self, "set_shader_param", [u_name])
+ checkbox.button_pressed = true
+ checkbox.toggled.connect(set_shader_parameter.bind(u_name))
checkbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var hbox := HBoxContainer.new()
hbox.add_child(label)
@@ -212,25 +210,25 @@ func change_shader(shader_tmp: Shader, name: String) -> void:
# print("--")
-func set_shader_param(value, param: String) -> void:
+func set_shader_parameter(value, param: String) -> void:
var mat: ShaderMaterial = preview.material
- mat.set_shader_param(param, value)
+ mat.set_shader_parameter(param, value)
func _set_vector2_shader_param(value: float, param: String, x: bool) -> void:
var mat: ShaderMaterial = preview.material
- var vector2: Vector2 = mat.get_shader_param(param)
+ var vector2: Vector2 = mat.get_shader_parameter(param)
if x:
vector2.x = value
else:
vector2.y = value
- set_shader_param(vector2, param)
+ set_shader_parameter(vector2, param)
func _vec2str_to_vector2(vec2: String) -> Vector2:
vec2 = vec2.replace("vec2(", "")
vec2 = vec2.replace(")", "")
- var vec_values: PoolStringArray = vec2.split(",")
+ var vec_values: PackedStringArray = vec2.split(",")
if vec_values.size() == 0:
return Vector2.ZERO
var y := float(vec_values[0])
@@ -243,7 +241,7 @@ func _vec2str_to_vector2(vec2: String) -> Vector2:
func _vec4str_to_color(vec4: String) -> Color:
vec4 = vec4.replace("vec4(", "")
vec4 = vec4.replace(")", "")
- var rgba_values: PoolStringArray = vec4.split(",")
+ var rgba_values: PackedStringArray = vec4.split(",")
var red := float(rgba_values[0])
var green := float(rgba_values[0])
@@ -267,7 +265,5 @@ func _load_texture(path: String, param: String) -> void:
if !image:
print("Error loading texture")
return
- var image_tex := ImageTexture.new()
- image_tex.create_from_image(image, 0)
- image_tex.flags = ImageTexture.FLAG_REPEAT
- set_shader_param(image_tex, param)
+ var image_tex := ImageTexture.create_from_image(image)
+ set_shader_parameter(image_tex, param)
diff --git a/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn b/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn
index 1343b0054ad..55bcc4d23e6 100644
--- a/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn
+++ b/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn
@@ -1,86 +1,60 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bkr47ocij684y"]
-[ext_resource path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"]
-[sub_resource type="ShaderMaterial" id=1]
+[sub_resource type="ShaderMaterial" id="1"]
[node name="ShaderEffect" type="ConfirmationDialog"]
-margin_right = 200.0
-margin_bottom = 228.0
-rect_min_size = Vector2( 400, 300 )
-window_title = "Shader"
-resizable = true
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
[node name="Label" type="Label" parent="VBoxContainer"]
-margin_right = 442.0
-margin_bottom = 31.0
+layout_mode = 2
text = "This is an experimental feature and may not be included in the stable version"
-autowrap = true
[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
-margin_top = 35.0
-margin_right = 442.0
-margin_bottom = 235.0
+layout_mode = 2
size_flags_vertical = 3
[node name="Preview" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"]
-material = SubResource( 1 )
-margin_left = 121.0
-margin_right = 321.0
-margin_bottom = 200.0
-rect_min_size = Vector2( 200, 200 )
-expand = true
+material = SubResource("1")
+custom_minimum_size = Vector2(200, 200)
+layout_mode = 2
+expand_mode = 1
stretch_mode = 5
-[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 2 )]
+[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("2")]
show_behind_parent = true
+layout_mode = 0
+anchors_preset = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
[node name="ChooseShader" type="Button" parent="VBoxContainer"]
-margin_top = 239.0
-margin_right = 442.0
-margin_bottom = 259.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Choose Shader"
[node name="ShaderLoadedLabel" type="Label" parent="VBoxContainer"]
-margin_top = 263.0
-margin_right = 442.0
-margin_bottom = 277.0
+layout_mode = 2
text = "No shader loaded!"
-autowrap = true
[node name="ShaderParams" type="VBoxContainer" parent="VBoxContainer"]
-margin_top = 281.0
-margin_right = 442.0
-margin_bottom = 281.0
+layout_mode = 2
[node name="FileDialog" type="FileDialog" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 450.0
-margin_bottom = 289.0
-window_title = "Open a File"
-resizable = true
-mode = 0
access = 2
-filters = PoolStringArray( "*shader; Godot Shader File" )
+filters = PackedStringArray("*shader; Godot Shader File")
show_hidden_files = true
[connection signal="pressed" from="VBoxContainer/ChooseShader" to="." method="_on_ChooseShader_pressed"]
diff --git a/src/UI/Dialogs/ManageLayouts.gd b/src/UI/Dialogs/ManageLayouts.gd
index 52cdaed444d..ccd14173fd3 100644
--- a/src/UI/Dialogs/ManageLayouts.gd
+++ b/src/UI/Dialogs/ManageLayouts.gd
@@ -3,13 +3,13 @@ extends AcceptDialog
var layout_selected := -1
var is_editing := false
-onready var layout_list: ItemList = find_node("SavedLayouts")
-onready var edit_layout: Button = find_node("EditLayout")
-onready var delete_layout: Button = find_node("DeleteLayout")
-onready var layout_settings: ConfirmationDialog = $LayoutSettings
-onready var layout_name: LineEdit = $LayoutSettings/LayoutName
-onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation
-onready var mimic_ui = find_node("LayoutPreview")
+@onready var layout_list: ItemList = find_child("SavedLayouts")
+@onready var edit_layout: Button = find_child("EditLayout")
+@onready var delete_layout: Button = find_child("DeleteLayout")
+@onready var layout_settings: ConfirmationDialog = $LayoutSettings
+@onready var layout_name: LineEdit = $LayoutSettings/LayoutName
+@onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation
+@onready var mimic_ui = find_child("LayoutPreview")
func _on_ManageLayouts_about_to_show() -> void:
@@ -20,7 +20,9 @@ func _on_ManageLayouts_about_to_show() -> void:
layout_list.select(layout_selected)
-func _on_ManageLayouts_popup_hide() -> void:
+func _on_ManageLayouts_visibility_changed() -> void:
+ if visible:
+ return
layout_list.clear()
Global.dialog_open(false)
@@ -36,7 +38,7 @@ func _on_SavedLayouts_item_selected(index: int) -> void:
refresh_preview()
-func _on_SavedLayouts_nothing_selected() -> void:
+func _on_SavedLayouts_empty_clicked(_position: Vector2, _button_index: int) -> void:
edit_layout.disabled = true
delete_layout.disabled = true
@@ -44,14 +46,14 @@ func _on_SavedLayouts_nothing_selected() -> void:
func _on_AddLayout_pressed() -> void:
is_editing = false
layout_name.text = "New Layout"
- layout_settings.window_title = "Add Layout"
+ layout_settings.title = "Add Layout"
layout_settings.popup_centered()
func _on_EditLayout_pressed() -> void:
is_editing = true
layout_name.text = layout_list.get_item_text(layout_selected)
- layout_settings.window_title = "Edit Layout"
+ layout_settings.title = "Edit Layout"
layout_settings.popup_centered()
@@ -61,9 +63,9 @@ func _on_DeleteLayout_pressed() -> void:
func _on_LayoutSettings_confirmed() -> void:
var file_name := layout_name.text + ".tres"
- var path := "user://layouts/".plus_file(file_name)
- var layout = Global.control.ui.get_layout()
- var err := ResourceSaver.save(path, layout)
+ var path := "user://layouts/".path_join(file_name)
+ var layout: DockableLayout = Global.control.ui.layout
+ var err := ResourceSaver.save(layout, path)
if err != OK:
print(err)
else:
@@ -86,13 +88,15 @@ func _on_LayoutSettings_confirmed() -> void:
func delete_layout_file(file_name: String) -> void:
- var dir := Directory.new()
- dir.remove("user://layouts/".plus_file(file_name))
+ var dir := DirAccess.open("user://layouts/")
+ if not is_instance_valid(dir):
+ return
+ dir.remove("user://layouts/".path_join(file_name))
func _on_DeleteConfirmation_confirmed() -> void:
delete_layout_file(layout_list.get_item_text(layout_selected) + ".tres")
- Global.top_menu_container.layouts.remove(layout_selected)
+ Global.top_menu_container.layouts.remove_at(layout_selected)
layout_list.remove_item(layout_selected)
Global.top_menu_container.populate_layouts_submenu()
layout_selected = -1
@@ -108,8 +112,7 @@ func refresh_preview():
var box := TextEdit.new()
box.name = item.name
box.text = item.name
- box.wrap_enabled = true
- box.readonly = true
+ box.editable = false
mimic_ui.add_child(box)
if layout_selected == -1:
mimic_ui.visible = false
diff --git a/src/UI/Dialogs/ManageLayouts.tscn b/src/UI/Dialogs/ManageLayouts.tscn
index 0b97e8372cc..98b8faf2d3b 100644
--- a/src/UI/Dialogs/ManageLayouts.tscn
+++ b/src/UI/Dialogs/ManageLayouts.tscn
@@ -1,171 +1,131 @@
-[gd_scene load_steps=7 format=2]
+[gd_scene load_steps=7 format=3 uid="uid://d1phd84dk4t5e"]
-[ext_resource path="res://src/UI/Dialogs/ManageLayouts.gd" type="Script" id=1]
-[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=2]
-[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=3]
-[ext_resource path="res://addons/dockable_container/dockable_container.gd" type="Script" id=4]
+[ext_resource type="Script" path="res://src/UI/Dialogs/ManageLayouts.gd" id="1"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="2"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3"]
+[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="4"]
-[sub_resource type="Resource" id=1]
+[sub_resource type="Resource" id="1"]
resource_name = "Tabs"
-script = ExtResource( 2 )
-names = PoolStringArray( )
-current_tab = 0
+script = ExtResource("2")
+names = PackedStringArray()
+current_tab = -1
-[sub_resource type="Resource" id=2]
+[sub_resource type="Resource" id="2"]
resource_name = "Layout"
-script = ExtResource( 3 )
-root = SubResource( 1 )
-hidden_tabs = {
-}
+script = ExtResource("3")
+root = SubResource("1")
+hidden_tabs = {}
[node name="ManageLayouts" type="AcceptDialog"]
-margin_right = 543.0
-margin_bottom = 562.0
-window_title = "Manage Layouts"
-resizable = true
-script = ExtResource( 1 )
+title = "Manage Layouts"
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
[node name="PreviewHeader" type="HBoxContainer" parent="VBoxContainer"]
-margin_right = 527.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="VBoxContainer/PreviewHeader"]
-margin_right = 50.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Preview"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/PreviewHeader"]
-margin_left = 50.0
-margin_right = 527.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PreviewInstruction" type="Label" parent="VBoxContainer"]
-margin_top = 18.0
-margin_right = 527.0
-margin_bottom = 32.0
+layout_mode = 2
text = "This is a preview, changing this won't change the layout"
-align = 1
-autowrap = true
[node name="PreviewContainer" type="ScrollContainer" parent="VBoxContainer"]
-margin_top = 36.0
-margin_right = 527.0
-margin_bottom = 354.0
+layout_mode = 2
size_flags_vertical = 3
[node name="LayoutPreview" type="Container" parent="VBoxContainer/PreviewContainer"]
-margin_right = 527.0
-margin_bottom = 318.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource( 4 )
+script = ExtResource("4")
tabs_visible = false
-layout = SubResource( 2 )
+layout = SubResource("2")
[node name="LayoutsHeader" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 358.0
-margin_right = 527.0
-margin_bottom = 372.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="VBoxContainer/LayoutsHeader"]
-margin_right = 49.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Layouts"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/LayoutsHeader"]
-margin_left = 49.0
-margin_right = 527.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="LayoutInstruction" type="Label" parent="VBoxContainer"]
-margin_top = 376.0
-margin_right = 527.0
-margin_bottom = 390.0
+layout_mode = 2
text = "Double click to set as new startup layout"
-autowrap = true
[node name="SavedLayouts" type="ItemList" parent="VBoxContainer"]
-margin_top = 394.0
-margin_right = 527.0
-margin_bottom = 494.0
-rect_min_size = Vector2( 0, 100 )
+custom_minimum_size = Vector2(0, 100)
+layout_mode = 2
[node name="ButtonsContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 498.0
-margin_right = 527.0
-margin_bottom = 518.0
+layout_mode = 2
[node name="AddLayout" type="Button" parent="VBoxContainer/ButtonsContainer"]
-margin_right = 37.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 0
+mouse_default_cursor_shape = 2
text = "Add"
[node name="EditLayout" type="Button" parent="VBoxContainer/ButtonsContainer"]
-margin_left = 41.0
-margin_right = 77.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 0
+mouse_default_cursor_shape = 2
disabled = true
text = "Edit"
[node name="DeleteLayout" type="Button" parent="VBoxContainer/ButtonsContainer"]
-margin_left = 81.0
-margin_right = 136.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 0
+mouse_default_cursor_shape = 2
disabled = true
text = "Delete"
[node name="LayoutSettings" type="ConfirmationDialog" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 180.0
-margin_bottom = 76.0
-rect_min_size = Vector2( 172, 60.2 )
-resizable = true
[node name="LayoutName" type="LineEdit" parent="LayoutSettings"]
+anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
-margin_left = 8.0
-margin_top = -26.0
-margin_right = -8.0
-margin_bottom = -2.0
+offset_left = 8.0
+offset_top = -26.0
+offset_right = -8.0
+offset_bottom = -2.0
size_flags_horizontal = 3
placeholder_text = "Insert name"
[node name="DeleteConfirmation" type="ConfirmationDialog" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 305.0
-margin_bottom = 68.2
-rect_min_size = Vector2( 172, 60.2 )
dialog_text = "Are you sure you want to delete this layout?"
-[connection signal="about_to_show" from="." to="." method="_on_ManageLayouts_about_to_show"]
-[connection signal="popup_hide" from="." to="." method="_on_ManageLayouts_popup_hide"]
+[connection signal="about_to_popup" from="." to="." method="_on_ManageLayouts_about_to_show"]
+[connection signal="visibility_changed" from="." to="." method="_on_ManageLayouts_visibility_changed"]
+[connection signal="empty_clicked" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_empty_clicked"]
[connection signal="item_activated" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_item_activated"]
[connection signal="item_selected" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_item_selected"]
-[connection signal="nothing_selected" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_nothing_selected"]
[connection signal="pressed" from="VBoxContainer/ButtonsContainer/AddLayout" to="." method="_on_AddLayout_pressed"]
[connection signal="pressed" from="VBoxContainer/ButtonsContainer/EditLayout" to="." method="_on_EditLayout_pressed"]
[connection signal="pressed" from="VBoxContainer/ButtonsContainer/DeleteLayout" to="." method="_on_DeleteLayout_pressed"]
diff --git a/src/UI/Dialogs/OpenSprite.tscn b/src/UI/Dialogs/OpenSprite.tscn
index 80d6977dee7..9fa9ee26ecc 100644
--- a/src/UI/Dialogs/OpenSprite.tscn
+++ b/src/UI/Dialogs/OpenSprite.tscn
@@ -1,10 +1,10 @@
-[gd_scene format=2]
+[gd_scene format=3 uid="uid://b3aeqj2k58wdk"]
[node name="OpenSprite" type="FileDialog"]
-margin_right = 515.0
-margin_bottom = 348.0
-window_title = "Open a File"
-resizable = true
-mode = 0
+title = "Open File(s)"
+size = Vector2i(558, 400)
+exclusive = false
+ok_button_text = "Open"
+file_mode = 1
access = 2
-filters = PoolStringArray( "*.pxo ; Pixelorama Project", "*.png ; PNG Image", "*.bmp ; BMP Image", "*.hdr ; Radiance HDR Image", "*.jpg,*.jpeg ; JPEG Image", "*.svg ; SVG Image", "*.tga ; TGA Image", "*.webp ; WebP Image", "*.tres; Pixelorama palette", "*.gpl; GIMP palette", "*pal; Palette" )
+filters = PackedStringArray("*.pxo ; Pixelorama Project", "*.png ; PNG Image", "*.bmp ; BMP Image", "*.hdr ; Radiance HDR Image", "*.jpg,*.jpeg ; JPEG Image", "*.svg ; SVG Image", "*.tga ; TGA Image", "*.webp ; WebP Image", "*.tres; Pixelorama palette", "*.gpl; GIMP palette", "*pal; Palette")
diff --git a/src/UI/Dialogs/PreviewDialog.gd b/src/UI/Dialogs/PreviewDialog.gd
index 2b15fe463ac..2410fb43bd5 100644
--- a/src/UI/Dialogs/PreviewDialog.gd
+++ b/src/UI/Dialogs/PreviewDialog.gd
@@ -1,3 +1,4 @@
+class_name PreviewDialog
extends ConfirmationDialog
enum ImageImportOptions {
@@ -16,38 +17,36 @@ enum BrushTypes { FILE, PROJECT, RANDOM }
var path: String
var image: Image
-var current_import_option: int = ImageImportOptions.NEW_TAB
-var smart_slice = false
-var recycle_last_slice_result = false # should we recycle the current sliced_rects
-var sliced_rects: Dictionary
+var current_import_option := ImageImportOptions.NEW_TAB
+var smart_slice := false
+var recycle_last_slice_result := false # Should we recycle the current sliced_rects
+var sliced_rects: RegionUnpacker.RectData
var spritesheet_horizontal := 1
var spritesheet_vertical := 1
-var brush_type: int = BrushTypes.FILE
-var opened_once = false
-var is_master: bool = false
-var hiding: bool = false
-var _content_offset = rect_size - get_child(0).rect_size # A workaround for a pixelorama bug
-
-onready var texture_rect: TextureRect = $VBoxContainer/CenterContainer/TextureRect
-onready var image_size_label: Label = $VBoxContainer/SizeContainer/ImageSizeLabel
-onready var frame_size_label: Label = $VBoxContainer/SizeContainer/FrameSizeLabel
-onready var smart_slice_checkbox = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartSlice
-onready var merge_threshold = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/Threshold
-# gdlint: ignore=max-line-length
-onready var merge_dist: TextureProgress = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/MergeDist
-# gdlint: ignore=max-line-length
-onready var spritesheet_manual_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual
-onready var spritesheet_smart_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart
-onready var spritesheet_tab_options = spritesheet_smart_tab_options.get_parent()
-onready var spritesheet_lay_opt = $VBoxContainer/HBoxContainer/SpritesheetLayerOptions
-onready var new_frame_options = $VBoxContainer/HBoxContainer/NewFrameOptions
-onready var replace_cel_options = $VBoxContainer/HBoxContainer/ReplaceCelOptions
-onready var new_layer_options = $VBoxContainer/HBoxContainer/NewLayerOptions
-onready var new_brush_options = $VBoxContainer/HBoxContainer/NewBrushOptions
-onready var new_brush_name = $VBoxContainer/HBoxContainer/NewBrushOptions/BrushName
-
-onready var import_options: OptionButton = $VBoxContainer/HBoxContainer/ImportOption
-onready var apply_all: CheckBox = $VBoxContainer/ApplyAll
+var brush_type := BrushTypes.FILE
+var opened_once := false
+var is_main := false
+var hiding := false
+
+@onready var texture_rect: TextureRect = $VBoxContainer/AspectRatioContainer/TextureRect
+@onready var image_size_label: Label = $VBoxContainer/SizeContainer/ImageSizeLabel
+@onready var frame_size_label: Label = $VBoxContainer/SizeContainer/FrameSizeLabel
+@onready var smart_slice_checkbox := %SmartSliceButton as CheckBox
+@onready var merge_threshold := %SmartOptions/Threshold as ValueSlider
+@onready var merge_dist := %SmartOptions/MergeDist as ValueSlider
+@onready
+var spritesheet_manual_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual
+@onready var spritesheet_smart_tab_options := %SmartOptions as HBoxContainer
+@onready var spritesheet_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions
+@onready var spritesheet_lay_opt = $VBoxContainer/HBoxContainer/SpritesheetLayerOptions
+@onready var new_frame_options = $VBoxContainer/HBoxContainer/NewFrameOptions
+@onready var replace_cel_options = $VBoxContainer/HBoxContainer/ReplaceCelOptions
+@onready var new_layer_options = $VBoxContainer/HBoxContainer/NewLayerOptions
+@onready var new_brush_options = $VBoxContainer/HBoxContainer/NewBrushOptions
+@onready var new_brush_name = $VBoxContainer/HBoxContainer/NewBrushOptions/BrushName
+
+@onready var import_options: OptionButton = $VBoxContainer/HBoxContainer/ImportOption
+@onready var apply_all: CheckBox = $VBoxContainer/ApplyAll
func _on_PreviewDialog_about_to_show() -> void:
@@ -68,10 +67,9 @@ func _on_PreviewDialog_about_to_show() -> void:
# Select the option that the preview dialog before it had selected
import_options.select(OpenSave.last_dialog_option)
- import_options.emit_signal("item_selected", OpenSave.last_dialog_option)
+ import_options.item_selected.emit(OpenSave.last_dialog_option)
- var img_texture := ImageTexture.new()
- img_texture.create_from_image(image, 0)
+ var img_texture := ImageTexture.create_from_image(image)
texture_rect.texture = img_texture
spritesheet_manual_tab_options.get_node("HorizontalFrames").max_value = min(
spritesheet_manual_tab_options.get_node("HorizontalFrames").max_value, image.get_size().x
@@ -80,29 +78,23 @@ func _on_PreviewDialog_about_to_show() -> void:
spritesheet_manual_tab_options.get_node("VerticalFrames").max_value, image.get_size().y
)
image_size_label.text = (
- tr("Image Size")
- + ": "
- + str(image.get_size().x)
- + "ร"
- + str(image.get_size().y)
+ tr("Image Size") + ": " + str(image.get_size().x) + "ร" + str(image.get_size().y)
)
frame_size_label.text = (
- tr("Frame Size")
- + ": "
- + str(image.get_size().x)
- + "ร"
- + str(image.get_size().y)
+ tr("Frame Size") + ": " + str(image.get_size().x) + "ร" + str(image.get_size().y)
)
if OpenSave.preview_dialogs.size() > 1:
apply_all.visible = true
-func _on_PreviewDialog_popup_hide() -> void:
- if hiding: # if the popup is hiding because of master
+func _on_visibility_changed() -> void:
+ if visible:
return
- elif is_master: # if the master is closed then close others too
+ if hiding: # if the popup is hiding because of main
+ return
+ elif is_main: # if the main dialog is closed then close others too
for child in Global.control.get_children():
- if "PreviewDialog" in child.name:
+ if child is PreviewDialog:
OpenSave.preview_dialogs.erase(child)
child.queue_free()
else: # dialogs being closed separately
@@ -115,12 +107,12 @@ func _on_PreviewDialog_popup_hide() -> void:
func _on_PreviewDialog_confirmed() -> void:
- if is_master: # if the master is confirmed then confirm others too
- is_master = false
+ if is_main: # if the main dialog is confirmed then confirm others too
+ is_main = false
synchronize()
for child in Global.control.get_children():
- if "PreviewDialog" in child.name:
- child.emit_signal("confirmed")
+ if child is PreviewDialog:
+ child.confirmed.emit()
else:
if current_import_option == ImageImportOptions.NEW_TAB:
OpenSave.open_image_as_new_tab(path, image)
@@ -130,7 +122,7 @@ func _on_PreviewDialog_confirmed() -> void:
if !recycle_last_slice_result:
obtain_sliced_data()
OpenSave.open_image_as_spritesheet_tab_smart(
- path, image, sliced_rects["rects"], sliced_rects["frame_size"]
+ path, image, sliced_rects.rects, sliced_rects.frame_size
)
else:
OpenSave.open_image_as_spritesheet_tab(
@@ -174,7 +166,7 @@ func _on_PreviewDialog_confirmed() -> void:
OpenSave.open_image_as_new_layer(image, path.get_basename().get_file(), frame_index)
elif current_import_option == ImageImportOptions.NEW_REFERENCE_IMAGE:
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
OpenSave.import_reference_image_from_image(image)
else:
OpenSave.import_reference_image_from_path(path)
@@ -193,20 +185,20 @@ func _on_PreviewDialog_confirmed() -> void:
Global.patterns_popup.add(image, file_name)
# Copy the image file into the "pixelorama/Patterns" directory
- var location := "Patterns".plus_file(file_name_ext)
- var dir = Directory.new()
- dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location))
+ var location := "Patterns".path_join(file_name_ext)
+ var dir := DirAccess.open(path)
+ dir.copy(path, Global.home_data_directory.path_join(location))
-func _on_ApplyAll_toggled(pressed) -> void:
- is_master = pressed
+func _on_ApplyAll_toggled(pressed: bool) -> void:
+ is_main = pressed
# below 4 (and the last) line is needed for correct popup placement
- var old_rect = get_rect()
- disconnect("popup_hide", self, "_on_PreviewDialog_popup_hide")
+ var old_rect := Rect2i(position, size)
+ visibility_changed.disconnect(_on_visibility_changed)
hide()
- connect("popup_hide", self, "_on_PreviewDialog_popup_hide")
+ visibility_changed.connect(_on_visibility_changed)
for child in Global.control.get_children():
- if child != self and "PreviewDialog" in child.name:
+ if child != self and child is PreviewDialog:
child.hiding = pressed
if pressed:
child.hide()
@@ -218,12 +210,12 @@ func _on_ApplyAll_toggled(pressed) -> void:
func synchronize() -> void:
for child in Global.control.get_children():
- if child != self and "PreviewDialog" in child.name:
- var dialog = child
+ if child != self and child is PreviewDialog:
+ var dialog := child as PreviewDialog
#sync modes
- var id = current_import_option
+ var id := current_import_option
dialog.import_options.select(id)
- dialog.import_options.emit_signal("item_selected", id)
+ dialog.import_options.item_selected.emit(id)
#sync properties (if any)
if (
@@ -239,40 +231,38 @@ func synchronize() -> void:
image.get_size().y
)
if id == ImageImportOptions.SPRITESHEET_LAYER:
- dialog.spritesheet_lay_opt.get_node("AtFrameSpinbox").value = (spritesheet_lay_opt.get_node(
- "AtFrameSpinbox"
- ).value)
+ dialog.spritesheet_lay_opt.get_node("AtFrameSpinbox").value = (
+ spritesheet_lay_opt.get_node("AtFrameSpinbox").value
+ )
elif id == ImageImportOptions.NEW_FRAME:
- dialog.new_frame_options.get_node("AtLayerOption").selected = (new_frame_options.get_node(
- "AtLayerOption"
- ).selected)
+ dialog.new_frame_options.get_node("AtLayerOption").selected = (
+ new_frame_options.get_node("AtLayerOption").selected
+ )
elif id == ImageImportOptions.REPLACE_CEL:
- dialog.replace_cel_options.get_node("AtLayerOption").selected = (replace_cel_options.get_node(
- "AtLayerOption"
- ).selected)
- dialog.replace_cel_options.get_node("AtFrameSpinbox").value = (replace_cel_options.get_node(
- "AtFrameSpinbox"
- ).value)
+ dialog.replace_cel_options.get_node("AtLayerOption").selected = (
+ replace_cel_options.get_node("AtLayerOption").selected
+ )
+ dialog.replace_cel_options.get_node("AtFrameSpinbox").value = (
+ replace_cel_options.get_node("AtFrameSpinbox").value
+ )
elif id == ImageImportOptions.NEW_LAYER:
- dialog.new_layer_options.get_node("AtFrameSpinbox").value = (new_layer_options.get_node(
- "AtFrameSpinbox"
- ).value)
+ dialog.new_layer_options.get_node("AtFrameSpinbox").value = (
+ new_layer_options.get_node("AtFrameSpinbox").value
+ )
elif id == ImageImportOptions.BRUSH:
var type = new_brush_options.get_node("BrushTypeOption").selected
dialog.new_brush_options.get_node("BrushTypeOption").select(type)
- dialog.new_brush_options.get_node("BrushTypeOption").emit_signal(
- "item_selected", type
- )
+ dialog.new_brush_options.get_node("BrushTypeOption").item_selected.emit(type)
-func _on_ImportOption_item_selected(id: int) -> void:
+func _on_ImportOption_item_selected(id: ImageImportOptions) -> void:
current_import_option = id
OpenSave.last_dialog_option = current_import_option
- smart_slice_checkbox.pressed = false
+ smart_slice_checkbox.button_pressed = false
apply_all.disabled = false
smart_slice = false
smart_slice_checkbox.visible = false
@@ -306,7 +296,7 @@ func _on_ImportOption_item_selected(id: int) -> void:
var at_layer_option: OptionButton = new_frame_options.get_node("AtLayerOption")
at_layer_option.clear()
var layers := Global.current_project.layers.duplicate()
- layers.invert()
+ layers.reverse()
var i := 0
for l in layers:
if not l is PixelLayer:
@@ -321,7 +311,7 @@ func _on_ImportOption_item_selected(id: int) -> void:
var at_layer_option: OptionButton = replace_cel_options.get_node("AtLayerOption")
at_layer_option.clear()
var layers := Global.current_project.layers.duplicate()
- layers.invert()
+ layers.reverse()
var i := 0
for l in layers:
if not l is PixelLayer:
@@ -335,56 +325,56 @@ func _on_ImportOption_item_selected(id: int) -> void:
elif id == ImageImportOptions.NEW_LAYER:
new_layer_options.visible = true
- new_layer_options.get_node("AtFrameSpinbox").max_value = Global.current_project.frames.size()
+ new_layer_options.get_node("AtFrameSpinbox").max_value = (
+ Global.current_project.frames.size()
+ )
elif id == ImageImportOptions.BRUSH:
new_brush_options.visible = true
+ _call_queue_redraw()
- rect_size = get_child(0).rect_size + _content_offset
- update()
-
-func _on_SmartSlice_toggled(button_pressed: bool) -> void:
+func _on_smart_slice_toggled(button_pressed: bool) -> void:
setup_smart_slice(button_pressed)
func setup_smart_slice(enabled: bool) -> void:
spritesheet_smart_tab_options.visible = enabled
spritesheet_manual_tab_options.visible = !enabled
- if is_master: # disable apply all (the algorithm is not fast enough for this)
- apply_all.pressed = false
+ if is_main: # Disable apply all (the algorithm is not fast enough for this)
+ apply_all.button_pressed = false
apply_all.disabled = enabled
smart_slice = enabled
if !recycle_last_slice_result and enabled:
slice_preview()
- update()
+ _call_queue_redraw()
func obtain_sliced_data() -> void:
var unpak := RegionUnpacker.new(merge_threshold.value, merge_dist.value)
- sliced_rects = unpak.get_used_rects(texture_rect.texture.get_data())
+ sliced_rects = unpak.get_used_rects(texture_rect.texture.get_image())
func slice_preview():
- sliced_rects.clear()
+ sliced_rects = null
obtain_sliced_data()
recycle_last_slice_result = true
- var size = sliced_rects["frame_size"]
- frame_size_label.text = tr("Frame Size") + ": " + str(size.x) + "ร" + str(size.y)
+ var frame_size := sliced_rects.frame_size
+ frame_size_label.text = tr("Frame Size") + ": " + str(frame_size.x) + "ร" + str(frame_size.y)
-func _on_Threshold_value_changed(_value: float) -> void:
+func _on_threshold_value_changed(_value: float) -> void:
recycle_last_slice_result = false
-func _on_MergeDist_value_changed(_value: float) -> void:
+func _on_merge_dist_value_changed(_value: float) -> void:
recycle_last_slice_result = false
-func _on_Slice_pressed() -> void:
+func _on_slice_pressed() -> void:
if !recycle_last_slice_result:
slice_preview()
- update()
+ _call_queue_redraw()
func _on_HorizontalFrames_value_changed(value: int) -> void:
@@ -398,13 +388,13 @@ func _on_VerticalFrames_value_changed(value: int) -> void:
func spritesheet_frame_value_changed() -> void:
- var frame_width = floor(image.get_size().x / spritesheet_horizontal)
- var frame_height = floor(image.get_size().y / spritesheet_vertical)
+ var frame_width := floori(image.get_size().x / spritesheet_horizontal)
+ var frame_height := floori(image.get_size().y / spritesheet_vertical)
frame_size_label.text = tr("Frame Size") + ": " + str(frame_width) + "ร" + str(frame_height)
- update()
+ _call_queue_redraw()
-func _on_BrushTypeOption_item_selected(index: int) -> void:
+func _on_BrushTypeOption_item_selected(index: BrushTypes) -> void:
brush_type = index
new_brush_name.visible = false
if brush_type == BrushTypes.RANDOM:
@@ -421,9 +411,9 @@ func add_brush() -> void:
Brushes.add_file_brush([image], file_name)
# Copy the image file into the "pixelorama/Brushes" directory
- var location := "Brushes".plus_file(file_name_ext)
- var dir = Directory.new()
- dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location))
+ var location := "Brushes".path_join(file_name_ext)
+ var dir := DirAccess.open(path)
+ dir.copy(path, Global.home_data_directory.path_join(location))
elif brush_type == BrushTypes.PROJECT:
var file_name: String = path.get_file().get_basename()
@@ -434,12 +424,11 @@ func add_brush() -> void:
var brush_name = new_brush_name.get_node("BrushNameLineEdit").text.to_lower()
if !brush_name.is_valid_filename():
return
- var dir := Directory.new()
- dir.open(Global.directory_module.xdg_data_home.plus_file("Brushes"))
+ var dir := DirAccess.open(Global.home_data_directory.path_join("Brushes"))
if !dir.dir_exists(brush_name):
dir.make_dir(brush_name)
- dir.open(Global.directory_module.xdg_data_home.plus_file("Brushes").plus_file(brush_name))
+ dir = DirAccess.open(Global.home_data_directory.path_join("Brushes").path_join(brush_name))
var random_brushes := []
dir.list_dir_begin()
var curr_file := dir.get_next()
@@ -449,43 +438,43 @@ func add_brush() -> void:
curr_file = dir.get_next()
dir.list_dir_end()
- var file_ext: String = path.get_file().get_extension()
- var index: int = random_brushes.size() + 1
+ var file_ext := path.get_file().get_extension()
+ var index := random_brushes.size() + 1
var file_name = "~" + brush_name + str(index) + "." + file_ext
- var location := "Brushes".plus_file(brush_name).plus_file(file_name)
- dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location))
+ var location := "Brushes".path_join(brush_name).path_join(file_name)
+ dir.copy(path, Global.home_data_directory.path_join(location))
-# Checks if the file already exists
-# If it does, add a number to its name, for example
-# "Brush_Name" will become "Brush_Name (2)", "Brush_Name (3)", etc.
-func file_name_replace(name: String, folder: String) -> String:
+## Checks if the file already exists
+## If it does, add a number to its name, for example
+## "Brush_Name" will become "Brush_Name (2)", "Brush_Name (3)", etc.
+func file_name_replace(file_name: String, folder: String) -> String:
var i := 1
- var file_ext = name.get_extension()
- var temp_name := name
- var dir := Directory.new()
- dir.open(Global.directory_module.xdg_data_home.plus_file(folder))
+ var file_ext := file_name.get_extension()
+ var temp_name := file_name
+ var dir := DirAccess.open(Global.home_data_directory.path_join(folder))
while dir.file_exists(temp_name):
i += 1
- temp_name = name.get_basename() + " (%s)" % i
+ temp_name = file_name.get_basename() + " (%s)" % i
temp_name += "." + file_ext
- name = temp_name
- return name
-
-
-func _on_PreviewDialog_item_rect_changed() -> void:
- update()
+ file_name = temp_name
+ return file_name
-func _draw() -> void:
- $"%SmartSlice".show_preview([])
+func _call_queue_redraw() -> void:
+ var empty_array: Array[Rect2i] = []
+ $"%SmartSlice".show_preview(empty_array)
$"%RowColumnLines".show_preview(1, 1)
if (
current_import_option == ImageImportOptions.SPRITESHEET_TAB
or current_import_option == ImageImportOptions.SPRITESHEET_LAYER
):
if smart_slice:
- if "rects" in sliced_rects.keys():
- $"%SmartSlice".show_preview(sliced_rects["rects"])
+ if is_instance_valid(sliced_rects) and not sliced_rects.rects.is_empty():
+ $"%SmartSlice".show_preview(sliced_rects.rects)
else:
$"%RowColumnLines".show_preview(spritesheet_vertical, spritesheet_horizontal)
+
+
+func _on_size_changed() -> void:
+ _call_queue_redraw()
diff --git a/src/UI/Dialogs/PreviewDialog.tscn b/src/UI/Dialogs/PreviewDialog.tscn
index 2f900ea16d9..6c2979960f0 100644
--- a/src/UI/Dialogs/PreviewDialog.tscn
+++ b/src/UI/Dialogs/PreviewDialog.tscn
@@ -1,265 +1,219 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://nba3nryom3ud"]
-[ext_resource path="res://src/UI/Dialogs/PreviewDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd" type="Script" id=3]
-[ext_resource path="res://src/UI/Dialogs/HelperScripts/RowColumnLines.gd" type="Script" id=4]
+[ext_resource type="Script" path="res://src/UI/Dialogs/PreviewDialog.gd" id="1"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/HelperScripts/RowColumnLines.gd" id="2_fni44"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd" id="3_lsglt"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4_e0gk1"]
[node name="PreviewDialog" type="ConfirmationDialog"]
-margin_right = 629.0
-margin_bottom = 513.0
-rect_min_size = Vector2( 550, 70 )
-popup_exclusive = true
-window_title = "Import Options"
-resizable = true
-script = ExtResource( 1 )
+size = Vector2i(316, 417)
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
-
-[node name="CenterContainer" type="AspectRatioContainer" parent="VBoxContainer"]
-margin_right = 613.0
-margin_bottom = 395.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -49.0
+
+[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
+layout_mode = 2
size_flags_vertical = 3
-[node name="TextureRect" type="TextureRect" parent="VBoxContainer/CenterContainer"]
-margin_left = 109.0
-margin_right = 504.0
-margin_bottom = 395.0
-rect_min_size = Vector2( 300, 300 )
-expand = true
-stretch_mode = 6
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="RowColumnLines" type="Control" parent="VBoxContainer/CenterContainer/TextureRect"]
+[node name="TextureRect" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"]
+custom_minimum_size = Vector2(300, 300)
+layout_mode = 2
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RowColumnLines" type="Control" parent="VBoxContainer/AspectRatioContainer/TextureRect"]
unique_name_in_owner = true
-script = ExtResource( 4 )
+anchors_preset = 0
+offset_right = 40.0
+offset_bottom = 40.0
+script = ExtResource("2_fni44")
-[node name="SmartSlice" type="Control" parent="VBoxContainer/CenterContainer/TextureRect"]
+[node name="SmartSlice" type="Control" parent="VBoxContainer/AspectRatioContainer/TextureRect"]
unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-script = ExtResource( 3 )
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("3_lsglt")
[node name="ApplyAll" type="CheckBox" parent="VBoxContainer"]
visible = false
-margin_top = 304.0
-margin_right = 534.0
-margin_bottom = 324.0
+layout_mode = 2
text = "Apply to all"
[node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 399.0
-margin_right = 613.0
-margin_bottom = 413.0
-custom_constants/separation = 32
+layout_mode = 2
+theme_override_constants/separation = 32
[node name="ImageSizeLabel" type="Label" parent="VBoxContainer/SizeContainer"]
-margin_right = 118.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Image Size: 64ร64"
[node name="FrameSizeLabel" type="Label" parent="VBoxContainer/SizeContainer"]
visible = false
-margin_left = 149.0
-margin_right = 266.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Frame size: 64ร64"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 417.0
-margin_right = 613.0
-margin_bottom = 469.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"]
-margin_right = 66.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_vertical = 0
text = "Import as:"
[node name="ImportOption" type="OptionButton" parent="VBoxContainer/HBoxContainer"]
-margin_left = 70.0
-margin_right = 151.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_vertical = 0
-text = "New tab"
+mouse_default_cursor_shape = 2
[node name="SpritesheetTabOptions" type="GridContainer" parent="VBoxContainer/HBoxContainer"]
-margin_left = 155.0
-margin_right = 613.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 380, 0 )
+visible = false
+layout_mode = 2
size_flags_horizontal = 3
[node name="Manual" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"]
-margin_right = 378.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"]
-margin_top = 5.0
-margin_right = 118.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Horizontal frames:"
[node name="HorizontalFrames" type="SpinBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"]
-margin_left = 122.0
-margin_right = 196.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 1.0
value = 1.0
[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"]
-margin_left = 200.0
-margin_top = 5.0
-margin_right = 300.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Vertical frames:"
[node name="VerticalFrames" type="SpinBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"]
-margin_left = 304.0
-margin_right = 378.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 1.0
value = 1.0
-[node name="Smart" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"]
+[node name="SmartOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"]
+unique_name_in_owner = true
visible = false
-margin_top = 28.0
-margin_right = 458.0
-margin_bottom = 52.0
+layout_mode = 2
size_flags_horizontal = 3
-[node name="Threshold" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart" instance=ExtResource( 2 )]
-margin_right = 195.0
-hint_tooltip = "Images that have any one side smaller than this value will cross the threshold"
-min_value = 1.0
+[node name="Threshold" type="TextureProgressBar" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+tooltip_text = "Images that have any one side smaller than this value will cross the threshold"
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 10.0
allow_greater = true
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("4_e0gk1")
prefix = "Threshold:"
suffix = "px"
-[node name="MergeDist" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart" instance=ExtResource( 2 )]
-margin_left = 199.0
-margin_right = 394.0
-hint_tooltip = "Images which crossed the threshold will get merged into a larger image, if they are within this distance"
+[node name="MergeDist" type="TextureProgressBar" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions"]
+layout_mode = 2
+size_flags_horizontal = 3
+tooltip_text = "Images which crossed the threshold will get merged into a larger image, if they are within this distance"
+focus_mode = 2
+theme_type_variation = &"ValueSlider"
value = 3.0
+nine_patch_stretch = true
+stretch_margin_left = 3
+stretch_margin_top = 3
+stretch_margin_right = 3
+stretch_margin_bottom = 3
+script = ExtResource("4_e0gk1")
prefix = "Merge distance:"
suffix = "px"
-[node name="Slice" type="Button" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart"]
-margin_left = 398.0
-margin_right = 458.0
-margin_bottom = 24.0
+[node name="Slice" type="Button" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions"]
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Refresh"
-[node name="SmartSlice" type="CheckBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"]
-margin_top = 28.0
-margin_right = 378.0
-margin_bottom = 52.0
+[node name="SmartSliceButton" type="CheckBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"]
+unique_name_in_owner = true
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Smart Slice"
[node name="SpritesheetLayerOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
visible = false
-margin_left = 155.0
-margin_right = 307.0
-margin_bottom = 24.0
-size_flags_vertical = 0
+layout_mode = 2
[node name="Label3" type="Label" parent="VBoxContainer/HBoxContainer/SpritesheetLayerOptions"]
-margin_top = 5.0
-margin_right = 74.0
-margin_bottom = 19.0
+layout_mode = 2
+size_flags_vertical = 0
text = "Start frame:"
[node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/SpritesheetLayerOptions"]
-margin_left = 78.0
-margin_right = 152.0
-margin_bottom = 24.0
+layout_mode = 2
+size_flags_vertical = 0
min_value = 1.0
value = 1.0
[node name="NewFrameOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
visible = false
-margin_left = 155.0
-margin_right = 286.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewFrameOptions"]
-margin_top = 5.0
-margin_right = 53.0
-margin_bottom = 19.0
+layout_mode = 2
text = "At layer:"
[node name="AtLayerOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/NewFrameOptions"]
-margin_left = 57.0
-margin_right = 86.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-align = 2
[node name="ReplaceCelOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
visible = false
-margin_left = 155.0
-margin_right = 427.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"]
-margin_top = 5.0
-margin_right = 53.0
-margin_bottom = 19.0
+layout_mode = 2
text = "At layer:"
[node name="AtLayerOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"]
-margin_left = 57.0
-margin_right = 86.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-align = 2
[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"]
-margin_left = 135.0
-margin_top = 5.0
-margin_right = 194.0
-margin_bottom = 19.0
+layout_mode = 2
text = "At frame:"
[node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"]
-margin_left = 198.0
-margin_right = 272.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 1.0
-max_value = 0.0
+max_value = 1.0
value = 1.0
[node name="NewLayerOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
visible = false
-margin_left = 155.0
-margin_right = 292.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewLayerOptions"]
-margin_top = 5.0
-margin_right = 59.0
-margin_bottom = 19.0
+layout_mode = 2
text = "At frame:"
[node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/NewLayerOptions"]
-margin_left = 63.0
-margin_right = 137.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 1.0
max_value = 1.0
@@ -267,52 +221,45 @@ value = 1.0
[node name="NewBrushOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
visible = false
-margin_left = 155.0
-margin_right = 324.0
-margin_bottom = 20.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewBrushOptions"]
-margin_top = 3.0
-margin_right = 73.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Brush type:"
[node name="BrushTypeOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/NewBrushOptions"]
-margin_left = 77.0
-margin_right = 169.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "File brush"
-items = [ "File brush", null, false, 0, null, "Project brush", null, false, 1, null, "Random brush", null, false, 2, null ]
+item_count = 3
selected = 0
+popup/item_0/text = "File brush"
+popup/item_0/id = 0
+popup/item_1/text = "Project brush"
+popup/item_1/id = 1
+popup/item_2/text = "Random brush"
+popup/item_2/id = 2
[node name="BrushName" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/NewBrushOptions"]
visible = false
-margin_left = 173.0
-margin_right = 316.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewBrushOptions/BrushName"]
-margin_top = 5.0
-margin_right = 81.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Brush name:"
[node name="BrushNameLineEdit" type="LineEdit" parent="VBoxContainer/HBoxContainer/NewBrushOptions/BrushName"]
-margin_left = 85.0
-margin_right = 143.0
-margin_bottom = 24.0
+layout_mode = 2
-[connection signal="about_to_show" from="." to="." method="_on_PreviewDialog_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_PreviewDialog_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_PreviewDialog_confirmed"]
-[connection signal="item_rect_changed" from="." to="." method="_on_PreviewDialog_item_rect_changed"]
-[connection signal="popup_hide" from="." to="." method="_on_PreviewDialog_popup_hide"]
+[connection signal="size_changed" from="." to="." method="_on_size_changed"]
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="toggled" from="VBoxContainer/ApplyAll" to="." method="_on_ApplyAll_toggled"]
[connection signal="item_selected" from="VBoxContainer/HBoxContainer/ImportOption" to="." method="_on_ImportOption_item_selected"]
[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual/HorizontalFrames" to="." method="_on_HorizontalFrames_value_changed"]
[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual/VerticalFrames" to="." method="_on_VerticalFrames_value_changed"]
-[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/Threshold" to="." method="_on_Threshold_value_changed"]
-[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/MergeDist" to="." method="_on_MergeDist_value_changed"]
-[connection signal="pressed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/Slice" to="." method="_on_Slice_pressed"]
-[connection signal="toggled" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartSlice" to="." method="_on_SmartSlice_toggled"]
+[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions/Threshold" to="." method="_on_threshold_value_changed"]
+[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions/MergeDist" to="." method="_on_merge_dist_value_changed"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions/Slice" to="." method="_on_slice_pressed"]
+[connection signal="toggled" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartSliceButton" to="." method="_on_smart_slice_toggled"]
[connection signal="item_selected" from="VBoxContainer/HBoxContainer/NewBrushOptions/BrushTypeOption" to="." method="_on_BrushTypeOption_item_selected"]
diff --git a/src/UI/Dialogs/SaveSprite.tscn b/src/UI/Dialogs/SaveSprite.tscn
index 7e8486ae5c6..a50dbeb5d84 100644
--- a/src/UI/Dialogs/SaveSprite.tscn
+++ b/src/UI/Dialogs/SaveSprite.tscn
@@ -1,17 +1,7 @@
-[gd_scene format=2]
+[gd_scene format=3 uid="uid://d4euwo633u33b"]
[node name="SaveSprite" type="FileDialog"]
-anchor_left = 0.5
-anchor_top = 0.5
-anchor_right = 0.5
-anchor_bottom = 0.5
-margin_left = -512.0
-margin_top = -300.0
-margin_right = 3.0
-margin_bottom = 48.0
-resizable = true
+size = Vector2i(675, 400)
+exclusive = false
access = 2
-filters = PoolStringArray( "*.pxo ; Pixelorama Project" )
-current_dir = "/Users"
-current_file = "untitled"
-current_path = "/Users/untitled"
+filters = PackedStringArray("*.pxo ; Pixelorama Project")
diff --git a/src/UI/Dialogs/SaveSpriteHTML5.tscn b/src/UI/Dialogs/SaveSpriteHTML5.tscn
index fd97340c49c..da89a9c1503 100644
--- a/src/UI/Dialogs/SaveSpriteHTML5.tscn
+++ b/src/UI/Dialogs/SaveSpriteHTML5.tscn
@@ -1,36 +1,22 @@
-[gd_scene format=2]
+[gd_scene format=3 uid="uid://cltlo2whtiejd"]
[node name="SaveSpriteHTML5" type="ConfirmationDialog"]
-margin_right = 200.0
-margin_bottom = 70.0
+exclusive = false
[node name="FileNameContainer" type="HBoxContainer" parent="."]
+anchors_preset = 10
anchor_right = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = 34.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = 34.0
[node name="FileNameLabel" type="Label" parent="FileNameContainer"]
-margin_top = 6.0
-margin_right = 69.0
-margin_bottom = 20.0
+layout_mode = 2
text = "File Name:"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="FileNameLineEdit" type="LineEdit" parent="FileNameContainer"]
-margin_left = 73.0
-margin_top = 1.0
-margin_right = 184.0
-margin_bottom = 25.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
text = "untitled"
-__meta__ = {
-"_edit_use_anchors_": false
-}
diff --git a/src/UI/Dialogs/SplashDialog.gd b/src/UI/Dialogs/SplashDialog.gd
index 0ab8937f439..015d9ce658b 100644
--- a/src/UI/Dialogs/SplashDialog.gd
+++ b/src/UI/Dialogs/SplashDialog.gd
@@ -5,52 +5,50 @@ var artworks := [
"Roroto Sic",
preload("res://assets/graphics/splash_screen/artworks/roroto.png"),
"https://linktr.ee/Roroto_Sic",
- Color.white
+ Color.WHITE
],
[ # Licensed under CC BY-NC-SA 4.0, https://creativecommons.org/licenses/by-nc-sa/4.0/
"Exuvita",
preload("res://assets/graphics/splash_screen/artworks/exuvita.png"),
"",
- Color.black
+ Color.BLACK
],
[ # Licensed under CC BY-NC-SA 4.0, https://creativecommons.org/licenses/by-nc-sa/4.0/
"Uch",
preload("res://assets/graphics/splash_screen/artworks/uch.png"),
"https://www.instagram.com/vs.pxl/",
- Color.black
+ Color.BLACK
],
[ # Licensed under CC BY-NC-SA 4.0, https://creativecommons.org/licenses/by-nc-sa/4.0/
"Wishdream",
preload("res://assets/graphics/splash_screen/artworks/wishdream.png"),
"https://twitter.com/WishdreamStar",
- Color.black
+ Color.BLACK
],
]
var chosen_artwork: int
-var splash_art_texturerect: TextureRect
-var art_by_label: Button
-
-onready var version_text: TextureRect = find_node("VersionText")
+@onready var art_by_label := %ArtistName as Button
+@onready var splash_art_texturerect := %SplashArt as TextureRect
+@onready var version_text := %VersionText as TextureRect
func _ready() -> void:
- get_ok().visible = false
+ get_ok_button().visible = false
func _on_SplashDialog_about_to_show() -> void:
- splash_art_texturerect = find_node("SplashArt")
- art_by_label = find_node("ArtistName")
- var show_on_startup_button: CheckBox = find_node("ShowOnStartup")
-
+ var show_on_startup_button: CheckBox = find_child("ShowOnStartup")
if Global.config_cache.has_section_key("preferences", "startup"):
- show_on_startup_button.pressed = !Global.config_cache.get_value("preferences", "startup")
- window_title = "Pixelorama" + " " + Global.current_version
+ show_on_startup_button.button_pressed = !Global.config_cache.get_value(
+ "preferences", "startup"
+ )
+ title = "Pixelorama" + " " + Global.current_version
chosen_artwork = randi() % artworks.size()
change_artwork(0)
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
$Contents/ButtonsPatronsLogos/Buttons/OpenLastBtn.visible = false
@@ -63,7 +61,7 @@ func change_artwork(direction: int) -> void:
splash_art_texturerect.texture = artworks[chosen_artwork][1]
art_by_label.text = tr("Art by: %s") % artworks[chosen_artwork][0]
- art_by_label.hint_tooltip = artworks[chosen_artwork][2]
+ art_by_label.tooltip_text = artworks[chosen_artwork][2]
version_text.modulate = artworks[chosen_artwork][3]
diff --git a/src/UI/Dialogs/SplashDialog.tscn b/src/UI/Dialogs/SplashDialog.tscn
index c1a436ad139..3341115a483 100644
--- a/src/UI/Dialogs/SplashDialog.tscn
+++ b/src/UI/Dialogs/SplashDialog.tscn
@@ -1,329 +1,264 @@
-[gd_scene load_steps=14 format=2]
+[gd_scene load_steps=14 format=3 uid="uid://bnpb1aip3wdvw"]
-[ext_resource path="res://src/UI/Dialogs/SplashDialog.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/splash_screen/artworks/wishdream.png" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/timeline/move_arrow.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/icons/icon.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/splash_screen/version.png" type="Texture" id=5]
-[ext_resource path="res://assets/fonts/Roboto-Small.tres" type="DynamicFont" id=7]
-[ext_resource path="res://assets/graphics/splash_screen/discord.png" type="Texture" id=9]
-[ext_resource path="res://assets/graphics/splash_screen/github_32px.png" type="Texture" id=10]
-[ext_resource path="res://assets/graphics/splash_screen/patreon_mark_white.png" type="Texture" id=11]
+[ext_resource type="Script" path="res://src/UI/Dialogs/SplashDialog.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://b5adjms3vxj13" path="res://assets/graphics/splash_screen/artworks/wishdream.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://d1oxrkwndy5fi" path="res://assets/graphics/timeline/move_arrow.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://b47r0c6auaqk6" path="res://assets/graphics/icons/icon.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://dywk5yd41twch" path="res://assets/graphics/splash_screen/version.png" id="5"]
+[ext_resource type="Texture2D" uid="uid://du0tqirgve32c" path="res://assets/graphics/splash_screen/discord.png" id="9"]
+[ext_resource type="Texture2D" uid="uid://bnhuqq1ucdlw2" path="res://assets/graphics/splash_screen/github_32px.png" id="10"]
+[ext_resource type="Texture2D" uid="uid://c587jfnyu84ro" path="res://assets/graphics/splash_screen/patreon_mark_white.png" id="11"]
-[sub_resource type="StyleBoxFlat" id=4]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
+[sub_resource type="StyleBoxFlat" id="2"]
+bg_color = Color(1, 1, 1, 0)
-[sub_resource type="StyleBoxFlat" id=5]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
+[sub_resource type="StyleBoxFlat" id="4"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
-[sub_resource type="StyleBoxFlat" id=2]
-bg_color = Color( 1, 1, 1, 0 )
+[sub_resource type="StyleBoxFlat" id="5"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
-[sub_resource type="StyleBoxFlat" id=3]
-bg_color = Color( 0.6, 0.6, 0.6, 0 )
+[sub_resource type="StyleBoxFlat" id="3"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
+
+[sub_resource type="LabelSettings" id="LabelSettings_32icc"]
+font_size = 12
[node name="SplashDialog" type="AcceptDialog"]
-margin_right = 656.0
-margin_bottom = 611.0
-resizable = true
-script = ExtResource( 1 )
+canvas_item_default_texture_filter = 0
+position = Vector2i(0, 36)
+size = Vector2i(602, 650)
+exclusive = false
+script = ExtResource("1")
[node name="Contents" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
-custom_constants/separation = 8
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -49.0
+theme_override_constants/separation = 8
[node name="SplashArt" type="TextureRect" parent="Contents"]
-margin_right = 640.0
-margin_bottom = 406.0
+unique_name_in_owner = true
+layout_mode = 2
size_flags_vertical = 3
-texture = ExtResource( 2 )
-expand = true
-stretch_mode = 7
+texture = ExtResource("2")
+expand_mode = 1
+stretch_mode = 5
[node name="ChangeArtBtnLeft" type="Button" parent="Contents/SplashArt" groups=["UIButtons"]]
+layout_mode = 0
anchor_top = 0.5
anchor_bottom = 0.5
-margin_left = 5.0
-margin_top = -10.0
-margin_right = 30.0
-margin_bottom = 10.0
+offset_left = 5.0
+offset_top = -10.0
+offset_right = 30.0
+offset_bottom = 10.0
mouse_default_cursor_shape = 2
-custom_styles/hover = SubResource( 4 )
-custom_styles/pressed = SubResource( 5 )
-custom_styles/focus = SubResource( 5 )
-custom_styles/normal = SubResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+theme_override_styles/normal = SubResource("2")
+theme_override_styles/hover = SubResource("4")
+theme_override_styles/pressed = SubResource("5")
+theme_override_styles/focus = SubResource("5")
[node name="TextureRect" type="TextureRect" parent="Contents/SplashArt/ChangeArtBtnLeft"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.0
-margin_top = -7.0
-margin_right = 10.0
-margin_bottom = 7.0
-texture = ExtResource( 3 )
-expand = true
+offset_left = -10.0
+offset_top = -7.0
+offset_right = 10.0
+offset_bottom = 7.0
+texture = ExtResource("3")
+expand_mode = 1
flip_h = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ChangeArtBtnRight" type="Button" parent="Contents/SplashArt" groups=["UIButtons"]]
+layout_mode = 0
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
-margin_left = -30.0
-margin_top = -10.0
-margin_right = -5.0
-margin_bottom = 10.0
+offset_left = -30.0
+offset_top = -10.0
+offset_right = -5.0
+offset_bottom = 10.0
mouse_default_cursor_shape = 2
-custom_styles/hover = SubResource( 5 )
-custom_styles/pressed = SubResource( 5 )
-custom_styles/focus = SubResource( 5 )
-custom_styles/normal = SubResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+theme_override_styles/normal = SubResource("3")
+theme_override_styles/hover = SubResource("5")
+theme_override_styles/pressed = SubResource("5")
+theme_override_styles/focus = SubResource("5")
[node name="TextureRect" type="TextureRect" parent="Contents/SplashArt/ChangeArtBtnRight"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.0
-margin_top = -7.0
-margin_right = 10.0
-margin_bottom = 7.0
-texture = ExtResource( 3 )
-expand = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -10.0
+offset_top = -7.0
+offset_right = 10.0
+offset_bottom = 7.0
+texture = ExtResource("3")
+expand_mode = 1
[node name="Overlay" type="HBoxContainer" parent="Contents/SplashArt"]
-margin_left = 16.0
-margin_top = 16.0
-margin_right = 128.0
-margin_bottom = 40.0
+layout_mode = 0
+offset_left = 16.0
+offset_top = 16.0
+offset_right = 128.0
+offset_bottom = 40.0
[node name="PixeloramaIcon" type="TextureRect" parent="Contents/SplashArt/Overlay"]
-margin_right = 24.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 24, 24 )
+custom_minimum_size = Vector2(24, 24)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 4 )
-expand = true
+texture = ExtResource("4")
+expand_mode = 1
[node name="VersionText" type="TextureRect" parent="Contents/SplashArt/Overlay"]
-margin_left = 28.0
-margin_top = 6.0
-margin_right = 112.0
-margin_bottom = 18.0
-rect_min_size = Vector2( 84, 12 )
+unique_name_in_owner = true
+custom_minimum_size = Vector2(84, 12)
+layout_mode = 2
size_flags_vertical = 4
-texture = ExtResource( 5 )
-expand = true
+texture = ExtResource("5")
+expand_mode = 1
[node name="ArtBy" type="HBoxContainer" parent="Contents"]
-margin_top = 414.0
-margin_right = 640.0
-margin_bottom = 434.0
-grow_horizontal = 0
-custom_constants/separation = 0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="SpacerControl" type="Control" parent="Contents/ArtBy"]
-margin_right = 4.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 4, 0 )
+custom_minimum_size = Vector2(4, 0)
+layout_mode = 2
[node name="ArtistName" type="Button" parent="Contents/ArtBy"]
-margin_left = 4.0
-margin_right = 81.0
-margin_bottom = 20.0
-hint_tooltip = "https://twitter.com/WishdreamStar"
+unique_name_in_owner = true
+layout_mode = 2
+tooltip_text = "https://twitter.com/WishdreamStar"
mouse_default_cursor_shape = 2
text = "Art by: %s"
flat = true
[node name="ButtonsPatronsLogos" type="HBoxContainer" parent="Contents"]
-margin_top = 442.0
-margin_right = 640.0
-margin_bottom = 546.0
+layout_mode = 2
[node name="SpacerControl" type="Control" parent="Contents/ButtonsPatronsLogos"]
-margin_right = 4.0
-margin_bottom = 104.0
-rect_min_size = Vector2( 4, 0 )
+custom_minimum_size = Vector2(4, 0)
+layout_mode = 2
[node name="Buttons" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos"]
-margin_left = 8.0
-margin_right = 298.0
-margin_bottom = 80.0
-rect_min_size = Vector2( 290, 0 )
+custom_minimum_size = Vector2(290, 0)
+layout_mode = 2
size_flags_vertical = 0
-custom_constants/separation = 10
+theme_override_constants/separation = 10
[node name="NewBtn" type="Button" parent="Contents/ButtonsPatronsLogos/Buttons"]
-margin_right = 290.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "New"
[node name="OpenBtn" type="Button" parent="Contents/ButtonsPatronsLogos/Buttons"]
-margin_top = 30.0
-margin_right = 290.0
-margin_bottom = 50.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Open"
[node name="OpenLastBtn" type="Button" parent="Contents/ButtonsPatronsLogos/Buttons"]
-margin_top = 60.0
-margin_right = 290.0
-margin_bottom = 80.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Open Last Project"
[node name="Info" type="HBoxContainer" parent="Contents/ButtonsPatronsLogos"]
-margin_left = 302.0
-margin_right = 640.0
-margin_bottom = 104.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="SpacerControl" type="Control" parent="Contents/ButtonsPatronsLogos/Info"]
-margin_right = 6.0
-margin_bottom = 104.0
-rect_min_size = Vector2( 6, 0 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+custom_minimum_size = Vector2(6, 0)
+layout_mode = 2
[node name="PatronContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"]
-margin_left = 10.0
-margin_right = 294.0
-margin_bottom = 104.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PatronsLabel" type="Label" parent="Contents/ButtonsPatronsLogos/Info/PatronContainer"]
-margin_right = 284.0
-margin_bottom = 14.0
-rect_min_size = Vector2( 230, 0 )
+custom_minimum_size = Vector2(230, 0)
+layout_mode = 2
size_flags_vertical = 8
text = "Patrons:"
-autowrap = true
[node name="PatronsLabel2" type="Label" parent="Contents/ButtonsPatronsLogos/Info/PatronContainer"]
-margin_top = 18.0
-margin_right = 284.0
-margin_bottom = 100.0
-rect_min_size = Vector2( 230, 0 )
+custom_minimum_size = Vector2(230, 0)
+layout_mode = 2
size_flags_vertical = 8
text = "ShikadiGum
Hugo Locurcio
Sean Allen
Tassos Kyriakopoulos
David Snopek"
-autowrap = true
[node name="VBoxContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"]
-margin_left = 298.0
-margin_right = 330.0
-margin_bottom = 104.0
+layout_mode = 2
size_flags_vertical = 3
-custom_constants/separation = 5
+theme_override_constants/separation = 5
alignment = 2
[node name="Branding" type="HBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer"]
-margin_right = 32.0
-margin_bottom = 104.0
+layout_mode = 2
size_flags_vertical = 3
alignment = 2
[node name="Links" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding"]
-margin_right = 32.0
-margin_bottom = 104.0
+layout_mode = 2
[node name="GithubButton" type="TextureButton" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links"]
-margin_right = 32.0
-margin_bottom = 32.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-texture_normal = ExtResource( 10 )
+texture_normal = ExtResource("10")
[node name="DiscordButton" type="TextureButton" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links"]
-margin_top = 36.0
-margin_right = 32.0
-margin_bottom = 68.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-texture_normal = ExtResource( 9 )
+texture_normal = ExtResource("9")
[node name="PatreonButton" type="TextureButton" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links"]
-margin_top = 72.0
-margin_right = 32.0
-margin_bottom = 104.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-texture_normal = ExtResource( 11 )
+texture_normal = ExtResource("11")
[node name="EmptySpacer" type="Control" parent="Contents/ButtonsPatronsLogos/Info"]
-margin_left = 334.0
-margin_right = 338.0
-margin_bottom = 104.0
-rect_min_size = Vector2( 4, 0 )
+custom_minimum_size = Vector2(4, 0)
+layout_mode = 2
[node name="CopyrightLabel" type="Label" parent="Contents"]
-margin_top = 554.0
-margin_right = 640.0
-margin_bottom = 567.0
+layout_mode = 2
size_flags_horizontal = 3
-custom_fonts/font = ExtResource( 7 )
text = "ยฉ2019-present by Orama Interactive and contributors"
-align = 1
+label_settings = SubResource("LabelSettings_32icc")
[node name="HBoxContainer" type="HBoxContainer" parent="Contents/CopyrightLabel"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_top = -6.0
-margin_right = -2.0
-margin_bottom = 5.0
+offset_top = -6.0
+offset_right = -2.0
+offset_bottom = 5.0
size_flags_vertical = 0
-custom_constants/separation = 0
+theme_override_constants/separation = 0
alignment = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ShowOnStartup" type="CheckBox" parent="Contents/CopyrightLabel/HBoxContainer"]
-margin_left = 533.0
-margin_right = 638.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_vertical = 0
-custom_fonts/font = ExtResource( 7 )
+mouse_default_cursor_shape = 2
text = "Don't show again"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-[connection signal="about_to_show" from="." to="." method="_on_SplashDialog_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_SplashDialog_about_to_show"]
[connection signal="pressed" from="Contents/SplashArt/ChangeArtBtnLeft" to="." method="_on_ChangeArtBtnLeft_pressed"]
[connection signal="pressed" from="Contents/SplashArt/ChangeArtBtnRight" to="." method="_on_ChangeArtBtnRight_pressed"]
[connection signal="pressed" from="Contents/ArtBy/ArtistName" to="." method="_on_ArtCredits_pressed"]
diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.gd b/src/UI/Dialogs/TileModeOffsetsDialog.gd
index 9e5afe9def0..70df4b5ebe9 100644
--- a/src/UI/Dialogs/TileModeOffsetsDialog.gd
+++ b/src/UI/Dialogs/TileModeOffsetsDialog.gd
@@ -1,16 +1,17 @@
extends ConfirmationDialog
-onready var x_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisX
-onready var x_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisY
-onready var y_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisX
-onready var y_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisY
-onready var preview_rect: Control = $VBoxContainer/AspectRatioContainer/Preview
-onready var tile_mode: Node2D = $VBoxContainer/AspectRatioContainer/Preview/TileMode
+@onready var x_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisX
+@onready var x_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisY
+@onready var y_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisX
+@onready var y_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisY
+@onready var preview_rect: Control = $VBoxContainer/AspectRatioContainer/Preview
+@onready var tile_mode: Node2D = $VBoxContainer/AspectRatioContainer/Preview/TileMode
func _ready() -> void:
- Global.connect("cel_changed", self, "change_mask")
- yield(get_tree(), "idle_frame")
+ Global.project_changed.connect(change_mask)
+ Global.cel_changed.connect(change_mask)
+ await get_tree().process_frame
change_mask()
@@ -58,7 +59,7 @@ func _show_options():
func _on_TileModeOffsetsDialog_confirmed() -> void:
Global.current_project.tiles.x_basis = tile_mode.tiles.x_basis
Global.current_project.tiles.y_basis = tile_mode.tiles.y_basis
- Global.canvas.tile_mode.update()
+ Global.canvas.tile_mode.queue_redraw()
Global.transparent_checker.update_rect()
@@ -85,51 +86,49 @@ func _on_YBasisY_value_changed(value: int) -> void:
func update_preview() -> void:
var bounding_rect: Rect2 = tile_mode.tiles.get_bounding_rect()
var offset := -bounding_rect.position
- var axis_scale := preview_rect.rect_size / bounding_rect.size
- var min_scale: Vector2 = preview_rect.rect_size / (tile_mode.tiles.tile_size * 3.0)
+ var axis_scale := preview_rect.size / bounding_rect.size
+ var min_scale: Vector2 = preview_rect.size / (tile_mode.tiles.tile_size * 3.0)
var scale: float = [axis_scale.x, axis_scale.y, min_scale.x, min_scale.y].min()
var t := Transform2D.IDENTITY.translated(offset).scaled(Vector2(scale, scale))
- var transformed_bounding_rect: Rect2 = t.xform(bounding_rect)
- var centering_offset := (preview_rect.rect_size - transformed_bounding_rect.size) / 2.0
+ var transformed_bounding_rect: Rect2 = t * (bounding_rect)
+ var centering_offset := (preview_rect.size - transformed_bounding_rect.size) / 2.0
t = t.translated(centering_offset / scale)
tile_mode.transform = t
- tile_mode.update()
- preview_rect.get_node("TransparentChecker").rect_size = preview_rect.rect_size
+ tile_mode.queue_redraw()
+ preview_rect.get_node("TransparentChecker").size = preview_rect.size
-func _on_TileModeOffsetsDialog_popup_hide() -> void:
+func _on_TileModeOffsetsDialog_visibility_changed() -> void:
Global.dialog_open(false)
-func _on_TileModeOffsetsDialog_item_rect_changed():
+func _on_TileModeOffsetsDialog_size_changed():
if tile_mode:
update_preview()
func _on_Reset_pressed():
- var size = Global.current_project.size
- tile_mode.tiles.x_basis = Vector2(size.x, 0)
- tile_mode.tiles.y_basis = Vector2(0, size.y)
- x_basis_x_spinbox.value = size.x
+ tile_mode.tiles.x_basis = Vector2i(Global.current_project.size.x, 0)
+ tile_mode.tiles.y_basis = Vector2i(0, Global.current_project.size.y)
+ x_basis_x_spinbox.value = Global.current_project.size.x
x_basis_y_spinbox.value = 0
y_basis_x_spinbox.value = 0
- y_basis_y_spinbox.value = size.y
+ y_basis_y_spinbox.value = Global.current_project.size.y
update_preview()
func change_mask():
if Global.current_project.tiles.mode == Tiles.MODE.NONE:
return
- var frame_idx = Global.current_project.current_frame
- var current_frame = Global.current_project.frames[frame_idx]
- var tiles = Global.current_project.tiles
- var size = tiles.tile_size
- var image := Image.new()
- image.create(size.x, size.y, false, Image.FORMAT_RGBA8)
+ var frame_idx := Global.current_project.current_frame
+ var current_frame := Global.current_project.frames[frame_idx]
+ var tiles := Global.current_project.tiles
+ var tiles_size := tiles.tile_size
+ var image := Image.create(tiles_size.x, tiles_size.y, false, Image.FORMAT_RGBA8)
Export.blend_all_layers(image, current_frame)
if (
- image.get_used_rect().size == Vector2.ZERO
- or not $VBoxContainer/HBoxContainer/Masking.pressed
+ image.get_used_rect().size == Vector2i.ZERO
+ or not $VBoxContainer/HBoxContainer/Masking.button_pressed
):
tiles.reset_mask()
else:
diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.tscn b/src/UI/Dialogs/TileModeOffsetsDialog.tscn
index 391c38a95d9..28b35df837a 100644
--- a/src/UI/Dialogs/TileModeOffsetsDialog.tscn
+++ b/src/UI/Dialogs/TileModeOffsetsDialog.tscn
@@ -1,152 +1,117 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://c0nuukjakmai2"]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Canvas/TileMode.gd" type="Script" id=2]
-[ext_resource path="res://src/UI/Dialogs/TileModeOffsetsDialog.gd" type="Script" id=3]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Canvas/TileMode.gd" id="2"]
+[ext_resource type="Script" path="res://src/UI/Dialogs/TileModeOffsetsDialog.gd" id="3"]
-[sub_resource type="CanvasItemMaterial" id=1]
+[sub_resource type="CanvasItemMaterial" id="1"]
blend_mode = 4
[node name="TileModeOffsetsDialog" type="ConfirmationDialog"]
-margin_right = 301.0
-margin_bottom = 422.0
-rect_min_size = Vector2( 172, 422 )
-window_title = "Tile Mode Offsets"
-resizable = true
-script = ExtResource( 3 )
+canvas_item_default_texture_filter = 0
+title = "Tile Mode Offsets"
+exclusive = false
+script = ExtResource("3")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 293.0
-margin_bottom = 386.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 293.0
+offset_bottom = 386.0
[node name="TileModeOffsets" type="Label" parent="VBoxContainer"]
-margin_right = 285.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Tile Mode Offsets"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 18.0
-margin_right = 285.0
-margin_bottom = 150.0
+layout_mode = 2
[node name="OptionsContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer"]
-margin_right = 137.0
-margin_bottom = 132.0
-custom_constants/vseparation = 4
-custom_constants/hseparation = 2
+layout_mode = 2
+theme_override_constants/h_separation = 2
+theme_override_constants/v_separation = 4
columns = 2
[node name="XBasisXLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_top = 5.0
-margin_right = 61.0
-margin_bottom = 19.0
+layout_mode = 2
text = "X-basis x:"
[node name="XBasisX" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_left = 63.0
-margin_right = 137.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = -16384.0
max_value = 16384.0
suffix = "px"
[node name="XBasisYLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_top = 33.0
-margin_right = 61.0
-margin_bottom = 47.0
+layout_mode = 2
text = "X-basis y:"
[node name="XBasisY" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_left = 63.0
-margin_top = 28.0
-margin_right = 137.0
-margin_bottom = 52.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = -16384.0
max_value = 16384.0
suffix = "px"
[node name="YBasisXLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_top = 61.0
-margin_right = 61.0
-margin_bottom = 75.0
+layout_mode = 2
text = "Y-basis x:"
[node name="YBasisX" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_left = 63.0
-margin_top = 56.0
-margin_right = 137.0
-margin_bottom = 80.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = -16384.0
max_value = 16384.0
suffix = "px"
[node name="YBasisYLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_top = 89.0
-margin_right = 61.0
-margin_bottom = 103.0
+layout_mode = 2
text = "Y-basis y:"
[node name="YBasisY" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_left = 63.0
-margin_top = 84.0
-margin_right = 137.0
-margin_bottom = 108.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = -16384.0
max_value = 16384.0
suffix = "px"
[node name="Reset" type="Button" parent="VBoxContainer/HBoxContainer/OptionsContainer"]
-margin_top = 112.0
-margin_right = 61.0
-margin_bottom = 132.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Reset"
[node name="VSeparator" type="VSeparator" parent="VBoxContainer/HBoxContainer"]
-margin_left = 141.0
-margin_right = 145.0
-margin_bottom = 132.0
+layout_mode = 2
[node name="Masking" type="CheckButton" parent="VBoxContainer/HBoxContainer"]
-margin_left = 149.0
-margin_right = 281.0
-margin_bottom = 40.0
+layout_mode = 2
size_flags_vertical = 0
text = "Masking"
[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"]
-margin_top = 154.0
-margin_right = 285.0
-margin_bottom = 378.0
+layout_mode = 2
size_flags_vertical = 3
[node name="Preview" type="Control" parent="VBoxContainer/AspectRatioContainer"]
-margin_left = 30.5
-margin_right = 254.5
-margin_bottom = 224.0
-rect_min_size = Vector2( 200, 200 )
+custom_minimum_size = Vector2(200, 200)
+layout_mode = 2
[node name="TileMode" type="Node2D" parent="VBoxContainer/AspectRatioContainer/Preview"]
-material = SubResource( 1 )
-script = ExtResource( 2 )
+material = SubResource("1")
+script = ExtResource("2")
-[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 1 )]
+[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("1")]
show_behind_parent = true
+layout_mode = 0
+anchors_preset = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
-[connection signal="about_to_show" from="." to="." method="_on_TileModeOffsetsDialog_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_TileModeOffsetsDialog_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_TileModeOffsetsDialog_confirmed"]
-[connection signal="item_rect_changed" from="." to="." method="_on_TileModeOffsetsDialog_item_rect_changed"]
-[connection signal="popup_hide" from="." to="." method="_on_TileModeOffsetsDialog_popup_hide"]
+[connection signal="size_changed" from="." to="." method="_on_TileModeOffsetsDialog_size_changed"]
+[connection signal="visibility_changed" from="." to="." method="_on_TileModeOffsetsDialog_visibility_changed"]
[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/XBasisX" to="." method="_on_XBasisX_value_changed"]
[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/XBasisY" to="." method="_on_XBasisY_value_changed"]
[connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/YBasisX" to="." method="_on_YBasisX_value_changed"]
diff --git a/src/UI/Dialogs/WindowOpacityDialog.gd b/src/UI/Dialogs/WindowOpacityDialog.gd
index d4be081e3a2..b2d088a1eb9 100644
--- a/src/UI/Dialogs/WindowOpacityDialog.gd
+++ b/src/UI/Dialogs/WindowOpacityDialog.gd
@@ -1,18 +1,22 @@
extends AcceptDialog
-onready var slider: ValueSlider = $VBoxContainer/ValueSlider
-onready var fullscreen_warning: Label = $VBoxContainer/FullscreenWarning
-onready var main_canvas = Global.control.find_node("Main Canvas")
+@onready var slider: ValueSlider = $VBoxContainer/ValueSlider
+@onready var fullscreen_warning: Label = $VBoxContainer/FullscreenWarning
+@onready var main_canvas = Global.control.find_child("Main Canvas")
func _ready() -> void:
- yield(get_tree(), "idle_frame")
- Global.control.ui.connect("sort_children", self, "_recalculate_opacity")
+ await get_tree().process_frame
+ Global.control.ui.sort_children.connect(_recalculate_opacity)
func _on_WindowOpacityDialog_about_to_show() -> void:
- OS.window_per_pixel_transparency_enabled = true
- slider.editable = !OS.window_fullscreen
+ get_tree().root.transparent = true
+ get_tree().root.transparent_bg = true
+ slider.editable = !(
+ (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN)
+ or (get_window().mode == Window.MODE_FULLSCREEN)
+ )
fullscreen_warning.visible = !slider.editable
@@ -21,7 +25,10 @@ func _recalculate_opacity() -> void:
func set_window_opacity(value: float) -> void:
- if OS.window_fullscreen:
+ if (
+ (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN)
+ or (get_window().mode == Window.MODE_FULLSCREEN)
+ ):
value = 100.0
slider.value = value
@@ -36,5 +43,5 @@ func set_window_opacity(value: float) -> void:
Global.transparent_checker.update_transparency(value)
-func _on_WindowOpacityDialog_popup_hide() -> void:
+func _on_visibility_changed() -> void:
Global.dialog_open(false)
diff --git a/src/UI/Dialogs/WindowOpacityDialog.tscn b/src/UI/Dialogs/WindowOpacityDialog.tscn
index ec71804d60e..3599379dcf2 100644
--- a/src/UI/Dialogs/WindowOpacityDialog.tscn
+++ b/src/UI/Dialogs/WindowOpacityDialog.tscn
@@ -1,39 +1,31 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://bcdt0pa7rojy5"]
-[ext_resource path="res://src/UI/Dialogs/WindowOpacityDialog.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2]
+[ext_resource type="Script" path="res://src/UI/Dialogs/WindowOpacityDialog.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="2"]
[node name="WindowOpacityDialog" type="AcceptDialog"]
-margin_right = 204.0
-margin_bottom = 68.0
-rect_min_size = Vector2( 240, 0 )
-window_title = "Window Opacity"
-resizable = true
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+title = "Window Opacity"
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
-[node name="ValueSlider" parent="VBoxContainer" instance=ExtResource( 2 )]
-margin_right = 327.0
-margin_bottom = 24.0
+[node name="ValueSlider" parent="VBoxContainer" instance=ExtResource("2")]
+layout_mode = 2
value = 100.0
[node name="FullscreenWarning" type="Label" parent="VBoxContainer"]
-margin_top = 28.0
-margin_right = 327.0
-margin_bottom = 42.0
-custom_colors/font_color = Color( 1, 0.364706, 0.364706, 1 )
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 0.364706, 0.364706, 1)
text = "Window opacity does not work on fullscreen mode."
-[connection signal="about_to_show" from="." to="." method="_on_WindowOpacityDialog_about_to_show"]
-[connection signal="popup_hide" from="." to="." method="_on_WindowOpacityDialog_popup_hide"]
+[connection signal="about_to_popup" from="." to="." method="_on_WindowOpacityDialog_about_to_show"]
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="value_changed" from="VBoxContainer/ValueSlider" to="." method="set_window_opacity"]
diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.gd b/src/UI/GlobalToolOptions/GlobalToolOptions.gd
index 88ba8b7db88..3d6766122ed 100644
--- a/src/UI/GlobalToolOptions/GlobalToolOptions.gd
+++ b/src/UI/GlobalToolOptions/GlobalToolOptions.gd
@@ -4,56 +4,41 @@ signal dynamics_changed
enum { ALPHA, SIZE }
-var alpha_last_pressed: BaseButton = null
-var size_last_pressed: BaseButton = null
-
-onready var grid_container: GridContainer = find_node("GridContainer")
-onready var horizontal_mirror: BaseButton = grid_container.get_node("Horizontal")
-onready var vertical_mirror: BaseButton = grid_container.get_node("Vertical")
-onready var pixel_perfect: BaseButton = grid_container.get_node("PixelPerfect")
-onready var dynamics: Button = $"%Dynamics"
-
-onready var dynamics_panel: PopupPanel = $DynamicsPanel
-onready var alpha_pressure_button: Button = $"%AlphaPressureButton"
-onready var alpha_velocity_button: Button = $"%AlphaVelocityButton"
-onready var size_pressure_button: Button = $"%SizePressureButton"
-onready var size_velocity_button: Button = $"%SizeVelocityButton"
-onready var pressure_preview: ProgressBar = $"%PressurePreview"
-onready var velocity_preview: ProgressBar = $"%VelocityPreview"
-onready var alpha_group: ButtonGroup = alpha_pressure_button.group
-onready var size_group: ButtonGroup = size_pressure_button.group
+@onready var grid_container: GridContainer = find_child("GridContainer")
+@onready var horizontal_mirror: BaseButton = grid_container.get_node("Horizontal")
+@onready var vertical_mirror: BaseButton = grid_container.get_node("Vertical")
+@onready var pixel_perfect: BaseButton = grid_container.get_node("PixelPerfect")
+@onready var dynamics: Button = $"%Dynamics"
+
+@onready var dynamics_panel: PopupPanel = $DynamicsPanel
+@onready var alpha_pressure_button: Button = $"%AlphaPressureButton"
+@onready var alpha_velocity_button: Button = $"%AlphaVelocityButton"
+@onready var size_pressure_button: Button = $"%SizePressureButton"
+@onready var size_velocity_button: Button = $"%SizeVelocityButton"
+@onready var pressure_preview: ProgressBar = $"%PressurePreview"
+@onready var velocity_preview: ProgressBar = $"%VelocityPreview"
+@onready var alpha_group := alpha_pressure_button.button_group
+@onready var size_group := size_pressure_button.button_group
func _ready() -> void:
# Resize tools panel when window gets resized
- get_tree().get_root().connect("size_changed", self, "_on_resized")
- horizontal_mirror.pressed = Tools.horizontal_mirror
- vertical_mirror.pressed = Tools.vertical_mirror
- pixel_perfect.pressed = Tools.pixel_perfect
-
- alpha_pressure_button.connect(
- "toggled",
- self,
- "_on_Dynamics_toggled",
- [alpha_pressure_button, ALPHA, Tools.Dynamics.PRESSURE]
+ get_tree().get_root().size_changed.connect(_on_resized)
+ horizontal_mirror.button_pressed = Tools.horizontal_mirror
+ vertical_mirror.button_pressed = Tools.vertical_mirror
+ pixel_perfect.button_pressed = Tools.pixel_perfect
+
+ alpha_pressure_button.toggled.connect(
+ _on_Dynamics_toggled.bind(alpha_pressure_button, ALPHA, Tools.Dynamics.PRESSURE)
)
- alpha_velocity_button.connect(
- "toggled",
- self,
- "_on_Dynamics_toggled",
- [alpha_velocity_button, ALPHA, Tools.Dynamics.VELOCITY]
+ alpha_velocity_button.toggled.connect(
+ _on_Dynamics_toggled.bind(alpha_velocity_button, ALPHA, Tools.Dynamics.VELOCITY)
)
- size_pressure_button.connect(
- "toggled",
- self,
- "_on_Dynamics_toggled",
- [size_pressure_button, SIZE, Tools.Dynamics.PRESSURE]
+ size_pressure_button.toggled.connect(
+ _on_Dynamics_toggled.bind(size_pressure_button, SIZE, Tools.Dynamics.PRESSURE)
)
- size_velocity_button.connect(
- "toggled",
- self,
- "_on_Dynamics_toggled",
- [size_velocity_button, SIZE, Tools.Dynamics.VELOCITY]
+ size_velocity_button.toggled.connect(
+ _on_Dynamics_toggled.bind(size_velocity_button, SIZE, Tools.Dynamics.VELOCITY)
)
@@ -62,11 +47,11 @@ func _input(event: InputEvent) -> void:
velocity_preview.value = 0
if event is InputEventMouseMotion:
pressure_preview.value = event.pressure
- velocity_preview.value = event.speed.length() / Tools.mouse_velocity_max
+ velocity_preview.value = event.velocity.length() / Tools.mouse_velocity_max
func _on_resized() -> void:
- var tool_panel_size := rect_size
+ var tool_panel_size := size
var column_n := tool_panel_size.x / 36.5
if column_n < 1:
@@ -79,8 +64,7 @@ func _on_Horizontal_toggled(button_pressed: bool) -> void:
Global.config_cache.set_value("preferences", "horizontal_mirror", button_pressed)
Global.show_y_symmetry_axis = button_pressed
Global.current_project.y_symmetry_axis.visible = (
- Global.show_y_symmetry_axis
- and Global.show_guides
+ Global.show_y_symmetry_axis and Global.show_guides
)
var texture_button: TextureRect = horizontal_mirror.get_node("TextureRect")
@@ -96,8 +80,7 @@ func _on_Vertical_toggled(button_pressed: bool) -> void:
Global.show_x_symmetry_axis = button_pressed
# If the button is not pressed but another button is, keep the symmetry guide visible
Global.current_project.x_symmetry_axis.visible = (
- Global.show_x_symmetry_axis
- and Global.show_guides
+ Global.show_x_symmetry_axis and Global.show_guides
)
var texture_button: TextureRect = vertical_mirror.get_node("TextureRect")
@@ -118,34 +101,15 @@ func _on_PixelPerfect_toggled(button_pressed: bool) -> void:
func _on_Dynamics_pressed() -> void:
- var pos := dynamics.rect_global_position + Vector2(0, 32)
- dynamics_panel.popup(Rect2(pos, dynamics_panel.rect_size))
+ var pos := dynamics.global_position + Vector2(0, 32)
+ dynamics_panel.popup(Rect2(pos, dynamics_panel.size))
func _on_Dynamics_toggled(
button_pressed: bool, button: BaseButton, property: int, dynamic: int
) -> void:
- if button_pressed:
- var last_pressed: BaseButton
- # The button calling this method is the one that was just selected
-# var pressed_button: BaseButton
- match property:
- ALPHA:
- last_pressed = alpha_last_pressed
-# pressed_button = alpha_group.get_pressed_button()
- SIZE:
- last_pressed = size_last_pressed
-# pressed_button = size_group.get_pressed_button()
- if last_pressed == button:
- # The button calling the method was the last one that was selected (we clicked it twice in a row)
- # Toggle it off and set last_pressed to null so we can click it a third time to toggle it back on
- button.pressed = false
- _set_last_pressed_button(property, null)
- # Update the last button pressed if we clicked something different
- else:
- _set_last_pressed_button(property, button)
var final_dynamic := dynamic
- if not button.pressed:
+ if not button.button_pressed:
final_dynamic = Tools.Dynamics.NONE
match property:
ALPHA:
@@ -155,45 +119,37 @@ func _on_Dynamics_toggled(
var texture_button: TextureRect = button.get_node("TextureRect")
var file_name := "check.png"
- if !button.pressed:
+ if !button.button_pressed:
file_name = "uncheck.png"
Global.change_button_texturerect(texture_button, file_name)
- emit_signal("dynamics_changed")
-
-
-func _set_last_pressed_button(prop: int, value: BaseButton) -> void:
- match prop:
- ALPHA:
- alpha_last_pressed = value
- SIZE:
- size_last_pressed = value
+ dynamics_changed.emit()
-func _on_ThresholdPressure_updated(value_1, value_2) -> void:
- Tools.pen_pressure_min = min(value_1, value_2)
- Tools.pen_pressure_max = max(value_1, value_2)
+func _on_ThresholdPressure_updated(value_1: float, value_2: float) -> void:
+ Tools.pen_pressure_min = minf(value_1, value_2)
+ Tools.pen_pressure_max = maxf(value_1, value_2)
-func _on_ThresholdVelocity_updated(value_1, value_2) -> void:
- Tools.mouse_velocity_min_thres = min(value_1, value_2)
- Tools.mouse_velocity_max_thres = max(value_1, value_2)
+func _on_ThresholdVelocity_updated(value_1: float, value_2: float) -> void:
+ Tools.mouse_velocity_min_thres = minf(value_1, value_2)
+ Tools.mouse_velocity_max_thres = maxf(value_1, value_2)
func _on_AlphaMin_value_changed(value: float) -> void:
Tools.alpha_min = value
- emit_signal("dynamics_changed")
+ dynamics_changed.emit()
func _on_AlphaMax_value_changed(value: float) -> void:
Tools.alpha_max = value
- emit_signal("dynamics_changed")
+ dynamics_changed.emit()
func _on_SizeMin_value_changed(value: float) -> void:
Tools.brush_size_min = int(value)
- emit_signal("dynamics_changed")
+ dynamics_changed.emit()
func _on_SizeMax_value_changed(value: float) -> void:
Tools.brush_size_max = int(value)
- emit_signal("dynamics_changed")
+ dynamics_changed.emit()
diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn
index 9f2db69b12b..35a4fb6946d 100644
--- a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn
+++ b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn
@@ -1,296 +1,271 @@
-[gd_scene load_steps=14 format=2]
+[gd_scene load_steps=20 format=3 uid="uid://wo0hqxkst808"]
-[ext_resource path="res://assets/graphics/misc/horizontal_mirror_off.png" type="Texture" id=1]
-[ext_resource path="res://assets/graphics/misc/vertical_mirror_off.png" type="Texture" id=2]
-[ext_resource path="res://src/UI/GlobalToolOptions/GlobalToolOptions.gd" type="Script" id=3]
-[ext_resource path="res://assets/graphics/misc/pixel_perfect_off.png" type="Texture" id=4]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=5]
-[ext_resource path="res://assets/graphics/misc/dynamics.png" type="Texture" id=6]
-[ext_resource path="res://assets/graphics/misc/uncheck.png" type="Texture" id=7]
-[ext_resource path="res://src/UI/Nodes/MaxMinEdit.tscn" type="PackedScene" id=8]
+[ext_resource type="Texture2D" uid="uid://cjrokejjsp5dm" path="res://assets/graphics/misc/horizontal_mirror_off.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://hiduvaa73fr6" path="res://assets/graphics/misc/vertical_mirror_off.png" id="2"]
+[ext_resource type="Script" path="res://src/UI/GlobalToolOptions/GlobalToolOptions.gd" id="3"]
+[ext_resource type="Texture2D" uid="uid://22h12g8p3jtd" path="res://assets/graphics/misc/pixel_perfect_off.png" id="4"]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"]
+[ext_resource type="Texture2D" uid="uid://dg3dumyfj1682" path="res://assets/graphics/misc/dynamics.png" id="6"]
+[ext_resource type="Texture2D" uid="uid://di8au2u87jgv5" path="res://assets/graphics/misc/uncheck.png" id="7"]
+[ext_resource type="PackedScene" uid="uid://bmsc0s03pwji4" path="res://src/UI/Nodes/MaxMinEdit.tscn" id="8"]
-[sub_resource type="ButtonGroup" id=1]
+[sub_resource type="InputEventAction" id="InputEventAction_4k08w"]
+action = &"horizontal_mirror"
-[sub_resource type="ButtonGroup" id=2]
+[sub_resource type="Shortcut" id="Shortcut_eld87"]
+events = [SubResource("InputEventAction_4k08w")]
-[sub_resource type="Gradient" id=3]
+[sub_resource type="InputEventAction" id="InputEventAction_24etr"]
+action = &"vertical_mirror"
+
+[sub_resource type="Shortcut" id="Shortcut_ai7qc"]
+events = [SubResource("InputEventAction_24etr")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_ebgk6"]
+action = &"pixel_perfect"
+
+[sub_resource type="Shortcut" id="Shortcut_vcyug"]
+events = [SubResource("InputEventAction_ebgk6")]
+
+[sub_resource type="ButtonGroup" id="ButtonGroup_ahrcw"]
+allow_unpress = true
+
+[sub_resource type="ButtonGroup" id="ButtonGroup_t01h7"]
+allow_unpress = true
+
+[sub_resource type="Gradient" id="3"]
interpolation_mode = 1
-offsets = PoolRealArray( 0, 0, 1 )
-colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 )
+offsets = PackedFloat32Array(0, 0, 1)
+colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1)
-[sub_resource type="GradientTexture" id=4]
-gradient = SubResource( 3 )
+[sub_resource type="GradientTexture2D" id="4"]
+gradient = SubResource("3")
-[sub_resource type="GradientTexture" id=5]
-gradient = SubResource( 3 )
+[sub_resource type="GradientTexture2D" id="5"]
+gradient = SubResource("3")
[node name="Global Tool Options" type="PanelContainer"]
-margin_left = 1.0
-margin_right = 195.0
-margin_bottom = 50.0
-rect_min_size = Vector2( 0, 36 )
-script = ExtResource( 3 )
+custom_minimum_size = Vector2(0, 36)
+offset_left = 1.0
+offset_right = 195.0
+offset_bottom = 50.0
+script = ExtResource("3")
[node name="ScrollContainer" type="ScrollContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 187.0
-margin_bottom = 43.0
-rect_min_size = Vector2( 36, 36 )
+custom_minimum_size = Vector2(36, 36)
+layout_mode = 2
[node name="CenterContainer" type="CenterContainer" parent="ScrollContainer"]
-margin_right = 180.0
-margin_bottom = 36.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="GridContainer" type="GridContainer" parent="ScrollContainer/CenterContainer"]
-margin_left = 20.0
-margin_top = 2.0
-margin_right = 160.0
-margin_bottom = 34.0
+layout_mode = 2
size_flags_vertical = 0
columns = 4
[node name="Horizontal" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
-margin_right = 32.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Enable horizontal mirrored drawing"
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Enable horizontal mirrored drawing"
mouse_default_cursor_shape = 2
toggle_mode = true
+shortcut = SubResource("Shortcut_eld87")
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.0
-margin_top = -10.5
-margin_right = 10.0
-margin_bottom = 10.5
-texture = ExtResource( 1 )
+offset_left = -10.0
+offset_top = -10.5
+offset_right = 10.0
+offset_bottom = 10.5
+texture = ExtResource("1")
[node name="Vertical" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
-margin_left = 36.0
-margin_right = 68.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Enable vertical mirrored drawing"
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Enable vertical mirrored drawing"
mouse_default_cursor_shape = 2
toggle_mode = true
+shortcut = SubResource("Shortcut_ai7qc")
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Vertical"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.0
-margin_top = -10.0
-margin_right = 10.0
-margin_bottom = 10.0
-texture = ExtResource( 2 )
+offset_left = -10.0
+offset_top = -10.0
+offset_right = 10.0
+offset_bottom = 10.0
+texture = ExtResource("2")
[node name="PixelPerfect" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
-margin_left = 72.0
-margin_right = 104.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Pixel Perfect
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Pixel Perfect
Makes lines smooth by removing the extra pixels on the edges"
mouse_default_cursor_shape = 2
toggle_mode = true
+shortcut = SubResource("Shortcut_vcyug")
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/PixelPerfect"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -10.0
-margin_right = 11.0
-margin_bottom = 10.0
-texture = ExtResource( 4 )
+offset_left = -11.0
+offset_top = -10.0
+offset_right = 11.0
+offset_bottom = 10.0
+texture = ExtResource("4")
[node name="Dynamics" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 108.0
-margin_right = 140.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Dynamics"
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Dynamics"
mouse_default_cursor_shape = 2
-__meta__ = {
-"_editor_description_": ""
-}
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Dynamics"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -10.0
-margin_right = 11.0
-margin_bottom = 10.0
-texture = ExtResource( 6 )
+offset_left = -11.0
+offset_top = -10.0
+offset_right = 11.0
+offset_bottom = 10.0
+texture = ExtResource("6")
[node name="DynamicsPanel" type="PopupPanel" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 267.0
-margin_bottom = 267.0
-rect_min_size = Vector2( 260, 260 )
+canvas_item_default_texture_filter = 0
[node name="VBoxContainer" type="VBoxContainer" parent="DynamicsPanel"]
-margin_left = 4.0
-margin_top = 4.0
-margin_right = 256.0
-margin_bottom = 256.0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 186.0
+offset_bottom = 288.0
[node name="DynamicsOptions" type="GridContainer" parent="DynamicsPanel/VBoxContainer"]
-margin_right = 252.0
-margin_bottom = 68.0
+layout_mode = 2
columns = 3
[node name="Control" type="Control" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"]
-margin_right = 82.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 20 )
+custom_minimum_size = Vector2(20, 20)
+layout_mode = 2
size_flags_horizontal = 3
[node name="PressureLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"]
-margin_left = 86.0
-margin_top = 3.0
-margin_right = 167.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Pressure"
-align = 1
[node name="VelocityLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"]
-margin_left = 171.0
-margin_top = 3.0
-margin_right = 252.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Velocity"
-align = 1
[node name="AlphaLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"]
-margin_top = 27.0
-margin_right = 82.0
-margin_bottom = 41.0
+layout_mode = 2
text = "Alpha"
[node name="AlphaPressureButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 86.0
-margin_top = 24.0
-margin_right = 167.0
-margin_bottom = 44.0
+layout_mode = 2
mouse_default_cursor_shape = 2
toggle_mode = true
-group = SubResource( 1 )
-icon_align = 1
+button_group = SubResource("ButtonGroup_ahrcw")
+icon_alignment = 1
expand_icon = true
[node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/AlphaPressureButton"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-texture = ExtResource( 7 )
-expand = true
+texture = ExtResource("7")
+expand_mode = 1
[node name="AlphaVelocityButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 171.0
-margin_top = 24.0
-margin_right = 252.0
-margin_bottom = 44.0
+layout_mode = 2
mouse_default_cursor_shape = 2
toggle_mode = true
-group = SubResource( 1 )
+button_group = SubResource("ButtonGroup_ahrcw")
[node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/AlphaVelocityButton"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-texture = ExtResource( 7 )
-expand = true
+texture = ExtResource("7")
+expand_mode = 1
[node name="SizeLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"]
-margin_top = 51.0
-margin_right = 82.0
-margin_bottom = 65.0
+layout_mode = 2
text = "Size"
[node name="SizePressureButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 86.0
-margin_top = 48.0
-margin_right = 167.0
-margin_bottom = 68.0
+layout_mode = 2
mouse_default_cursor_shape = 2
toggle_mode = true
-group = SubResource( 2 )
+button_group = SubResource("ButtonGroup_t01h7")
[node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/SizePressureButton"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-texture = ExtResource( 7 )
-expand = true
+texture = ExtResource("7")
+expand_mode = 1
[node name="SizeVelocityButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 171.0
-margin_top = 48.0
-margin_right = 252.0
-margin_bottom = 68.0
+layout_mode = 2
mouse_default_cursor_shape = 2
toggle_mode = true
-group = SubResource( 2 )
+button_group = SubResource("ButtonGroup_t01h7")
[node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/SizeVelocityButton"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-texture = ExtResource( 7 )
-expand = true
+texture = ExtResource("7")
+expand_mode = 1
[node name="LimitsHeader" type="HBoxContainer" parent="DynamicsPanel/VBoxContainer"]
-margin_top = 72.0
-margin_right = 252.0
-margin_bottom = 86.0
+layout_mode = 2
[node name="Label" type="Label" parent="DynamicsPanel/VBoxContainer/LimitsHeader"]
-margin_right = 76.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Value limits"
[node name="HSeparator" type="HSeparator" parent="DynamicsPanel/VBoxContainer/LimitsHeader"]
-margin_left = 80.0
-margin_right = 252.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="LimitContainer" type="GridContainer" parent="DynamicsPanel/VBoxContainer"]
-margin_top = 90.0
-margin_right = 252.0
-margin_bottom = 122.0
+layout_mode = 2
columns = 3
[node name="AlphaLabel" type="Label" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
-margin_right = 82.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Alpha"
-[node name="AlphaMin" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
-margin_left = 86.0
-margin_right = 167.0
-margin_bottom = 14.0
-mouse_default_cursor_shape = 2
+[node name="AlphaMin" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 1.0
step = 0.01
value = 0.1
@@ -299,17 +274,16 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
prefix = "Start"
snap_step = 0.1
-[node name="AlphaMax" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
-margin_left = 171.0
-margin_right = 252.0
-margin_bottom = 14.0
-mouse_default_cursor_shape = 2
+[node name="AlphaMax" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 1.0
step = 0.01
value = 1.0
@@ -318,25 +292,21 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
prefix = "End"
snap_step = 0.1
[node name="SizeLabel" type="Label" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
-margin_top = 18.0
-margin_right = 82.0
-margin_bottom = 32.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Size"
-[node name="SizeMin" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
-margin_left = 86.0
-margin_top = 18.0
-margin_right = 167.0
-margin_bottom = 32.0
-mouse_default_cursor_shape = 2
+[node name="SizeMin" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 25.0
value = 1.0
allow_greater = true
@@ -345,17 +315,15 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
prefix = "Start"
-[node name="SizeMax" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
-margin_left = 171.0
-margin_top = 18.0
-margin_right = 252.0
-margin_bottom = 32.0
-mouse_default_cursor_shape = 2
+[node name="SizeMax" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"]
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
max_value = 25.0
value = 4.0
allow_greater = true
@@ -364,92 +332,80 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 5 )
+script = ExtResource("5")
prefix = "End"
[node name="ThresholdsHeader" type="HBoxContainer" parent="DynamicsPanel/VBoxContainer"]
-margin_top = 126.0
-margin_right = 252.0
-margin_bottom = 140.0
+layout_mode = 2
[node name="Label" type="Label" parent="DynamicsPanel/VBoxContainer/ThresholdsHeader"]
-margin_right = 70.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Thresholds"
[node name="HSeparator" type="HSeparator" parent="DynamicsPanel/VBoxContainer/ThresholdsHeader"]
-margin_left = 74.0
-margin_right = 252.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ThresholdContainer" type="GridContainer" parent="DynamicsPanel/VBoxContainer"]
-margin_top = 144.0
-margin_right = 252.0
-margin_bottom = 208.0
+layout_mode = 2
columns = 2
[node name="ThresholdPressureLabel" type="Label" parent="DynamicsPanel/VBoxContainer/ThresholdContainer"]
-margin_top = 8.0
-margin_right = 56.0
-margin_bottom = 22.0
+layout_mode = 2
text = "Pressure"
-[node name="ThresholdPressure" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource( 8 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 60.0
-margin_right = 252.0
-margin_bottom = 30.0
+[node name="ThresholdPressure" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource("8")]
+layout_mode = 2
size_flags_horizontal = 3
start = 0.2
end = 0.8
[node name="TextureRect" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure" index="0"]
-margin_right = 192.0
-margin_bottom = 30.0
-texture = SubResource( 4 )
+texture = SubResource("4")
[node name="PressurePreview" type="ProgressBar" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure/TextureRect" index="0"]
unique_name_in_owner = true
-modulate = Color( 1, 1, 1, 0.294118 )
+modulate = Color(1, 1, 1, 0.294118)
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
max_value = 1.0
step = 0.001
value = 0.497
-percent_visible = false
+
+[node name="Value" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure/TextureRect" index="1"]
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_right = 1.0
+offset_bottom = 23.0
[node name="ThresholdVelocityLabel" type="Label" parent="DynamicsPanel/VBoxContainer/ThresholdContainer"]
-margin_top = 42.0
-margin_right = 56.0
-margin_bottom = 56.0
+layout_mode = 2
text = "Velocity"
-[node name="ThresholdVelocity" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource( 8 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 60.0
-margin_top = 34.0
-margin_right = 252.0
-margin_bottom = 64.0
+[node name="ThresholdVelocity" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource("8")]
+layout_mode = 2
start = 0.2
end = 0.8
[node name="TextureRect" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity" index="0"]
-margin_right = 192.0
-margin_bottom = 30.0
-texture = SubResource( 5 )
+texture = SubResource("5")
[node name="VelocityPreview" type="ProgressBar" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity/TextureRect" index="0"]
unique_name_in_owner = true
-modulate = Color( 1, 1, 1, 0.294118 )
+modulate = Color(1, 1, 1, 0.294118)
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
max_value = 1.0
step = 0.001
-percent_visible = false
+
+[node name="Value" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity/TextureRect" index="1"]
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_right = 1.0
+offset_bottom = 23.0
[connection signal="resized" from="." to="." method="_on_resized"]
[connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/Horizontal" to="." method="_on_Horizontal_toggled"]
diff --git a/src/UI/Nodes/AnimatePanel.gd b/src/UI/Nodes/AnimatePanel.gd
index c0f9eed1f4c..5a39958e684 100644
--- a/src/UI/Nodes/AnimatePanel.gd
+++ b/src/UI/Nodes/AnimatePanel.gd
@@ -2,16 +2,16 @@ class_name AnimatePanel
extends PanelContainer
var image_effect_node: ConfirmationDialog
-var frames := [] # Set this value before calling "get_animated_value"
-var properties := [] # Contains dictionary of properties
-var resetter_values := [] # Contains the Original properties without any change
-var _current_id := 0 # The property currently selected in "property_list"
+var frames := [] ## Set this value before calling "get_animated_value"
+var properties := [] ## Contains dictionary of properties
+var resetter_values := [] ## Contains the Original properties without any change
+var _current_id := 0 ## The property currently selected in "property_list"
-onready var can_animate_button: CheckBox = $"%CanAnimate"
-onready var property_list: ItemList = $"%PropertyList"
-onready var initial_value: ValueSlider = $"%Initial"
-onready var final_value: ValueSlider = $"%Final"
-onready var preview_slider: TextureProgress = $"%PreviewSlider"
+@onready var can_animate_button: CheckBox = $"%CanAnimate"
+@onready var property_list: ItemList = $"%PropertyList"
+@onready var initial_value: ValueSlider = $"%Initial"
+@onready var final_value: ValueSlider = $"%Final"
+@onready var preview_slider: TextureProgressBar = $"%PreviewSlider"
func _ready() -> void:
@@ -39,11 +39,10 @@ func add_float_property(prop_name: String, property_node: Range):
properties.append(info)
resetter_values.append(property_node.value)
property_list.add_item(prop_name)
- property_node.connect("value_changed", self, "_on_range_node_value_changed")
+ property_node.value_changed.connect(_on_range_node_value_changed)
func get_animated_value(frame_idx: int, property_idx := 0) -> float:
- var tween := SceneTreeTween.new()
if property_idx <= 0 or property_idx < properties.size():
if frame_idx in frames:
if properties[property_idx]["can_animate"] and frames.size() > 1:
@@ -53,9 +52,10 @@ func get_animated_value(frame_idx: int, property_idx := 0) -> float:
var delta = properties[property_idx]["range_node"].value - initial
var transition_type = properties[property_idx]["transition_type"]
var ease_type = properties[property_idx]["ease_type"]
- return tween.interpolate_value(
+ var value = Tween.interpolate_value(
initial, delta, elapsed, duration, transition_type, ease_type
)
+ return value
else:
return properties[property_idx]["range_node"].value
else:
@@ -78,10 +78,10 @@ func _on_Final_value_changed(value: float) -> void:
func _on_range_node_value_changed(_value) -> void:
# Value is changed from outside the Animate Panel
if properties[_current_id]["range_node"].value != final_value.value:
- if final_value.is_connected("value_changed", self, "_on_Final_value_changed"):
- final_value.disconnect("value_changed", self, "_on_Final_value_changed")
+ if final_value.value_changed.is_connected(_on_Final_value_changed):
+ final_value.value_changed.disconnect(_on_Final_value_changed)
final_value.value = properties[_current_id]["range_node"].value
- final_value.connect("value_changed", self, "_on_Final_value_changed")
+ final_value.value_changed.connect(_on_Final_value_changed)
func _on_CanAnimate_toggled(button_pressed: bool) -> void:
@@ -102,10 +102,10 @@ func _on_PropertyList_item_selected(index: int) -> void:
func _refresh_properties(idx: int):
- if initial_value.is_connected("value_changed", self, "_on_Initial_value_changed"):
- initial_value.disconnect("value_changed", self, "_on_Initial_value_changed")
- if final_value.is_connected("value_changed", self, "_on_Final_value_changed"):
- final_value.disconnect("value_changed", self, "_on_Final_value_changed")
+ if initial_value.value_changed.is_connected(_on_Initial_value_changed):
+ initial_value.value_changed.disconnect(_on_Initial_value_changed)
+ if final_value.value_changed.is_connected(_on_Final_value_changed):
+ final_value.value_changed.disconnect(_on_Final_value_changed)
# Nodes setup
var property_node: Range = properties[idx]["range_node"]
@@ -124,7 +124,7 @@ func _refresh_properties(idx: int):
initial_value.step = property_node.step
# Update values
- can_animate_button.pressed = properties[idx]["can_animate"]
+ can_animate_button.button_pressed = properties[idx]["can_animate"]
initial_value.value = properties[idx]["initial_value"]
if properties[idx]["range_node"].value != final_value.value:
final_value.value = properties[idx]["range_node"].value
@@ -132,8 +132,8 @@ func _refresh_properties(idx: int):
$"%EaseType".select($"%EaseType".get_item_index(properties[idx]["ease_type"]))
$"%TransitionType".select($"%TransitionType".get_item_index(properties[idx]["transition_type"]))
- initial_value.connect("value_changed", self, "_on_Initial_value_changed")
- final_value.connect("value_changed", self, "_on_Final_value_changed")
+ initial_value.value_changed.connect(_on_Initial_value_changed)
+ final_value.value_changed.connect(_on_Final_value_changed)
func _populate_ease_type():
@@ -155,6 +155,7 @@ func _populate_transition_type():
$"%TransitionType".add_item("Wiggling around the edges", Tween.TRANS_ELASTIC)
$"%TransitionType".add_item("Bouncing at the end", Tween.TRANS_BOUNCE)
$"%TransitionType".add_item("Backing out at ends", Tween.TRANS_BACK)
+ $"%TransitionType".add_item("Spring towards the end", Tween.TRANS_SPRING)
func _on_EaseType_item_selected(index: int) -> void:
diff --git a/src/UI/Nodes/AnimatePanel.tscn b/src/UI/Nodes/AnimatePanel.tscn
index 3723270f3ea..541c1764695 100644
--- a/src/UI/Nodes/AnimatePanel.tscn
+++ b/src/UI/Nodes/AnimatePanel.tscn
@@ -1,152 +1,110 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://dmlgx1jgau8a5"]
-[ext_resource path="res://src/UI/Nodes/AnimatePanel.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2]
+[ext_resource type="Script" path="res://src/UI/Nodes/AnimatePanel.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="2"]
[node name="AnimatePanel" type="PanelContainer"]
-margin_right = 360.0
-margin_bottom = 226.0
-script = ExtResource( 1 )
+offset_right = 360.0
+offset_bottom = 226.0
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 353.0
-margin_bottom = 219.0
+layout_mode = 2
[node name="TopOptions" type="HBoxContainer" parent="VBoxContainer"]
-margin_right = 346.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/TopOptions"]
-margin_top = 5.0
-margin_right = 143.0
-margin_bottom = 19.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Animatable Properties"
-[node name="PreviewSlider" parent="VBoxContainer/TopOptions" instance=ExtResource( 2 )]
+[node name="PreviewSlider" parent="VBoxContainer/TopOptions" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_left = 147.0
-margin_right = 346.0
+layout_mode = 2
min_value = 1.0
max_value = 1.0
value = 1.0
prefix = "Preview frame:"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_top = 28.0
-margin_right = 346.0
-margin_bottom = 212.0
+layout_mode = 2
size_flags_vertical = 3
[node name="PropertyList" type="ItemList" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
-margin_right = 100.0
-margin_bottom = 184.0
-rect_min_size = Vector2( 100, 0 )
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
[node name="Options" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
visible = false
-margin_left = 104.0
-margin_right = 346.0
-margin_bottom = 184.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/Options"]
-margin_right = 242.0
-margin_bottom = 14.0
+layout_mode = 2
[node name="Name" type="Label" parent="VBoxContainer/HBoxContainer/Options/HBoxContainer"]
unique_name_in_owner = true
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/HBoxContainer/Options/HBoxContainer"]
-margin_left = 4.0
-margin_right = 242.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="CanAnimate" type="CheckBox" parent="VBoxContainer/HBoxContainer/Options"]
unique_name_in_owner = true
-margin_left = 160.0
-margin_top = 18.0
-margin_right = 242.0
-margin_bottom = 42.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 8
+mouse_default_cursor_shape = 2
text = "Animate"
[node name="Values" type="GridContainer" parent="VBoxContainer/HBoxContainer/Options"]
-margin_top = 46.0
-margin_right = 242.0
-margin_bottom = 146.0
+layout_mode = 2
columns = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"]
-margin_top = 5.0
-margin_right = 87.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Initial value:"
-align = 2
-[node name="Initial" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource( 2 )]
+[node name="Initial" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_left = 91.0
-margin_right = 242.0
+layout_mode = 2
editable = false
[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"]
-margin_top = 33.0
-margin_right = 87.0
-margin_bottom = 47.0
+layout_mode = 2
text = "Final value:"
-align = 2
-[node name="Final" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource( 2 )]
+[node name="Final" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource("2")]
unique_name_in_owner = true
-margin_left = 91.0
-margin_top = 28.0
-margin_right = 242.0
-margin_bottom = 52.0
+layout_mode = 2
editable = false
[node name="Label4" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"]
-margin_top = 59.0
-margin_right = 87.0
-margin_bottom = 73.0
+layout_mode = 2
text = "Ease type:"
-align = 2
[node name="EaseType" type="OptionButton" parent="VBoxContainer/HBoxContainer/Options/Values"]
unique_name_in_owner = true
-margin_left = 91.0
-margin_top = 56.0
-margin_right = 242.0
-margin_bottom = 76.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_vertical = 4
+mouse_default_cursor_shape = 2
disabled = true
clip_text = true
[node name="Label5" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"]
-margin_top = 83.0
-margin_right = 87.0
-margin_bottom = 97.0
+layout_mode = 2
text = "Interpolation:"
-align = 2
[node name="TransitionType" type="OptionButton" parent="VBoxContainer/HBoxContainer/Options/Values"]
unique_name_in_owner = true
-margin_left = 91.0
-margin_top = 80.0
-margin_right = 242.0
-margin_bottom = 100.0
-hint_tooltip = "How the value changes while moving from initial to final value"
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_vertical = 4
+tooltip_text = "How the value changes while moving from initial to final value"
+mouse_default_cursor_shape = 2
disabled = true
clip_text = true
diff --git a/src/UI/Nodes/CollapsibleContainer.gd b/src/UI/Nodes/CollapsibleContainer.gd
index 9fe05c911b9..862a258845c 100644
--- a/src/UI/Nodes/CollapsibleContainer.gd
+++ b/src/UI/Nodes/CollapsibleContainer.gd
@@ -1,9 +1,16 @@
-tool
+@tool
class_name CollapsibleContainer
extends VBoxContainer
+## A button that, when clicked, expands into a VBoxContainer.
-export var text := "" setget _set_text
-export var visible_content := false setget _set_visible_content
+@export var text := "":
+ set(value):
+ text = value
+ _label.text = value
+@export var visible_content := false:
+ set(value):
+ visible_content = value
+ _button.button_pressed = value
var _button := Button.new()
var _texture_rect := TextureRect.new()
@@ -17,43 +24,33 @@ func _init() -> void:
func _ready() -> void:
_button.toggle_mode = true
_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
- _button.connect("toggled", self, "_on_Button_toggled")
- add_child(_button)
- move_child(_button, 0)
+ _button.toggled.connect(_on_Button_toggled)
+ add_child(_button, false, Node.INTERNAL_MODE_FRONT)
_texture_rect.anchor_top = 0.5
_texture_rect.anchor_bottom = 0.5
- _texture_rect.margin_left = 2
- _texture_rect.margin_top = -6
- _texture_rect.margin_right = 14
- _texture_rect.margin_bottom = 6
- _texture_rect.rect_rotation = -90
- _texture_rect.rect_pivot_offset = Vector2(6, 6)
+ _texture_rect.offset_left = 2
+ _texture_rect.offset_top = -6
+ _texture_rect.offset_right = 14
+ _texture_rect.offset_bottom = 6
+ _texture_rect.rotation_degrees = -90
+ _texture_rect.pivot_offset = Vector2(6, 6)
_texture_rect.add_to_group("UIButtons")
_button.add_child(_texture_rect)
- _label.valign = Label.VALIGN_CENTER
- _label.rect_position = Vector2(14, 0)
+ _label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
+ _label.position = Vector2(14, 0)
_label.size_flags_vertical = Control.SIZE_SHRINK_CENTER
_button.add_child(_label)
- _button.pressed = visible_content
+ _button.custom_minimum_size = _label.size
+ _button.button_pressed = visible_content
for child in get_children():
if not child is CanvasItem or child == _button:
continue
- child.connect("visibility_changed", self, "_child_visibility_changed", [child])
+ child.visibility_changed.connect(_child_visibility_changed.bind(child))
func _notification(what: int) -> void:
if what == NOTIFICATION_THEME_CHANGED:
- _texture_rect.texture = get_icon("arrow_normal", "CollapsibleContainer")
-
-
-func _set_text(value: String) -> void:
- text = value
- _label.text = value
-
-
-func _set_visible_content(value: bool) -> void:
- visible_content = value
- _button.pressed = value
+ _texture_rect.texture = get_theme_icon("arrow_normal", "CollapsibleContainer")
func _on_Button_toggled(button_pressed: bool) -> void:
@@ -62,16 +59,15 @@ func _on_Button_toggled(button_pressed: bool) -> void:
func _set_visible(pressed: bool) -> void:
var angle := 0.0 if pressed else -90.0
- var tween := create_tween()
- tween.tween_property(_texture_rect, "rect_rotation", angle, 0.05)
+ create_tween().tween_property(_texture_rect, "rotation_degrees", angle, 0.05)
for child in get_children():
if not child is CanvasItem or child == _button:
continue
child.visible = pressed
-# Checks if a child becomes visible from another sure and ensures
-# it remains invisible if the button is not pressed
+## Checks if a child becomes visible from another sure and ensures
+## it remains invisible if the button is not pressed
func _child_visibility_changed(child: CanvasItem) -> void:
if not _button.pressed:
child.visible = false
diff --git a/src/UI/Nodes/CollapsibleContainer.tscn b/src/UI/Nodes/CollapsibleContainer.tscn
index 71cc81cb59d..b1968e012a2 100644
--- a/src/UI/Nodes/CollapsibleContainer.tscn
+++ b/src/UI/Nodes/CollapsibleContainer.tscn
@@ -1,9 +1,9 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://cii2hpylme60s"]
-[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=2]
+[ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="2"]
[node name="CollapsibleContainer" type="VBoxContainer"]
-margin_right = 40.0
-margin_bottom = 20.0
-theme_type_variation = "CollapsibleContainer"
-script = ExtResource( 2 )
+offset_right = 40.0
+offset_bottom = 20.0
+theme_type_variation = &"CollapsibleContainer"
+script = ExtResource("2")
diff --git a/src/UI/Nodes/GradientEdit.gd b/src/UI/Nodes/GradientEdit.gd
index 963af519f78..da1ab9d8ad3 100644
--- a/src/UI/Nodes/GradientEdit.gd
+++ b/src/UI/Nodes/GradientEdit.gd
@@ -7,16 +7,16 @@ extends Control
signal updated(gradient, cc)
var continuous_change := true
-var active_cursor: GradientCursor # Showing a color picker popup to change a cursor's color
+var active_cursor: GradientCursor ## Showing a color picker popup to change a cursor's color
-onready var x_offset: float = rect_size.x - GradientCursor.WIDTH
-onready var texture_rect: TextureRect = $TextureRect
-onready var texture: Texture = $TextureRect.texture
-onready var gradient: Gradient = texture.gradient
-onready var color_picker: ColorPicker = $Popup.get_node("ColorPicker")
-onready var divide_dialog: ConfirmationDialog = $DivideConfirmationDialog
-onready var number_of_parts_spin_box: SpinBox = $"%NumberOfPartsSpinBox"
-onready var add_point_end_check_box: CheckBox = $"%AddPointEndCheckBox"
+@onready var x_offset: float = size.x - GradientCursor.WIDTH
+@onready var texture_rect: TextureRect = $TextureRect as TextureRect
+@onready var texture := texture_rect.texture as GradientTexture2D
+@onready var gradient := texture.gradient
+@onready var color_picker := $Popup.get_node("ColorPicker") as ColorPicker
+@onready var divide_dialog := $DivideConfirmationDialog as ConfirmationDialog
+@onready var number_of_parts_spin_box := $"%NumberOfPartsSpinBox" as SpinBox
+@onready var add_point_end_check_box := $"%AddPointEndCheckBox" as CheckBox
class GradientCursor:
@@ -26,20 +26,19 @@ class GradientCursor:
var color: Color
var sliding := false
- onready var parent: TextureRect = get_parent()
- onready var grand_parent: Container = parent.get_parent()
- onready var label: Label = parent.get_node("Value")
+ @onready var parent: TextureRect = get_parent()
+ @onready var grand_parent: Container = parent.get_parent()
+ @onready var label: Label = parent.get_node("Value")
func _ready() -> void:
- rect_position = Vector2(0, 15)
- rect_size = Vector2(WIDTH, 15)
+ position = Vector2(0, 15)
+ size = Vector2(WIDTH, 15)
func _draw() -> void:
-# warning-ignore:integer_division
- var polygon := PoolVector2Array(
+ var polygon := PackedVector2Array(
[
Vector2(0, 5),
- Vector2(WIDTH / 2, 0),
+ Vector2(WIDTH / 2.0, 0),
Vector2(WIDTH, 5),
Vector2(WIDTH, 15),
Vector2(0, 15),
@@ -53,49 +52,49 @@ class GradientCursor:
func _gui_input(ev: InputEvent) -> void:
if ev is InputEventMouseButton:
- if ev.button_index == BUTTON_LEFT:
- if ev.doubleclick:
+ if ev.button_index == MOUSE_BUTTON_LEFT:
+ if ev.double_click:
grand_parent.select_color(self, ev.global_position)
elif ev.pressed:
grand_parent.continuous_change = false
sliding = true
label.visible = true
- label.text = "%.03f" % get_cursor_position()
+ label.text = "%.03f" % get_caret_column()
else:
sliding = false
label.visible = false
- elif ev.button_index == BUTTON_RIGHT and grand_parent.get_sorted_cursors().size() > 2:
+ elif (
+ ev.button_index == MOUSE_BUTTON_RIGHT
+ and grand_parent.get_sorted_cursors().size() > 2
+ ):
parent.remove_child(self)
grand_parent.continuous_change = false
grand_parent.update_from_value()
queue_free()
- elif ev is InputEventMouseMotion and (ev.button_mask & BUTTON_MASK_LEFT) != 0 and sliding:
- rect_position.x += get_local_mouse_position().x
- if ev.control:
- rect_position.x = (
- round(get_cursor_position() * 20.0)
- * 0.05
- * (parent.rect_size.x - WIDTH)
- )
- rect_position.x = min(max(0, rect_position.x), parent.rect_size.x - rect_size.x)
+ elif (
+ ev is InputEventMouseMotion
+ and (ev.button_mask & MOUSE_BUTTON_MASK_LEFT) != 0
+ and sliding
+ ):
+ position.x += get_local_mouse_position().x
+ if ev.ctrl_pressed:
+ position.x = (roundi(get_caret_column() * 20.0) * 0.05 * (parent.size.x - WIDTH))
+ position.x = mini(maxi(0, position.x), parent.size.x - size.x)
grand_parent.update_from_value()
- label.text = "%.03f" % get_cursor_position()
+ label.text = "%.03f" % get_caret_column()
- func get_cursor_position() -> float:
- return rect_position.x / (parent.rect_size.x - WIDTH)
+ func get_caret_column() -> float:
+ return position.x / (parent.size.x - WIDTH)
func set_color(c: Color) -> void:
color = c
grand_parent.update_from_value()
- update()
+ queue_redraw()
- static func sort(a, b) -> bool:
- return a.get_position() < b.get_position()
-
- func can_drop_data(_position, data) -> bool:
+ func _can_drop_data(_position, data) -> bool:
return typeof(data) == TYPE_COLOR
- func drop_data(_position, data) -> void:
+ func _drop_data(_position, data) -> void:
set_color(data)
@@ -115,7 +114,7 @@ func _create_cursors() -> void:
func _gui_input(ev: InputEvent) -> void:
if ev.is_action_pressed("left_mouse"):
- var p = clamp(ev.position.x, 0, x_offset)
+ var p := clampf(ev.position.x, 0, x_offset)
add_cursor(p, get_gradient_color(p))
continuous_change = false
update_from_value()
@@ -125,41 +124,43 @@ func update_from_value() -> void:
gradient.offsets = []
for c in texture_rect.get_children():
if c is GradientCursor:
- var point: float = c.rect_position.x / x_offset
+ var point: float = c.position.x / x_offset
gradient.add_point(point, c.color)
- emit_signal("updated", gradient, continuous_change)
+ updated.emit(gradient, continuous_change)
continuous_change = true
func add_cursor(x: float, color: Color) -> void:
var cursor := GradientCursor.new()
texture_rect.add_child(cursor)
- cursor.rect_position.x = x
+ cursor.position.x = x
cursor.color = color
-func select_color(cursor: GradientCursor, position: Vector2) -> void:
+func select_color(cursor: GradientCursor, pos: Vector2) -> void:
active_cursor = cursor
color_picker.color = cursor.color
- if position.x > rect_global_position.x + (rect_size.x / 2.0):
- position.x = rect_global_position.x + rect_size.x
+ if pos.x > global_position.x + (size.x / 2.0):
+ pos.x = global_position.x + size.x
else:
- position.x = rect_global_position.x - $Popup.rect_size.x
- $Popup.rect_position = position
+ pos.x = global_position.x - $Popup.size.x
+ $Popup.position = pos
$Popup.popup()
func get_sorted_cursors() -> Array:
- var array := []
+ var array: Array[GradientCursor] = []
for c in texture_rect.get_children():
if c is GradientCursor:
array.append(c)
- array.sort_custom(GradientCursor, "sort")
+ array.sort_custom(
+ func(a: GradientCursor, b: GradientCursor): return a.get_position() < b.get_position()
+ )
return array
func get_gradient_color(x: float) -> Color:
- return gradient.interpolate(x / x_offset)
+ return gradient.sample(x / x_offset)
func _on_ColorPicker_color_changed(color: Color) -> void:
@@ -169,11 +170,11 @@ func _on_ColorPicker_color_changed(color: Color) -> void:
func _on_GradientEdit_resized() -> void:
if not gradient:
return
- x_offset = rect_size.x - GradientCursor.WIDTH
+ x_offset = size.x - GradientCursor.WIDTH
_create_cursors()
-func _on_InterpolationOptionButton_item_selected(index: int) -> void:
+func _on_InterpolationOptionButton_item_selected(index: Gradient.InterpolationMode) -> void:
gradient.interpolation_mode = index
@@ -182,19 +183,19 @@ func _on_DivideButton_pressed() -> void:
func _on_DivideConfirmationDialog_confirmed() -> void:
- var add_point_to_end := add_point_end_check_box.pressed
+ var add_point_to_end := add_point_end_check_box.button_pressed
var parts := number_of_parts_spin_box.value
- var colors := []
- var end_point = 1 if add_point_to_end else 0
+ var colors: PackedColorArray = []
+ var end_point := 1 if add_point_to_end else 0
parts -= end_point
if not add_point_to_end:
# Move the final color one part behind, useful for it to be in constant interpolation
- gradient.add_point((parts - 1) / parts, gradient.interpolate(1))
+ gradient.add_point((parts - 1) / parts, gradient.sample(1))
for i in parts + end_point:
- colors.append(gradient.interpolate(i / parts))
+ colors.append(gradient.sample(i / parts))
gradient.offsets = []
for i in parts + end_point:
gradient.add_point(i / parts, colors[i])
_create_cursors()
- emit_signal("updated", gradient, continuous_change)
+ updated.emit(gradient, continuous_change)
diff --git a/src/UI/Nodes/GradientEdit.tscn b/src/UI/Nodes/GradientEdit.tscn
index 33576c204e6..fd05faef8c2 100644
--- a/src/UI/Nodes/GradientEdit.tscn
+++ b/src/UI/Nodes/GradientEdit.tscn
@@ -1,116 +1,101 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bn4aw27dj7pwi"]
-[ext_resource path="res://src/UI/Nodes/GradientEdit.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Nodes/GradientEdit.gd" id="1"]
-[sub_resource type="Gradient" id=1]
+[sub_resource type="Gradient" id="1"]
-[sub_resource type="GradientTexture" id=2]
-gradient = SubResource( 1 )
+[sub_resource type="GradientTexture2D" id="2"]
+gradient = SubResource("1")
[node name="GradientEdit" type="VBoxContainer"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="TextureRect" type="TextureRect" parent="."]
-margin_right = 1280.0
-margin_bottom = 672.0
-rect_min_size = Vector2( 0, 30 )
+custom_minimum_size = Vector2(0, 30)
+layout_mode = 2
size_flags_vertical = 3
-texture = SubResource( 2 )
-expand = true
+texture = SubResource("2")
+expand_mode = 1
[node name="Value" type="Label" parent="TextureRect"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -20.0
-margin_top = -7.0
-margin_right = 20.0
-margin_bottom = 7.0
+offset_left = -20.0
+offset_top = -7.0
+offset_right = 20.0
+offset_bottom = 7.0
[node name="Popup" type="PopupPanel" parent="."]
-margin_right = 316.0
-margin_bottom = 470.0
[node name="ColorPicker" type="ColorPicker" parent="Popup"]
-margin_left = 4.0
-margin_top = 4.0
-margin_right = 312.0
-margin_bottom = 466.0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 294.0
+offset_bottom = 572.0
[node name="InterpolationContainer" type="HBoxContainer" parent="."]
-margin_top = 676.0
-margin_right = 1280.0
-margin_bottom = 696.0
+layout_mode = 2
[node name="Label" type="Label" parent="InterpolationContainer"]
-margin_top = 3.0
-margin_right = 638.0
-margin_bottom = 17.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Interpolation:"
[node name="InterpolationOptionButton" type="OptionButton" parent="InterpolationContainer"]
-margin_left = 642.0
-margin_right = 1280.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Linear"
-items = [ "Linear", null, false, 0, null, "Constant", null, false, 1, null, "Cubic", null, false, 2, null ]
+mouse_default_cursor_shape = 2
+item_count = 3
selected = 0
+popup/item_0/text = "Linear"
+popup/item_0/id = 0
+popup/item_1/text = "Constant"
+popup/item_1/id = 1
+popup/item_2/text = "Cubic"
+popup/item_2/id = 2
[node name="DivideButton" type="Button" parent="."]
-margin_top = 700.0
-margin_right = 1280.0
-margin_bottom = 720.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Divide into equal parts"
[node name="DivideConfirmationDialog" type="ConfirmationDialog" parent="."]
-margin_top = 650.0
-margin_right = 200.0
-margin_bottom = 746.0
-rect_min_size = Vector2( 180, 63 )
-resizable = true
[node name="VBoxContainer" type="VBoxContainer" parent="DivideConfirmationDialog"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -36.0
[node name="HBoxContainer" type="HBoxContainer" parent="DivideConfirmationDialog/VBoxContainer"]
-margin_right = 1280.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label" type="Label" parent="DivideConfirmationDialog/VBoxContainer/HBoxContainer"]
-margin_top = 5.0
-margin_right = 36.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Parts:"
[node name="NumberOfPartsSpinBox" type="SpinBox" parent="DivideConfirmationDialog/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
-margin_left = 40.0
-margin_right = 1280.0
-margin_bottom = 24.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 2.0
value = 3.0
allow_greater = true
[node name="AddPointEndCheckBox" type="CheckBox" parent="DivideConfirmationDialog/VBoxContainer"]
unique_name_in_owner = true
-margin_top = 28.0
-margin_right = 1280.0
-margin_bottom = 52.0
-hint_tooltip = "If this is enabled, the last point gets added at the end of the gradient.
+layout_mode = 2
+tooltip_text = "If this is enabled, the last point gets added at the end of the gradient.
Disable this if you wish to convert the gradient to have constant interpolation, so that the last color will be taken into account."
mouse_default_cursor_shape = 2
text = "Add point at the end"
diff --git a/src/UI/Nodes/MaxMinEdit.gd b/src/UI/Nodes/MaxMinEdit.gd
index ba99b15b204..636cf065539 100644
--- a/src/UI/Nodes/MaxMinEdit.gd
+++ b/src/UI/Nodes/MaxMinEdit.gd
@@ -6,17 +6,17 @@ extends Control
signal updated(zone)
-export(float) var start = 0.0
-export(float) var end = 1.0
-export(Color) var zone_col = Color.black
-export(Color) var background_col = Color.gray
+@export var start := 0.0
+@export var end := 1.0
+@export var zone_col := Color.BLACK
+@export var background_col := Color.GRAY
var active_cursor: GradientCursor # Showing a color picker popup to change a cursor's color
-onready var x_offset: float = rect_size.x - GradientCursor.WIDTH
-onready var texture_rect: TextureRect = $TextureRect
-onready var texture: Texture = $TextureRect.texture
-onready var gradient: Gradient = texture.gradient
+@onready var x_offset: float = size.x - GradientCursor.WIDTH
+@onready var texture_rect := $TextureRect as TextureRect
+@onready var texture := texture_rect.texture as GradientTexture2D
+@onready var gradient := texture.gradient as Gradient
class GradientCursor:
@@ -26,20 +26,19 @@ class GradientCursor:
var color: Color
var sliding := false
- onready var parent: TextureRect = get_parent()
- onready var grand_parent: Container = parent.get_parent()
- onready var label: Label = parent.get_node("Value")
+ @onready var parent: TextureRect = get_parent()
+ @onready var grand_parent: Container = parent.get_parent()
+ @onready var label: Label = parent.get_node("Value")
func _ready() -> void:
- rect_position = Vector2(0, 15)
- rect_size = Vector2(WIDTH, 15)
+ position = Vector2(0, 15)
+ size = Vector2(WIDTH, 15)
func _draw() -> void:
-# warning-ignore:integer_division
- var polygon := PoolVector2Array(
+ var polygon := PackedVector2Array(
[
Vector2(0, 5),
- Vector2(WIDTH / 2, 0),
+ Vector2(WIDTH / 2.0, 0),
Vector2(WIDTH, 5),
Vector2(WIDTH, 15),
Vector2(0, 15),
@@ -53,28 +52,28 @@ class GradientCursor:
func _gui_input(ev: InputEvent) -> void:
if ev is InputEventMouseButton:
- if ev.button_index == BUTTON_LEFT:
+ if ev.button_index == MOUSE_BUTTON_LEFT:
if ev.pressed:
sliding = true
label.visible = true
- label.text = "%.03f" % get_cursor_position()
+ label.text = "%.03f" % get_caret_column()
else:
sliding = false
label.visible = false
- elif ev is InputEventMouseMotion and (ev.button_mask & BUTTON_MASK_LEFT) != 0 and sliding:
- rect_position.x += get_local_mouse_position().x
- if ev.control:
- rect_position.x = (
- round(get_cursor_position() * 20.0)
- * 0.05
- * (parent.rect_size.x - WIDTH)
- )
- rect_position.x = min(max(0, rect_position.x), parent.rect_size.x - rect_size.x)
+ elif (
+ ev is InputEventMouseMotion
+ and (ev.button_mask & MOUSE_BUTTON_MASK_LEFT) != 0
+ and sliding
+ ):
+ position.x += get_local_mouse_position().x
+ if ev.ctrl_pressed:
+ position.x = (roundi(get_caret_column() * 20.0) * 0.05 * (parent.size.x - WIDTH))
+ position.x = mini(maxi(0, position.x), parent.size.x - size.x)
grand_parent.update_from_value()
- label.text = "%.03f" % get_cursor_position()
+ label.text = "%.03f" % get_caret_column()
- func get_cursor_position() -> float:
- return rect_position.x / (parent.rect_size.x - WIDTH)
+ func get_caret_column() -> float:
+ return position.x / (parent.size.x - WIDTH)
func _ready() -> void:
@@ -104,30 +103,30 @@ func _create_cursors() -> void:
func update_from_value() -> void:
gradient.offsets = [0.0]
- var cursors = []
+ var cursors: Array[GradientCursor] = []
for c in texture_rect.get_children():
if c is GradientCursor:
cursors.append(c)
- var point_1: float = cursors[0].rect_position.x / x_offset
- var point_2: float = cursors[1].rect_position.x / x_offset
- if cursors[1].get_cursor_position() > cursors[0].get_cursor_position():
+ var point_1: float = cursors[0].position.x / x_offset
+ var point_2: float = cursors[1].position.x / x_offset
+ if cursors[1].get_caret_column() > cursors[0].get_caret_column():
gradient.add_point(point_1, zone_col)
gradient.add_point(point_2, background_col)
else:
gradient.add_point(point_1, background_col)
gradient.add_point(point_2, zone_col)
- emit_signal("updated", gradient.offsets[1], gradient.offsets[2])
+ updated.emit(gradient.offsets[1], gradient.offsets[2])
func add_cursor(x: float) -> void:
var cursor := GradientCursor.new()
texture_rect.add_child(cursor)
- cursor.rect_position.x = x
+ cursor.position.x = x
cursor.color = zone_col
func _on_GradientEdit_resized() -> void:
if not gradient:
return
- x_offset = rect_size.x - GradientCursor.WIDTH
+ x_offset = size.x - GradientCursor.WIDTH
_create_cursors()
diff --git a/src/UI/Nodes/MaxMinEdit.tscn b/src/UI/Nodes/MaxMinEdit.tscn
index bad0bb7fca9..979695ad75c 100644
--- a/src/UI/Nodes/MaxMinEdit.tscn
+++ b/src/UI/Nodes/MaxMinEdit.tscn
@@ -1,37 +1,36 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=6 format=3 uid="uid://bmsc0s03pwji4"]
-[ext_resource path="res://src/UI/Nodes/MaxMinEdit.gd" type="Script" id=1]
-[ext_resource path="res://src/Shaders/AutoInvertColors.shader" type="Shader" id=2]
+[ext_resource type="Script" path="res://src/UI/Nodes/MaxMinEdit.gd" id="1"]
+[ext_resource type="Shader" path="res://src/Shaders/AutoInvertColors.gdshader" id="2"]
-[sub_resource type="Gradient" id=3]
+[sub_resource type="Gradient" id="3"]
interpolation_mode = 1
-offsets = PoolRealArray( 0, 0, 1 )
-colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 )
+offsets = PackedFloat32Array(0, 0, 1)
+colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1)
-[sub_resource type="GradientTexture" id=6]
-gradient = SubResource( 3 )
+[sub_resource type="GradientTexture2D" id="6"]
+gradient = SubResource("3")
-[sub_resource type="ShaderMaterial" id=5]
-shader = ExtResource( 2 )
+[sub_resource type="ShaderMaterial" id="5"]
+shader = ExtResource("2")
[node name="MaxMinEdit" type="VBoxContainer"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="TextureRect" type="TextureRect" parent="."]
-margin_right = 1280.0
-margin_bottom = 720.0
-rect_min_size = Vector2( 0, 30 )
+custom_minimum_size = Vector2(0, 30)
+layout_mode = 2
size_flags_vertical = 3
-texture = SubResource( 6 )
-expand = true
+texture = SubResource("6")
+expand_mode = 1
[node name="Value" type="Label" parent="TextureRect"]
-material = SubResource( 5 )
+material = SubResource("5")
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-align = 1
-valign = 1
[connection signal="resized" from="." to="." method="_on_GradientEdit_resized"]
diff --git a/src/UI/Nodes/NotificationLabel.gd b/src/UI/Nodes/NotificationLabel.gd
index b14935dfc04..49b0ef463aa 100644
--- a/src/UI/Nodes/NotificationLabel.gd
+++ b/src/UI/Nodes/NotificationLabel.gd
@@ -4,9 +4,9 @@ extends Label
func _ready() -> void:
var tw := create_tween().set_parallel().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_OUT)
- tw.tween_property(self, "rect_position", Vector2(rect_position.x, rect_position.y - 100), 1)
+ tw.tween_property(self, "position", Vector2(position.x, position.y - 100), 1)
tw.tween_property(self, "modulate", Color(modulate.r, modulate.g, modulate.b, 0), 1)
- tw.connect("finished", self, "_on_tween_finished")
+ tw.finished.connect(_on_tween_finished)
func _on_tween_finished() -> void:
diff --git a/src/UI/Nodes/TransparentChecker.gd b/src/UI/Nodes/TransparentChecker.gd
index c9264deeade..658ea136709 100644
--- a/src/UI/Nodes/TransparentChecker.gd
+++ b/src/UI/Nodes/TransparentChecker.gd
@@ -6,30 +6,39 @@ func _ready() -> void:
func update_rect() -> void:
- rect_size = Global.current_project.size
+ if not get_parent() is Control:
+ # Set the size to be the same as the project size if the parent is a SubViewport
+ set_bounds(Global.current_project.size)
if self == Global.transparent_checker:
fit_rect(Global.current_project.tiles.get_bounding_rect())
- Global.second_viewport.get_node("Viewport/TransparentChecker").update_rect()
- Global.small_preview_viewport.get_node("Viewport/TransparentChecker").update_rect()
- material.set_shader_param("size", Global.checker_size)
- material.set_shader_param("color1", Global.checker_color_1)
- material.set_shader_param("color2", Global.checker_color_2)
- material.set_shader_param("follow_movement", Global.checker_follow_movement)
- material.set_shader_param("follow_scale", Global.checker_follow_scale)
+ Global.second_viewport.get_node("SubViewport/TransparentChecker").update_rect()
+ Global.small_preview_viewport.get_node("SubViewport/TransparentChecker").update_rect()
+ material.set_shader_parameter("size", Global.checker_size)
+ material.set_shader_parameter("color1", Global.checker_color_1)
+ material.set_shader_parameter("color2", Global.checker_color_2)
+ material.set_shader_parameter("follow_movement", Global.checker_follow_movement)
+ material.set_shader_parameter("follow_scale", Global.checker_follow_scale)
-func update_offset(offset: Vector2, scale: Vector2) -> void:
- material.set_shader_param("offset", offset)
- material.set_shader_param("scale", scale)
+func update_offset(offset: Vector2, canvas_scale: Vector2) -> void:
+ material.set_shader_parameter("offset", offset)
+ material.set_shader_parameter("scale", canvas_scale)
func _on_TransparentChecker_resized() -> void:
- material.set_shader_param("rect_size", rect_size)
+ material.set_shader_parameter("rect_size", size)
+
+
+func set_bounds(bounds: Vector2) -> void:
+ offset_right = bounds.x
+ offset_bottom = bounds.y
func fit_rect(rect: Rect2) -> void:
- rect_position = rect.position
- rect_size = rect.size
+ offset_left = rect.position.x
+ offset_right = rect.position.x + rect.size.x
+ offset_top = rect.position.y
+ offset_bottom = rect.position.y + rect.size.y
func update_transparency(value: float) -> void:
@@ -42,4 +51,4 @@ func update_transparency(value: float) -> void:
get_tree().get_root().transparent_bg = true
# Set a minimum amount for the fade so the canvas won't disappear
- material.set("shader_param/alpha", clamp(value, 0.1, 1))
+ material.set_shader_parameter("alpha", clampf(value, 0.1, 1))
diff --git a/src/UI/Nodes/TransparentChecker.tscn b/src/UI/Nodes/TransparentChecker.tscn
index 242eb84f0d8..45b26ea30ce 100644
--- a/src/UI/Nodes/TransparentChecker.tscn
+++ b/src/UI/Nodes/TransparentChecker.tscn
@@ -1,26 +1,25 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://3pmb60gpst7b"]
-[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=1]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.gd" type="Script" id=2]
+[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="1"]
+[ext_resource type="Script" path="res://src/UI/Nodes/TransparentChecker.gd" id="2"]
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 1 )
-shader_param/size = 10.0
-shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0, 0 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = false
+[sub_resource type="ShaderMaterial" id="1"]
+shader = ExtResource("1")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0, 0)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = false
[node name="TransparentChecker" type="ColorRect"]
-material = SubResource( 1 )
-margin_right = 40.0
-margin_bottom = 40.0
+material = SubResource("1")
+anchors_preset = -1
mouse_filter = 2
-script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+script = ExtResource("2")
+metadata/_edit_use_anchors_ = true
+
[connection signal="resized" from="." to="." method="_on_TransparentChecker_resized"]
diff --git a/src/UI/Nodes/ValueSlider.gd b/src/UI/Nodes/ValueSlider.gd
index 3e9e6ce23b0..1c47ef3f90f 100644
--- a/src/UI/Nodes/ValueSlider.gd
+++ b/src/UI/Nodes/ValueSlider.gd
@@ -1,33 +1,44 @@
-# Initial version made by MrTriPie, has been modified by Overloaded.
-tool
+@tool
class_name ValueSlider
-extends TextureProgress
+extends TextureProgressBar
+## Custom node that combines the behavior of a Slider and a SpinBox.
+## Initial version made by MrTriPie, has been modified by Overloaded.
enum { NORMAL, HELD, SLIDING, TYPING }
-export var editable := true
-export var prefix: String setget _prefix_changed
-export var suffix: String setget _suffix_changed
-# Size of additional snapping (applied in addition to Range's step).
-# This should always be larger than step.
-export var snap_step := 1.0
-# If snap_by_default is true, snapping is enabled when Control is NOT held (used for sliding in
-# larger steps by default, and smaller steps when holding Control).
-# If false, snapping is enabled when Control IS held (used for sliding in smaller steps by
-# default, and larger steps when holding Control).
-export var snap_by_default := false
-# If show_progress is true it will show the colored progress bar, good for values with a specific
-# range. False will hide it, which is good for values that can be any number.
-export var show_progress := true
-export var show_arrows := true setget _show_arrows_changed
-export var echo_arrow_time := 0.075
-# This will be replaced with input action strings in Godot 4.x
-# Right now this is only used for changing the brush size with Control + Wheel
-# In Godot 4.x, the shortcut will be editable
-export var is_global := false
+@export var editable := true
+@export var prefix: String:
+ set(v):
+ prefix = v
+ _reset_display()
+@export var suffix: String:
+ set(v):
+ suffix = v
+ _reset_display()
+## Size of additional snapping (applied in addition to Range's step).
+## This should always be larger than step.
+@export var snap_step := 1.0
+## If snap_by_default is true, snapping is enabled when Control is NOT held (used for sliding in
+## larger steps by default, and smaller steps when holding Control).
+## If false, snapping is enabled when Control IS held (used for sliding in smaller steps by
+## default, and larger steps when holding Control).
+@export var snap_by_default := false
+## If show_progress is true it will show the colored progress bar, good for values with a specific
+## range. False will hide it, which is good for values that can be any number.
+@export var show_progress := true
+@export var show_arrows := true:
+ set(v):
+ show_arrows = v
+ if not _line_edit:
+ return
+ _value_up_button.visible = v
+ _value_down_button.visible = v
+@export var echo_arrow_time := 0.075
+@export var global_increment_action := "" ## Global shortcut to increment
+@export var global_decrement_action := "" ## Global shortcut to decrement
var state := NORMAL
-var arrow_is_held := 0 # Used for arrow button echo behavior. Is 1 for ValueUp, -1 for ValueDown.
+var arrow_is_held := 0 ## Used for arrow button echo behavior. Is 1 for ValueUp, -1 for ValueDown.
var _line_edit := LineEdit.new()
var _value_up_button := TextureButton.new()
@@ -45,13 +56,13 @@ func _init() -> void:
func _ready() -> void:
- connect("value_changed", self, "_on_value_changed")
- _setup_nodes()
- set_process_input(is_global)
+ value_changed.connect(_on_value_changed)
+ set_process_input(!global_increment_action.is_empty() and !global_decrement_action.is_empty())
_reset_display(true)
- if not Engine.editor_hint: # Pixelorama specific code
+ if not Engine.is_editor_hint(): # Pixelorama specific code
_value_up_button.modulate = Global.modulate_icon_color
_value_down_button.modulate = Global.modulate_icon_color
+ _setup_nodes()
func _notification(what: int) -> void:
@@ -64,24 +75,16 @@ func _notification(what: int) -> void:
func _input(event: InputEvent) -> void:
if not editable or not is_visible_in_tree():
return
- # Hardcode Control + Wheel as a global shortcut, if is_global is true
- # In Godot 4.x this will change into two is_action() checks for incrementing and decrementing
- if not event is InputEventMouseButton:
- return
- if not event.pressed:
- return
- if not event.control:
- return
- if event.button_index == BUTTON_WHEEL_UP:
+ if event.is_action_pressed(global_increment_action, true):
if snap_by_default:
- value += step if event.control else snap_step
+ value += step if event.ctrl_pressed else snap_step
else:
- value += snap_step if event.control else step
- elif event.button_index == BUTTON_WHEEL_DOWN:
+ value += snap_step if event.ctrl_pressed else step
+ elif event.is_action_pressed(global_decrement_action, true):
if snap_by_default:
- value -= step if event.control else snap_step
+ value -= step if event.ctrl_pressed else snap_step
else:
- value -= snap_step if event.control else step
+ value -= snap_step if event.ctrl_pressed else step
func _gui_input(event: InputEvent) -> void:
@@ -89,19 +92,19 @@ func _gui_input(event: InputEvent) -> void:
return
if state == NORMAL:
if event is InputEventMouseButton and event.pressed:
- if event.button_index == BUTTON_LEFT:
+ if event.button_index == MOUSE_BUTTON_LEFT:
state = HELD
set_meta("mouse_start_position", get_local_mouse_position())
- elif event.button_index == BUTTON_WHEEL_UP:
+ elif event.button_index == MOUSE_BUTTON_WHEEL_UP:
if snap_by_default:
- value += step if event.control else snap_step
+ value += step if event.ctrl_pressed else snap_step
else:
- value += snap_step if event.control else step
- elif event.button_index == BUTTON_WHEEL_DOWN:
+ value += snap_step if event.ctrl_pressed else step
+ elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
if snap_by_default:
- value -= step if event.control else snap_step
+ value -= step if event.ctrl_pressed else snap_step
else:
- value -= snap_step if event.control else step
+ value -= snap_step if event.ctrl_pressed else step
elif state == HELD:
if event.is_action_released("left_mouse"):
state = TYPING
@@ -110,12 +113,12 @@ func _gui_input(event: InputEvent) -> void:
_line_edit.grab_focus()
_line_edit.selecting_enabled = true
_line_edit.select_all()
- _line_edit.caret_position = _line_edit.text.length()
- tint_progress = Color.transparent
+ _line_edit.caret_column = _line_edit.text.length()
+ tint_progress = Color.TRANSPARENT
elif event is InputEventMouseMotion:
if get_meta("mouse_start_position").distance_to(get_local_mouse_position()) > 2:
state = SLIDING
- set_meta("shift_pressed", event.shift)
+ set_meta("shift_pressed", event.shift_pressed)
set_meta("start_ratio", ratio)
set_meta("start_value", value)
elif state == SLIDING:
@@ -127,90 +130,81 @@ func _gui_input(event: InputEvent) -> void:
remove_meta("shift_pressed")
if event is InputEventMouseMotion:
# When pressing/releasing Shift, reset starting values to prevent slider jumping around
- if get_meta("shift_pressed") != event.shift:
+ if get_meta("shift_pressed") != event.shift_pressed:
set_meta("mouse_start_position", get_local_mouse_position())
set_meta("start_ratio", ratio)
set_meta("start_value", value)
- set_meta("shift_pressed", event.shift)
+ set_meta("shift_pressed", event.shift_pressed)
var x_delta: float = get_local_mouse_position().x - get_meta("mouse_start_position").x
# Slow down to allow for more precision
- if event.shift:
+ if event.shift_pressed:
x_delta *= 0.1
if show_progress:
- ratio = get_meta("start_ratio") + x_delta / rect_size.x
+ ratio = get_meta("start_ratio") + x_delta / size.x
else:
value = get_meta("start_value") + x_delta * step
# Snap when snap_by_default is true, do the opposite when Control is pressed
if snap_by_default:
- if not event.control:
- value = round(value / snap_step) * snap_step
+ if not event.ctrl_pressed:
+ value = roundf(value / snap_step) * snap_step
else:
- if event.control:
- value = round(value / snap_step) * snap_step
+ if event.ctrl_pressed:
+ value = roundf(value / snap_step) * snap_step
-func _setup_nodes() -> void: # Only called once on _ready()
- _line_edit.align = LineEdit.ALIGN_CENTER
+func _setup_nodes() -> void: ## Only called once on _ready()
+ focus_mode = Control.FOCUS_ALL
+ _line_edit.alignment = HORIZONTAL_ALIGNMENT_CENTER
_line_edit.anchor_right = 1
_line_edit.anchor_bottom = 1
_line_edit.mouse_filter = Control.MOUSE_FILTER_IGNORE
- _line_edit.add_stylebox_override("read_only", StyleBoxEmpty.new())
- _line_edit.add_stylebox_override("normal", StyleBoxEmpty.new())
- _line_edit.connect("text_entered", self, "_on_LineEdit_text_entered")
- _line_edit.connect("focus_exited", self, "_confirm_text")
- _line_edit.connect("gui_input", self, "_on_LineEdit_gui_input")
+ _line_edit.add_theme_stylebox_override("read_only", StyleBoxEmpty.new())
+ _line_edit.add_theme_stylebox_override("normal", StyleBoxEmpty.new())
+ _line_edit.text_submitted.connect(_on_LineEdit_text_entered)
+ _line_edit.focus_exited.connect(_confirm_text)
+ _line_edit.gui_input.connect(_on_LineEdit_gui_input)
add_child(_line_edit)
- _value_up_button.rect_scale.y = -1
+ var value_up_texture_size := Vector2.ONE
+ if is_instance_valid(_value_up_button.texture_normal):
+ value_up_texture_size = _value_up_button.texture_normal.get_size()
+ _value_up_button.scale.y = -1
_value_up_button.anchor_left = 1
_value_up_button.anchor_right = 1
- _value_up_button.margin_left = -15
- _value_up_button.margin_top = 12
- _value_up_button.margin_right = -3
- _value_up_button.margin_bottom = 24
+ _value_up_button.offset_left = -value_up_texture_size.x - 3
+ _value_up_button.offset_top = value_up_texture_size.y
+ _value_up_button.offset_right = -3
+ _value_up_button.offset_bottom = value_up_texture_size.y * 2
+ _value_up_button.focus_mode = Control.FOCUS_NONE
_value_up_button.add_to_group("UIButtons")
- _value_up_button.connect("button_down", self, "_on_Value_button_down", [1])
- _value_up_button.connect("button_up", self, "_on_Value_button_up")
+ _value_up_button.button_down.connect(_on_Value_button_down.bind(1))
+ _value_up_button.button_up.connect(_on_Value_button_up)
add_child(_value_up_button)
+ var value_down_texture_size := Vector2.ONE
+ if is_instance_valid(_value_down_button.texture_normal):
+ value_down_texture_size = _value_down_button.texture_normal.get_size()
_value_down_button.anchor_left = 1
_value_down_button.anchor_top = 1
_value_down_button.anchor_right = 1
_value_down_button.anchor_bottom = 1
- _value_down_button.margin_left = -15
- _value_down_button.margin_top = -12
- _value_down_button.margin_right = -3
- _value_down_button.margin_bottom = 0
+ _value_down_button.offset_left = -value_down_texture_size.x - 3
+ _value_down_button.offset_top = -value_up_texture_size.y
+ _value_down_button.offset_right = -3
+ _value_down_button.offset_bottom = 0
+ _value_up_button.focus_mode = Control.FOCUS_NONE
_value_down_button.add_to_group("UIButtons")
- _value_down_button.connect("button_down", self, "_on_Value_button_down", [-1])
- _value_down_button.connect("button_up", self, "_on_Value_button_up")
+ _value_down_button.button_down.connect(_on_Value_button_down.bind(-1))
+ _value_down_button.button_up.connect(_on_Value_button_up)
add_child(_value_down_button)
- _timer.connect("timeout", self, "_on_Timer_timeout")
+ _timer.timeout.connect(_on_Timer_timeout)
add_child(_timer)
-func _prefix_changed(v: String) -> void:
- prefix = v
- _reset_display()
-
-
-func _suffix_changed(v: String) -> void:
- suffix = v
- _reset_display()
-
-
-func _show_arrows_changed(v: bool) -> void:
- show_arrows = v
- if not _line_edit:
- return
- _value_up_button.visible = v
- _value_down_button.visible = v
-
-
func _on_LineEdit_gui_input(event: InputEvent) -> void:
if state == TYPING:
- if event is InputEventKey and event.scancode == KEY_ESCAPE:
+ if event is InputEventKey and event.keycode == KEY_ESCAPE:
_confirm_text(false) # Cancel
_line_edit.release_focus()
@@ -219,13 +213,13 @@ func _on_value_changed(_value: float) -> void:
_reset_display()
+## When pressing enter, release focus, which will call _confirm_text on focus_exited signal
func _on_LineEdit_text_entered(_new_text: String) -> void:
- # When pressing enter, release focus, which will call _confirm_text on focus_exited signal
_line_edit.release_focus()
-# Called on LineEdit's focus_exited signal
-# If confirm is false it will cancel setting value
+## Called on LineEdit's focus_exited signal
+## If confirm is false it will cancel setting value
func _confirm_text(confirm := true) -> void:
if state != TYPING:
return
@@ -244,43 +238,40 @@ func _confirm_text(confirm := true) -> void:
_reset_display(true)
-func _reset_display(theme_changed := false) -> void:
+func _reset_display(theme_has_changed := false) -> void:
_line_edit.selecting_enabled = false # Remove the selection
_line_edit.editable = false
- if theme_changed and not Engine.editor_hint:
- texture_under = get_icon("texture_under", "ValueSlider")
- texture_over = get_icon("texture_over", "ValueSlider")
- texture_progress = get_icon("texture_progress", "ValueSlider")
- _value_up_button.texture_normal = get_icon("arrow_normal", "ValueSlider")
- _value_up_button.texture_pressed = get_icon("arrow_pressed", "ValueSlider")
- _value_up_button.texture_hover = get_icon("arrow_hover", "ValueSlider")
-
- _value_down_button.texture_normal = get_icon("arrow_normal", "ValueSlider")
- _value_down_button.texture_pressed = get_icon("arrow_pressed", "ValueSlider")
- _value_down_button.texture_hover = get_icon("arrow_hover", "ValueSlider")
-
- tint_under = get_color("under_color", "ValueSlider")
+ if theme_has_changed and not Engine.is_editor_hint():
+ texture_under = get_theme_icon("texture_under", "ValueSlider")
+# texture_over = get_theme_icon("texture_over", "ValueSlider")
+ texture_progress = get_theme_icon("texture_progress", "ValueSlider")
+ _value_up_button.texture_normal = get_theme_icon("arrow_normal", "ValueSlider")
+ _value_up_button.texture_pressed = get_theme_icon("arrow_pressed", "ValueSlider")
+ _value_up_button.texture_hover = get_theme_icon("arrow_hover", "ValueSlider")
+
+ _value_down_button.texture_normal = get_theme_icon("arrow_normal", "ValueSlider")
+ _value_down_button.texture_pressed = get_theme_icon("arrow_pressed", "ValueSlider")
+ _value_down_button.texture_hover = get_theme_icon("arrow_hover", "ValueSlider")
+
+ var line_edit_color := _line_edit.get_theme_color("font_color")
+ var line_edit_disabled_col: Color = get_theme_color("read_only", "LineEdit")
+ if editable:
+ _line_edit.add_theme_color_override("font_color_uneditable", line_edit_color)
+ else:
+ _line_edit.add_theme_color_override("font_color_uneditable", line_edit_disabled_col)
+ tint_under = get_theme_color("under_color", "ValueSlider")
if show_progress:
- tint_progress = get_color("progress_color", "ValueSlider")
+ tint_progress = get_theme_color("progress_color", "ValueSlider")
else:
- tint_progress = Color.transparent
+ tint_progress = Color.TRANSPARENT
_line_edit.text = str(tr(prefix), " ", value, " ", tr(suffix)).strip_edges()
- var line_edit_color := _line_edit.get_color("font_color")
- var line_edit_disabled_col := get_color("read_only", "LineEdit")
- if editable:
- _line_edit.add_color_override("font_color_uneditable", line_edit_color)
- else:
- _line_edit.add_color_override("font_color_uneditable", line_edit_disabled_col)
func _on_Value_button_down(direction: int) -> void:
if not editable:
return
# Direction is either 1 or -1
- if snap_by_default:
- value += (step if Input.is_action_pressed("ctrl") else snap_step) * direction
- else:
- value += (snap_step if Input.is_action_pressed("ctrl") else step) * direction
+ value += (snap_step if Input.is_action_pressed("ctrl") else step) * direction
arrow_is_held = direction
_timer.wait_time = echo_arrow_time * 8 # 0.6 with the default value
_timer.one_shot = true
@@ -292,7 +283,7 @@ func _on_Value_button_up() -> void:
_timer.stop()
-# Echo behavior. If the user keeps pressing the button, the value keeps changing.
+## Echo behavior. If the user keeps pressing the button, the value keeps changing.
func _on_Timer_timeout() -> void:
if arrow_is_held == 0:
_timer.stop()
diff --git a/src/UI/Nodes/ValueSlider.tscn b/src/UI/Nodes/ValueSlider.tscn
index 512d44c9e00..4c745cfa3df 100644
--- a/src/UI/Nodes/ValueSlider.tscn
+++ b/src/UI/Nodes/ValueSlider.tscn
@@ -1,23 +1,24 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://yjhp0ssng2mp"]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=2]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="2"]
-[node name="ValueSlider" type="TextureProgress"]
-margin_right = 24.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 32, 24 )
+[node name="ValueSlider" type="TextureProgressBar"]
+custom_minimum_size = Vector2(32, 24)
+offset_right = 24.0
+offset_bottom = 24.0
+size_flags_horizontal = 3
+focus_mode = 2
mouse_filter = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 3
-theme_type_variation = "ValueSlider"
-texture_under = ExtResource( 2 )
-texture_progress = ExtResource( 2 )
-tint_under = Color( 0, 0, 0, 1 )
-tint_progress = Color( 0, 0, 0, 1 )
+theme_type_variation = &"ValueSlider"
nine_patch_stretch = true
stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 1 )
+texture_under = ExtResource("2")
+texture_progress = ExtResource("2")
+tint_under = Color(0, 0, 0, 1)
+tint_progress = Color(0, 0, 0, 1)
+script = ExtResource("1")
diff --git a/src/UI/Nodes/ValueSliderV2.gd b/src/UI/Nodes/ValueSliderV2.gd
index da483296ed1..9ad990b580b 100644
--- a/src/UI/Nodes/ValueSliderV2.gd
+++ b/src/UI/Nodes/ValueSliderV2.gd
@@ -1,26 +1,89 @@
-tool
+@tool
class_name ValueSliderV2
extends HBoxContainer
+## A class that combines two ValueSlider nodes, for easy usage with Vector2 values.
+## Also supports aspect ratio locking.
signal value_changed(value)
signal ratio_toggled(button_pressed)
-export var editable := true setget _set_editable
-export var value := Vector2.ZERO setget _set_value
-export var min_value := Vector2.ZERO setget _set_min_value
-export var max_value := Vector2(100.0, 100.0) setget _set_max_value
-export var step := 1.0 setget _set_step
-export var allow_greater := false setget _set_allow_greater
-export var allow_lesser := false setget _set_allow_lesser
-export var show_ratio := false setget _set_show_ratio
-export(int, 1, 2) var grid_columns := 1 setget _set_grid_columns
-export var slider_min_size := Vector2(32, 24) setget _set_slider_min_size
-export var snap_step := 1.0 setget _set_snap_step
-export var snap_by_default := false setget _set_snap_by_default
-export var prefix_x := "X:" setget _set_prefix_x
-export var prefix_y := "Y:" setget _set_prefix_y
-export var suffix_x := "" setget _set_suffix_x
-export var suffix_y := "" setget _set_suffix_y
+@export var editable := true:
+ set(val):
+ editable = val
+ for slider in get_sliders():
+ slider.editable = val
+ $"%RatioButton".disabled = not val
+@export var value := Vector2.ZERO:
+ set(val):
+ value = val
+ _can_emit_signal = false
+ $GridContainer/X.value = value.x
+ $GridContainer/Y.value = value.y
+ _can_emit_signal = true
+@export var min_value := Vector2.ZERO:
+ set(val):
+ min_value = val
+ $GridContainer/X.min_value = val.x
+ $GridContainer/Y.min_value = val.y
+@export var max_value := Vector2(100.0, 100.0):
+ set(val):
+ max_value = val
+ $GridContainer/X.max_value = val.x
+ $GridContainer/Y.max_value = val.y
+@export var step := 1.0:
+ set(val):
+ step = val
+ for slider in get_sliders():
+ slider.step = val
+@export var allow_greater := false:
+ set(val):
+ allow_greater = val
+ for slider in get_sliders():
+ slider.allow_greater = val
+@export var allow_lesser := false:
+ set(val):
+ allow_lesser = val
+ for slider in get_sliders():
+ slider.allow_lesser = val
+@export var show_ratio := false:
+ set(val):
+ show_ratio = val
+ $Ratio.visible = val
+@export var grid_columns := 1:
+ set(val):
+ grid_columns = val
+ $GridContainer.columns = val
+@export var slider_min_size := Vector2(32, 24):
+ set(val):
+ slider_min_size = val
+ for slider in get_sliders():
+ slider.custom_minimum_size = val
+@export var snap_step := 1.0:
+ set(val):
+ snap_step = val
+ for slider in get_sliders():
+ slider.snap_step = val
+@export var snap_by_default := false:
+ set(val):
+ snap_by_default = val
+ for slider in get_sliders():
+ slider.snap_by_default = val
+@export var prefix_x := "X:":
+ set(val):
+ prefix_x = val
+ $GridContainer/X.prefix = val
+@export var prefix_y := "Y:":
+ set(val):
+ prefix_y = val
+ $GridContainer/Y.prefix = val
+@export var suffix_x := "":
+ set(val):
+ suffix_x = val
+ $GridContainer/X.suffix = val
+@export var suffix_y := "":
+ set(val):
+ suffix_y = val
+ $GridContainer/Y.suffix = val
var ratio := Vector2.ONE
var _locked_ratio := false
@@ -28,19 +91,19 @@ var _can_emit_signal := true
func _ready() -> void:
- if not Engine.editor_hint: # Pixelorama specific code
+ if not Engine.is_editor_hint(): # Pixelorama specific code
$Ratio.modulate = Global.modulate_icon_color
-func get_sliders() -> Array:
+func get_sliders() -> Array[ValueSlider]:
return [$GridContainer/X, $GridContainer/Y]
func press_ratio_button(pressed: bool) -> void:
- $"%RatioButton".pressed = pressed
+ $"%RatioButton".button_pressed = pressed
-# Greatest common divisor
+## Greatest common divisor
func _gcd(a: int, b: int) -> int:
return a if b == 0 else _gcd(b, a % b)
@@ -48,17 +111,17 @@ func _gcd(a: int, b: int) -> int:
func _on_X_value_changed(val: float) -> void:
value.x = val
if _locked_ratio:
- self.value.y = max(min_value.y, (value.x / ratio.x) * ratio.y)
+ value.y = maxf(min_value.y, (value.x / ratio.x) * ratio.y)
if _can_emit_signal:
- emit_signal("value_changed", value)
+ value_changed.emit(value)
func _on_Y_value_changed(val: float) -> void:
value.y = val
if _locked_ratio:
- self.value.x = max(min_value.x, (value.y / ratio.y) * ratio.x)
+ value.x = maxf(min_value.x, (value.y / ratio.y) * ratio.x)
if _can_emit_signal:
- emit_signal("value_changed", value)
+ value_changed.emit(value)
func _on_RatioButton_toggled(button_pressed: bool) -> void:
@@ -68,100 +131,4 @@ func _on_RatioButton_toggled(button_pressed: bool) -> void:
ratio = Vector2.ONE
else:
ratio = value / divisor
- emit_signal("ratio_toggled", button_pressed)
-
-
-# Setters
-
-
-func _set_editable(val: bool) -> void:
- editable = val
- for slider in get_sliders():
- slider.editable = val
- $"%RatioButton".disabled = not val
-
-
-func _set_value(val: Vector2) -> void:
- value = val
- _can_emit_signal = false
- $GridContainer/X.value = value.x
- $GridContainer/Y.value = value.y
- _can_emit_signal = true
-
-
-func _set_min_value(val: Vector2) -> void:
- min_value = val
- $GridContainer/X.min_value = val.x
- $GridContainer/Y.min_value = val.y
-
-
-func _set_max_value(val: Vector2) -> void:
- max_value = val
- $GridContainer/X.max_value = val.x
- $GridContainer/Y.max_value = val.y
-
-
-func _set_step(val: float) -> void:
- step = val
- for slider in get_sliders():
- slider.step = val
-
-
-func _set_allow_greater(val: bool) -> void:
- allow_greater = val
- for slider in get_sliders():
- slider.allow_greater = val
-
-
-func _set_allow_lesser(val: bool) -> void:
- allow_lesser = val
- for slider in get_sliders():
- slider.allow_lesser = val
-
-
-func _set_show_ratio(val: bool) -> void:
- show_ratio = val
- $Ratio.visible = val
-
-
-func _set_grid_columns(val: int) -> void:
- grid_columns = val
- $GridContainer.columns = val
-
-
-func _set_slider_min_size(val: Vector2) -> void:
- slider_min_size = val
- for slider in get_sliders():
- slider.rect_min_size = val
-
-
-func _set_snap_step(val: float) -> void:
- snap_step = val
- for slider in get_sliders():
- slider.snap_step = val
-
-
-func _set_snap_by_default(val: bool) -> void:
- snap_by_default = val
- for slider in get_sliders():
- slider.snap_by_default = val
-
-
-func _set_prefix_x(val: String) -> void:
- prefix_x = val
- $GridContainer/X.prefix = val
-
-
-func _set_prefix_y(val: String) -> void:
- prefix_y = val
- $GridContainer/Y.prefix = val
-
-
-func _set_suffix_x(val: String) -> void:
- suffix_x = val
- $GridContainer/X.suffix = val
-
-
-func _set_suffix_y(val: String) -> void:
- suffix_y = val
- $GridContainer/Y.suffix = val
+ ratio_toggled.emit(button_pressed)
diff --git a/src/UI/Nodes/ValueSliderV2.tscn b/src/UI/Nodes/ValueSliderV2.tscn
index c84d8f6def3..6ebfef5dacb 100644
--- a/src/UI/Nodes/ValueSliderV2.tscn
+++ b/src/UI/Nodes/ValueSliderV2.tscn
@@ -2,24 +2,24 @@
[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1]
[ext_resource path="res://src/UI/Nodes/ValueSliderV2.gd" type="Script" id=2]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=5]
+[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture2D" id=3]
+[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture2D" id=4]
+[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture2D" id=5]
[node name="ValueSliderV2" type="HBoxContainer"]
-margin_right = 45.0
-margin_bottom = 52.0
+offset_right = 45.0
+offset_bottom = 52.0
script = ExtResource( 2 )
[node name="GridContainer" type="GridContainer" parent="."]
-margin_right = 45.0
-margin_bottom = 52.0
+offset_right = 45.0
+offset_bottom = 52.0
size_flags_horizontal = 3
-[node name="X" type="TextureProgress" parent="GridContainer"]
-margin_right = 45.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 32, 24 )
+[node name="X" type="TextureProgressBar" parent="GridContainer"]
+offset_right = 45.0
+offset_bottom = 24.0
+custom_minimum_size = Vector2( 32, 24 )
mouse_default_cursor_shape = 2
size_flags_horizontal = 3
theme_type_variation = "ValueSlider"
@@ -31,11 +31,11 @@ stretch_margin_bottom = 3
script = ExtResource( 1 )
prefix = "X:"
-[node name="Y" type="TextureProgress" parent="GridContainer"]
-margin_top = 28.0
-margin_right = 45.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 32, 24 )
+[node name="Y" type="TextureProgressBar" parent="GridContainer"]
+offset_top = 28.0
+offset_right = 45.0
+offset_bottom = 52.0
+custom_minimum_size = Vector2( 32, 24 )
mouse_default_cursor_shape = 2
size_flags_horizontal = 3
theme_type_variation = "ValueSlider"
@@ -49,15 +49,15 @@ prefix = "Y:"
[node name="Ratio" type="Control" parent="."]
visible = false
-margin_left = 36.0
-margin_right = 52.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 16, 0 )
+offset_left = 36.0
+offset_right = 52.0
+offset_bottom = 52.0
+custom_minimum_size = Vector2( 16, 0 )
[node name="RatioGuides" type="NinePatchRect" parent="Ratio" groups=["UIButtons"]]
anchor_bottom = 1.0
-margin_right = 9.0
-rect_min_size = Vector2( 9, 0 )
+offset_right = 9.0
+custom_minimum_size = Vector2( 9, 0 )
texture = ExtResource( 4 )
region_rect = Rect2( 0, 0, 9, 44 )
patch_margin_top = 15
@@ -69,11 +69,11 @@ anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -8.0
-margin_top = -8.0
-margin_right = 8.0
-margin_bottom = 8.0
-hint_tooltip = "Lock aspect ratio"
+offset_left = -8.0
+offset_top = -8.0
+offset_right = 8.0
+offset_bottom = 8.0
+tooltip_text = "Lock aspect ratio"
mouse_default_cursor_shape = 2
toggle_mode = true
texture_normal = ExtResource( 3 )
diff --git a/src/UI/Nodes/ValueSliderV3.gd b/src/UI/Nodes/ValueSliderV3.gd
index 4e23b03fd73..0c9f448743d 100644
--- a/src/UI/Nodes/ValueSliderV3.gd
+++ b/src/UI/Nodes/ValueSliderV3.gd
@@ -1,28 +1,100 @@
-tool
+@tool
class_name ValueSliderV3
extends HBoxContainer
+## A class that combines three ValueSlider nodes, for easy usage with Vector3 values.
+## Also supports aspect ratio locking.
signal value_changed(value)
signal ratio_toggled(button_pressed)
-export var editable := true setget _set_editable
-export var value := Vector3.ZERO setget _set_value
-export var min_value := Vector3.ZERO setget _set_min_value
-export var max_value := Vector3(100.0, 100.0, 100.0) setget _set_max_value
-export var step := 1.0 setget _set_step
-export var allow_greater := false setget _set_allow_greater
-export var allow_lesser := false setget _set_allow_lesser
-export var show_ratio := false setget _set_show_ratio
-export(int, 1, 2) var grid_columns := 1 setget _set_grid_columns
-export var slider_min_size := Vector2(32, 24) setget _set_slider_min_size
-export var snap_step := 1.0 setget _set_snap_step
-export var snap_by_default := false setget _set_snap_by_default
-export var prefix_x := "X:" setget _set_prefix_x
-export var prefix_y := "Y:" setget _set_prefix_y
-export var prefix_z := "Z:" setget _set_prefix_z
-export var suffix_x := "" setget _set_suffix_x
-export var suffix_y := "" setget _set_suffix_y
-export var suffix_z := "" setget _set_suffix_z
+@export var editable := true:
+ set(val):
+ editable = val
+ for slider in get_sliders():
+ slider.editable = val
+ $"%RatioButton".disabled = not val
+@export var value := Vector3.ZERO:
+ set(val):
+ value = val
+ _can_emit_signal = false
+ $GridContainer/X.value = value.x
+ $GridContainer/Y.value = value.y
+ $GridContainer/Z.value = value.z
+ _can_emit_signal = true
+@export var min_value := Vector3.ZERO:
+ set(val):
+ min_value = val
+ $GridContainer/X.min_value = val.x
+ $GridContainer/Y.min_value = val.y
+ $GridContainer/Z.min_value = val.z
+@export var max_value := Vector3(100.0, 100.0, 100.0):
+ set(val):
+ max_value = val
+ $GridContainer/X.max_value = val.x
+ $GridContainer/Y.max_value = val.y
+ $GridContainer/Z.max_value = val.z
+@export var step := 1.0:
+ set(val):
+ step = val
+ for slider in get_sliders():
+ slider.step = val
+@export var allow_greater := false:
+ set(val):
+ allow_greater = val
+ for slider in get_sliders():
+ slider.allow_greater = val
+@export var allow_lesser := false:
+ set(val):
+ allow_lesser = val
+ for slider in get_sliders():
+ slider.allow_lesser = val
+@export var show_ratio := false:
+ set(val):
+ show_ratio = val
+ $Ratio.visible = val
+@export var grid_columns := 1:
+ set(val):
+ show_ratio = val
+ $Ratio.visible = val
+@export var slider_min_size := Vector2(32, 24):
+ set(val):
+ slider_min_size = val
+ for slider in get_sliders():
+ slider.custom_minimum_size = val
+@export var snap_step := 1.0:
+ set(val):
+ snap_step = val
+ for slider in get_sliders():
+ slider.snap_step = val
+@export var snap_by_default := false:
+ set(val):
+ snap_by_default = val
+ for slider in get_sliders():
+ slider.snap_by_default = val
+@export var prefix_x := "X:":
+ set(val):
+ prefix_x = val
+ $GridContainer/X.prefix = val
+@export var prefix_y := "Y:":
+ set(val):
+ prefix_y = val
+ $GridContainer/Y.prefix = val
+@export var prefix_z := "Z:":
+ set(val):
+ prefix_z = val
+ $GridContainer/Z.prefix = val
+@export var suffix_x := "":
+ set(val):
+ suffix_x = val
+ $GridContainer/X.suffix = val
+@export var suffix_y := "":
+ set(val):
+ suffix_y = val
+ $GridContainer/Y.suffix = val
+@export var suffix_z := "":
+ set(val):
+ suffix_z = val
+ $GridContainer/Z.suffix = val
var ratio := Vector3.ONE
var _locked_ratio := false
@@ -30,19 +102,19 @@ var _can_emit_signal := true
func _ready() -> void:
- if not Engine.editor_hint: # Pixelorama specific code
+ if not Engine.is_editor_hint(): # Pixelorama specific code
$Ratio.modulate = Global.modulate_icon_color
-func get_sliders() -> Array:
+func get_sliders() -> Array[ValueSlider]:
return [$GridContainer/X, $GridContainer/Y, $GridContainer/Z]
func press_ratio_button(pressed: bool) -> void:
- $"%RatioButton".pressed = pressed
+ $"%RatioButton".button_pressed = pressed
-# Greatest common divisor
+## Greatest common divisor
func _gcd(a: int, b: int) -> int:
return a if b == 0 else _gcd(b, a % b)
@@ -50,28 +122,28 @@ func _gcd(a: int, b: int) -> int:
func _on_X_value_changed(val: float) -> void:
value.x = val
if _locked_ratio:
- self.value.y = max(min_value.y, (value.x / ratio.x) * ratio.y)
- self.value.z = max(min_value.z, (value.x / ratio.x) * ratio.z)
+ value.y = maxf(min_value.y, (value.x / ratio.x) * ratio.y)
+ value.z = maxf(min_value.z, (value.x / ratio.x) * ratio.z)
if _can_emit_signal:
- emit_signal("value_changed", value)
+ value_changed.emit(value)
func _on_Y_value_changed(val: float) -> void:
value.y = val
if _locked_ratio:
- self.value.x = max(min_value.x, (value.y / ratio.y) * ratio.x)
- self.value.z = max(min_value.z, (value.y / ratio.y) * ratio.z)
+ value.x = maxf(min_value.x, (value.y / ratio.y) * ratio.x)
+ value.z = maxf(min_value.z, (value.y / ratio.y) * ratio.z)
if _can_emit_signal:
- emit_signal("value_changed", value)
+ value_changed.emit(value)
func _on_Z_value_changed(val: float) -> void:
value.z = val
if _locked_ratio:
- self.value.x = max(min_value.x, (value.z / ratio.z) * ratio.x)
- self.value.y = max(min_value.y, (value.z / ratio.z) * ratio.y)
+ value.x = maxf(min_value.x, (value.z / ratio.z) * ratio.x)
+ value.y = maxf(min_value.y, (value.z / ratio.z) * ratio.y)
if _can_emit_signal:
- emit_signal("value_changed", value)
+ value_changed.emit(value)
func _on_RatioButton_toggled(button_pressed: bool) -> void:
@@ -81,113 +153,4 @@ func _on_RatioButton_toggled(button_pressed: bool) -> void:
ratio = Vector3.ONE
else:
ratio = value / divisor
- emit_signal("ratio_toggled", button_pressed)
-
-
-# Setters
-
-
-func _set_editable(val: bool) -> void:
- editable = val
- for slider in get_sliders():
- slider.editable = val
- $"%RatioButton".disabled = not val
-
-
-func _set_value(val: Vector3) -> void:
- value = val
- _can_emit_signal = false
- $GridContainer/X.value = value.x
- $GridContainer/Y.value = value.y
- $GridContainer/Z.value = value.z
- _can_emit_signal = true
-
-
-func _set_min_value(val: Vector3) -> void:
- min_value = val
- $GridContainer/X.min_value = val.x
- $GridContainer/Y.min_value = val.y
- $GridContainer/Z.min_value = val.z
-
-
-func _set_max_value(val: Vector3) -> void:
- max_value = val
- $GridContainer/X.max_value = val.x
- $GridContainer/Y.max_value = val.y
- $GridContainer/Z.max_value = val.z
-
-
-func _set_step(val: float) -> void:
- step = val
- for slider in get_sliders():
- slider.step = val
-
-
-func _set_allow_greater(val: bool) -> void:
- allow_greater = val
- for slider in get_sliders():
- slider.allow_greater = val
-
-
-func _set_allow_lesser(val: bool) -> void:
- allow_lesser = val
- for slider in get_sliders():
- slider.allow_lesser = val
-
-
-func _set_show_ratio(val: bool) -> void:
- show_ratio = val
- $Ratio.visible = val
-
-
-func _set_grid_columns(val: int) -> void:
- grid_columns = val
- $GridContainer.columns = val
-
-
-func _set_slider_min_size(val: Vector2) -> void:
- slider_min_size = val
- for slider in get_sliders():
- slider.rect_min_size = val
-
-
-func _set_snap_step(val: float) -> void:
- snap_step = val
- for slider in get_sliders():
- slider.snap_step = val
-
-
-func _set_snap_by_default(val: bool) -> void:
- snap_by_default = val
- for slider in get_sliders():
- slider.snap_by_default = val
-
-
-func _set_prefix_x(val: String) -> void:
- prefix_x = val
- $GridContainer/X.prefix = val
-
-
-func _set_prefix_y(val: String) -> void:
- prefix_y = val
- $GridContainer/Y.prefix = val
-
-
-func _set_prefix_z(val: String) -> void:
- prefix_z = val
- $GridContainer/Z.prefix = val
-
-
-func _set_suffix_x(val: String) -> void:
- suffix_x = val
- $GridContainer/X.suffix = val
-
-
-func _set_suffix_y(val: String) -> void:
- suffix_y = val
- $GridContainer/Y.suffix = val
-
-
-func _set_suffix_z(val: String) -> void:
- suffix_z = val
- $GridContainer/Z.suffix = val
+ ratio_toggled.emit(button_pressed)
diff --git a/src/UI/Nodes/ValueSliderV3.tscn b/src/UI/Nodes/ValueSliderV3.tscn
index 4b28f8f7c19..9c96cd74dbc 100644
--- a/src/UI/Nodes/ValueSliderV3.tscn
+++ b/src/UI/Nodes/ValueSliderV3.tscn
@@ -2,24 +2,24 @@
[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1]
[ext_resource path="res://src/UI/Nodes/ValueSliderV3.gd" type="Script" id=2]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=5]
+[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture2D" id=3]
+[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture2D" id=4]
+[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture2D" id=5]
[node name="ValueSliderV3" type="HBoxContainer"]
-margin_right = 45.0
-margin_bottom = 52.0
+offset_right = 45.0
+offset_bottom = 52.0
script = ExtResource( 2 )
[node name="GridContainer" type="GridContainer" parent="."]
-margin_right = 45.0
-margin_bottom = 80.0
+offset_right = 45.0
+offset_bottom = 80.0
size_flags_horizontal = 3
-[node name="X" type="TextureProgress" parent="GridContainer"]
-margin_right = 45.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 32, 24 )
+[node name="X" type="TextureProgressBar" parent="GridContainer"]
+offset_right = 45.0
+offset_bottom = 24.0
+custom_minimum_size = Vector2( 32, 24 )
mouse_default_cursor_shape = 2
size_flags_horizontal = 3
theme_type_variation = "ValueSlider"
@@ -31,11 +31,11 @@ stretch_margin_bottom = 3
script = ExtResource( 1 )
prefix = "X:"
-[node name="Y" type="TextureProgress" parent="GridContainer"]
-margin_top = 28.0
-margin_right = 45.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 32, 24 )
+[node name="Y" type="TextureProgressBar" parent="GridContainer"]
+offset_top = 28.0
+offset_right = 45.0
+offset_bottom = 52.0
+custom_minimum_size = Vector2( 32, 24 )
mouse_default_cursor_shape = 2
size_flags_horizontal = 3
theme_type_variation = "ValueSlider"
@@ -47,11 +47,11 @@ stretch_margin_bottom = 3
script = ExtResource( 1 )
prefix = "Y:"
-[node name="Z" type="TextureProgress" parent="GridContainer"]
-margin_top = 56.0
-margin_right = 45.0
-margin_bottom = 80.0
-rect_min_size = Vector2( 32, 24 )
+[node name="Z" type="TextureProgressBar" parent="GridContainer"]
+offset_top = 56.0
+offset_right = 45.0
+offset_bottom = 80.0
+custom_minimum_size = Vector2( 32, 24 )
mouse_default_cursor_shape = 2
size_flags_horizontal = 3
theme_type_variation = "ValueSlider"
@@ -65,15 +65,15 @@ prefix = "Z:"
[node name="Ratio" type="Control" parent="."]
visible = false
-margin_left = 36.0
-margin_right = 52.0
-margin_bottom = 80.0
-rect_min_size = Vector2( 16, 0 )
+offset_left = 36.0
+offset_right = 52.0
+offset_bottom = 80.0
+custom_minimum_size = Vector2( 16, 0 )
[node name="RatioGuides" type="NinePatchRect" parent="Ratio" groups=["UIButtons"]]
anchor_bottom = 1.0
-margin_right = 9.0
-rect_min_size = Vector2( 9, 0 )
+offset_right = 9.0
+custom_minimum_size = Vector2( 9, 0 )
texture = ExtResource( 4 )
region_rect = Rect2( 0, 0, 9, 44 )
patch_margin_top = 15
@@ -85,11 +85,11 @@ anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -8.0
-margin_top = -8.0
-margin_right = 8.0
-margin_bottom = 8.0
-hint_tooltip = "Lock aspect ratio"
+offset_left = -8.0
+offset_top = -8.0
+offset_right = 8.0
+offset_bottom = 8.0
+tooltip_text = "Lock aspect ratio"
mouse_default_cursor_shape = 2
toggle_mode = true
texture_normal = ExtResource( 3 )
diff --git a/src/UI/PerspectiveEditor/LineButton.tscn b/src/UI/PerspectiveEditor/LineButton.tscn
index 9da19d7e5ec..929c98df468 100644
--- a/src/UI/PerspectiveEditor/LineButton.tscn
+++ b/src/UI/PerspectiveEditor/LineButton.tscn
@@ -4,35 +4,35 @@
[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=3]
[node name="LineButton" type="VBoxContainer"]
-margin_right = 159.0
-margin_bottom = 20.0
+offset_right = 159.0
+offset_bottom = 20.0
theme_type_variation = "CollapsibleContainer"
script = ExtResource( 3 )
[node name="HBoxContainer" type="HBoxContainer" parent="."]
visible = false
-margin_top = 24.0
-margin_right = 159.0
-margin_bottom = 76.0
+offset_top = 24.0
+offset_right = 159.0
+offset_bottom = 76.0
[node name="Spacer" type="Control" parent="HBoxContainer"]
-margin_right = 20.0
-margin_bottom = 52.0
-rect_min_size = Vector2( 20, 0 )
+offset_right = 20.0
+offset_bottom = 52.0
+custom_minimum_size = Vector2( 20, 0 )
[node name="VSeparator" type="VSeparator" parent="HBoxContainer"]
-margin_left = 24.0
-margin_right = 28.0
-margin_bottom = 52.0
+offset_left = 24.0
+offset_right = 28.0
+offset_bottom = 52.0
[node name="Properties" type="VBoxContainer" parent="HBoxContainer"]
-margin_left = 32.0
-margin_right = 83.0
-margin_bottom = 52.0
+offset_left = 32.0
+offset_right = 83.0
+offset_bottom = 52.0
size_flags_horizontal = 3
[node name="AngleSlider" parent="HBoxContainer/Properties" instance=ExtResource( 1 )]
-margin_right = 51.0
+offset_right = 51.0
max_value = 359.999
step = 0.001
allow_greater = true
@@ -41,9 +41,9 @@ suffix = "ยฐ"
[node name="LengthSlider" parent="HBoxContainer/Properties" instance=ExtResource( 1 )]
unique_name_in_owner = true
-margin_top = 28.0
-margin_right = 51.0
-margin_bottom = 52.0
+offset_top = 28.0
+offset_right = 51.0
+offset_bottom = 52.0
min_value = 1.0
max_value = 19999.0
value = 19999.0
@@ -52,12 +52,12 @@ prefix = "Length:"
suffix = "px"
[node name="Delete" type="Button" parent="HBoxContainer"]
-margin_left = 87.0
-margin_right = 151.0
-margin_bottom = 52.0
+offset_left = 87.0
+offset_right = 151.0
+offset_bottom = 52.0
text = "Remove"
[node name="VSeparator2" type="VSeparator" parent="HBoxContainer"]
-margin_left = 155.0
-margin_right = 159.0
-margin_bottom = 52.0
+offset_left = 155.0
+offset_right = 159.0
+offset_bottom = 52.0
diff --git a/src/UI/PerspectiveEditor/PerspectiveEditor.gd b/src/UI/PerspectiveEditor/PerspectiveEditor.gd
index 4e5859ef492..72898d36ae0 100644
--- a/src/UI/PerspectiveEditor/PerspectiveEditor.gd
+++ b/src/UI/PerspectiveEditor/PerspectiveEditor.gd
@@ -1,32 +1,32 @@
extends Control
var axes: Node2D
-var do_pool = [] # A pool that stores data of points removed by undo
-var delete_pool = [] # A pool that containing deleted data and their index
+var do_pool := [] ## A pool that stores data of points removed by undo
+var delete_pool := [] ## A pool that containing deleted data and their index
var vanishing_point_res := preload("res://src/UI/PerspectiveEditor/VanishingPoint.tscn")
var tracker_disabled := false
-onready var vanishing_point_container = $"%VanishingPointContainer"
+@onready var vanishing_point_container = $"%VanishingPointContainer"
func _on_AddPoint_pressed() -> void:
do_pool.clear() # Reset (clears Redo history of vanishing points)
- var project = Global.current_project
+ var project := Global.current_project
project.undos += 1
project.undo_redo.create_action("Add Vanishing Point")
- project.undo_redo.add_do_method(self, "add_vanishing_point", true)
- project.undo_redo.add_undo_method(self, "undo_add_vanishing_point")
+ project.undo_redo.add_do_method(add_vanishing_point.bind(true))
+ project.undo_redo.add_undo_method(undo_add_vanishing_point)
project.undo_redo.commit_action()
-func _on_TrackerLines_toggled(button_pressed):
+func _on_TrackerLines_toggled(button_pressed: bool):
for point in vanishing_point_container.get_children():
tracker_disabled = !button_pressed
func add_vanishing_point(is_redo := false):
- var vanishing_point := vanishing_point_res.instance()
+ var vanishing_point := vanishing_point_res.instantiate()
vanishing_point_container.add_child(vanishing_point)
- if is_redo and !do_pool.empty():
+ if is_redo and !do_pool.is_empty():
# if it's a redo then initialize it with the redo data
vanishing_point.initiate(do_pool.pop_back())
vanishing_point.update_data_to_project()
@@ -41,23 +41,23 @@ func undo_add_vanishing_point():
point.update_data_to_project(true)
-func delete_point(idx):
- var project = Global.current_project
+func delete_point(idx: int):
+ var project := Global.current_project
project.undos += 1
project.undo_redo.create_action("Delete Vanishing Point")
- project.undo_redo.add_do_method(self, "do_delete_point", idx)
- project.undo_redo.add_undo_method(self, "undo_delete_point", idx)
+ project.undo_redo.add_do_method(do_delete_point.bind(idx))
+ project.undo_redo.add_undo_method(undo_delete_point.bind(idx))
project.undo_redo.commit_action()
-func do_delete_point(idx):
+func do_delete_point(idx: int):
var point = vanishing_point_container.get_child(idx)
delete_pool.append(point.serialize())
point.queue_free()
point.update_data_to_project(true)
-func undo_delete_point(idx):
+func undo_delete_point(idx: int):
var point = delete_pool.pop_back()
Global.current_project.vanishing_points.insert(idx, point)
update_points()
@@ -70,7 +70,7 @@ func update_points():
# Add the "updated" vanising points from the current_project
for idx in Global.current_project.vanishing_points.size():
# Create the point
- var vanishing_point := vanishing_point_res.instance()
+ var vanishing_point := vanishing_point_res.instantiate()
vanishing_point_container.add_child(vanishing_point)
# Initialize it
var point_data = Global.current_project.vanishing_points[idx]
diff --git a/src/UI/PerspectiveEditor/PerspectiveEditor.tscn b/src/UI/PerspectiveEditor/PerspectiveEditor.tscn
index bb4bb9bfaf8..53067d3222f 100644
--- a/src/UI/PerspectiveEditor/PerspectiveEditor.tscn
+++ b/src/UI/PerspectiveEditor/PerspectiveEditor.tscn
@@ -1,80 +1,63 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://cap1bhavhi33g"]
-[ext_resource path="res://src/UI/PerspectiveEditor/PerspectiveEditor.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/PerspectiveEditor/PerspectiveEditor.gd" id="1"]
[node name="PerspectiveEditor" type="Control"]
+custom_minimum_size = Vector2(270, 10)
+layout_mode = 3
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = -1013.0
-margin_bottom = -510.0
-rect_min_size = Vector2( 270, 10 )
-script = ExtResource( 1 )
+offset_right = -1013.0
+offset_bottom = -510.0
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-self_modulate = Color( 0.698039, 0.698039, 0.698039, 0.698039 )
+self_modulate = Color(0.698039, 0.698039, 0.698039, 0.698039)
+clip_contents = true
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 4.0
-margin_right = -4.0
-rect_clip_content = true
+offset_left = 4.0
+offset_right = -4.0
size_flags_vertical = 3
-__meta__ = {
-"_editor_description_": ""
-}
[node name="Header" type="HBoxContainer" parent="VBoxContainer"]
-margin_right = 262.0
-margin_bottom = 30.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="VBoxContainer/Header"]
-margin_top = 8.0
-margin_right = 232.0
-margin_bottom = 22.0
+layout_mode = 2
size_flags_horizontal = 3
-theme_type_variation = "Header"
+theme_type_variation = &"HeaderSmall"
text = "Perspective Editor"
-align = 1
-valign = 1
[node name="AddPoint" type="Button" parent="VBoxContainer/Header"]
-margin_left = 232.0
-margin_right = 262.0
-margin_bottom = 30.0
-rect_min_size = Vector2( 30, 30 )
+custom_minimum_size = Vector2(30, 30)
+layout_mode = 2
text = "+"
clip_text = true
[node name="TrackerLines" type="CheckButton" parent="VBoxContainer"]
-margin_top = 34.0
-margin_right = 262.0
-margin_bottom = 74.0
-pressed = true
+layout_mode = 2
text = "Tracker Lines"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
-margin_top = 78.0
-margin_right = 262.0
-margin_bottom = 82.0
+layout_mode = 2
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer"]
-margin_top = 86.0
-margin_right = 262.0
-margin_bottom = 90.0
+layout_mode = 2
[node name="Content" type="ScrollContainer" parent="VBoxContainer"]
-margin_top = 94.0
-margin_right = 262.0
-margin_bottom = 210.0
+layout_mode = 2
size_flags_vertical = 3
[node name="VanishingPointContainer" type="VBoxContainer" parent="VBoxContainer/Content"]
unique_name_in_owner = true
-margin_right = 262.0
-margin_bottom = 116.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-custom_constants/separation = 5
+theme_override_constants/separation = 5
[connection signal="pressed" from="VBoxContainer/Header/AddPoint" to="." method="_on_AddPoint_pressed"]
[connection signal="toggled" from="VBoxContainer/TrackerLines" to="." method="_on_TrackerLines_toggled"]
diff --git a/src/UI/PerspectiveEditor/PerspectiveLine.gd b/src/UI/PerspectiveEditor/PerspectiveLine.gd
index 476b889a940..a77cd97da25 100644
--- a/src/UI/PerspectiveEditor/PerspectiveLine.gd
+++ b/src/UI/PerspectiveEditor/PerspectiveLine.gd
@@ -7,7 +7,7 @@ const CIRCLE_RAD := 4
var angle := 0
var length := 19999
-var hidden = false
+var is_hidden = false
var has_focus := false
var track_mouse := false
var change_length = false
@@ -17,8 +17,7 @@ var _vanishing_point: Node
func serialize() -> Dictionary:
- var data = {"angle": angle, "length": length}
- return data
+ return {"angle": angle, "length": length}
func deserialize(data: Dictionary):
@@ -30,7 +29,7 @@ func deserialize(data: Dictionary):
func initiate(data: Dictionary, vanishing_point: Node):
_vanishing_point = vanishing_point
- width = Global.camera.zoom.x * LINE_WIDTH
+ width = LINE_WIDTH / Global.camera.zoom.x
Global.canvas.add_child(self)
deserialize(data)
refresh()
@@ -42,24 +41,26 @@ func refresh():
func draw_perspective_line():
- var start = Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value)
+ var start := Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value)
points[0] = start
- if hidden:
+ if is_hidden:
points[1] = start
else:
- points[1] = (start + Vector2(length * cos(deg2rad(angle)), length * sin(deg2rad(angle))))
+ points[1] = (
+ start + Vector2(length * cos(deg_to_rad(angle)), length * sin(deg_to_rad(angle)))
+ )
func hide_perspective_line():
- var start = Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value)
+ var start := Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value)
points[1] = start
- hidden = true
+ is_hidden = true
func _input(event: InputEvent) -> void:
if event is InputEventMouse:
- var mouse_point = Global.canvas.current_pixel
- var project_size = Global.current_project.size
+ var mouse_point := Global.canvas.current_pixel
+ var project_size := Global.current_project.size
if track_mouse:
if !Global.can_draw or !Global.has_focus or Global.perspective_editor.tracker_disabled:
@@ -67,68 +68,68 @@ func _input(event: InputEvent) -> void:
return
default_color.a = 0.5
if Rect2(Vector2.ZERO, project_size).has_point(mouse_point):
- var start = Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value)
- hidden = false
+ var start := Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value)
+ is_hidden = false
draw_perspective_line()
- angle = rad2deg(mouse_point.angle_to_point(points[0]))
+ angle = rad_to_deg(points[0].angle_to_point(mouse_point))
if angle < 0:
angle += 360
points[1] = (
start
- + Vector2(length * cos(deg2rad(angle)), length * sin(deg2rad(angle)))
+ + Vector2(length * cos(deg_to_rad(angle)), length * sin(deg_to_rad(angle)))
)
else:
hide_perspective_line()
else:
try_rotate_scale()
- update()
+ queue_redraw()
func try_rotate_scale():
- var mouse_point = Global.canvas.current_pixel
- var project_size = Global.current_project.size
- var test_line := (points[1] - points[0]).rotated(deg2rad(90)).normalized()
- var from_a = mouse_point - test_line * Global.camera.zoom.x * LINE_WIDTH * 2
- var from_b = mouse_point + test_line * Global.camera.zoom.x * LINE_WIDTH * 2
+ var mouse_point := Global.canvas.current_pixel
+ var project_size := Global.current_project.size
+ var test_line := (points[1] - points[0]).rotated(deg_to_rad(90)).normalized()
+ var from_a := mouse_point - test_line * CIRCLE_RAD * 2 / Global.camera.zoom.x
+ var from_b := mouse_point + test_line * CIRCLE_RAD * 2 / Global.camera.zoom.x
if Input.is_action_just_pressed("left_mouse") and Global.can_draw and Global.has_focus:
if (
- Geometry.segment_intersects_segment_2d(from_a, from_b, points[0], points[1])
- or mouse_point.distance_to(points[1]) < Global.camera.zoom.x * CIRCLE_RAD * 2
+ Geometry2D.segment_intersects_segment(from_a, from_b, points[0], points[1])
+ or mouse_point.distance_to(points[1]) < CIRCLE_RAD * 2 / Global.camera.zoom.x
):
if (
!Rect2(Vector2.ZERO, project_size).has_point(mouse_point)
or Global.move_guides_on_canvas
):
- if mouse_point.distance_to(points[1]) < Global.camera.zoom.x * CIRCLE_RAD * 2:
+ if mouse_point.distance_to(points[1]) < CIRCLE_RAD * 2 / Global.camera.zoom.x:
change_length = true
has_focus = true
- Global.has_focus = false
- update()
+ Global.can_draw = false
+ queue_redraw()
if has_focus:
if Input.is_action_pressed("left_mouse"):
# rotation code here
if line_button:
- var new_angle = rad2deg(mouse_point.angle_to_point(points[0]))
+ var new_angle := rad_to_deg(points[0].angle_to_point(mouse_point))
if new_angle < 0:
new_angle += 360
_vanishing_point.angle_changed(new_angle, line_button)
if change_length:
- var new_length = mouse_point.distance_to(points[0])
+ var new_length := mouse_point.distance_to(points[0])
_vanishing_point.length_changed(new_length, line_button)
elif Input.is_action_just_released("left_mouse"):
- Global.has_focus = true
+ Global.can_draw = true
has_focus = false
change_length = false
- update()
+ queue_redraw()
func _draw() -> void:
- var mouse_point = Global.canvas.current_pixel
- var arc_points = []
- draw_circle(points[0], Global.camera.zoom.x * CIRCLE_RAD, default_color) # Starting circle
- if !track_mouse and mouse_point.distance_to(points[0]) < Global.camera.zoom.x * CIRCLE_RAD * 2:
+ var mouse_point := Global.canvas.current_pixel
+ var arc_points := PackedVector2Array()
+ draw_circle(points[0], CIRCLE_RAD / Global.camera.zoom.x, default_color) # Starting circle
+ if !track_mouse and mouse_point.distance_to(points[0]) < CIRCLE_RAD * 2 / Global.camera.zoom.x:
if (
!Rect2(Vector2.ZERO, Global.current_project.size).has_point(mouse_point)
or Global.move_guides_on_canvas
@@ -136,7 +137,7 @@ func _draw() -> void:
):
arc_points.append(points[0])
if (
- mouse_point.distance_to(points[1]) < Global.camera.zoom.x * CIRCLE_RAD * 2
+ mouse_point.distance_to(points[1]) < CIRCLE_RAD * 2 / Global.camera.zoom.x
or (has_focus and Input.is_action_pressed("left_mouse"))
):
if (
@@ -149,8 +150,8 @@ func _draw() -> void:
arc_points.append(points[1])
for point in arc_points:
- draw_arc(point, Global.camera.zoom.x * CIRCLE_RAD * 2, 0, 360, 360, default_color, 0.5)
+ draw_arc(point, CIRCLE_RAD * 2 / Global.camera.zoom.x, 0, 360, 360, default_color, 0.5)
- width = Global.camera.zoom.x * LINE_WIDTH
- if hidden: # Hidden line
+ width = LINE_WIDTH / Global.camera.zoom.x
+ if is_hidden: # Hidden line
return
diff --git a/src/UI/PerspectiveEditor/PerspectiveLine.tscn b/src/UI/PerspectiveEditor/PerspectiveLine.tscn
index 3cf1a1c3b98..1e41e8c17fc 100644
--- a/src/UI/PerspectiveEditor/PerspectiveLine.tscn
+++ b/src/UI/PerspectiveEditor/PerspectiveLine.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://bft8ul5o3c75v"]
-[ext_resource path="res://src/UI/PerspectiveEditor/PerspectiveLine.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/PerspectiveEditor/PerspectiveLine.gd" id="1"]
[node name="PerspectiveLine" type="Line2D"]
-points = PoolVector2Array( 0, 0, 64, 0 )
-script = ExtResource( 1 )
+points = PackedVector2Array(0, 0, 64, 0)
+script = ExtResource("1")
diff --git a/src/UI/PerspectiveEditor/PointCollapseContainer.gd b/src/UI/PerspectiveEditor/PointCollapseContainer.gd
index 0e6642340b5..1d281d29f71 100644
--- a/src/UI/PerspectiveEditor/PointCollapseContainer.gd
+++ b/src/UI/PerspectiveEditor/PointCollapseContainer.gd
@@ -1,41 +1,38 @@
extends Button
-# This is NOT related to the CollapsibleContainer class (though it behaves similarly)
-# i did it like this because the "Content" is part of a different node
-export var point_text := "" setget _set_text
-export var visible_content := false setget _set_visible_content
-onready var content = $"%Content"
+## This is NOT related to the CollapsibleContainer class (though it behaves similarly)
+## It was done like this because the "Content" is part of a different node
-
-func _ready() -> void:
- _set_visible(pressed)
- content.connect("visibility_changed", self, "_child_visibility_changed")
-
-
-func _set_text(value: String) -> void:
- $Label.text = value
- rect_min_size = $Label.rect_size
+@export var point_text := "":
+ set(value):
+ $Label.text = value
+ custom_minimum_size = $Label.size
+@export var visible_content := false:
+ set(value):
+ visible_content = value
+ button_pressed = value
+@onready var content := $"%Content"
-func _set_visible_content(value: bool) -> void:
- visible_content = value
- pressed = value
+func _ready() -> void:
+ _set_visible(button_pressed)
+ content.visibility_changed.connect(_child_visibility_changed)
-func _on_Button_toggled(button_pressed: bool) -> void:
- _set_visible(button_pressed)
+func _on_Button_toggled(press: bool) -> void:
+ _set_visible(press)
-func _set_visible(pressed: bool) -> void:
- if pressed:
- $TextureRect.rect_rotation = 0
+func _set_visible(press: bool) -> void:
+ if press:
+ $TextureRect.rotation = 0
else:
- $TextureRect.rect_rotation = -90
- content.visible = pressed
+ $TextureRect.rotation = -90
+ content.visible = press
-# Checks if a child becomes visible from another source and ensures
-# it remains invisible if the button is not pressed
+## Checks if a child becomes visible from another source and ensures
+## it remains invisible if the button is not pressed
func _child_visibility_changed() -> void:
- if not pressed:
+ if not button_pressed:
content.visible = false
diff --git a/src/UI/PerspectiveEditor/VanishingPoint.gd b/src/UI/PerspectiveEditor/VanishingPoint.gd
index d2a94db3d4c..8d63e5fe314 100644
--- a/src/UI/PerspectiveEditor/VanishingPoint.gd
+++ b/src/UI/PerspectiveEditor/VanishingPoint.gd
@@ -1,18 +1,18 @@
extends VBoxContainer
-var has_focus := false
-var perspective_lines = []
+var is_focused := false
+var perspective_lines := []
var color := Color(randf(), randf(), randf(), 1)
var tracker_line: PerspectiveLine
-onready var color_picker_button = $"%ColorPickerButton"
-onready var title := $"%PointCollapseContainer"
-onready var pos_x := $"%X"
-onready var pos_y := $"%Y"
-onready var line_buttons_container := $"%LinesContainer"
-onready var boundary_l := $Content/BoundaryL
-onready var boundary_r := $Content/BoundaryR
-onready var boundary_b := $Content/VBoxContainer/BoundaryB
+@onready var color_picker_button = $"%ColorPickerButton"
+@onready var title := $"%PointCollapseContainer"
+@onready var pos_x := $"%X"
+@onready var pos_y := $"%Y"
+@onready var line_buttons_container := $"%LinesContainer"
+@onready var boundary_l := $Content/BoundaryL
+@onready var boundary_r := $Content/BoundaryR
+@onready var boundary_b := $Content/VBoxContainer/BoundaryB
func serialize() -> Dictionary:
@@ -55,20 +55,20 @@ func initiate(start_data: Dictionary = {}, idx = -1) -> void:
else:
title.point_text = str("Point: ", get_parent().get_child_count())
# connect signals
- color_picker_button.connect("color_changed", self, "_on_color_changed")
- pos_x.connect("value_changed", self, "_on_pos_value_changed")
- pos_y.connect("value_changed", self, "_on_pos_value_changed")
+ color_picker_button.color_changed.connect(_on_color_changed)
+ pos_x.value_changed.connect(_on_pos_value_changed)
+ pos_y.value_changed.connect(_on_pos_value_changed)
func update_boundary_color():
- var luminance = (0.2126 * color.r) + (0.7152 * color.g) + (0.0722 * color.b)
+ var luminance := (0.2126 * color.r) + (0.7152 * color.g) + (0.0722 * color.b)
color.a = 0.9 - luminance * 0.4 # Interpolates between 0.5 to 0.9
boundary_l.color = color
boundary_r.color = color
boundary_b.color = color
-func _input(_event):
+func _input(_event: InputEvent):
var mouse_point = Global.canvas.current_pixel
var project_size = Global.current_project.size
var start = Vector2(pos_x.value, pos_y.value)
@@ -82,17 +82,17 @@ func _input(_event):
!Rect2(Vector2.ZERO, project_size).has_point(Global.canvas.current_pixel)
or Global.move_guides_on_canvas
):
- has_focus = true
- Global.has_focus = false
- if has_focus:
+ is_focused = true
+ Global.can_draw = false
+ if is_focused:
if Input.is_action_pressed("left_mouse"):
# rotation code here
pos_x.value = mouse_point.x
pos_y.value = mouse_point.y
elif Input.is_action_just_released("left_mouse"):
- Global.has_focus = true
- has_focus = false
+ Global.can_draw = true
+ is_focused = false
# Signals
@@ -119,7 +119,7 @@ func _on_pos_value_changed(_value: float) -> void:
func angle_changed(value: float, line_button):
# check if the properties are changing the line or is the line changing properties
- var angle_slider = line_button.find_node("AngleSlider")
+ var angle_slider = line_button.find_child("AngleSlider")
if angle_slider.value != value: # the line is changing the properties
angle_slider.value = value
else:
@@ -131,7 +131,7 @@ func angle_changed(value: float, line_button):
func length_changed(value: float, line_button):
# check if the properties are changing the line or is the line changing properties
- var length_slider = line_button.find_node("LengthSlider")
+ var length_slider = line_button.find_child("LengthSlider")
if length_slider.value != value: # the line is changing the properties
length_slider.value = value
else:
@@ -161,10 +161,10 @@ func generate_line_data(initial_data: Dictionary = {}) -> Dictionary:
func add_line(loaded_line_data := {}, is_tracker := false):
- var p_size = Global.current_project.size # for use later in function
+ var p_size := Global.current_project.size # for use later in function
# Note: line_data will automatically get default values if loaded_line_data = {}
- var line_data = generate_line_data(loaded_line_data)
+ var line_data := generate_line_data(loaded_line_data)
# This code in if block is purely for beautification
if pos_x.value > p_size.x / 2 and !loaded_line_data:
@@ -180,7 +180,7 @@ func add_line(loaded_line_data := {}, is_tracker := false):
line_data.length = p_size.x
# Create the visual line
- var line = preload("res://src/UI/PerspectiveEditor/PerspectiveLine.tscn").instance()
+ var line := preload("res://src/UI/PerspectiveEditor/PerspectiveLine.tscn").instantiate()
line.initiate(line_data, self)
# Set its mode accordingly
@@ -189,45 +189,43 @@ func add_line(loaded_line_data := {}, is_tracker := false):
tracker_line = line
tracker_line.hide_perspective_line()
else: # Settings for Normal mode
- var line_button = preload("res://src/UI/PerspectiveEditor/LineButton.tscn").instance()
+ var line_button := preload("res://src/UI/PerspectiveEditor/LineButton.tscn").instantiate()
line_buttons_container.add_child(line_button)
var index = line_button.get_parent().get_child_count() - 2
line_button.get_parent().move_child(line_button, index)
- var line_name = str(
- "Line", line_button.get_index() + 1, " (", int(abs(line_data.angle)), "ยฐ)"
- )
+ var line_name := str("Line", line_button.get_index() + 1, " (", absi(line_data.angle), "ยฐ)")
line_button.text = line_name
- var remove_button = line_button.find_node("Delete")
- var angle_slider = line_button.find_node("AngleSlider")
- var length_slider = line_button.find_node("LengthSlider")
+ var remove_button := line_button.find_child("Delete")
+ var angle_slider := line_button.find_child("AngleSlider")
+ var length_slider := line_button.find_child("LengthSlider")
- angle_slider.value = abs(line_data.angle)
+ angle_slider.value = absf(line_data.angle)
length_slider.value = line_data.length
line.line_button = line_button # In case we need to change properties from line
- angle_slider.connect("value_changed", self, "angle_changed", [line_button])
- length_slider.connect("value_changed", self, "length_changed", [line_button])
- remove_button.connect("pressed", self, "_remove_line_pressed", [line_button])
+ angle_slider.value_changed.connect(angle_changed.bind(line_button))
+ length_slider.value_changed.connect(length_changed.bind(line_button))
+ remove_button.pressed.connect(_remove_line_pressed.bind(line_button))
perspective_lines.append(line)
func remove_line(line_index):
var line_to_remove = perspective_lines[line_index]
- perspective_lines.remove(line_index)
+ perspective_lines.remove_at(line_index)
line_to_remove.queue_free()
func update_data_to_project(removal := false):
- var project = Global.current_project
- var idx = get_index()
+ var project := Global.current_project
+ var idx := get_index()
# If deletion is requested
if removal:
- project.vanishing_points.remove(idx)
+ project.vanishing_points.remove_at(idx)
return
# If project knows about this vanishing point then update it
- var data = serialize()
+ var data := serialize()
if idx < project.vanishing_points.size():
project.vanishing_points[idx] = data
# If project doesn't know about this vanishing point then NOW it knows
@@ -248,7 +246,7 @@ func refresh(index: int):
func refresh_line(index: int):
var line_button = line_buttons_container.get_child(index)
var line_data = perspective_lines[index].serialize()
- var line_name = str("Line", line_button.get_index() + 1, " (", int(abs(line_data.angle)), "ยฐ)")
+ var line_name := str("Line", line_button.get_index() + 1, " (", absi(line_data.angle), "ยฐ)")
line_button.text = line_name
perspective_lines[index].refresh()
diff --git a/src/UI/PerspectiveEditor/VanishingPoint.tscn b/src/UI/PerspectiveEditor/VanishingPoint.tscn
index 4bede9cbb47..3df1ffbed86 100644
--- a/src/UI/PerspectiveEditor/VanishingPoint.tscn
+++ b/src/UI/PerspectiveEditor/VanishingPoint.tscn
@@ -3,22 +3,22 @@
[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/UI/PerspectiveEditor/VanishingPoint.gd" type="Script" id=2]
[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.tscn" type="PackedScene" id=3]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=4]
+[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture2D" id=4]
[ext_resource path="res://src/UI/PerspectiveEditor/PointCollapseContainer.gd" type="Script" id=5]
[node name="VanishingPoint" type="VBoxContainer" groups=["Entry"]]
-margin_right = 261.0
-margin_bottom = 145.0
+offset_right = 261.0
+offset_bottom = 145.0
script = ExtResource( 2 )
[node name="TitleContainer" type="HBoxContainer" parent="."]
-margin_right = 261.0
-margin_bottom = 20.0
+offset_right = 261.0
+offset_bottom = 20.0
[node name="PointCollapseContainer" type="Button" parent="TitleContainer"]
unique_name_in_owner = true
-margin_right = 207.0
-margin_bottom = 20.0
+offset_right = 207.0
+offset_bottom = 20.0
mouse_default_cursor_shape = 2
size_flags_horizontal = 3
theme_type_variation = "CollapsibleCheckBox"
@@ -28,70 +28,70 @@ script = ExtResource( 5 )
[node name="TextureRect" type="TextureRect" parent="TitleContainer/PointCollapseContainer" groups=["UIButtons"]]
anchor_top = 0.5
anchor_bottom = 0.5
-margin_left = 2.0
-margin_top = -6.0
-margin_right = 14.0
-margin_bottom = 6.0
-rect_rotation = -90.0
-rect_pivot_offset = Vector2( 6, 6 )
+offset_left = 2.0
+offset_top = -6.0
+offset_right = 14.0
+offset_bottom = 6.0
+rotation = -90.0
+pivot_offset = Vector2( 6, 6 )
texture = ExtResource( 4 )
[node name="Label" type="Label" parent="TitleContainer/PointCollapseContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 14.0
-theme_type_variation = "Header"
+offset_left = 14.0
+theme_type_variation = &"HeaderSmall"
valign = 1
[node name="ColorPickerButton" type="ColorPickerButton" parent="TitleContainer"]
unique_name_in_owner = true
-margin_left = 211.0
-margin_right = 261.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 50, 0 )
+offset_left = 211.0
+offset_right = 261.0
+offset_bottom = 20.0
+custom_minimum_size = Vector2( 50, 0 )
[node name="Content" type="HBoxContainer" parent="."]
unique_name_in_owner = true
-margin_top = 24.0
-margin_right = 261.0
-margin_bottom = 130.0
+offset_top = 24.0
+offset_right = 261.0
+offset_bottom = 130.0
[node name="Spacer" type="Control" parent="Content"]
-margin_right = 5.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 5, 0 )
+offset_right = 5.0
+offset_bottom = 106.0
+custom_minimum_size = Vector2( 5, 0 )
[node name="BoundaryL" type="ColorRect" parent="Content"]
-margin_left = 9.0
-margin_right = 11.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 2, 0 )
+offset_left = 9.0
+offset_right = 11.0
+offset_bottom = 106.0
+custom_minimum_size = Vector2( 2, 0 )
[node name="VBoxContainer" type="VBoxContainer" parent="Content"]
-margin_left = 15.0
-margin_right = 255.0
-margin_bottom = 106.0
+offset_left = 15.0
+offset_right = 255.0
+offset_bottom = 106.0
size_flags_horizontal = 3
[node name="PointInfo" type="HBoxContainer" parent="Content/VBoxContainer"]
-margin_right = 240.0
-margin_bottom = 52.0
+offset_right = 240.0
+offset_bottom = 52.0
[node name="Label" type="Label" parent="Content/VBoxContainer/PointInfo"]
-margin_right = 56.0
-margin_bottom = 52.0
+offset_right = 56.0
+offset_bottom = 52.0
size_flags_vertical = 5
text = "Position:"
[node name="Position" type="VBoxContainer" parent="Content/VBoxContainer/PointInfo"]
-margin_left = 60.0
-margin_right = 240.0
-margin_bottom = 52.0
+offset_left = 60.0
+offset_right = 240.0
+offset_bottom = 52.0
size_flags_horizontal = 3
[node name="X" parent="Content/VBoxContainer/PointInfo/Position" instance=ExtResource( 1 )]
unique_name_in_owner = true
-margin_right = 180.0
+offset_right = 180.0
step = 0.5
allow_greater = true
allow_lesser = true
@@ -99,72 +99,72 @@ prefix = "X :"
[node name="Y" parent="Content/VBoxContainer/PointInfo/Position" instance=ExtResource( 1 )]
unique_name_in_owner = true
-margin_top = 28.0
-margin_right = 180.0
-margin_bottom = 52.0
+offset_top = 28.0
+offset_right = 180.0
+offset_bottom = 52.0
step = 0.5
allow_greater = true
allow_lesser = true
prefix = "Y :"
[node name="CollapsibleContainer" parent="Content/VBoxContainer" instance=ExtResource( 3 )]
-margin_top = 56.0
-margin_right = 240.0
-margin_bottom = 76.0
+offset_top = 56.0
+offset_right = 240.0
+offset_bottom = 76.0
text = "Lines"
[node name="HBoxContainer" type="HBoxContainer" parent="Content/VBoxContainer/CollapsibleContainer"]
visible = false
-margin_top = 24.0
-margin_right = 261.0
-margin_bottom = 44.0
+offset_top = 24.0
+offset_right = 261.0
+offset_bottom = 44.0
[node name="Spacer" type="Control" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer"]
-margin_right = 20.0
-margin_bottom = 20.0
-rect_min_size = Vector2( 20, 0 )
+offset_right = 20.0
+offset_bottom = 20.0
+custom_minimum_size = Vector2( 20, 0 )
[node name="VSeparator" type="VSeparator" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer"]
-margin_right = 4.0
-margin_bottom = 40.0
+offset_right = 4.0
+offset_bottom = 40.0
[node name="LinesContainer" type="VBoxContainer" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer"]
unique_name_in_owner = true
-margin_left = 24.0
-margin_right = 261.0
-margin_bottom = 20.0
+offset_left = 24.0
+offset_right = 261.0
+offset_bottom = 20.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="AddLine" type="Button" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer/LinesContainer"]
-margin_right = 237.0
-margin_bottom = 20.0
+offset_right = 237.0
+offset_bottom = 20.0
text = "Add Line"
[node name="Delete" type="Button" parent="Content/VBoxContainer"]
-margin_top = 80.0
-margin_right = 240.0
-margin_bottom = 100.0
-rect_min_size = Vector2( 40, 0 )
+offset_top = 80.0
+offset_right = 240.0
+offset_bottom = 100.0
+custom_minimum_size = Vector2( 40, 0 )
text = "Delete Point"
[node name="BoundaryB" type="ColorRect" parent="Content/VBoxContainer"]
-margin_top = 104.0
-margin_right = 240.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 0, 2 )
+offset_top = 104.0
+offset_right = 240.0
+offset_bottom = 106.0
+custom_minimum_size = Vector2( 0, 2 )
[node name="BoundaryR" type="ColorRect" parent="Content"]
-margin_left = 259.0
-margin_right = 261.0
-margin_bottom = 106.0
-rect_min_size = Vector2( 2, 0 )
+offset_left = 259.0
+offset_right = 261.0
+offset_bottom = 106.0
+custom_minimum_size = Vector2( 2, 0 )
[node name="HSeparator" type="HSeparator" parent="."]
-margin_top = 134.0
-margin_right = 261.0
-margin_bottom = 144.0
-custom_constants/separation = 10
+offset_top = 134.0
+offset_right = 261.0
+offset_bottom = 144.0
+theme_override_constants/separation = 10
[connection signal="toggled" from="TitleContainer/PointCollapseContainer" to="TitleContainer/PointCollapseContainer" method="_on_Button_toggled"]
[connection signal="pressed" from="Content/VBoxContainer/CollapsibleContainer/HBoxContainer/LinesContainer/AddLine" to="." method="_on_AddLine_pressed"]
diff --git a/src/UI/Recorder/Recorder.gd b/src/UI/Recorder/Recorder.gd
index 139ebbdbd39..3adc72e574a 100644
--- a/src/UI/Recorder/Recorder.gd
+++ b/src/UI/Recorder/Recorder.gd
@@ -4,32 +4,31 @@ signal frame_saved
enum Mode { CANVAS, PIXELORAMA }
-var mode: int = Mode.CANVAS
+var mode := Mode.CANVAS
var chosen_dir := ""
var save_dir := ""
var project: Project
-var cache := [] # Array of images stored during recording
-var frame_captured := 0 # A variable used to visualize frames captured
-var skip_amount := 1 # No of "do" actions after which a frame can be captured
-var current_frame_no := 0 # used to compare with skip_amount to see if it can be captured
+var cache: Array[Image] = [] ## Images stored during recording
+var frame_captured := 0 ## Used to visualize frames captured
+var skip_amount := 1 ## Number of "do" actions after which a frame can be captured
+var current_frame_no := 0 ## Used to compare with skip_amount to see if it can be captured
var resize := 100
-onready var project_list := $"%TargetProjectOption" as OptionButton
-onready var folder_button := $"%Folder" as Button
-onready var start_button := $"%Start" as Button
-onready var size_label := $"%Size" as Label
-onready var path_field := $"%Path" as LineEdit
+@onready var project_list := $"%TargetProjectOption" as OptionButton
+@onready var folder_button := $"%Folder" as Button
+@onready var start_button := $"%Start" as Button
+@onready var size_label := $"%Size" as Label
+@onready var path_field := $"%Path" as LineEdit
func _ready() -> void:
refresh_projects_list()
project = Global.current_project
- connect("frame_saved", self, "_on_frame_saved")
+ frame_saved.connect(_on_frame_saved)
# Make a recordings folder if there isn't one
- var dir := Directory.new()
- chosen_dir = Global.directory_module.xdg_data_home.plus_file("Recordings")
- dir.make_dir_recursive(chosen_dir)
+ chosen_dir = Global.home_data_directory.path_join("Recordings")
+ DirAccess.make_dir_recursive_absolute(chosen_dir)
path_field.text = chosen_dir
size_label.text = str("(", project.size.x, "ร", project.size.y, ")")
@@ -54,13 +53,10 @@ func initialize_recording() -> void:
save_dir[-1] = ""
# Create a new directory based on time
- var folder = str(
- project.name, OS.get_time().hour, "_", OS.get_time().minute, "_", OS.get_time().second
- )
- save_dir = save_dir.plus_file(folder)
- var dir := Directory.new()
-
-# warning-ignore:return_value_discarded
+ var time_dict := Time.get_time_dict_from_system()
+ var folder := str(project.name, time_dict.hour, "_", time_dict.minute, "_", time_dict.second)
+ var dir := DirAccess.open(save_dir)
+ save_dir = save_dir.path_join(folder)
dir.make_dir_recursive(save_dir)
capture_frame() # capture first frame
@@ -72,19 +68,21 @@ func capture_frame() -> void:
if current_frame_no != skip_amount:
return
current_frame_no = 0
- var image := Image.new()
+ var image: Image
if mode == Mode.PIXELORAMA:
- image = get_tree().root.get_viewport().get_texture().get_data()
- image.flip_y()
+ image = get_tree().root.get_viewport().get_texture().get_image()
else:
- var frame = project.frames[project.current_frame]
- image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
- Export.blend_all_layers(image, frame, Vector2(0, 0), project)
+ var frame := project.frames[project.current_frame]
+ image = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
+ Export.blend_all_layers(image, frame, Vector2i.ZERO, project)
if mode == Mode.CANVAS:
if resize != 100:
- image.unlock()
- image.resize(image.get_size().x * resize / 100, image.get_size().y * resize / 100, 0)
+ image.resize(
+ image.get_size().x * resize / 100,
+ image.get_size().y * resize / 100,
+ Image.INTERPOLATE_NEAREST
+ )
cache.append(image)
@@ -93,13 +91,13 @@ func _on_Timer_timeout() -> void:
# Saves frames little by little during recording
if cache.size() > 0:
save_frame(cache[0])
- cache.remove(0)
+ cache.remove_at(0)
func save_frame(img: Image) -> void:
- var save_file = str(project.name, "_", frame_captured, ".png")
- img.save_png(save_dir.plus_file(save_file))
- emit_signal("frame_saved")
+ var save_file := str(project.name, "_", frame_captured, ".png")
+ img.save_png(save_dir.path_join(save_file))
+ frame_saved.emit()
func _on_frame_saved() -> void:
@@ -123,11 +121,11 @@ func finalize_recording() -> void:
func disconnect_undo() -> void:
- project.undo_redo.disconnect("version_changed", self, "capture_frame")
+ project.undo_redo.version_changed.disconnect(capture_frame)
func connect_undo() -> void:
- project.undo_redo.connect("version_changed", self, "capture_frame")
+ project.undo_redo.version_changed.connect(capture_frame)
func _on_TargetProjectOption_item_selected(index: int) -> void:
@@ -154,9 +152,9 @@ func _on_Start_toggled(button_pressed: bool) -> void:
func _on_Settings_pressed() -> void:
- var settings := $Dialogs/Options as WindowDialog
- var pos := rect_position
- settings.popup(Rect2(pos, settings.rect_size))
+ var settings := $Dialogs/Options as Window
+ var pos := position
+ settings.popup(Rect2(pos, settings.size))
func _on_SkipAmount_value_changed(value: float) -> void:
@@ -195,5 +193,9 @@ func _on_Path_dir_selected(dir: String) -> void:
func _on_Fps_value_changed(value: float) -> void:
var dur_label := $Dialogs/Options/PanelContainer/VBoxContainer/Fps/Duration as Label
- var duration := stepify(1.0 / value, 0.0001)
+ var duration := snappedf(1.0 / value, 0.0001)
dur_label.text = str("= ", duration, " sec")
+
+
+func _on_options_close_requested() -> void:
+ $Dialogs/Options.hide()
diff --git a/src/UI/Recorder/Recorder.tscn b/src/UI/Recorder/Recorder.tscn
index f794e1dadbb..5b36e6f271a 100644
--- a/src/UI/Recorder/Recorder.tscn
+++ b/src/UI/Recorder/Recorder.tscn
@@ -1,358 +1,264 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://dl6ook010q86o"]
-[ext_resource path="res://assets/graphics/recorder/start.png" type="Texture" id=1]
-[ext_resource path="res://src/UI/Recorder/Recorder.gd" type="Script" id=2]
-[ext_resource path="res://assets/graphics/timeline/expandable.png" type="Texture" id=3]
-[ext_resource path="res://addons/keychain/assets/folder.svg" type="Texture" id=4]
+[ext_resource type="Texture2D" uid="uid://bgfqvkmstecr5" path="res://assets/graphics/recorder/start.png" id="1"]
+[ext_resource type="Script" path="res://src/UI/Recorder/Recorder.gd" id="2"]
+[ext_resource type="Texture2D" uid="uid://dinubfua8gqhw" path="res://assets/graphics/timeline/expandable.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://b0gbmkb8xwksb" path="res://addons/keychain/assets/folder.svg" id="4"]
[node name="Recorder" type="PanelContainer"]
-margin_left = 1.0
-margin_right = 195.0
-margin_bottom = 50.0
-rect_min_size = Vector2( 0, 36 )
-script = ExtResource( 2 )
+custom_minimum_size = Vector2(0, 36)
+offset_left = 1.0
+offset_right = 195.0
+offset_bottom = 50.0
+script = ExtResource("2")
[node name="ScrollContainer" type="ScrollContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 187.0
-margin_bottom = 43.0
-rect_min_size = Vector2( 36, 36 )
+custom_minimum_size = Vector2(36, 36)
+layout_mode = 2
[node name="CenterContainer" type="CenterContainer" parent="ScrollContainer"]
-margin_right = 180.0
-margin_bottom = 36.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="GridContainer" type="GridContainer" parent="ScrollContainer/CenterContainer"]
-margin_left = 4.0
-margin_top = 2.0
-margin_right = 176.0
-margin_bottom = 34.0
+layout_mode = 2
size_flags_vertical = 0
columns = 4
[node name="Captured" type="Label" parent="ScrollContainer/CenterContainer/GridContainer"]
visible = false
-margin_top = 9.0
-margin_right = 32.0
-margin_bottom = 23.0
+layout_mode = 2
[node name="TargetProjectOption" type="OptionButton" parent="ScrollContainer/CenterContainer/GridContainer"]
unique_name_in_owner = true
-margin_right = 100.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 100, 0 )
-hint_tooltip = "Choose project"
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
+tooltip_text = "Choose project"
clip_text = true
[node name="Start" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 104.0
-margin_right = 136.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Capture .png frames"
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Capture .png frames"
mouse_default_cursor_shape = 2
toggle_mode = true
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Start"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.0
-margin_top = -10.5
-margin_right = 10.0
-margin_bottom = 10.5
-texture = ExtResource( 1 )
-expand = true
+offset_left = -10.0
+offset_top = -10.5
+offset_right = 10.0
+offset_bottom = 10.5
+texture = ExtResource("1")
+expand_mode = 1
stretch_mode = 6
[node name="Settings" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]]
unique_name_in_owner = true
-margin_left = 140.0
-margin_right = 172.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Settings"
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Settings"
mouse_default_cursor_shape = 2
toggle_mode = true
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Settings"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -10.0
-margin_top = -10.5
-margin_right = 10.0
-margin_bottom = 10.5
-texture = ExtResource( 3 )
+offset_left = -10.0
+offset_top = -10.5
+offset_right = 10.0
+offset_bottom = 10.5
+texture = ExtResource("3")
stretch_mode = 6
[node name="Folder" type="Button" parent="ScrollContainer/CenterContainer/GridContainer"]
unique_name_in_owner = true
visible = false
-margin_left = 176.0
-margin_right = 208.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 32, 32 )
-hint_tooltip = "Open Folder"
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+tooltip_text = "Open Folder"
mouse_default_cursor_shape = 2
toggle_mode = true
-__meta__ = {
-"_editor_description_": ""
-}
[node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Folder"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 3.0
-margin_top = 3.0
-margin_right = -3.0
-margin_bottom = -3.0
-texture = ExtResource( 4 )
+offset_left = 3.0
+offset_top = 3.0
+offset_right = -3.0
+offset_bottom = -3.0
+texture = ExtResource("4")
stretch_mode = 6
[node name="Dialogs" type="Control" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 187.0
-margin_bottom = 43.0
+layout_mode = 2
mouse_filter = 2
-[node name="Options" type="WindowDialog" parent="Dialogs"]
-margin_right = 293.0
-margin_bottom = 259.0
-rect_min_size = Vector2( 295, 260 )
-window_title = "Options"
+[node name="Options" type="Window" parent="Dialogs"]
+size = Vector2i(400, 300)
+visible = false
[node name="PanelContainer" type="PanelContainer" parent="Dialogs/Options"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 9.0
-margin_top = 9.0
-margin_right = -9.0
-margin_bottom = -9.0
+offset_left = 9.0
+offset_top = 9.0
+offset_right = -9.0
+offset_bottom = -9.0
[node name="VBoxContainer" type="VBoxContainer" parent="Dialogs/Options/PanelContainer"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 270.0
-margin_bottom = 235.0
+layout_mode = 2
[node name="IntervalHeader" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
-margin_right = 263.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/IntervalHeader"]
-margin_right = 49.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Interval"
[node name="HSeparator" type="HSeparator" parent="Dialogs/Options/PanelContainer/VBoxContainer/IntervalHeader"]
-margin_left = 49.0
-margin_right = 263.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ActionGap" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
-margin_top = 18.0
-margin_right = 263.0
-margin_bottom = 42.0
+layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap"]
-margin_left = 2.0
-margin_top = 5.0
-margin_right = 131.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Capture frame every"
[node name="SkipAmount" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap"]
-margin_left = 135.0
-margin_right = 209.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="Label2" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap"]
-margin_left = 213.0
-margin_top = 5.0
-margin_right = 261.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Actions"
[node name="Fps" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
-margin_top = 46.0
-margin_right = 263.0
-margin_bottom = 70.0
+layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/Fps"]
-margin_left = 36.0
-margin_top = 5.0
-margin_right = 62.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Fps:"
[node name="Fps" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/Fps"]
-margin_left = 66.0
-margin_right = 140.0
-margin_bottom = 24.0
+layout_mode = 2
min_value = 1.0
value = 30.0
allow_greater = true
[node name="Duration" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/Fps"]
-margin_left = 144.0
-margin_top = 5.0
-margin_right = 226.0
-margin_bottom = 19.0
+layout_mode = 2
text = "= 0.0333 sec"
[node name="ModeHeader" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer" groups=["visible during recording"]]
-margin_top = 74.0
-margin_right = 263.0
-margin_bottom = 88.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeHeader"]
-margin_right = 36.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Mode"
[node name="HSeparator" type="HSeparator" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeHeader"]
-margin_left = 36.0
-margin_right = 263.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="ModeType" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer" groups=["visible during recording"]]
-margin_top = 92.0
-margin_right = 263.0
-margin_bottom = 132.0
+layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeType"]
-margin_left = 15.0
-margin_top = 13.0
-margin_right = 93.0
-margin_bottom = 27.0
+layout_mode = 2
text = "Canvas Only"
[node name="Mode" type="CheckButton" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeType"]
-margin_left = 97.0
-margin_right = 173.0
-margin_bottom = 40.0
-align = 1
+layout_mode = 2
[node name="Label2" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeType"]
-margin_left = 177.0
-margin_top = 13.0
-margin_right = 248.0
-margin_bottom = 27.0
+layout_mode = 2
text = "Pixelorama"
-[node name="ExportDimentions" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
-margin_top = 136.0
-margin_right = 263.0
-margin_bottom = 160.0
+[node name="OutputScale" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
+layout_mode = 2
alignment = 1
-[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions"]
-margin_left = 47.0
-margin_top = 5.0
-margin_right = 133.0
-margin_bottom = 19.0
-text = "Optput Scale:"
-align = 1
+[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale"]
+layout_mode = 2
+text = "Output Scale:"
-[node name="Size" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions"]
+[node name="Size" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale"]
unique_name_in_owner = true
-margin_left = 137.0
-margin_top = 5.0
-margin_right = 137.0
-margin_bottom = 19.0
-
-[node name="Resize" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions"]
-margin_left = 141.0
-margin_right = 215.0
-margin_bottom = 24.0
+layout_mode = 2
+
+[node name="Resize" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale"]
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 50.0
max_value = 1000.0
-step = 100.0
+step = 50.0
value = 100.0
allow_greater = true
suffix = "%"
-__meta__ = {
-"_editor_description_": ""
-}
[node name="PathHeader" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
-margin_top = 164.0
-margin_right = 263.0
-margin_bottom = 178.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathHeader"]
-margin_right = 28.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Path"
[node name="HSeparator" type="HSeparator" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathHeader"]
-margin_left = 28.0
-margin_right = 263.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PathContainer" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"]
-margin_top = 182.0
-margin_right = 263.0
-margin_bottom = 207.0
+layout_mode = 2
[node name="Path" type="LineEdit" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer"]
unique_name_in_owner = true
-margin_right = 171.0
-margin_bottom = 25.0
+layout_mode = 2
size_flags_horizontal = 3
-align = 1
-editable = false
placeholder_text = "Choose Destination --->"
+editable = false
[node name="Open" type="Button" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer"]
-margin_left = 175.0
-margin_right = 200.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 25, 25 )
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer/Open"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 2.0
-margin_top = 2.0
-margin_right = -2.0
-margin_bottom = -2.0
-texture = ExtResource( 4 )
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+texture = ExtResource("4")
stretch_mode = 6
[node name="Choose" type="Button" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer"]
-margin_left = 204.0
-margin_right = 263.0
-margin_bottom = 25.0
+layout_mode = 2
text = "Choose"
[node name="Path" type="FileDialog" parent="Dialogs"]
-margin_right = 445.0
-margin_bottom = 290.0
-rect_min_size = Vector2( 315, 290 )
-window_title = "Open a Directory"
-resizable = true
mode = 2
access = 2
@@ -363,10 +269,11 @@ access = 2
[connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/Start" to="." method="_on_Start_toggled"]
[connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Settings" to="." method="_on_Settings_pressed"]
[connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Folder" to="." method="_on_Open_pressed"]
+[connection signal="close_requested" from="Dialogs/Options" to="." method="_on_options_close_requested"]
[connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap/SkipAmount" to="." method="_on_SkipAmount_value_changed"]
[connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/Fps/Fps" to="." method="_on_Fps_value_changed"]
[connection signal="toggled" from="Dialogs/Options/PanelContainer/VBoxContainer/ModeType/Mode" to="." method="_on_Mode_toggled"]
-[connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions/Resize" to="." method="_on_SpinBox_value_changed"]
+[connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale/Resize" to="." method="_on_SpinBox_value_changed"]
[connection signal="pressed" from="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer/Open" to="." method="_on_Open_pressed"]
[connection signal="pressed" from="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer/Choose" to="." method="_on_Choose_pressed"]
[connection signal="dir_selected" from="Dialogs/Path" to="." method="_on_Path_dir_selected"]
diff --git a/src/UI/ReferenceImages/ReferenceImage.gd b/src/UI/ReferenceImages/ReferenceImage.gd
index 307b53b07ce..60eec8fcd0c 100644
--- a/src/UI/ReferenceImages/ReferenceImage.gd
+++ b/src/UI/ReferenceImages/ReferenceImage.gd
@@ -1,16 +1,15 @@
class_name ReferenceImage
-extends Sprite
-# A class describing a reference image
+extends Sprite2D
+## A class describing a reference image
signal properties_changed
-var project = Global.current_project
+var project := Global.current_project
-var shader: Shader = preload("res://src/Shaders/SilhouetteShader.gdshader")
+var shader := preload("res://src/Shaders/SilhouetteShader.gdshader")
-var image_path: String = ""
-
-var filter = false
+var image_path := ""
+var filter := false
var silhouette := false
@@ -19,22 +18,25 @@ func _ready() -> void:
func change_properties() -> void:
- emit_signal("properties_changed")
+ properties_changed.emit()
-# Resets the position and scale of the reference image.
+## Resets the position and scale of the reference image.
func position_reset() -> void:
position = project.size / 2.0
if texture != null:
scale = (
Vector2.ONE
- * min(project.size.x / texture.get_width(), project.size.y / texture.get_height())
+ * minf(
+ float(project.size.x) / texture.get_width(),
+ float(project.size.y) / texture.get_height()
+ )
)
else:
scale = Vector2.ONE
-# Serialize details of the reference image.
+## Serialize details of the reference image.
func serialize() -> Dictionary:
return {
"x": position.x,
@@ -51,28 +53,25 @@ func serialize() -> Dictionary:
}
-# Load details of the reference image from a dictionary.
-# Be aware that new ReferenceImages are created via deserialization.
-# This is because deserialization sets up some nice defaults.
+## Load details of the reference image from a dictionary.
+## Be aware that new ReferenceImages are created via deserialization.
+## This is because deserialization sets up some nice defaults.
func deserialize(d: Dictionary) -> void:
modulate = Color(1, 1, 1, 0.5)
if d.has("image_path"):
# Note that reference images are referred to by path.
# These images may be rather big.
- # Also
image_path = d["image_path"]
var img := Image.new()
if img.load(image_path) == OK:
- var itex := ImageTexture.new()
- # don't do FLAG_REPEAT - it could cause visual issues
- itex.create_from_image(img, Texture.FLAG_MIPMAPS)
+ var itex := ImageTexture.create_from_image(img)
texture = itex
# Apply the silhouette shader
- var mat = ShaderMaterial.new()
+ var mat := ShaderMaterial.new()
mat.shader = shader
# TODO: Lsbt - Add a option in prefrences to customize the color
# This color is almost black because it is less harsh
- mat.set_shader_param("silhouette_color", Color(0.069, 0.069326, 0.074219))
+ mat.set_shader_parameter("silhouette_color", Color(0.069, 0.069326, 0.074219))
set_material(mat)
# Now that the image may have been established...
@@ -96,14 +95,12 @@ func deserialize(d: Dictionary) -> void:
if d.has("filter"):
filter = d["filter"]
if d.has("silhouette"):
- get_material().set_shader_param("show_silhouette", d["silhouette"])
+ get_material().set_shader_parameter("show_silhouette", d["silhouette"])
change_properties()
-# Useful for HTML5
+## Useful for Web
func create_from_image(image: Image) -> void:
- var itex := ImageTexture.new()
- # don't do FLAG_REPEAT - it could cause visual issues
- itex.create_from_image(image, Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER)
+ var itex := ImageTexture.create_from_image(image)
texture = itex
position_reset()
diff --git a/src/UI/ReferenceImages/ReferenceImageButton.gd b/src/UI/ReferenceImages/ReferenceImageButton.gd
index 8e44586e456..8b56cbb9d52 100644
--- a/src/UI/ReferenceImages/ReferenceImageButton.gd
+++ b/src/UI/ReferenceImages/ReferenceImageButton.gd
@@ -1,23 +1,23 @@
extends Container
-# UI to handle reference image editing.
+## UI to handle reference image editing.
var element: ReferenceImage
-var _ignore_spinbox_changes = false
+var _ignore_spinbox_changes := false
func _ready():
- if OS.get_name() == "HTML5":
- $Interior/PathHeader/Path.visible = false
+ if OS.get_name() == "Web":
+ $Interior/PathHeader/Path3D.visible = false
$Interior/PathHeader/PathHTML.text = element.image_path
else:
$Interior/PathHeader/PathHTML.visible = false
- $Interior/PathHeader/Path.text = element.image_path
+ $Interior/PathHeader/Path3D.text = element.image_path
if !element.texture:
- $Interior/PreviewAndOptions/PreviewPanel/Warning.text = "Image Not Found!!!"
+ $Interior/PreviewAndOptions/PreviewPanel/Warning.text = "Image not found!"
else:
$Interior/PreviewAndOptions/PreviewPanel/Preview.texture = element.texture
- element.connect("properties_changed", self, "_update_properties")
+ element.properties_changed.connect(_update_properties)
_update_properties()
@@ -31,7 +31,7 @@ func _update_properties():
$Interior/PreviewAndOptions/Options/Position/X.max_value = element.project.size.x
$Interior/PreviewAndOptions/Options/Position/Y.max_value = element.project.size.y
$Interior/PreviewAndOptions/Options/Opacity.value = element.modulate.a * 100
- $Interior/OtherOptions/ApplyFilter.pressed = element.filter
+ $Interior/OtherOptions/ApplyFilter.button_pressed = element.filter
_ignore_spinbox_changes = false
@@ -45,11 +45,11 @@ func _on_Remove_pressed():
if index != -1:
queue_free()
element.queue_free()
- Global.current_project.reference_images.remove(index)
+ Global.current_project.reference_images.remove_at(index)
Global.current_project.change_project()
-func _on_Scale_value_changed(value):
+func _on_Scale_value_changed(value: float):
if _ignore_spinbox_changes:
return
element.scale.x = value / 100
@@ -57,21 +57,21 @@ func _on_Scale_value_changed(value):
element.change_properties()
-func _on_X_value_changed(value):
+func _on_X_value_changed(value: float):
if _ignore_spinbox_changes:
return
element.position.x = value
element.change_properties()
-func _on_Y_value_changed(value):
+func _on_Y_value_changed(value: float):
if _ignore_spinbox_changes:
return
element.position.y = value
element.change_properties()
-func _on_Opacity_value_changed(value):
+func _on_Opacity_value_changed(value: float):
if _ignore_spinbox_changes:
return
element.modulate.a = value / 100
@@ -79,20 +79,20 @@ func _on_Opacity_value_changed(value):
func _on_Path_pressed() -> void:
- OS.shell_open($Interior/PathHeader/Path.text.get_base_dir())
+ OS.shell_open($Interior/PathHeader/Path3D.text.get_base_dir())
+
+
+func _on_Silhouette_toggled(button_pressed: bool) -> void:
+ element.silhouette = button_pressed
+ element.get_material().set_shader_parameter("show_silhouette", button_pressed)
+ element.change_properties()
func _on_ApplyFilter_toggled(button_pressed: bool) -> void:
element.filter = button_pressed
if element.texture:
if element.filter:
- element.texture.flags = Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER
+ element.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR
else:
- element.texture.flags = Texture.FLAG_MIPMAPS
- element.change_properties()
-
-
-func _on_Silhouette_toggled(button_pressed: bool) -> void:
- element.silhouette = button_pressed
- element.get_material().set_shader_param("show_silhouette", button_pressed)
+ element.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
element.change_properties()
diff --git a/src/UI/ReferenceImages/ReferenceImageButton.tscn b/src/UI/ReferenceImages/ReferenceImageButton.tscn
index 43028e09579..f2336ab3371 100644
--- a/src/UI/ReferenceImages/ReferenceImageButton.tscn
+++ b/src/UI/ReferenceImages/ReferenceImageButton.tscn
@@ -1,167 +1,123 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://5quwfcfl5o1e"]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/ReferenceImages/ReferenceImageButton.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/ReferenceImages/ReferenceImageButton.gd" id="2"]
[node name="ReferenceImageButton" type="PanelContainer"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = -969.0
-margin_bottom = -581.0
+offset_right = -969.0
+offset_bottom = -581.0
size_flags_horizontal = 3
-script = ExtResource( 2 )
+script = ExtResource("2")
[node name="Interior" type="VBoxContainer" parent="."]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 325.0
-margin_bottom = 133.0
+layout_mode = 2
[node name="PathHeader" type="HBoxContainer" parent="Interior"]
-margin_right = 318.0
-margin_bottom = 14.0
-custom_constants/separation = 0
-
-[node name="Path" type="LinkButton" parent="Interior/PathHeader"]
-modulate = Color( 0.552941, 1, 0.298039, 1 )
-margin_right = 106.0
-margin_bottom = 14.0
+layout_mode = 2
+theme_override_constants/separation = 0
+
+[node name="Path3D" type="LinkButton" parent="Interior/PathHeader"]
+modulate = Color(0.552941, 1, 0.298039, 1)
+layout_mode = 2
size_flags_horizontal = 3
underline = 1
[node name="PathHTML" type="Label" parent="Interior/PathHeader"]
-self_modulate = Color( 0.552941, 1, 0.298039, 1 )
-margin_left = 106.0
-margin_right = 212.0
-margin_bottom = 14.0
+self_modulate = Color(0.552941, 1, 0.298039, 1)
+layout_mode = 2
size_flags_horizontal = 3
[node name="HSeparator" type="HSeparator" parent="Interior/PathHeader"]
-margin_left = 212.0
-margin_right = 318.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PreviewAndOptions" type="HBoxContainer" parent="Interior"]
-margin_top = 18.0
-margin_right = 318.0
-margin_bottom = 98.0
+layout_mode = 2
[node name="Options" type="GridContainer" parent="Interior/PreviewAndOptions"]
-margin_right = 234.0
-margin_bottom = 80.0
+layout_mode = 2
size_flags_horizontal = 3
columns = 2
[node name="PosLabel" type="Label" parent="Interior/PreviewAndOptions/Options"]
-margin_top = 5.0
-margin_right = 56.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Position:"
-align = 2
[node name="Position" type="HBoxContainer" parent="Interior/PreviewAndOptions/Options"]
-margin_left = 60.0
-margin_right = 234.0
-margin_bottom = 24.0
+layout_mode = 2
size_flags_horizontal = 3
-[node name="X" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource( 1 )]
-margin_right = 85.0
+[node name="X" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource("1")]
+layout_mode = 2
allow_greater = true
allow_lesser = true
-[node name="Y" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource( 1 )]
-margin_left = 89.0
-margin_right = 174.0
+[node name="Y" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource("1")]
+layout_mode = 2
allow_greater = true
allow_lesser = true
[node name="ScaleLabel" type="Label" parent="Interior/PreviewAndOptions/Options"]
-margin_top = 33.0
-margin_right = 56.0
-margin_bottom = 47.0
+layout_mode = 2
text = "Scale:"
-align = 2
-[node name="Scale" parent="Interior/PreviewAndOptions/Options" instance=ExtResource( 1 )]
-margin_left = 60.0
-margin_top = 28.0
-margin_right = 234.0
-margin_bottom = 52.0
+[node name="Scale" parent="Interior/PreviewAndOptions/Options" instance=ExtResource("1")]
+layout_mode = 2
allow_greater = true
allow_lesser = true
[node name="OpacityLabel" type="Label" parent="Interior/PreviewAndOptions/Options"]
-margin_top = 61.0
-margin_right = 56.0
-margin_bottom = 75.0
+layout_mode = 2
text = "Opacity:"
-align = 2
-[node name="Opacity" parent="Interior/PreviewAndOptions/Options" instance=ExtResource( 1 )]
-margin_left = 60.0
-margin_top = 56.0
-margin_right = 234.0
-margin_bottom = 80.0
+[node name="Opacity" parent="Interior/PreviewAndOptions/Options" instance=ExtResource("1")]
+layout_mode = 2
[node name="PreviewPanel" type="Panel" parent="Interior/PreviewAndOptions"]
-margin_left = 238.0
-margin_right = 318.0
-margin_bottom = 80.0
-rect_min_size = Vector2( 80, 80 )
+custom_minimum_size = Vector2(80, 80)
+layout_mode = 2
[node name="Warning" type="Label" parent="Interior/PreviewAndOptions/PreviewPanel"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-align = 1
-valign = 1
-autowrap = true
[node name="Preview" type="TextureRect" parent="Interior/PreviewAndOptions/PreviewPanel"]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 2.0
-margin_top = 2.0
-margin_right = -2.0
-margin_bottom = -2.0
-expand = true
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+expand_mode = 1
[node name="OtherOptions" type="HBoxContainer" parent="Interior"]
-margin_top = 102.0
-margin_right = 318.0
-margin_bottom = 126.0
+layout_mode = 2
alignment = 2
[node name="ApplyFilter" type="CheckBox" parent="Interior/OtherOptions"]
-margin_right = 101.0
-margin_bottom = 24.0
-hint_tooltip = "Uses a magnifying filter, to enable smooth zooming in of the texture."
+layout_mode = 2
+tooltip_text = "Uses a magnifying filter, to enable smooth zooming in of the texture."
text = "Apply Filter"
-align = 1
[node name="Silhouette" type="CheckBox" parent="Interior/OtherOptions"]
-margin_left = 105.0
-margin_right = 198.0
-margin_bottom = 24.0
-hint_tooltip = "Blacks out the image and makes all opaque pixels a dark color."
+layout_mode = 2
text = "Silhouette"
[node name="Reset" type="Button" parent="Interior/OtherOptions"]
-margin_left = 202.0
-margin_right = 250.0
-margin_bottom = 24.0
+layout_mode = 2
text = "Reset"
-icon_align = 1
[node name="Remove" type="Button" parent="Interior/OtherOptions"]
-margin_left = 254.0
-margin_right = 318.0
-margin_bottom = 24.0
-custom_colors/font_color = Color( 1, 0.266667, 0.266667, 1 )
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 0.266667, 0.266667, 1)
text = "Remove"
-[connection signal="pressed" from="Interior/PathHeader/Path" to="." method="_on_Path_pressed"]
+[connection signal="pressed" from="Interior/PathHeader/Path3D" to="." method="_on_Path_pressed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Position/X" to="." method="_on_X_value_changed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Position/Y" to="." method="_on_Y_value_changed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Scale" to="." method="_on_Scale_value_changed"]
diff --git a/src/UI/ReferenceImages/ReferencesPanel.gd b/src/UI/ReferenceImages/ReferencesPanel.gd
index 78f1adf1b1b..53f83d2e4dd 100644
--- a/src/UI/ReferenceImages/ReferencesPanel.gd
+++ b/src/UI/ReferenceImages/ReferencesPanel.gd
@@ -1,8 +1,9 @@
class_name ReferencesPanel
extends VBoxContainer
-# Panel for reference image management
+## Panel for reference image management
-onready var list = $"Scroll/List"
+var reference_image_button_tscn := preload("res://src/UI/ReferenceImages/ReferenceImageButton.tscn")
+@onready var list = $"Scroll/List"
func project_changed():
@@ -16,6 +17,6 @@ func project_changed():
# And update.
for ref in Global.current_project.reference_images:
ref.visible = true
- var l = preload("res://src/UI/ReferenceImages/ReferenceImageButton.tscn").instance()
+ var l = reference_image_button_tscn.instantiate()
l.element = ref
list.add_child(l)
diff --git a/src/UI/ReferenceImages/ReferencesPanel.tscn b/src/UI/ReferenceImages/ReferencesPanel.tscn
index cfa373cd00d..05ccca9bc28 100644
--- a/src/UI/ReferenceImages/ReferencesPanel.tscn
+++ b/src/UI/ReferenceImages/ReferencesPanel.tscn
@@ -1,51 +1,40 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://b75xk2ix8xxml"]
-[ext_resource path="res://src/UI/ReferenceImages/ReferencesPanel.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/ReferenceImages/ReferencesPanel.gd" id="1"]
[node name="Reference Images" type="VBoxContainer"]
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-script = ExtResource( 1 )
+script = ExtResource("1")
[node name="Header" type="HBoxContainer" parent="."]
-margin_right = 1280.0
-margin_bottom = 14.0
-custom_constants/separation = 0
+layout_mode = 2
+theme_override_constants/separation = 0
[node name="HSeparator2" type="HSeparator" parent="Header"]
-margin_right = 582.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
-margin_left = 582.0
-margin_right = 697.0
-margin_bottom = 14.0
-theme_type_variation = "Header"
+layout_mode = 2
+theme_type_variation = &"HeaderSmall"
text = "Reference Images"
[node name="HSeparator" type="HSeparator" parent="Header"]
-margin_left = 697.0
-margin_right = 1280.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="."]
-margin_top = 18.0
-margin_right = 1280.0
-margin_bottom = 32.0
+layout_mode = 2
text = "When opening an image, it may be imported as a reference."
-autowrap = true
[node name="Scroll" type="ScrollContainer" parent="."]
-margin_top = 36.0
-margin_right = 1280.0
-margin_bottom = 720.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="List" type="VBoxContainer" parent="Scroll"]
-margin_right = 1280.0
-margin_bottom = 684.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
diff --git a/src/UI/Tabs.gd b/src/UI/Tabs.gd
index f41622087b1..084fd8fbdc9 100644
--- a/src/UI/Tabs.gd
+++ b/src/UI/Tabs.gd
@@ -1,15 +1,15 @@
-extends Tabs
+extends TabBar
-onready var unsaved_changes_dialog: ConfirmationDialog = Global.control.find_node(
- "UnsavedCanvasDialog"
-)
+@onready
+var unsaved_changes_dialog: ConfirmationDialog = Global.control.find_child("UnsavedCanvasDialog")
-# Thanks to https://github.com/godotengine/godot/issues/64498#issuecomment-1217992089
+## Handles closing tab with middle-click
+## Thanks to https://github.com/godotengine/godot/issues/64498#issuecomment-1217992089
func _gui_input(event: InputEvent) -> void:
if not event is InputEventMouseButton:
return
- if !event.pressed or event.button_index != BUTTON_MIDDLE:
+ if !event.pressed or event.button_index != MOUSE_BUTTON_MIDDLE:
return
var rect := get_rect()
var w := rect.position.x
@@ -21,7 +21,7 @@ func _gui_input(event: InputEvent) -> void:
if w_limit < w:
return
if get_tab_rect(i).has_point(event.position):
- _on_Tabs_tab_close(i)
+ _on_tab_close_pressed(i)
return
@@ -29,30 +29,30 @@ func _on_Tabs_tab_changed(tab: int) -> void:
Global.current_project_index = tab
-func _on_Tabs_tab_close(tab: int) -> void:
+func _on_tab_close_pressed(tab: int) -> void:
if Global.projects.size() == 1:
return
if Global.projects[tab].has_changed:
- if !unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"):
- unsaved_changes_dialog.connect("confirmed", self, "delete_tab", [tab])
+ if !unsaved_changes_dialog.confirmed.is_connected(delete_tab):
+ unsaved_changes_dialog.confirmed.connect(delete_tab.bind(tab))
unsaved_changes_dialog.popup_centered()
Global.dialog_open(true)
else:
delete_tab(tab)
-func _on_Tabs_reposition_active_tab_request(idx_to: int) -> void:
- var temp: Project = Global.projects[Global.current_project_index]
+func _on_active_tab_rearranged(idx_to: int) -> void:
+ var temp := Global.projects[Global.current_project_index]
Global.projects.erase(temp)
Global.projects.insert(idx_to, temp)
# Change save paths
- var temp_save_path = OpenSave.current_save_paths[Global.current_project_index]
- OpenSave.current_save_paths.remove(Global.current_project_index)
+ var temp_save_path := OpenSave.current_save_paths[Global.current_project_index]
+ OpenSave.current_save_paths.remove_at(Global.current_project_index)
OpenSave.current_save_paths.insert(idx_to, temp_save_path)
- var temp_backup_path = OpenSave.backup_save_paths[Global.current_project_index]
- OpenSave.backup_save_paths.remove(Global.current_project_index)
+ var temp_backup_path := OpenSave.backup_save_paths[Global.current_project_index]
+ OpenSave.backup_save_paths.remove_at(Global.current_project_index)
OpenSave.backup_save_paths.insert(idx_to, temp_backup_path)
@@ -60,8 +60,8 @@ func delete_tab(tab: int) -> void:
remove_tab(tab)
Global.projects[tab].remove()
OpenSave.remove_backup(tab)
- OpenSave.current_save_paths.remove(tab)
- OpenSave.backup_save_paths.remove(tab)
+ OpenSave.current_save_paths.remove_at(tab)
+ OpenSave.backup_save_paths.remove_at(tab)
if Global.current_project_index == tab:
if tab > 0:
Global.current_project_index -= 1
@@ -70,5 +70,5 @@ func delete_tab(tab: int) -> void:
else:
if tab < Global.current_project_index:
Global.current_project_index -= 1
- if unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"):
- unsaved_changes_dialog.disconnect("confirmed", self, "delete_tab")
+ if unsaved_changes_dialog.confirmed.is_connected(delete_tab):
+ unsaved_changes_dialog.confirmed.disconnect(delete_tab)
diff --git a/src/UI/Timeline/AnimationTagUI.tscn b/src/UI/Timeline/AnimationTagUI.tscn
index b1b1504f41a..3a1f5e60bfd 100644
--- a/src/UI/Timeline/AnimationTagUI.tscn
+++ b/src/UI/Timeline/AnimationTagUI.tscn
@@ -3,22 +3,22 @@
[ext_resource path="res://src/UI/Timeline/AnimationTagUI.gd" type="Script" id=1]
[node name="AnimationTagUI" type="VBoxContainer"]
-margin_right = 39.0
-margin_bottom = 32.0
-rect_min_size = Vector2( 39, 32 )
+offset_right = 39.0
+offset_bottom = 32.0
+custom_minimum_size = Vector2( 39, 32 )
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Line2D" type="Line2D" parent="."]
-points = PoolVector2Array( 0, 32, 0, 0, 39, 0, 39, 32 )
+points = PackedVector2Array( 0, 32, 0, 0, 39, 0, 39, 32 )
width = 1.0
[node name="Label" type="Label" parent="."]
-margin_left = 7.0
-margin_right = 32.0
-margin_bottom = 32.0
+offset_left = 7.0
+offset_right = 32.0
+offset_bottom = 32.0
size_flags_horizontal = 4
size_flags_vertical = 3
text = "Idle"
diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd
index cde038f2353..d8e150ed56b 100644
--- a/src/UI/Timeline/AnimationTimeline.gd
+++ b/src/UI/Timeline/AnimationTimeline.gd
@@ -1,43 +1,46 @@
extends Panel
var is_animation_running := false
-var animation_loop := 1 # 0 is no loop, 1 is cycle loop, 2 is ping-pong loop
+var animation_loop := 1 ## 0 is no loop, 1 is cycle loop, 2 is ping-pong loop
var animation_forward := true
var first_frame := 0
var last_frame := 0
var is_mouse_hover := false
-var cel_size := 36 setget cel_size_changed
+var cel_size := 36:
+ set = _cel_size_changed
var min_cel_size := 36
var max_cel_size := 144
var past_above_canvas := true
var future_above_canvas := true
-var frame_button_node = preload("res://src/UI/Timeline/FrameButton.tscn")
+var frame_button_node := preload("res://src/UI/Timeline/FrameButton.tscn")
-onready var old_scroll: int = 0 # The previous scroll state of $ScrollContainer
-onready var tag_spacer = find_node("TagSpacer")
-onready var start_spacer = find_node("StartSpacer")
-onready var add_layer_list: MenuButton = $"%AddLayerList"
+@onready var old_scroll := 0 ## The previous scroll state of $ScrollContainer
+@onready var tag_spacer = find_child("TagSpacer")
+@onready var start_spacer = find_child("StartSpacer")
+@onready var add_layer_list: MenuButton = $"%AddLayerList"
-onready var timeline_scroll: ScrollContainer = find_node("TimelineScroll")
-onready var frame_scroll_container: Control = find_node("FrameScrollContainer")
-onready var frame_scroll_bar: HScrollBar = find_node("FrameScrollBar")
-onready var tag_scroll_container: ScrollContainer = find_node("TagScroll")
-onready var layer_frame_h_split: HSplitContainer = find_node("LayerFrameHSplit")
-onready var fps_spinbox: ValueSlider = find_node("FPSValue")
-onready var onion_skinning_button: BaseButton = find_node("OnionSkinning")
-onready var loop_animation_button: BaseButton = find_node("LoopAnim")
-onready var drag_highlight: ColorRect = find_node("DragHighlight")
+@onready var timeline_scroll: ScrollContainer = find_child("TimelineScroll")
+@onready var frame_scroll_container: Control = find_child("FrameScrollContainer")
+@onready var frame_scroll_bar: HScrollBar = find_child("FrameScrollBar")
+@onready var tag_scroll_container: ScrollContainer = find_child("TagScroll")
+@onready var layer_frame_h_split: HSplitContainer = find_child("LayerFrameHSplit")
+@onready var fps_spinbox: ValueSlider = find_child("FPSValue")
+@onready var onion_skinning_button: BaseButton = find_child("OnionSkinning")
+@onready var loop_animation_button: BaseButton = find_child("LoopAnim")
+@onready var drag_highlight: ColorRect = find_child("DragHighlight")
func _ready() -> void:
- add_layer_list.get_popup().connect("id_pressed", self, "add_layer")
- frame_scroll_bar.connect("value_changed", self, "_frame_scroll_changed")
+ min_cel_size = get_tree().current_scene.theme.default_font_size + 24
+ cel_size = min_cel_size
+ add_layer_list.get_popup().id_pressed.connect(add_layer)
+ frame_scroll_bar.value_changed.connect(_frame_scroll_changed)
Global.animation_timer.wait_time = 1 / Global.current_project.fps
fps_spinbox.value = Global.current_project.fps
# config loading
layer_frame_h_split.split_offset = Global.config_cache.get_value("timeline", "layer_size", 0)
- self.cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size) # Call setter
+ cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size) # Call setter
var past_rate = Global.config_cache.get_value(
"timeline", "past_rate", Global.onion_skinning_past_rate
)
@@ -55,14 +58,14 @@ func _ready() -> void:
)
$"%PastOnionSkinning".value = past_rate
$"%FutureOnionSkinning".value = future_rate
- $"%BlueRedMode".pressed = blue_red
+ $"%BlueRedMode".button_pressed = blue_red
$"%PastPlacement".select(0 if past_above else 1)
$"%FuturePlacement".select(0 if future_above else 1)
# emit signals that were supposed to be emitted (Check if it's still required in godot 4)
- $"%PastPlacement".emit_signal("item_selected", 0 if past_above else 1)
- $"%FuturePlacement".emit_signal("item_selected", 0 if future_above else 1)
+ $"%PastPlacement".item_selected.emit(0 if past_above else 1)
+ $"%FuturePlacement".item_selected.emit(0 if future_above else 1)
# Makes sure that the frame and tag scroll bars are in the right place:
- Global.layer_vbox.call_deferred("emit_signal", "resized")
+ Global.layer_vbox.emit_signal.call_deferred("resized")
func _notification(what: int) -> void:
@@ -72,19 +75,18 @@ func _notification(what: int) -> void:
func _input(event: InputEvent) -> void:
var mouse_pos := get_global_mouse_position()
- var timeline_rect := Rect2(rect_global_position, rect_size)
+ var timeline_rect := Rect2(global_position, size)
if timeline_rect.has_point(mouse_pos):
- if Input.is_key_pressed(KEY_CONTROL):
- self.cel_size += (
- 2 * int(event.is_action("zoom_in"))
- - 2 * int(event.is_action("zoom_out"))
- )
+ if Input.is_key_pressed(KEY_CTRL):
+ cel_size += (2 * int(event.is_action("zoom_in")) - 2 * int(event.is_action("zoom_out")))
func _get_minimum_size() -> Vector2:
# X targets enough to see layers, 1 frame, vertical scrollbar, and padding
- # Y targets engough to see 1 layer
- return Vector2(Global.layer_vbox.rect_size.x + cel_size + 26, cel_size + 105)
+ # Y targets enough to see 1 layer
+ if not is_instance_valid(Global.layer_vbox):
+ return Vector2.ZERO
+ return Vector2(Global.layer_vbox.size.x + cel_size + 26, cel_size + 105)
func _frame_scroll_changed(_value: float) -> void:
@@ -93,73 +95,78 @@ func _frame_scroll_changed(_value: float) -> void:
func _on_LayerVBox_resized() -> void:
- frame_scroll_bar.margin_left = frame_scroll_container.rect_position.x
+ frame_scroll_bar.offset_left = frame_scroll_container.position.x
adjust_scroll_container()
func adjust_scroll_container():
- tag_spacer.rect_min_size.x = (
- frame_scroll_container.rect_global_position.x
- - tag_scroll_container.rect_global_position.x
+ tag_spacer.custom_minimum_size.x = (
+ frame_scroll_container.global_position.x - tag_scroll_container.global_position.x
)
- tag_scroll_container.get_child(0).rect_min_size.x = Global.frame_hbox.rect_size.x
- Global.tag_container.rect_min_size = Global.frame_hbox.rect_size
+ tag_scroll_container.get_child(0).custom_minimum_size.x = Global.frame_hbox.size.x
+ Global.tag_container.custom_minimum_size = Global.frame_hbox.size
tag_scroll_container.scroll_horizontal = frame_scroll_bar.value
func _on_LayerFrameSplitContainer_gui_input(event: InputEvent) -> void:
Global.config_cache.set_value("timeline", "layer_size", layer_frame_h_split.split_offset)
- if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and not event.pressed:
- minimum_size_changed() # After you're done resizing the layers, update min size
+ if (
+ event is InputEventMouseButton
+ and event.button_index == MOUSE_BUTTON_LEFT
+ and not event.pressed
+ ):
+ update_minimum_size() # After you're done resizing the layers, update min size
-func cel_size_changed(value: int) -> void:
- cel_size = clamp(value, min_cel_size, max_cel_size)
- minimum_size_changed()
+func _cel_size_changed(value: int) -> void:
+ if cel_size == value:
+ return
+ cel_size = clampi(value, min_cel_size, max_cel_size)
+ update_minimum_size()
Global.config_cache.set_value("timeline", "cel_size", cel_size)
for layer_button in Global.layer_vbox.get_children():
- layer_button.rect_min_size.y = cel_size
- layer_button.rect_size.y = cel_size
+ layer_button.custom_minimum_size.y = cel_size
+ layer_button.size.y = cel_size
for cel_hbox in Global.cel_vbox.get_children():
for cel_button in cel_hbox.get_children():
- cel_button.rect_min_size.x = cel_size
- cel_button.rect_min_size.y = cel_size
- cel_button.rect_size.x = cel_size
- cel_button.rect_size.y = cel_size
+ cel_button.custom_minimum_size.x = cel_size
+ cel_button.custom_minimum_size.y = cel_size
+ cel_button.size.x = cel_size
+ cel_button.size.y = cel_size
for frame_id in Global.frame_hbox.get_children():
- frame_id.rect_min_size.x = cel_size
- frame_id.rect_size.x = cel_size
+ frame_id.custom_minimum_size.x = cel_size
+ frame_id.size.x = cel_size
for tag_c in Global.tag_container.get_children():
var tag_base_size = cel_size + 4
var tag: AnimationTag = tag_c.tag
# Added 1 to answer to get starting position of next cel
- tag_c.rect_position.x = (tag.from - 1) * tag_base_size + 1
- var tag_size: int = tag.to - tag.from
+ tag_c.position.x = (tag.from - 1) * tag_base_size + 1
+ var tag_size := tag.to - tag.from
# We dont need the 4 pixels at the end of last cel
- tag_c.rect_min_size.x = (tag_size + 1) * tag_base_size - 4
+ tag_c.custom_minimum_size.x = (tag_size + 1) * tag_base_size - 4
# We dont need the 4 pixels at the end of last cel
- tag_c.rect_size.x = (tag_size + 1) * tag_base_size - 4
- tag_c.get_node("Line2D").points[2] = Vector2(tag_c.rect_min_size.x, 0)
- tag_c.get_node("Line2D").points[3] = Vector2(tag_c.rect_min_size.x, 32)
+ tag_c.size.x = (tag_size + 1) * tag_base_size - 4
+ tag_c.get_node("Line2D").points[2] = Vector2(tag_c.custom_minimum_size.x, 0)
+ tag_c.get_node("Line2D").points[3] = Vector2(tag_c.custom_minimum_size.x, 32)
func add_frame() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var frame_add_index := project.current_frame + 1
- var frame: Frame = project.new_empty_frame()
+ var frame := project.new_empty_frame()
project.undos += 1
project.undo_redo.create_action("Add Frame")
for l in range(project.layers.size()):
if project.layers[l].new_cels_linked: # If the link button is pressed
- var prev_cel: BaseCel = project.frames[project.current_frame].cels[l]
+ var prev_cel := project.frames[project.current_frame].cels[l]
if prev_cel.link_set == null:
prev_cel.link_set = {}
project.undo_redo.add_do_method(
- project.layers[l], "link_cel", prev_cel, prev_cel.link_set
+ project.layers[l].link_cel.bind(prev_cel, prev_cel.link_set)
)
- project.undo_redo.add_undo_method(project.layers[l], "link_cel", prev_cel, null)
+ project.undo_redo.add_undo_method(project.layers[l].link_cel.bind(prev_cel, null))
frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture)
frame.cels[l].link_set = prev_cel.link_set
@@ -182,18 +189,18 @@ func add_frame() -> void:
tag.from += 1
tag.to += 1
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(project, "add_frames", [frame], [frame_add_index])
- project.undo_redo.add_undo_method(project, "remove_frames", [frame_add_index])
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(project.add_frames.bind([frame], [frame_add_index]))
+ project.undo_redo.add_undo_method(project.remove_frames.bind([frame_add_index]))
project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags)
project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags)
- project.undo_redo.add_do_method(project, "change_cel", project.current_frame + 1)
- project.undo_redo.add_undo_method(project, "change_cel", project.current_frame)
+ project.undo_redo.add_do_method(project.change_cel.bind(project.current_frame + 1))
+ project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame))
project.undo_redo.commit_action()
# it doesn't update properly without yields
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
adjust_scroll_container()
@@ -202,7 +209,7 @@ func _on_DeleteFrame_pressed() -> void:
func delete_frames(indices := []) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if project.frames.size() == 1:
return
@@ -214,10 +221,10 @@ func delete_frames(indices := []) -> void:
indices.sort()
if indices.size() == project.frames.size():
- indices.remove(indices.size() - 1) # Ensure the project has at least 1 frame
+ indices.remove_at(indices.size() - 1) # Ensure the project has at least 1 frame
- var current_frame: int = min(project.current_frame, project.frames.size() - indices.size() - 1)
- var frames := []
+ var current_frame := mini(project.current_frame, project.frames.size() - indices.size() - 1)
+ var frames: Array[Frame] = []
var frame_correction := 0 # Only needed for tag adjustment
var new_animation_tags := project.animation_tags.duplicate()
@@ -252,18 +259,18 @@ func delete_frames(indices := []) -> void:
project.undos += 1
project.undo_redo.create_action("Remove Frame")
- project.undo_redo.add_do_method(project, "remove_frames", indices)
- project.undo_redo.add_undo_method(project, "add_frames", frames, indices)
+ project.undo_redo.add_do_method(project.remove_frames.bind(indices))
+ project.undo_redo.add_undo_method(project.add_frames.bind(frames, indices))
project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags)
project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags)
- project.undo_redo.add_do_method(project, "change_cel", current_frame)
- project.undo_redo.add_undo_method(project, "change_cel", project.current_frame)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_do_method(project.change_cel.bind(current_frame))
+ project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
# it doesn't update properly without yields
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
adjust_scroll_container()
@@ -272,7 +279,7 @@ func _on_CopyFrame_pressed() -> void:
func copy_frames(indices := [], destination := -1) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if indices.size() == 0:
for cel in Global.current_project.selected_cels:
@@ -281,8 +288,8 @@ func copy_frames(indices := [], destination := -1) -> void:
indices.append(f)
indices.sort()
- var copied_frames := []
- var copied_indices := [] # the indices of newly copied frames
+ var copied_frames: Array[Frame] = []
+ var copied_indices := PackedInt32Array() # the indices of newly copied frames
if destination != -1:
copied_indices = range(destination + 1, (destination + 1) + indices.size())
@@ -301,17 +308,17 @@ func copy_frames(indices := [], destination := -1) -> void:
project.undos += 1
project.undo_redo.create_action("Add Frame")
for f in indices:
- var src_frame: Frame = project.frames[f]
+ var src_frame := project.frames[f]
var new_frame := Frame.new()
copied_frames.append(new_frame)
new_frame.duration = src_frame.duration
for l in range(project.layers.size()):
- var src_cel: BaseCel = project.frames[f].cels[l] # Cel we're copying from, the source
+ var src_cel := project.frames[f].cels[l] # Cel we're copying from, the source
var new_cel: BaseCel
var selected_id := -1
if src_cel is Cel3D:
- new_cel = src_cel.get_script().new(
+ new_cel = Cel3D.new(
src_cel.size, false, src_cel.object_properties, src_cel.scene_properties
)
if src_cel.selected != null:
@@ -323,9 +330,11 @@ func copy_frames(indices := [], destination := -1) -> void:
if src_cel.link_set == null:
src_cel.link_set = {}
project.undo_redo.add_do_method(
- project.layers[l], "link_cel", src_cel, src_cel.link_set
+ project.layers[l].link_cel.bind(src_cel, src_cel.link_set)
+ )
+ project.undo_redo.add_undo_method(
+ project.layers[l].link_cel.bind(src_cel, null)
)
- project.undo_redo.add_undo_method(project.layers[l], "link_cel", src_cel, null)
new_cel.set_content(src_cel.get_content(), src_cel.image_texture)
new_cel.link_set = src_cel.link_set
else:
@@ -344,20 +353,20 @@ func copy_frames(indices := [], destination := -1) -> void:
elif copied_indices[0] < tag.from:
tag.from += 1
tag.to += 1
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(project, "add_frames", copied_frames, copied_indices)
- project.undo_redo.add_undo_method(project, "remove_frames", copied_indices)
- project.undo_redo.add_do_method(project, "change_cel", copied_indices[0])
- project.undo_redo.add_undo_method(project, "change_cel", project.current_frame)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(project.add_frames.bind(copied_frames, copied_indices))
+ project.undo_redo.add_undo_method(project.remove_frames.bind(copied_indices))
+ project.undo_redo.add_do_method(project.change_cel.bind(copied_indices[0]))
+ project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame))
project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags)
project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags)
project.undo_redo.commit_action()
# Select all the new frames so that it is easier to move/offset collectively if user wants
# To ease animation workflow, new current frame is the first copied frame instead of the last
- var range_start: int = copied_indices[-1]
- var range_end = copied_indices[0]
- var frame_diff_sign = sign(range_end - range_start)
+ var range_start := copied_indices[-1]
+ var range_end := copied_indices[0]
+ var frame_diff_sign := signi(range_end - range_start)
if frame_diff_sign == 0:
frame_diff_sign = 1
for i in range(range_start, range_end + frame_diff_sign, frame_diff_sign):
@@ -366,36 +375,34 @@ func copy_frames(indices := [], destination := -1) -> void:
if !Global.current_project.selected_cels.has(frame_layer):
Global.current_project.selected_cels.append(frame_layer)
Global.current_project.change_cel(range_end, -1)
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
adjust_scroll_container()
func _on_FrameTagButton_pressed() -> void:
- find_node("FrameTagDialog").popup_centered()
+ find_child("FrameTagDialog").popup_centered()
func _on_MoveLeft_pressed() -> void:
- var frame: int = Global.current_project.current_frame
- if frame == 0:
+ if Global.current_project.current_frame == 0:
return
- Global.frame_hbox.get_child(frame).change_frame_order(-1)
+ Global.frame_hbox.get_child(Global.current_project.current_frame).change_frame_order(-1)
func _on_MoveRight_pressed() -> void:
- var frame: int = Global.current_project.current_frame
- if frame == Global.current_project.frames.size() - 1: # using last_frame caused problems
+ if Global.current_project.current_frame == Global.current_project.frames.size() - 1:
return
- Global.frame_hbox.get_child(frame).change_frame_order(1)
+ Global.frame_hbox.get_child(Global.current_project.current_frame).change_frame_order(1)
func reverse_frames(indices := []) -> void:
- var project = Global.current_project
+ var project := Global.current_project
project.undo_redo.create_action("Change Frame Order")
- project.undo_redo.add_do_method(project, "reverse_frames", indices)
- project.undo_redo.add_undo_method(project, "reverse_frames", indices)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(project.reverse_frames.bind(indices))
+ project.undo_redo.add_undo_method(project.reverse_frames.bind(indices))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
@@ -412,8 +419,8 @@ func _on_OnionSkinning_pressed() -> void:
func _on_OnionSkinningSettings_pressed() -> void:
$OnionSkinningSettings.popup(
Rect2(
- onion_skinning_button.rect_global_position.x - $OnionSkinningSettings.rect_size.x - 16,
- onion_skinning_button.rect_global_position.y - 106,
+ onion_skinning_button.global_position.x - $OnionSkinningSettings.size.x - 16,
+ onion_skinning_button.global_position.y - $OnionSkinningSettings.size.y + 32,
136,
126
)
@@ -426,15 +433,15 @@ func _on_LoopAnim_pressed() -> void:
0: # Make it loop
animation_loop = 1
Global.change_button_texturerect(texture_button, "loop.png")
- loop_animation_button.hint_tooltip = "Cycle loop"
+ loop_animation_button.tooltip_text = "Cycle loop"
1: # Make it ping-pong
animation_loop = 2
Global.change_button_texturerect(texture_button, "loop_pingpong.png")
- loop_animation_button.hint_tooltip = "Ping-pong loop"
+ loop_animation_button.tooltip_text = "Ping-pong loop"
2: # Make it stop
animation_loop = 0
Global.change_button_texturerect(texture_button, "loop_none.png")
- loop_animation_button.hint_tooltip = "No loop"
+ loop_animation_button.tooltip_text = "No loop"
func _on_PlayForward_toggled(button_pressed: bool) -> void:
@@ -456,36 +463,34 @@ func _on_PlayBackwards_toggled(button_pressed: bool) -> void:
# Called on each frame of the animation
func _on_AnimationTimer_timeout() -> void:
if first_frame == last_frame:
- Global.play_forward.pressed = false
- Global.play_backwards.pressed = false
+ Global.play_forward.button_pressed = false
+ Global.play_backwards.button_pressed = false
Global.animation_timer.stop()
return
Global.canvas.selection.transform_content_confirm()
- var project: Project = Global.current_project
+ var project := Global.current_project
var fps := project.fps
if animation_forward:
if project.current_frame < last_frame:
project.selected_cels.clear()
project.change_cel(project.current_frame + 1, -1)
Global.animation_timer.wait_time = (
- project.frames[project.current_frame].duration
- * (1 / fps)
+ project.frames[project.current_frame].duration * (1 / fps)
)
Global.animation_timer.start() # Change the frame, change the wait time and start a cycle
else:
match animation_loop:
0: # No loop
- Global.play_forward.pressed = false
- Global.play_backwards.pressed = false
+ Global.play_forward.button_pressed = false
+ Global.play_backwards.button_pressed = false
Global.animation_timer.stop()
is_animation_running = false
1: # Cycle loop
project.selected_cels.clear()
project.change_cel(first_frame, -1)
Global.animation_timer.wait_time = (
- project.frames[project.current_frame].duration
- * (1 / fps)
+ project.frames[project.current_frame].duration * (1 / fps)
)
Global.animation_timer.start()
2: # Ping pong loop
@@ -497,23 +502,21 @@ func _on_AnimationTimer_timeout() -> void:
project.selected_cels.clear()
project.change_cel(project.current_frame - 1, -1)
Global.animation_timer.wait_time = (
- project.frames[project.current_frame].duration
- * (1 / fps)
+ project.frames[project.current_frame].duration * (1 / fps)
)
Global.animation_timer.start()
else:
match animation_loop:
0: # No loop
- Global.play_backwards.pressed = false
- Global.play_forward.pressed = false
+ Global.play_backwards.button_pressed = false
+ Global.play_forward.button_pressed = false
Global.animation_timer.stop()
is_animation_running = false
1: # Cycle loop
project.selected_cels.clear()
project.change_cel(last_frame, -1)
Global.animation_timer.wait_time = (
- project.frames[project.current_frame].duration
- * (1 / fps)
+ project.frames[project.current_frame].duration * (1 / fps)
)
Global.animation_timer.start()
2: # Ping pong loop
@@ -534,31 +537,32 @@ func play_animation(play: bool, forward_dir: bool) -> void:
&& Global.current_project.current_frame + 1 <= tag.to
):
first_frame = tag.from - 1
- last_frame = min(Global.current_project.frames.size() - 1, tag.to - 1)
+ last_frame = mini(Global.current_project.frames.size() - 1, tag.to - 1)
if first_frame == last_frame:
if forward_dir:
- Global.play_forward.pressed = false
+ Global.play_forward.button_pressed = false
else:
- Global.play_backwards.pressed = false
+ Global.play_backwards.button_pressed = false
return
if forward_dir:
- Global.play_backwards.disconnect("toggled", self, "_on_PlayBackwards_toggled")
- Global.play_backwards.pressed = false
+ Global.play_backwards.toggled.disconnect(_on_PlayBackwards_toggled)
+ Global.play_backwards.button_pressed = false
Global.change_button_texturerect(Global.play_backwards.get_child(0), "play_backwards.png")
- Global.play_backwards.connect("toggled", self, "_on_PlayBackwards_toggled")
+ Global.play_backwards.toggled.connect(_on_PlayBackwards_toggled)
else:
- Global.play_forward.disconnect("toggled", self, "_on_PlayForward_toggled")
- Global.play_forward.pressed = false
+ Global.play_forward.toggled.disconnect(_on_PlayForward_toggled)
+ Global.play_forward.button_pressed = false
Global.change_button_texturerect(Global.play_forward.get_child(0), "play.png")
- Global.play_forward.connect("toggled", self, "_on_PlayForward_toggled")
+ Global.play_forward.toggled.connect(_on_PlayForward_toggled)
if play:
Global.animation_timer.set_one_shot(true) # wait_time can't change correctly if it's playing
- var duration: float = Global.current_project.frames[Global.current_project.current_frame].duration
- var fps = Global.current_project.fps
- Global.animation_timer.wait_time = duration * (1 / fps)
+ var duration: float = (
+ Global.current_project.frames[Global.current_project.current_frame].duration
+ )
+ Global.animation_timer.wait_time = duration * (1 / Global.current_project.fps)
Global.animation_timer.start()
animation_forward = forward_dir
else:
@@ -592,26 +596,26 @@ func _on_FirstFrame_pressed() -> void:
func _on_FPSValue_value_changed(value: float) -> void:
- Global.current_project.fps = float(value)
+ Global.current_project.fps = value
Global.animation_timer.wait_time = 1 / Global.current_project.fps
func _on_PastOnionSkinning_value_changed(value: float) -> void:
Global.onion_skinning_past_rate = int(value)
Global.config_cache.set_value("timeline", "past_rate", Global.onion_skinning_past_rate)
- Global.canvas.update()
+ Global.canvas.queue_redraw()
func _on_FutureOnionSkinning_value_changed(value: float) -> void:
Global.onion_skinning_future_rate = int(value)
Global.config_cache.set_value("timeline", "future_rate", Global.onion_skinning_future_rate)
- Global.canvas.update()
+ Global.canvas.queue_redraw()
func _on_BlueRedMode_toggled(button_pressed: bool) -> void:
Global.onion_skinning_blue_red = button_pressed
Global.config_cache.set_value("timeline", "blue_red", Global.onion_skinning_blue_red)
- Global.canvas.update()
+ Global.canvas.queue_redraw()
func _on_PastPlacement_item_selected(index: int) -> void:
@@ -630,8 +634,8 @@ func _on_FuturePlacement_item_selected(index: int) -> void:
func add_layer(type: int) -> void:
- var project: Project = Global.current_project
- var current_layer = project.layers[project.current_layer]
+ var project := Global.current_project
+ var current_layer := project.layers[project.current_layer]
var l: BaseLayer
match type:
Global.LayerTypes.PIXEL:
@@ -663,21 +667,21 @@ func add_layer(type: int) -> void:
project.undos += 1
project.undo_redo.create_action("Add Layer")
- project.undo_redo.add_do_method(project, "add_layers", [l], [new_layer_idx], [cels])
- project.undo_redo.add_undo_method(project, "remove_layers", [new_layer_idx])
- project.undo_redo.add_do_method(project, "change_cel", -1, new_layer_idx)
- project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_do_method(project.add_layers.bind([l], [new_layer_idx], [cels]))
+ project.undo_redo.add_undo_method(project.remove_layers.bind([new_layer_idx]))
+ project.undo_redo.add_do_method(project.change_cel.bind(-1, new_layer_idx))
+ project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
func _on_CloneLayer_pressed() -> void:
- var project: Project = Global.current_project
- var source_layers: Array = project.layers[project.current_layer].get_children(true)
+ var project := Global.current_project
+ var source_layers := project.layers[project.current_layer].get_children(true)
source_layers.append(project.layers[project.current_layer])
- var clones := [] # Array of Layers
+ var clones: Array[BaseLayer] = []
var cels := [] # 2D Array of Cels
for src_layer in source_layers:
var cl_layer: BaseLayer = src_layer.get_script().new(project)
@@ -692,10 +696,10 @@ func _on_CloneLayer_pressed() -> void:
cels.append([])
for frame in project.frames:
- var src_cel: BaseCel = frame.cels[src_layer.index]
+ var src_cel := frame.cels[src_layer.index]
var new_cel: BaseCel
if src_cel is Cel3D:
- new_cel = src_cel.get_script().new(
+ new_cel = Cel3D.new(
src_cel.size, false, src_cel.object_properties, src_cel.scene_properties
)
else:
@@ -718,7 +722,7 @@ func _on_CloneLayer_pressed() -> void:
cels[-1].append(new_cel)
for cl_layer in clones:
- var p = source_layers.find(cl_layer.parent)
+ var p := source_layers.find(cl_layer.parent)
if p > -1: # Swap parent with clone if the parent is one of the source layers
cl_layer.parent = clones[p]
else: # Add (Copy) to the name if its not a child of another copied layer
@@ -728,25 +732,25 @@ func _on_CloneLayer_pressed() -> void:
project.undos += 1
project.undo_redo.create_action("Add Layer")
- project.undo_redo.add_do_method(project, "add_layers", clones, indices, cels)
- project.undo_redo.add_undo_method(project, "remove_layers", indices)
+ project.undo_redo.add_do_method(project.add_layers.bind(clones, indices, cels))
+ project.undo_redo.add_undo_method(project.remove_layers.bind(indices))
project.undo_redo.add_do_method(
- project, "change_cel", -1, project.current_layer + clones.size()
+ project.change_cel.bind(-1, project.current_layer + clones.size())
)
- project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
func _on_RemoveLayer_pressed() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
if project.layers.size() == 1:
return
- var layers: Array = project.layers[project.current_layer].get_children(true)
+ var layers := project.layers[project.current_layer].get_children(true)
layers.append(project.layers[project.current_layer])
- var indices := []
+ var indices := PackedInt32Array()
for l in layers:
indices.append(l.index)
@@ -758,21 +762,21 @@ func _on_RemoveLayer_pressed() -> void:
project.undos += 1
project.undo_redo.create_action("Remove Layer")
- project.undo_redo.add_do_method(project, "remove_layers", indices)
- project.undo_redo.add_undo_method(project, "add_layers", layers, indices, cels)
- project.undo_redo.add_do_method(project, "change_cel", -1, max(indices[0] - 1, 0))
- project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_do_method(project.remove_layers.bind(indices))
+ project.undo_redo.add_undo_method(project.add_layers.bind(layers, indices, cels))
+ project.undo_redo.add_do_method(project.change_cel.bind(-1, maxi(indices[0] - 1, 0)))
+ project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
-# Move the layer up or down in layer order and/or reparent to be deeper/shallower in the
-# layer hierarchy depending on its current index and parent
+## Move the layer up or down in layer order and/or reparent to be deeper/shallower in the
+## layer hierarchy depending on its current index and parent
func change_layer_order(up: bool) -> void:
- var project: Project = Global.current_project
- var layer: BaseLayer = project.layers[project.current_layer]
- var child_count = layer.get_child_count(true)
+ var project := Global.current_project
+ var layer := project.layers[project.current_layer]
+ var child_count := layer.get_child_count(true)
var from_indices := range(layer.index - child_count, layer.index + 1)
var from_parents := []
for l in from_indices:
@@ -781,7 +785,7 @@ func change_layer_order(up: bool) -> void:
var to_index = layer.index - child_count # the index where the LOWEST shifted layer should end up
if up:
- var above_layer: BaseLayer = project.layers[project.current_layer + 1]
+ var above_layer := project.layers[project.current_layer + 1]
if layer.parent == above_layer: # Above is the parent, leave the parent and go up
to_parents[-1] = above_layer.parent
to_index = to_index + 1
@@ -801,7 +805,7 @@ func change_layer_order(up: bool) -> void:
return
to_parents[-1] = layer.parent.parent # Drop a level in the hierarchy
else:
- var below_layer: BaseLayer = project.layers[project.current_layer - 1 - child_count]
+ var below_layer := project.layers[project.current_layer - 1 - child_count]
if layer.parent != below_layer.parent: # If there is a hierarchy change
to_parents[-1] = layer.parent.parent # Drop a level in the hierarchy
elif below_layer.accepts_child(layer):
@@ -813,21 +817,23 @@ func change_layer_order(up: bool) -> void:
var to_indices := range(to_index, to_index + child_count + 1)
project.undo_redo.create_action("Change Layer Order")
- project.undo_redo.add_do_method(project, "move_layers", from_indices, to_indices, to_parents)
+ project.undo_redo.add_do_method(project.move_layers.bind(from_indices, to_indices, to_parents))
project.undo_redo.add_undo_method(
- project, "move_layers", to_indices, from_indices, from_parents
+ project.move_layers.bind(to_indices, from_indices, from_parents)
)
- project.undo_redo.add_do_method(project, "change_cel", -1, to_index + child_count)
- project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_do_method(project.change_cel.bind(-1, to_index + child_count))
+ project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
func _on_MergeDownLayer_pressed() -> void:
- var project: Project = Global.current_project
- var top_layer: BaseLayer = project.layers[project.current_layer]
- var bottom_layer: PixelLayer = project.layers[project.current_layer - 1]
+ var project := Global.current_project
+ var top_layer := project.layers[project.current_layer]
+ var bottom_layer := project.layers[project.current_layer - 1]
+ if not bottom_layer is PixelLayer:
+ return
var top_cels := []
project.undos += 1
@@ -839,29 +845,27 @@ func _on_MergeDownLayer_pressed() -> void:
var top_image := Image.new()
top_image.copy_from(frame.cels[top_layer.index].get_image())
- top_image.lock()
if frame.cels[top_layer.index].opacity < 1: # If we have layer transparency
for xx in top_image.get_size().x:
for yy in top_image.get_size().y:
- var pixel_color: Color = top_image.get_pixel(xx, yy)
- var alpha: float = pixel_color.a * frame.cels[top_layer.index].opacity
+ var pixel_color := top_image.get_pixel(xx, yy)
+ var alpha := pixel_color.a * frame.cels[top_layer.index].opacity
top_image.set_pixel(
xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)
)
- top_image.unlock()
- var bottom_cel: BaseCel = frame.cels[bottom_layer.index]
+ var bottom_cel := frame.cels[bottom_layer.index]
var bottom_image := Image.new()
- bottom_image.copy_from(bottom_cel.image)
- bottom_image.blend_rect(top_image, Rect2(Vector2.ZERO, project.size), Vector2.ZERO)
+ bottom_image.copy_from(bottom_cel.get_image())
+ bottom_image.blend_rect(top_image, Rect2i(Vector2i.ZERO, project.size), Vector2i.ZERO)
if (
bottom_cel.link_set != null
and bottom_cel.link_set.size() > 1
and not top_image.is_invisible()
):
# Unlink cel:
- project.undo_redo.add_do_method(bottom_layer, "link_cel", bottom_cel, null)
+ project.undo_redo.add_do_method(bottom_layer.link_cel.bind(bottom_cel, null))
project.undo_redo.add_undo_method(
- bottom_layer, "link_cel", bottom_cel, bottom_cel.link_set
+ bottom_layer.link_cel.bind(bottom_cel, bottom_cel.link_set)
)
project.undo_redo.add_do_property(bottom_cel, "image_texture", ImageTexture.new())
project.undo_redo.add_undo_property(
@@ -873,38 +877,42 @@ func _on_MergeDownLayer_pressed() -> void:
project.undo_redo.add_do_property(bottom_cel.image, "data", bottom_image.data)
project.undo_redo.add_undo_property(bottom_cel.image, "data", bottom_cel.image.data)
- project.undo_redo.add_do_method(project, "remove_layers", [top_layer.index])
+ project.undo_redo.add_do_method(project.remove_layers.bind([top_layer.index]))
project.undo_redo.add_undo_method(
- project, "add_layers", [top_layer], [top_layer.index], [top_cels]
+ project.add_layers.bind([top_layer], [top_layer.index], [top_cels])
)
- project.undo_redo.add_do_method(project, "change_cel", -1, bottom_layer.index)
- project.undo_redo.add_undo_method(project, "change_cel", -1, top_layer.index)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(project.change_cel.bind(-1, bottom_layer.index))
+ project.undo_redo.add_undo_method(project.change_cel.bind(-1, top_layer.index))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
func _on_OpacitySlider_value_changed(value: float) -> void:
- var new_opacity := value / 100
+ var new_opacity := value / 100.0
var current_layer_idx := Global.current_project.current_layer
# Also update all selected frames.
for idx_pair in Global.current_project.selected_cels:
if idx_pair[1] == current_layer_idx:
- var frame: Frame = Global.current_project.frames[idx_pair[0]]
- var cel: BaseCel = frame.cels[current_layer_idx]
+ var frame := Global.current_project.frames[idx_pair[0]]
+ var cel := frame.cels[current_layer_idx]
cel.opacity = new_opacity
- Global.canvas.update()
+ Global.canvas.queue_redraw()
-func _on_OnionSkinningSettings_popup_hide() -> void:
- Global.can_draw = true
+func _on_onion_skinning_settings_close_requested() -> void:
+ $OnionSkinningSettings.hide()
+
+
+func _on_onion_skinning_settings_visibility_changed() -> void:
+ Global.can_draw = not $OnionSkinningSettings.visible
# Methods to update the UI in response to changes in the current project
func project_changed() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
# These must be removed from tree immediately to not mess up the indices of
# the new buttons, so use either free or queue_free + parent.remove_child
for layer_button in Global.layer_vbox.get_children():
@@ -917,7 +925,7 @@ func project_changed() -> void:
for i in project.layers.size():
project_layer_added(i)
for f in project.frames.size():
- var button: Button = frame_button_node.instance()
+ var button := frame_button_node.instantiate() as Button
button.frame = f
Global.frame_hbox.add_child(button)
@@ -927,31 +935,32 @@ func project_changed() -> void:
var layer: int = cel_index[1]
if frame < Global.frame_hbox.get_child_count():
var frame_button: BaseButton = Global.frame_hbox.get_child(frame)
- frame_button.pressed = true
+ frame_button.button_pressed = true
var vbox_child_count: int = Global.cel_vbox.get_child_count()
if layer < vbox_child_count:
var cel_hbox: HBoxContainer = Global.cel_vbox.get_child(vbox_child_count - 1 - layer)
if frame < cel_hbox.get_child_count():
var cel_button = cel_hbox.get_child(frame)
- cel_button.pressed = true
+ cel_button.button_pressed = true
var layer_button = Global.layer_vbox.get_child(vbox_child_count - 1 - layer)
- layer_button.pressed = true
+ layer_button.button_pressed = true
func project_frame_added(frame: int) -> void:
- var project: Project = Global.current_project
- var button: Button = frame_button_node.instance()
+ var project := Global.current_project
+ var button := frame_button_node.instantiate() as Button
button.frame = frame
Global.frame_hbox.add_child(button)
Global.frame_hbox.move_child(button, frame)
- frame_scroll_container.call_deferred( # Make it visible, yes 3 call_deferreds are required
+ # Make it visible, yes 3 call_deferreds are required
+ frame_scroll_container.call_deferred(
"call_deferred", "call_deferred", "ensure_control_visible", button
)
var layer := Global.cel_vbox.get_child_count() - 1
for cel_hbox in Global.cel_vbox.get_children():
- var cel_button = project.frames[frame].cels[layer].instantiate_cel_button()
+ var cel_button := project.frames[frame].cels[layer].instantiate_cel_button()
cel_button.frame = frame
cel_button.layer = layer
cel_hbox.add_child(cel_button)
@@ -967,16 +976,16 @@ func project_frame_removed(frame: int) -> void:
func project_layer_added(layer: int) -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
- var layer_button: LayerButton = project.layers[layer].instantiate_layer_button()
+ var layer_button := project.layers[layer].instantiate_layer_button() as LayerButton
layer_button.layer = layer
if project.layers[layer].name == "":
project.layers[layer].set_name_to_default(Global.current_project.layers.size())
var cel_hbox := HBoxContainer.new()
for f in project.frames.size():
- var cel_button = project.frames[f].cels[layer].instantiate_cel_button()
+ var cel_button := project.frames[f].cels[layer].instantiate_cel_button()
cel_button.frame = f
cel_button.layer = layer
cel_hbox.add_child(cel_button)
@@ -999,7 +1008,7 @@ func project_layer_removed(layer: int) -> void:
func project_cel_added(frame: int, layer: int) -> void:
var cel_hbox := Global.cel_vbox.get_child(Global.cel_vbox.get_child_count() - 1 - layer)
- var cel_button = Global.current_project.frames[frame].cels[layer].instantiate_cel_button()
+ var cel_button := Global.current_project.frames[frame].cels[layer].instantiate_cel_button()
cel_button.frame = frame
cel_button.layer = layer
cel_hbox.add_child(cel_button)
diff --git a/src/UI/Timeline/AnimationTimeline.tscn b/src/UI/Timeline/AnimationTimeline.tscn
index d0fdf48689a..a0e69f53976 100644
--- a/src/UI/Timeline/AnimationTimeline.tscn
+++ b/src/UI/Timeline/AnimationTimeline.tscn
@@ -1,887 +1,840 @@
-[gd_scene load_steps=45 format=2]
+[gd_scene load_steps=75 format=3 uid="uid://dbr6mulku2qju"]
-[ext_resource path="res://src/UI/Timeline/AnimationTimeline.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/layers/new.png" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/layers/move_down.png" type="Texture" id=3]
-[ext_resource path="res://assets/graphics/layers/move_up.png" type="Texture" id=4]
-[ext_resource path="res://assets/graphics/layers/merge_down.png" type="Texture" id=5]
-[ext_resource path="res://assets/graphics/layers/delete.png" type="Texture" id=6]
-[ext_resource path="res://assets/graphics/layers/clone.png" type="Texture" id=7]
-[ext_resource path="res://assets/graphics/timeline/move_arrow.png" type="Texture" id=8]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=9]
-[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=10]
-[ext_resource path="res://src/UI/Timeline/FrameScrollContainer.gd" type="Script" id=11]
-[ext_resource path="res://src/UI/Timeline/PasteTagPopup.gd" type="Script" id=12]
-[ext_resource path="res://assets/graphics/timeline/new_frame.png" type="Texture" id=19]
-[ext_resource path="res://assets/graphics/timeline/remove_frame.png" type="Texture" id=20]
-[ext_resource path="res://assets/graphics/timeline/go_to_first_frame.png" type="Texture" id=21]
-[ext_resource path="res://assets/graphics/timeline/play.png" type="Texture" id=22]
-[ext_resource path="res://assets/graphics/timeline/previous_frame.png" type="Texture" id=23]
-[ext_resource path="res://assets/graphics/timeline/play_backwards.png" type="Texture" id=24]
-[ext_resource path="res://assets/graphics/timeline/go_to_last_frame.png" type="Texture" id=25]
-[ext_resource path="res://assets/graphics/timeline/next_frame.png" type="Texture" id=26]
-[ext_resource path="res://assets/graphics/timeline/copy_frame.png" type="Texture" id=27]
-[ext_resource path="res://assets/graphics/timeline/tag.png" type="Texture" id=28]
-[ext_resource path="res://assets/graphics/timeline/onion_skinning_off.png" type="Texture" id=29]
-[ext_resource path="res://assets/graphics/timeline/expandable.png" type="Texture" id=30]
-[ext_resource path="res://assets/graphics/timeline/loop.png" type="Texture" id=31]
-[ext_resource path="res://src/UI/Timeline/FrameTagDialog.tscn" type="PackedScene" id=42]
+[ext_resource type="Script" path="res://src/UI/Timeline/AnimationTimeline.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://d36mlbmq06q4e" path="res://assets/graphics/layers/new.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://dmhauk0dee42v" path="res://assets/graphics/layers/move_down.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://c7bha4a6x4bav" path="res://assets/graphics/layers/move_up.png" id="4"]
+[ext_resource type="Texture2D" uid="uid://bx1xa5aacxfx4" path="res://assets/graphics/layers/merge_down.png" id="5"]
+[ext_resource type="Texture2D" uid="uid://x2k652y15v04" path="res://assets/graphics/layers/delete.png" id="6"]
+[ext_resource type="Texture2D" uid="uid://d3gx4phcox58s" path="res://assets/graphics/layers/clone.png" id="7"]
+[ext_resource type="Texture2D" uid="uid://d1oxrkwndy5fi" path="res://assets/graphics/timeline/move_arrow.png" id="8"]
+[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="9"]
+[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="10"]
+[ext_resource type="Script" path="res://src/UI/Timeline/FrameScrollContainer.gd" id="11"]
+[ext_resource type="Script" path="res://src/UI/Timeline/PasteTagPopup.gd" id="12"]
+[ext_resource type="Texture2D" uid="uid://d1urikaf1lxwl" path="res://assets/graphics/timeline/new_frame.png" id="19"]
+[ext_resource type="Texture2D" uid="uid://bt72662c3gp2f" path="res://assets/graphics/timeline/remove_frame.png" id="20"]
+[ext_resource type="Texture2D" uid="uid://bujrukk5ii3bi" path="res://assets/graphics/timeline/go_to_first_frame.png" id="21"]
+[ext_resource type="Texture2D" uid="uid://c7smxwfa8826j" path="res://assets/graphics/timeline/play.png" id="22"]
+[ext_resource type="Texture2D" uid="uid://cw7nn7360atot" path="res://assets/graphics/timeline/previous_frame.png" id="23"]
+[ext_resource type="Texture2D" uid="uid://esistdjfbrc4" path="res://assets/graphics/timeline/play_backwards.png" id="24"]
+[ext_resource type="Texture2D" uid="uid://l4jj86y1hukm" path="res://assets/graphics/timeline/go_to_last_frame.png" id="25"]
+[ext_resource type="Texture2D" uid="uid://b2ndrc0cvy1m5" path="res://assets/graphics/timeline/next_frame.png" id="26"]
+[ext_resource type="Texture2D" uid="uid://cerkv5yx4cqeh" path="res://assets/graphics/timeline/copy_frame.png" id="27"]
+[ext_resource type="Texture2D" uid="uid://i13jhsg117kd" path="res://assets/graphics/timeline/tag.png" id="28"]
+[ext_resource type="Texture2D" uid="uid://dukip7mvotxsp" path="res://assets/graphics/timeline/onion_skinning_off.png" id="29"]
+[ext_resource type="Texture2D" uid="uid://dinubfua8gqhw" path="res://assets/graphics/timeline/expandable.png" id="30"]
+[ext_resource type="Texture2D" uid="uid://fbwld5ofmocm" path="res://assets/graphics/timeline/loop.png" id="31"]
+[ext_resource type="PackedScene" uid="uid://c6je8lgr850wf" path="res://src/UI/Timeline/FrameTagDialog.tscn" id="42"]
-[sub_resource type="InputEventAction" id=21]
-action = "go_to_first_frame"
+[sub_resource type="InputEventAction" id="InputEventAction_r3l7p"]
+action = &"new_layer"
-[sub_resource type="ShortCut" id=4]
-shortcut = SubResource( 21 )
+[sub_resource type="Shortcut" id="Shortcut_tpvn2"]
+events = [SubResource("InputEventAction_r3l7p")]
-[sub_resource type="InputEventAction" id=23]
-action = "go_to_previous_frame"
+[sub_resource type="InputEventAction" id="InputEventAction_n6pnq"]
+action = &"remove_layer"
-[sub_resource type="ShortCut" id=6]
-shortcut = SubResource( 23 )
+[sub_resource type="Shortcut" id="Shortcut_xar00"]
+events = [SubResource("InputEventAction_n6pnq")]
-[sub_resource type="InputEventAction" id=24]
-action = "play_backwards"
+[sub_resource type="InputEventAction" id="InputEventAction_xm3sl"]
+action = &"move_layer_up"
-[sub_resource type="ShortCut" id=8]
-shortcut = SubResource( 24 )
+[sub_resource type="Shortcut" id="Shortcut_r300c"]
+events = [SubResource("InputEventAction_xm3sl")]
-[sub_resource type="InputEventAction" id=25]
-action = "play_forward"
+[sub_resource type="InputEventAction" id="InputEventAction_wqdok"]
+action = &"move_layer_down"
-[sub_resource type="ShortCut" id=10]
-shortcut = SubResource( 25 )
+[sub_resource type="Shortcut" id="Shortcut_763li"]
+events = [SubResource("InputEventAction_wqdok")]
-[sub_resource type="InputEventAction" id=26]
-action = "go_to_next_frame"
+[sub_resource type="InputEventAction" id="InputEventAction_4vegv"]
+action = &"clone_layer"
-[sub_resource type="ShortCut" id=12]
-shortcut = SubResource( 26 )
+[sub_resource type="Shortcut" id="Shortcut_0o4ap"]
+events = [SubResource("InputEventAction_4vegv")]
-[sub_resource type="InputEventAction" id=22]
-action = "go_to_last_frame"
+[sub_resource type="InputEventAction" id="InputEventAction_ihf65"]
+action = &"merge_down_layer"
-[sub_resource type="ShortCut" id=14]
-shortcut = SubResource( 22 )
+[sub_resource type="Shortcut" id="Shortcut_wbf7k"]
+events = [SubResource("InputEventAction_ihf65")]
-[sub_resource type="StyleBoxEmpty" id=15]
+[sub_resource type="InputEventAction" id="InputEventAction_sduor"]
+action = &"add_frame"
-[sub_resource type="StyleBoxEmpty" id=16]
+[sub_resource type="Shortcut" id="Shortcut_mvoxm"]
+events = [SubResource("InputEventAction_sduor")]
-[sub_resource type="StyleBoxEmpty" id=17]
+[sub_resource type="InputEventAction" id="InputEventAction_ajjsq"]
+action = &"remove_frame"
-[sub_resource type="StyleBoxEmpty" id=18]
+[sub_resource type="Shortcut" id="Shortcut_o40ql"]
+events = [SubResource("InputEventAction_ajjsq")]
-[sub_resource type="StyleBoxEmpty" id=19]
+[sub_resource type="InputEventAction" id="InputEventAction_yptjb"]
+action = &"clone_frame"
-[sub_resource type="Theme" id=20]
+[sub_resource type="Shortcut" id="Shortcut_5g7t7"]
+events = [SubResource("InputEventAction_yptjb")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_jp76a"]
+action = &"manage_frame_tags"
+
+[sub_resource type="Shortcut" id="Shortcut_renbb"]
+events = [SubResource("InputEventAction_jp76a")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_ar42u"]
+action = &"move_frame_left"
+
+[sub_resource type="Shortcut" id="Shortcut_kwn1u"]
+events = [SubResource("InputEventAction_ar42u")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_unp5j"]
+action = &"move_frame_right"
+
+[sub_resource type="Shortcut" id="Shortcut_m2mvi"]
+events = [SubResource("InputEventAction_unp5j")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_078hg"]
+action = &"go_to_first_frame"
+
+[sub_resource type="Shortcut" id="4"]
+events = [SubResource("InputEventAction_078hg")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_xpmmg"]
+action = &"go_to_previous_frame"
+
+[sub_resource type="Shortcut" id="6"]
+events = [SubResource("InputEventAction_xpmmg")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_vyfqb"]
+action = &"play_backwards"
+
+[sub_resource type="Shortcut" id="8"]
+events = [SubResource("InputEventAction_vyfqb")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_twfg8"]
+action = &"play_forward"
+
+[sub_resource type="Shortcut" id="10"]
+events = [SubResource("InputEventAction_twfg8")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_xvqer"]
+action = &"go_to_next_frame"
+
+[sub_resource type="Shortcut" id="12"]
+events = [SubResource("InputEventAction_xvqer")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_fcr04"]
+action = &"go_to_last_frame"
+
+[sub_resource type="Shortcut" id="14"]
+events = [SubResource("InputEventAction_fcr04")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_1xym1"]
+action = &"onion_skinning_settings"
+
+[sub_resource type="Shortcut" id="Shortcut_tke6v"]
+events = [SubResource("InputEventAction_1xym1")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_iu7kc"]
+action = &"onion_skinning_toggle"
+
+[sub_resource type="Shortcut" id="Shortcut_pouu1"]
+events = [SubResource("InputEventAction_iu7kc")]
+
+[sub_resource type="InputEventAction" id="InputEventAction_dmtwd"]
+action = &"loop_toggle"
+
+[sub_resource type="Shortcut" id="Shortcut_1onr8"]
+events = [SubResource("InputEventAction_dmtwd")]
+
+[sub_resource type="StyleBoxEmpty" id="15"]
+
+[sub_resource type="StyleBoxEmpty" id="16"]
+
+[sub_resource type="StyleBoxEmpty" id="17"]
+
+[sub_resource type="StyleBoxEmpty" id="18"]
+
+[sub_resource type="StyleBoxEmpty" id="19"]
+
+[sub_resource type="Theme" id="20"]
HScrollBar/icons/decrement = null
HScrollBar/icons/decrement_highlight = null
HScrollBar/icons/increment = null
HScrollBar/icons/increment_highlight = null
-HScrollBar/styles/grabber = SubResource( 15 )
-HScrollBar/styles/grabber_highlight = SubResource( 16 )
-HScrollBar/styles/grabber_pressed = SubResource( 17 )
-HScrollBar/styles/scroll = SubResource( 18 )
-HScrollBar/styles/scroll_focus = SubResource( 19 )
+HScrollBar/styles/grabber = SubResource("15")
+HScrollBar/styles/grabber_highlight = SubResource("16")
+HScrollBar/styles/grabber_pressed = SubResource("17")
+HScrollBar/styles/scroll = SubResource("18")
+HScrollBar/styles/scroll_focus = SubResource("19")
[node name="AnimationTimeline" type="Panel"]
-margin_right = 902.0
-margin_bottom = 160.0
-rect_clip_content = true
-script = ExtResource( 1 )
+clip_contents = true
+offset_right = 902.0
+offset_bottom = 160.0
+script = ExtResource("1")
[node name="TimelineContainer" type="VBoxContainer" parent="."]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
[node name="TimelineButtons" type="HBoxContainer" parent="TimelineContainer"]
-margin_right = 902.0
-margin_bottom = 74.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="LayerTools" type="PanelContainer" parent="TimelineContainer/TimelineButtons"]
-margin_right = 221.0
-margin_bottom = 74.0
+layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/TimelineButtons/LayerTools"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 214.0
-margin_bottom = 67.0
+layout_mode = 2
[node name="LayerButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer"]
-margin_right = 207.0
-margin_bottom = 22.0
-size_flags_vertical = 0
-custom_constants/separation = 9
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/separation = 9
[node name="AddLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_right = 44.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 44, 22 )
-hint_tooltip = "Create a new layer"
+custom_minimum_size = Vector2(44, 22)
+layout_mode = 2
+size_flags_vertical = 4
+tooltip_text = "Create a new layer"
focus_mode = 0
mouse_default_cursor_shape = 2
+shortcut = SubResource("Shortcut_tpvn2")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer"]
+layout_mode = 0
anchor_top = 0.5
anchor_bottom = 0.5
-margin_top = -11.0
-margin_right = 22.0
-margin_bottom = 11.0
+offset_top = -11.0
+offset_right = 22.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 2 )
+texture = ExtResource("2")
[node name="AddLayerList" type="MenuButton" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer"]
unique_name_in_owner = true
+custom_minimum_size = Vector2(22, 0)
+layout_mode = 0
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
-margin_left = -22.0
-margin_top = -10.0
-margin_bottom = 10.0
-rect_min_size = Vector2( 22, 0 )
+offset_left = -22.0
+offset_top = -10.0
+offset_bottom = 10.0
mouse_default_cursor_shape = 2
-items = [ "Add Pixel Layer", null, 0, false, false, 0, 0, null, "", false, "Add Group Layer", null, 0, false, false, 1, 0, null, "", false, "Add 3D Layer", null, 0, false, false, 2, 0, null, "", false ]
+item_count = 3
+popup/item_0/text = "Add Pixel Layer"
+popup/item_0/id = 0
+popup/item_1/text = "Add Group Layer"
+popup/item_1/id = 1
+popup/item_2/text = "Add 3D Layer"
+popup/item_2/id = 2
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer/AddLayerList"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -6.0
-margin_top = -6.0
-margin_right = 6.0
-margin_bottom = 6.0
-texture = ExtResource( 10 )
+offset_left = -6.0
+offset_top = -6.0
+offset_right = 6.0
+offset_bottom = 6.0
+texture = ExtResource("10")
[node name="RemoveLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 53.0
-margin_right = 75.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Remove current layer"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+size_flags_vertical = 4
+tooltip_text = "Remove current layer"
focus_mode = 0
mouse_default_cursor_shape = 8
disabled = true
+shortcut = SubResource("Shortcut_xar00")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/RemoveLayer"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.0
-margin_top = -7.0
-margin_right = 7.0
-margin_bottom = 7.0
+offset_left = -7.0
+offset_top = -7.0
+offset_right = 7.0
+offset_bottom = 7.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 6 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture = ExtResource("6")
[node name="MoveUpLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 84.0
-margin_right = 106.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Move up the current layer"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+size_flags_vertical = 4
+tooltip_text = "Move up the current layer"
focus_mode = 0
mouse_default_cursor_shape = 8
disabled = true
+shortcut = SubResource("Shortcut_r300c")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveUpLayer"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 4 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture = ExtResource("4")
[node name="MoveDownLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 115.0
-margin_right = 137.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Move down the current layer"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+size_flags_vertical = 4
+tooltip_text = "Move down the current layer"
focus_mode = 0
mouse_default_cursor_shape = 8
disabled = true
+shortcut = SubResource("Shortcut_763li")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveDownLayer"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture = ExtResource("3")
[node name="CloneLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 146.0
-margin_right = 168.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Clone current layer"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+size_flags_vertical = 4
+tooltip_text = "Clone current layer"
focus_mode = 0
mouse_default_cursor_shape = 2
+shortcut = SubResource("Shortcut_0o4ap")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/CloneLayer"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 7 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture = ExtResource("7")
[node name="MergeDownLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 177.0
-margin_right = 199.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Merge current layer with the one below"
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
+size_flags_vertical = 4
+tooltip_text = "Merge current layer with the one below"
focus_mode = 0
mouse_default_cursor_shape = 8
disabled = true
+shortcut = SubResource("Shortcut_wbf7k")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MergeDownLayer"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 5 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture = ExtResource("5")
[node name="BlendingHBox" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer"]
-margin_top = 36.0
-margin_right = 207.0
-margin_bottom = 60.0
+layout_mode = 2
size_flags_vertical = 10
-[node name="OpacitySlider" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/BlendingHBox" instance=ExtResource( 9 )]
-margin_right = 207.0
-rect_min_size = Vector2( 207, 24 )
+[node name="OpacitySlider" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/BlendingHBox" instance=ExtResource("9")]
+custom_minimum_size = Vector2(207, 24)
+layout_mode = 2
size_flags_horizontal = 1
size_flags_vertical = 0
value = 100.0
prefix = "Opacity:"
[node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/TimelineButtons"]
-margin_left = 225.0
-margin_right = 902.0
-margin_bottom = 74.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="AnimationToolsScrollContainer" type="ScrollContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer"]
-margin_right = 677.0
-margin_bottom = 38.0
+layout_mode = 2
size_flags_horizontal = 3
-scroll_vertical_enabled = false
+vertical_scroll_mode = 0
[node name="AnimationTools" type="PanelContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer"]
-margin_left = 159.0
-margin_right = 677.0
-margin_bottom = 38.0
+layout_mode = 2
size_flags_horizontal = 10
[node name="AnimationButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 511.0
-margin_bottom = 31.0
-rect_min_size = Vector2( 0, 24 )
+custom_minimum_size = Vector2(0, 24)
+layout_mode = 2
size_flags_horizontal = 3
-custom_constants/separation = 40
+theme_override_constants/separation = 40
alignment = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="FrameButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons"]
-margin_right = 140.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="AddFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]]
-margin_top = 2.0
-margin_right = 20.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Add a new frame"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Add a new frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_mvoxm")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/AddFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -6.0
-margin_top = -6.0
-margin_right = 6.0
-margin_bottom = 6.0
-texture = ExtResource( 19 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -6.0
+offset_top = -6.0
+offset_right = 6.0
+offset_bottom = 6.0
+texture = ExtResource("19")
[node name="DeleteFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]]
-margin_left = 24.0
-margin_top = 2.0
-margin_right = 44.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Remove Frame"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Remove Frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_o40ql")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/DeleteFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -6.0
-margin_top = -1.0
-margin_right = 6.0
-margin_bottom = 1.0
+offset_left = -6.0
+offset_top = -1.0
+offset_right = 6.0
+offset_bottom = 1.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 20 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+texture = ExtResource("20")
[node name="CopyFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]]
-margin_left = 48.0
-margin_top = 2.0
-margin_right = 68.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Clone Frame"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Clone Frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_5g7t7")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/CopyFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -5.0
-margin_top = -7.0
-margin_right = 5.0
-margin_bottom = 7.0
-texture = ExtResource( 27 )
+offset_left = -5.0
+offset_top = -7.0
+offset_right = 5.0
+offset_bottom = 7.0
+texture = ExtResource("27")
[node name="FrameTagButton" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]]
-margin_left = 72.0
-margin_top = 2.0
-margin_right = 92.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Manage frame tags"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Manage frame tags"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_renbb")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/FrameTagButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.0
-margin_top = -7.0
-margin_right = 7.0
-margin_bottom = 7.0
-texture = ExtResource( 28 )
+offset_left = -7.0
+offset_top = -7.0
+offset_right = 7.0
+offset_bottom = 7.0
+texture = ExtResource("28")
[node name="MoveLeft" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]]
-margin_left = 96.0
-margin_top = 2.0
-margin_right = 116.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Move the selected frame to the left."
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Move the selected frame to the left."
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_kwn1u")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/MoveLeft"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.5
-margin_top = -5.5
-margin_right = 7.5
-margin_bottom = 5.5
-texture = ExtResource( 8 )
+offset_left = -7.5
+offset_top = -5.5
+offset_right = 7.5
+offset_bottom = 5.5
+texture = ExtResource("8")
flip_h = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="MoveRight" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]]
-margin_left = 120.0
-margin_top = 2.0
-margin_right = 140.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Move the selected frame to the right."
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Move the selected frame to the right."
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_m2mvi")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/MoveRight"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.5
-margin_top = -5.5
-margin_right = 7.5
-margin_bottom = 5.5
-texture = ExtResource( 8 )
+offset_left = -7.5
+offset_top = -5.5
+offset_right = 7.5
+offset_bottom = 5.5
+texture = ExtResource("8")
[node name="PlaybackButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons"]
-margin_left = 180.0
-margin_right = 320.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="FirstFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]]
-margin_top = 2.0
-margin_right = 20.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Jump to the first frame
-(%s)"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Jump to the first frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
-shortcut_in_tooltip = false
-shortcut = SubResource( 4 )
+shortcut = SubResource("4")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/FirstFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -5.5
-margin_top = -6.0
-margin_right = 5.5
-margin_bottom = 6.0
-texture = ExtResource( 21 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -5.5
+offset_top = -6.0
+offset_right = 5.5
+offset_bottom = 6.0
+texture = ExtResource("21")
[node name="PreviousFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]]
-margin_left = 24.0
-margin_top = 2.0
-margin_right = 44.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Go to the previous frame
-(%s)"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Go to the previous frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
-shortcut_in_tooltip = false
-shortcut = SubResource( 6 )
+shortcut = SubResource("6")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/PreviousFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -5.5
-margin_top = -6.0
-margin_right = 5.5
-margin_bottom = 6.0
-texture = ExtResource( 23 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -5.5
+offset_top = -6.0
+offset_right = 5.5
+offset_bottom = 6.0
+texture = ExtResource("23")
[node name="PlayBackwards" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]]
-margin_left = 48.0
-margin_top = 2.0
-margin_right = 68.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Play the animation backwards (from end to beginning)
-(%s)"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Play the animation backwards (from end to beginning)"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
toggle_mode = true
-shortcut_in_tooltip = false
-shortcut = SubResource( 8 )
+shortcut = SubResource("8")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/PlayBackwards"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -4.0
-margin_top = -6.0
-margin_right = 3.0
-margin_bottom = 6.0
-texture = ExtResource( 24 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -4.0
+offset_top = -6.0
+offset_right = 3.0
+offset_bottom = 6.0
+texture = ExtResource("24")
[node name="PlayForward" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]]
-margin_left = 72.0
-margin_top = 2.0
-margin_right = 92.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Play the animation forward (from beginning to end)
-(%s)"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Play the animation forward (from beginning to end)"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
toggle_mode = true
-shortcut_in_tooltip = false
-shortcut = SubResource( 10 )
+shortcut = SubResource("10")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/PlayForward"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -3.5
-margin_top = -6.0
-margin_right = 3.5
-margin_bottom = 6.0
-texture = ExtResource( 22 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -3.5
+offset_top = -6.0
+offset_right = 3.5
+offset_bottom = 6.0
+texture = ExtResource("22")
[node name="NextFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]]
-margin_left = 96.0
-margin_top = 2.0
-margin_right = 116.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Go to the next frame
-(%s)"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Go to the next frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
-shortcut_in_tooltip = false
-shortcut = SubResource( 12 )
+shortcut = SubResource("12")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/NextFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -5.5
-margin_top = -6.0
-margin_right = 5.5
-margin_bottom = 6.0
-texture = ExtResource( 26 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -5.5
+offset_top = -6.0
+offset_right = 5.5
+offset_bottom = 6.0
+texture = ExtResource("26")
[node name="LastFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]]
-margin_left = 120.0
-margin_top = 2.0
-margin_right = 140.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Jump to the last frame
-(%s)"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Jump to the last frame"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
-shortcut_in_tooltip = false
-shortcut = SubResource( 14 )
+shortcut = SubResource("14")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/LastFrame"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -5.5
-margin_top = -6.0
-margin_right = 5.5
-margin_bottom = 6.0
-texture = ExtResource( 25 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -5.5
+offset_top = -6.0
+offset_right = 5.5
+offset_bottom = 6.0
+texture = ExtResource("25")
[node name="LoopButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons"]
-margin_left = 360.0
-margin_right = 504.0
-margin_bottom = 24.0
+layout_mode = 2
[node name="OnionSkinningSettings" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" groups=["UIButtons"]]
-margin_top = 2.0
-margin_right = 20.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Onion Skinning settings"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "Onion Skinning settings"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_tke6v")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinningSettings"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.0
-margin_top = -7.0
-margin_right = 7.0
-margin_bottom = 7.0
+offset_left = -7.0
+offset_top = -7.0
+offset_right = 7.0
+offset_bottom = 7.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 30 )
-__meta__ = {
-"_editor_description_": ""
-}
+texture = ExtResource("30")
[node name="OnionSkinning" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" groups=["UIButtons"]]
-margin_left = 24.0
-margin_top = 2.0
-margin_right = 44.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Enable/disable Onion Skinning"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Enable/disable Onion Skinning"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_pouu1")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinning"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.0
-margin_top = -7.0
-margin_right = 7.0
-margin_bottom = 7.0
+offset_left = -7.0
+offset_top = -7.0
+offset_right = 7.0
+offset_bottom = 7.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 29 )
+texture = ExtResource("29")
[node name="LoopAnim" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" groups=["UIButtons"]]
-margin_left = 48.0
-margin_top = 2.0
-margin_right = 68.0
-margin_bottom = 22.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Cycle loop"
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
+tooltip_text = "Cycle loop"
focus_mode = 0
mouse_default_cursor_shape = 2
-size_flags_vertical = 4
+shortcut = SubResource("Shortcut_1onr8")
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/LoopAnim"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -7.0
-margin_top = -7.0
-margin_right = 7.0
-margin_bottom = 7.0
-texture = ExtResource( 31 )
-
-[node name="FPSValue" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" instance=ExtResource( 9 )]
-margin_left = 72.0
-margin_right = 144.0
-rect_min_size = Vector2( 72, 24 )
-hint_tooltip = "How many frames per second should the animation preview be?
-The more FPS, the faster the animation plays."
+offset_left = -7.0
+offset_top = -7.0
+offset_right = 7.0
+offset_bottom = 7.0
+texture = ExtResource("31")
+
+[node name="FPSValue" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" instance=ExtResource("9")]
+custom_minimum_size = Vector2(72, 24)
+layout_mode = 2
size_flags_horizontal = 1
-size_flags_vertical = 4
+tooltip_text = "How many frames per second should the animation preview be?
+The more FPS, the faster the animation plays."
min_value = 0.1
step = 0.1
value = 6.0
suffix = "FPS"
[node name="TagScroll" type="ScrollContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer"]
-margin_top = 42.0
-margin_right = 677.0
-margin_bottom = 74.0
-rect_min_size = Vector2( 0, 32 )
-mouse_filter = 2
+custom_minimum_size = Vector2(0, 32)
+layout_mode = 2
size_flags_horizontal = 3
-theme = SubResource( 20 )
-scroll_vertical_enabled = false
+mouse_filter = 2
+theme = SubResource("20")
[node name="HBoxContainer" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/TagScroll"]
-margin_right = 677.0
-margin_bottom = 32.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-custom_constants/separation = 0
+theme_override_constants/separation = 0
[node name="TagSpacer" type="Control" parent="TimelineContainer/TimelineButtons/VBoxContainer/TagScroll/HBoxContainer"]
-margin_bottom = 32.0
+layout_mode = 2
[node name="TagContainer" type="Control" parent="TimelineContainer/TimelineButtons/VBoxContainer/TagScroll/HBoxContainer"]
-margin_right = 677.0
-margin_bottom = 32.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="PanelContainer" type="PanelContainer" parent="TimelineContainer"]
-margin_top = 78.0
-margin_right = 902.0
-margin_bottom = 160.0
+layout_mode = 2
size_flags_vertical = 3
[node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/PanelContainer"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 895.0
-margin_bottom = 75.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="TimelineScroll" type="ScrollContainer" parent="TimelineContainer/PanelContainer/VBoxContainer"]
-margin_right = 888.0
-margin_bottom = 64.0
+layout_mode = 2
size_flags_vertical = 3
-scroll_horizontal_enabled = false
[node name="LayerFrameHSplit" type="HSplitContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll"]
-margin_right = 888.0
-margin_bottom = 64.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit"]
-margin_right = 41.0
-margin_bottom = 64.0
+layout_mode = 2
[node name="LayerLabel" type="Label" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/VBoxContainer"]
-margin_right = 41.0
-margin_bottom = 16.0
-rect_min_size = Vector2( 0, 16 )
+layout_mode = 2
text = "Layers"
-align = 1
-valign = 1
[node name="LayerVBox" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/VBoxContainer"]
-margin_top = 20.0
-margin_right = 41.0
-margin_bottom = 20.0
+layout_mode = 2
size_flags_horizontal = 3
[node name="FrameScrollContainer" type="Container" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit"]
-margin_left = 53.0
-margin_right = 888.0
-margin_bottom = 64.0
-script = ExtResource( 11 )
+layout_mode = 2
+script = ExtResource("11")
h_scroll_bar_node_path = NodePath("../../../BreakFreeFromContainer/FrameScrollBar")
[node name="FrameAndCelBox" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/FrameScrollContainer"]
-margin_bottom = 20.0
+layout_mode = 2
[node name="FrameHBox" type="HBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/FrameScrollContainer/FrameAndCelBox"]
-margin_bottom = 16.0
-rect_min_size = Vector2( 0, 16 )
+custom_minimum_size = Vector2(0, 30)
+layout_mode = 2
[node name="CelVBox" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/FrameScrollContainer/FrameAndCelBox"]
-margin_top = 20.0
-margin_bottom = 20.0
+layout_mode = 2
[node name="BreakFreeFromContainer" type="Control" parent="TimelineContainer/PanelContainer/VBoxContainer"]
-margin_top = 68.0
-margin_right = 888.0
-margin_bottom = 68.0
-__meta__ = {
-"_editor_description_": ""
-}
+layout_mode = 2
[node name="FrameScrollBar" type="HScrollBar" parent="TimelineContainer/PanelContainer/VBoxContainer/BreakFreeFromContainer"]
+layout_mode = 0
anchor_right = 1.0
-margin_left = 41.0
-margin_top = -12.0
+offset_left = 41.0
+offset_top = -12.0
size_flags_horizontal = 3
[node name="AnimationTimer" type="Timer" parent="."]
-[node name="OnionSkinningSettings" type="WindowDialog" parent="."]
-margin_right = 300.0
-margin_bottom = 240.0
-rect_min_size = Vector2( 300, 240 )
-resizable = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
+[node name="OnionSkinningSettings" type="Popup" parent="."]
+position = Vector2i(0, 36)
+size = Vector2i(315, 299)
+unresizable = false
+borderless = false
[node name="OnionSkinningButtons" type="VBoxContainer" parent="OnionSkinningSettings"]
-anchor_top = 0.5
+anchors_preset = 15
anchor_right = 1.0
-anchor_bottom = 0.5
-margin_left = 4.0
-margin_top = -113.0
-margin_right = -4.0
-margin_bottom = 86.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
[node name="OnionSkinningPast" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons"]
-margin_right = 292.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Past Frames"
-[node name="PastOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource( 9 )]
+[node name="PastOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource("9")]
unique_name_in_owner = true
-margin_left = 819.0
-margin_right = 891.0
+layout_mode = 2
size_flags_horizontal = 1
max_value = 10.0
value = 1.0
@@ -889,15 +842,12 @@ allow_greater = true
suffix = "Frames"
[node name="OnionSkinningFuture" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons"]
-margin_top = 46.0
-margin_right = 292.0
-margin_bottom = 60.0
+layout_mode = 2
text = "Future Frames"
-[node name="FutureOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource( 9 )]
+[node name="FutureOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource("9")]
unique_name_in_owner = true
-margin_left = 819.0
-margin_right = 891.0
+layout_mode = 2
size_flags_horizontal = 1
max_value = 10.0
value = 1.0
@@ -906,87 +856,68 @@ suffix = "Frames"
[node name="BlueRedMode" type="CheckBox" parent="OnionSkinningSettings/OnionSkinningButtons"]
unique_name_in_owner = true
-margin_top = 92.0
-margin_right = 126.0
-margin_bottom = 116.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 0
+mouse_default_cursor_shape = 2
text = "Color mode"
[node name="GridContainer" type="GridContainer" parent="OnionSkinningSettings/OnionSkinningButtons"]
-margin_top = 120.0
-margin_right = 292.0
-margin_bottom = 164.0
-custom_constants/hseparation = 8
+layout_mode = 2
+theme_override_constants/h_separation = 8
columns = 2
[node name="PastPlacementLabel" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"]
-margin_top = 3.0
-margin_right = 127.0
-margin_bottom = 17.0
+layout_mode = 2
text = "Show past frames:"
-valign = 1
[node name="PastPlacement" type="OptionButton" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"]
unique_name_in_owner = true
-margin_left = 135.0
-margin_right = 292.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
-text = "Above canvas"
-items = [ "Above canvas", null, false, 0, null, "Below canvas", null, false, 1, null ]
-selected = 0
-__meta__ = {
-"_editor_description_": ""
-}
+mouse_default_cursor_shape = 2
+item_count = 2
+popup/item_0/text = "Above canvas"
+popup/item_0/id = 0
+popup/item_1/text = "Below canvas"
+popup/item_1/id = 1
[node name="FuturePlacementLabel" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"]
-margin_top = 27.0
-margin_right = 127.0
-margin_bottom = 41.0
+layout_mode = 2
text = "Show future frames:"
-align = 2
-valign = 1
[node name="FuturePlacement" type="OptionButton" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"]
unique_name_in_owner = true
-margin_left = 135.0
-margin_top = 24.0
-margin_right = 292.0
-margin_bottom = 44.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-text = "Above canvas"
-items = [ "Above canvas", null, false, 0, null, "Below canvas", null, false, 1, null ]
-selected = 0
+item_count = 2
+popup/item_0/text = "Above canvas"
+popup/item_0/id = 0
+popup/item_1/text = "Below canvas"
+popup/item_1/id = 1
[node name="Label" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons"]
-margin_top = 168.0
-margin_right = 292.0
-margin_bottom = 199.0
-custom_colors/font_color = Color( 0.333333, 0.901961, 0.462745, 1 )
+layout_mode = 2
+theme_override_colors/font_color = Color(0.333333, 0.901961, 0.462745, 1)
text = "If you want a layer to ignore onion skinning simply add the \"_io\" suffix in its name."
-valign = 1
-autowrap = true
+autowrap_mode = 3
-[node name="FrameTagDialog" parent="." instance=ExtResource( 42 )]
+[node name="FrameTagDialog" parent="." instance=ExtResource("42")]
[node name="DragHighlight" type="ColorRect" parent="."]
visible = false
-margin_right = 40.0
-margin_bottom = 40.0
+layout_mode = 0
+offset_right = 40.0
+offset_bottom = 40.0
mouse_filter = 2
-color = Color( 0, 0.741176, 1, 0.501961 )
+color = Color(0, 0.741176, 1, 0.501961)
[node name="PasteTagPopup" type="PopupMenu" parent="."]
-margin_right = 20.0
-margin_bottom = 20.0
-script = ExtResource( 12 )
+script = ExtResource("12")
-[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer" to="." method="add_layer" binds= [ 0 ]]
+[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer" to="." method="add_layer" binds= [0]]
[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/RemoveLayer" to="." method="_on_RemoveLayer_pressed"]
-[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveUpLayer" to="." method="change_layer_order" binds= [ true ]]
-[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveDownLayer" to="." method="change_layer_order" binds= [ false ]]
+[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveUpLayer" to="." method="change_layer_order" binds= [true]]
+[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveDownLayer" to="." method="change_layer_order" binds= [false]]
[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/CloneLayer" to="." method="_on_CloneLayer_pressed"]
[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MergeDownLayer" to="." method="_on_MergeDownLayer_pressed"]
[connection signal="value_changed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/BlendingHBox/OpacitySlider" to="." method="_on_OpacitySlider_value_changed"]
@@ -1009,7 +940,8 @@ script = ExtResource( 12 )
[connection signal="gui_input" from="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"]
[connection signal="resized" from="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/VBoxContainer/LayerVBox" to="." method="_on_LayerVBox_resized"]
[connection signal="timeout" from="AnimationTimer" to="." method="_on_AnimationTimer_timeout"]
-[connection signal="popup_hide" from="OnionSkinningSettings" to="." method="_on_OnionSkinningSettings_popup_hide"]
+[connection signal="close_requested" from="OnionSkinningSettings" to="." method="_on_onion_skinning_settings_close_requested"]
+[connection signal="visibility_changed" from="OnionSkinningSettings" to="." method="_on_onion_skinning_settings_visibility_changed"]
[connection signal="value_changed" from="OnionSkinningSettings/OnionSkinningButtons/PastOnionSkinning" to="." method="_on_PastOnionSkinning_value_changed"]
[connection signal="value_changed" from="OnionSkinningSettings/OnionSkinningButtons/FutureOnionSkinning" to="." method="_on_FutureOnionSkinning_value_changed"]
[connection signal="toggled" from="OnionSkinningSettings/OnionSkinningButtons/BlueRedMode" to="." method="_on_BlueRedMode_toggled"]
diff --git a/src/UI/Timeline/BaseCelButton.tscn b/src/UI/Timeline/BaseCelButton.tscn
index 1c8142b74b0..acb791d9dbe 100644
--- a/src/UI/Timeline/BaseCelButton.tscn
+++ b/src/UI/Timeline/BaseCelButton.tscn
@@ -1,57 +1,53 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://byhnvhs6av108"]
-[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=1]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2]
+[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="1"]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"]
-[sub_resource type="ShaderMaterial" id=1]
-shader = ExtResource( 1 )
-shader_param/size = 10.0
-shader_param/alpha = 1.0
-shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0, 0 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = false
+[sub_resource type="ShaderMaterial" id="1"]
+shader = ExtResource("1")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0, 0)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = false
[node name="BaseCelButton" type="Button"]
-margin_top = 18.0
-margin_right = 36.0
-margin_bottom = 54.0
-rect_min_size = Vector2( 36, 36 )
-focus_mode = 0
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(36, 36)
+offset_top = 18.0
+offset_right = 36.0
+offset_bottom = 54.0
size_flags_horizontal = 0
size_flags_vertical = 0
+focus_mode = 0
+mouse_default_cursor_shape = 2
toggle_mode = true
button_mask = 7
-enabled_focus_mode = 0
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="CelTexture" type="TextureRect" parent="."]
-margin_left = 2.0
-margin_top = 1.78536
-margin_right = 34.0
-margin_bottom = 33.7854
-rect_min_size = Vector2( 32, 32 )
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 0
+offset_left = 2.0
+offset_top = 1.78536
+offset_right = 34.0
+offset_bottom = 33.7854
size_flags_horizontal = 0
size_flags_vertical = 0
-expand = true
+expand_mode = 1
stretch_mode = 6
-__meta__ = {
-"_edit_use_anchors_": false
-}
-[node name="TransparentChecker" parent="CelTexture" instance=ExtResource( 2 )]
+[node name="TransparentChecker" parent="CelTexture" instance=ExtResource("2")]
show_behind_parent = true
-material = SubResource( 1 )
+material = SubResource("1")
+layout_mode = 1
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 0.0
-margin_bottom = 0.0
+grow_horizontal = 2
+grow_vertical = 2
[connection signal="pressed" from="." to="." method="_on_CelButton_pressed"]
[connection signal="resized" from="." to="." method="_on_CelButton_resized"]
diff --git a/src/UI/Timeline/BaseLayerButton.tscn b/src/UI/Timeline/BaseLayerButton.tscn
index 4d178964603..41c33cc8fa9 100644
--- a/src/UI/Timeline/BaseLayerButton.tscn
+++ b/src/UI/Timeline/BaseLayerButton.tscn
@@ -1,159 +1,132 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bai814sqvk68f"]
-[ext_resource path="res://src/UI/Timeline/LayerButton.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/layers/layer_visible.png" type="Texture" id=2]
-[ext_resource path="res://assets/graphics/layers/unlock.png" type="Texture" id=3]
+[ext_resource type="Script" path="res://src/UI/Timeline/LayerButton.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://c2b3htff5yox8" path="res://assets/graphics/layers/layer_visible.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://dhc0pnnqojd2m" path="res://assets/graphics/layers/unlock.png" id="3"]
[node name="BaseLayerButton" type="Button"]
-margin_right = 200.0
-margin_bottom = 36.0
-rect_min_size = Vector2( 205, 36 )
+custom_minimum_size = Vector2(205, 36)
+offset_right = 200.0
+offset_bottom = 36.0
focus_mode = 0
mouse_default_cursor_shape = 2
toggle_mode = true
action_mode = 0
-enabled_focus_mode = 0
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_horizontal_guides_": [ ]
-}
+script = ExtResource("1")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
size_flags_horizontal = 0
[node name="EmptySpacer" type="Control" parent="HBoxContainer"]
-margin_bottom = 36.0
+layout_mode = 2
mouse_filter = 2
[node name="LayerButtons" type="HBoxContainer" parent="HBoxContainer"]
-margin_left = 4.0
-margin_right = 122.0
-margin_bottom = 36.0
-rect_min_size = Vector2( 118, 0 )
-custom_constants/separation = 10
-
-[node name="ExpandButton" type="ToolButton" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_top = 7.0
-margin_right = 22.0
-margin_bottom = 29.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Expand/collapse group"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(118, 0)
+layout_mode = 2
+theme_override_constants/separation = 10
+
+[node name="ExpandButton" type="Button" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]]
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
+tooltip_text = "Expand/collapse group"
+mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/ExpandButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="VisibilityButton" type="ToolButton" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 32.0
-margin_top = 7.0
-margin_right = 54.0
-margin_bottom = 29.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Toggle layer's visibility"
-focus_mode = 0
-mouse_default_cursor_shape = 2
+
+[node name="VisibilityButton" type="Button" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]]
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
+tooltip_text = "Toggle layer's visibility"
+focus_mode = 0
+mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/VisibilityButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="LockButton" type="ToolButton" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]]
-margin_left = 64.0
-margin_top = 7.0
-margin_right = 86.0
-margin_bottom = 29.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Lock/unlock layer"
-focus_mode = 0
-mouse_default_cursor_shape = 2
+texture = ExtResource("2")
+
+[node name="LockButton" type="Button" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]]
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
+tooltip_text = "Lock/unlock layer"
+focus_mode = 0
+mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/LockButton"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 3 )
+texture = ExtResource("3")
[node name="LayerName" type="HBoxContainer" parent="HBoxContainer"]
-margin_left = 126.0
-margin_right = 205.0
-margin_bottom = 36.0
-rect_pivot_offset = Vector2( -187, -9 )
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
alignment = 1
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="HierarchySpacer" type="Control" parent="HBoxContainer/LayerName"]
-margin_bottom = 36.0
+layout_mode = 2
mouse_filter = 2
[node name="Label" type="Label" parent="HBoxContainer/LayerName"]
-margin_left = 4.0
-margin_top = 11.0
-margin_right = 75.0
-margin_bottom = 25.0
+layout_mode = 2
size_flags_horizontal = 3
text = "Layer 0"
clip_text = true
[node name="LineEdit" type="LineEdit" parent="HBoxContainer/LayerName"]
visible = false
-margin_left = 30.0
-margin_top = 2.0
-margin_right = 110.0
-margin_bottom = 34.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
text = "Layer 0"
editable = false
caret_blink = true
-caret_blink_speed = 0.5
+caret_blink_interval = 0.5
[node name="EmptySpacer" type="Control" parent="HBoxContainer/LayerName"]
-margin_left = 79.0
-margin_right = 79.0
-margin_bottom = 36.0
+layout_mode = 2
mouse_filter = 2
[connection signal="gui_input" from="." to="." method="_on_LayerContainer_gui_input"]
diff --git a/src/UI/Timeline/Cel3DButton.tscn b/src/UI/Timeline/Cel3DButton.tscn
index f716467bf41..9e3f7ecbb6e 100644
--- a/src/UI/Timeline/Cel3DButton.tscn
+++ b/src/UI/Timeline/Cel3DButton.tscn
@@ -1,14 +1,14 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://cqpi2e7amvsau"]
-[ext_resource path="res://src/UI/Timeline/BaseCelButton.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Timeline/CelButton.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://byhnvhs6av108" path="res://src/UI/Timeline/BaseCelButton.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Timeline/CelButton.gd" id="2"]
-[node name="PixelCelButton" instance=ExtResource( 1 )]
-rect_pivot_offset = Vector2( -18, 6 )
-script = ExtResource( 2 )
+[node name="PixelCelButton" instance=ExtResource("1")]
+pivot_offset = Vector2(-18, 6)
+script = ExtResource("2")
[node name="LinkedIndicator" type="Polygon2D" parent="." index="1"]
-color = Color( 0, 1, 0, 1 )
-invert_enable = true
+color = Color(0, 1, 0, 1)
+invert_enabled = true
invert_border = 1.0
-polygon = PoolVector2Array( 0, 0, 36, 0, 36, 36, 0, 36 )
+polygon = PackedVector2Array(0, 0, 36, 0, 36, 36, 0, 36)
diff --git a/src/UI/Timeline/CelButton.gd b/src/UI/Timeline/CelButton.gd
index 4e7a7715512..341318ab0db 100644
--- a/src/UI/Timeline/CelButton.gd
+++ b/src/UI/Timeline/CelButton.gd
@@ -6,48 +6,45 @@ var frame := 0
var layer := 0
var cel: BaseCel
-onready var popup_menu: PopupMenu = get_node_or_null("PopupMenu")
-onready var linked_indicator: Polygon2D = get_node_or_null("LinkedIndicator")
-onready var cel_texture: TextureRect = $CelTexture
-onready var transparent_checker: ColorRect = $CelTexture/TransparentChecker
+@onready var popup_menu: PopupMenu = get_node_or_null("PopupMenu")
+@onready var linked_indicator: Polygon2D = get_node_or_null("LinkedIndicator")
+@onready var cel_texture: TextureRect = $CelTexture
+@onready var transparent_checker: ColorRect = $CelTexture/TransparentChecker
func _ready() -> void:
cel = Global.current_project.frames[frame].cels[layer]
button_setup()
_dim_checker()
- cel.connect("texture_changed", self, "_dim_checker")
+ cel.texture_changed.connect(_dim_checker)
func button_setup() -> void:
- rect_min_size.x = Global.animation_timeline.cel_size
- rect_min_size.y = Global.animation_timeline.cel_size
+ custom_minimum_size.x = Global.animation_timeline.cel_size
+ custom_minimum_size.y = Global.animation_timeline.cel_size
- var base_layer: BaseLayer = Global.current_project.layers[layer]
- hint_tooltip = tr("Frame: %s, Layer: %s") % [frame + 1, base_layer.name]
+ var base_layer := Global.current_project.layers[layer]
+ tooltip_text = tr("Frame: %s, Layer: %s") % [frame + 1, base_layer.name]
cel_texture.texture = cel.image_texture
if is_instance_valid(linked_indicator):
linked_indicator.visible = cel.link_set != null
if cel.link_set != null:
linked_indicator.color.h = cel.link_set["hue"]
- # Reset the checkers size because it assumes you want the same size as the canvas
- transparent_checker.rect_size = transparent_checker.get_parent().rect_size
-
func _on_CelButton_resized() -> void:
- cel_texture.rect_min_size.x = rect_min_size.x - 4
- cel_texture.rect_min_size.y = rect_min_size.y - 4
+ cel_texture.custom_minimum_size.x = custom_minimum_size.x - 4
+ cel_texture.custom_minimum_size.y = custom_minimum_size.y - 4
if is_instance_valid(linked_indicator):
- linked_indicator.polygon[1].x = rect_min_size.x
- linked_indicator.polygon[2].x = rect_min_size.x
- linked_indicator.polygon[2].y = rect_min_size.y
- linked_indicator.polygon[3].y = rect_min_size.y
+ linked_indicator.polygon[1].x = custom_minimum_size.x
+ linked_indicator.polygon[2].x = custom_minimum_size.x
+ linked_indicator.polygon[2].y = custom_minimum_size.y
+ linked_indicator.polygon[3].y = custom_minimum_size.y
func _on_CelButton_pressed() -> void:
- var project = Global.current_project
+ var project := Global.current_project
if Input.is_action_just_released("left_mouse"):
Global.canvas.selection.transform_content_confirm()
var change_cel := true
@@ -55,10 +52,10 @@ func _on_CelButton_pressed() -> void:
var prev_curr_layer: int = project.current_layer
if Input.is_action_pressed("shift"):
- var frame_diff_sign = sign(frame - prev_curr_frame)
+ var frame_diff_sign := signi(frame - prev_curr_frame)
if frame_diff_sign == 0:
frame_diff_sign = 1
- var layer_diff_sign = sign(layer - prev_curr_layer)
+ var layer_diff_sign := signi(layer - prev_curr_layer)
if layer_diff_sign == 0:
layer_diff_sign = 1
for i in range(prev_curr_frame, frame + frame_diff_sign, frame_diff_sign):
@@ -89,12 +86,12 @@ func _on_CelButton_pressed() -> void:
elif Input.is_action_just_released("right_mouse"):
if is_instance_valid(popup_menu):
popup_menu.popup(Rect2(get_global_mouse_position(), Vector2.ONE))
- pressed = !pressed
+ button_pressed = !button_pressed
elif Input.is_action_just_released("middle_mouse"):
- pressed = !pressed
+ button_pressed = !button_pressed
_delete_cel_content()
else: # An example of this would be Space
- pressed = !pressed
+ button_pressed = !button_pressed
func _on_PopupMenu_id_pressed(id: int) -> void:
@@ -103,28 +100,30 @@ func _on_PopupMenu_id_pressed(id: int) -> void:
_delete_cel_content()
MenuOptions.LINK, MenuOptions.UNLINK:
- var project: Project = Global.current_project
+ var project := Global.current_project
if id == MenuOptions.UNLINK:
project.undo_redo.create_action("Unlink Cel")
- var selected_cels = project.selected_cels.duplicate()
+ var selected_cels := project.selected_cels.duplicate()
if not selected_cels.has([frame, layer]):
selected_cels.append([frame, layer]) # Include this cel with the selected ones
for cel_index in selected_cels:
if layer != cel_index[1]: # Skip selected cels not on the same layer
continue
- var s_cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
+ var s_cel := project.frames[cel_index[0]].cels[cel_index[1]]
if s_cel.link_set == null: # Skip cels that aren't linked
continue
- project.undo_redo.add_do_method(project.layers[layer], "link_cel", s_cel, null)
+ project.undo_redo.add_do_method(
+ project.layers[layer].link_cel.bind(s_cel, null)
+ )
project.undo_redo.add_undo_method(
- project.layers[layer], "link_cel", s_cel, s_cel.link_set
+ project.layers[layer].link_cel.bind(s_cel, s_cel.link_set)
)
if s_cel.link_set.size() > 1: # Skip copying content if not linked to another
project.undo_redo.add_do_method(
- s_cel, "set_content", s_cel.copy_content(), ImageTexture.new()
+ s_cel.set_content.bind(s_cel.copy_content(), ImageTexture.new())
)
project.undo_redo.add_undo_method(
- s_cel, "set_content", s_cel.get_content(), s_cel.image_texture
+ s_cel.set_content.bind(s_cel.get_content(), s_cel.image_texture)
)
elif id == MenuOptions.LINK:
@@ -132,29 +131,31 @@ func _on_PopupMenu_id_pressed(id: int) -> void:
var link_set: Dictionary = {} if cel.link_set == null else cel.link_set
if cel.link_set == null:
project.undo_redo.add_do_method(
- project.layers[layer], "link_cel", cel, link_set
+ project.layers[layer].link_cel.bind(cel, link_set)
+ )
+ project.undo_redo.add_undo_method(
+ project.layers[layer].link_cel.bind(cel, null)
)
- project.undo_redo.add_undo_method(project.layers[layer], "link_cel", cel, null)
for cel_index in project.selected_cels:
if layer != cel_index[1]: # Skip selected cels not on the same layer
continue
- var s_cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]]
+ var s_cel := project.frames[cel_index[0]].cels[cel_index[1]]
if cel == s_cel: # Don't need to link cel to itself
continue
if s_cel.link_set == link_set: # Skip cels that were already linked
continue
project.undo_redo.add_do_method(
- project.layers[layer], "link_cel", s_cel, link_set
+ project.layers[layer].link_cel.bind(s_cel, link_set)
)
project.undo_redo.add_undo_method(
- project.layers[layer], "link_cel", s_cel, s_cel.link_set
+ project.layers[layer].link_cel.bind(s_cel, s_cel.link_set)
)
project.undo_redo.add_do_method(
- s_cel, "set_content", cel.get_content(), cel.image_texture
+ s_cel.set_content.bind(cel.get_content(), cel.image_texture)
)
project.undo_redo.add_undo_method(
- s_cel, "set_content", s_cel.get_content(), s_cel.image_texture
+ s_cel.set_content.bind(s_cel.get_content(), s_cel.image_texture)
)
# Remove and add a new cel button to update appearance (can't use button_setup
@@ -162,38 +163,38 @@ func _on_PopupMenu_id_pressed(id: int) -> void:
# May be able to use button_setup with a lambda to find correct cel button in Godot 4
for f in project.frames.size():
project.undo_redo.add_do_method(
- Global.animation_timeline, "project_cel_removed", f, layer
+ Global.animation_timeline.project_cel_removed.bind(f, layer)
)
project.undo_redo.add_undo_method(
- Global.animation_timeline, "project_cel_removed", f, layer
+ Global.animation_timeline.project_cel_removed.bind(f, layer)
)
project.undo_redo.add_do_method(
- Global.animation_timeline, "project_cel_added", f, layer
+ Global.animation_timeline.project_cel_added.bind(f, layer)
)
project.undo_redo.add_undo_method(
- Global.animation_timeline, "project_cel_added", f, layer
+ Global.animation_timeline.project_cel_added.bind(f, layer)
)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
func _delete_cel_content() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var empty_content = cel.create_empty_content()
var old_content = cel.get_content()
project.undos += 1
project.undo_redo.create_action("Draw")
if cel.link_set == null:
- project.undo_redo.add_do_method(cel, "set_content", empty_content)
- project.undo_redo.add_undo_method(cel, "set_content", old_content)
+ project.undo_redo.add_do_method(cel.set_content.bind(empty_content))
+ project.undo_redo.add_undo_method(cel.set_content.bind(old_content))
else:
for linked_cel in cel.link_set["cels"]:
- project.undo_redo.add_do_method(linked_cel, "set_content", empty_content)
- project.undo_redo.add_undo_method(linked_cel, "set_content", old_content)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer, project)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer, project)
+ project.undo_redo.add_do_method(linked_cel.set_content.bind(empty_content))
+ project.undo_redo.add_undo_method(linked_cel.set_content.bind(old_content))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer, project))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer, project))
project.undo_redo.commit_action()
@@ -207,13 +208,13 @@ func _dim_checker() -> void:
transparent_checker.self_modulate.a = 1.0
-func get_drag_data(_position: Vector2) -> Array:
+func _get_drag_data(_position: Vector2) -> Variant:
var button := Button.new()
- button.rect_size = rect_size
+ button.size = size
button.theme = Global.control.theme
var texture_rect := TextureRect.new()
- texture_rect.rect_size = cel_texture.rect_size
- texture_rect.rect_position = cel_texture.rect_position
+ texture_rect.size = cel_texture.size
+ texture_rect.position = cel_texture.position
texture_rect.expand = true
texture_rect.texture = cel_texture.texture
button.add_child(texture_rect)
@@ -222,8 +223,8 @@ func get_drag_data(_position: Vector2) -> Array:
return ["Cel", frame, layer]
-func can_drop_data(_pos: Vector2, data) -> bool:
- var project: Project = Global.current_project
+func _can_drop_data(_pos: Vector2, data) -> bool:
+ var project := Global.current_project
if typeof(data) == TYPE_ARRAY and data[0] == "Cel":
var drag_frame = data[1]
var drag_layer = data[2]
@@ -246,8 +247,8 @@ func can_drop_data(_pos: Vector2, data) -> bool:
else: # Right
region = _get_region_rect(0.875, 1.125)
region.position.x += 2 # Container spacing
- Global.animation_timeline.drag_highlight.rect_global_position = region.position
- Global.animation_timeline.drag_highlight.rect_size = region.size
+ Global.animation_timeline.drag_highlight.global_position = region.position
+ Global.animation_timeline.drag_highlight.size = region.size
Global.animation_timeline.drag_highlight.visible = true
return true
@@ -255,15 +256,17 @@ func can_drop_data(_pos: Vector2, data) -> bool:
return false
-func drop_data(_pos: Vector2, data) -> void:
- var drop_frame = data[1]
- var drop_layer = data[2]
- var project = Global.current_project
+func _drop_data(_pos: Vector2, data) -> void:
+ var drop_frame: int = data[1]
+ var drop_layer: int = data[2]
+ var project := Global.current_project
project.undo_redo.create_action("Move Cels")
if Input.is_action_pressed("ctrl") or layer != drop_layer: # Swap cels
- project.undo_redo.add_do_method(project, "swap_cel", frame, layer, drop_frame, drop_layer)
- project.undo_redo.add_undo_method(project, "swap_cel", frame, layer, drop_frame, drop_layer)
+ project.undo_redo.add_do_method(project.swap_cel.bind(frame, layer, drop_frame, drop_layer))
+ project.undo_redo.add_undo_method(
+ project.swap_cel.bind(frame, layer, drop_frame, drop_layer)
+ )
else: # Move cels
var to_frame: int
if _get_region_rect(0, 0.5).has_point(get_global_mouse_position()): # Left
@@ -272,15 +275,15 @@ func drop_data(_pos: Vector2, data) -> void:
to_frame = frame + 1
if drop_frame < frame:
to_frame -= 1
- project.undo_redo.add_do_method(project, "move_cel", drop_frame, to_frame, layer)
- project.undo_redo.add_undo_method(project, "move_cel", to_frame, drop_frame, layer)
+ project.undo_redo.add_do_method(project.move_cel.bind(drop_frame, to_frame, layer))
+ project.undo_redo.add_undo_method(project.move_cel.bind(to_frame, drop_frame, layer))
- project.undo_redo.add_do_method(project, "change_cel", frame, layer)
+ project.undo_redo.add_do_method(project.change_cel.bind(frame, layer))
project.undo_redo.add_undo_method(
- project, "change_cel", project.current_frame, project.current_layer
+ project.change_cel.bind(project.current_frame, project.current_layer)
)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
diff --git a/src/UI/Timeline/FrameButton.gd b/src/UI/Timeline/FrameButton.gd
index 3115bf63672..fe3f68074d8 100644
--- a/src/UI/Timeline/FrameButton.gd
+++ b/src/UI/Timeline/FrameButton.gd
@@ -4,24 +4,24 @@ enum { REMOVE, CLONE, MOVE_LEFT, MOVE_RIGHT, PROPERTIES, REVERSE, CENTER }
var frame := 0
-onready var popup_menu: PopupMenu = $PopupMenu
-onready var frame_properties: ConfirmationDialog = Global.control.find_node("FrameProperties")
+@onready var popup_menu: PopupMenu = $PopupMenu
+@onready var frame_properties: ConfirmationDialog = Global.control.find_child("FrameProperties")
func _ready() -> void:
- rect_min_size.x = Global.animation_timeline.cel_size
+ custom_minimum_size.x = Global.animation_timeline.cel_size
text = str(frame + 1)
- connect("pressed", self, "_button_pressed")
- connect("mouse_entered", self, "_update_tooltip")
+ pressed.connect(_button_pressed)
+ mouse_entered.connect(_update_tooltip)
func _update_tooltip() -> void:
- var duration: float = Global.current_project.frames[frame].duration
+ var duration := Global.current_project.frames[frame].duration
var duration_sec := duration * (1.0 / Global.current_project.fps)
var duration_str := str(duration_sec)
if "." in duration_str: # If its a decimal value
duration_str = "%.2f" % duration_sec # Up to 2 decimal places
- hint_tooltip = "%s: %sx (%s sec)" % [tr("Duration"), str(duration), duration_str]
+ tooltip_text = "%s: %sx (%s sec)" % [tr("Duration"), str(duration), duration_str]
func _button_pressed() -> void:
@@ -29,7 +29,7 @@ func _button_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
var prev_curr_frame := Global.current_project.current_frame
if Input.is_action_pressed("shift"):
- var frame_diff_sign := sign(frame - prev_curr_frame)
+ var frame_diff_sign := signi(frame - prev_curr_frame)
if frame_diff_sign == 0:
frame_diff_sign = 1
for i in range(prev_curr_frame, frame + frame_diff_sign, frame_diff_sign):
@@ -67,12 +67,12 @@ func _button_pressed() -> void:
if frame < Global.current_project.frames.size() - 1:
popup_menu.set_item_disabled(MOVE_RIGHT, false)
popup_menu.popup(Rect2(get_global_mouse_position(), Vector2.ONE))
- pressed = !pressed
+ button_pressed = !button_pressed
elif Input.is_action_just_released("middle_mouse"):
- pressed = !pressed
+ button_pressed = !button_pressed
Global.animation_timeline.delete_frames(_get_frame_indices())
else: # An example of this would be Space
- pressed = !pressed
+ button_pressed = !button_pressed
func _on_PopupMenu_id_pressed(id: int) -> void:
@@ -98,26 +98,26 @@ func _on_PopupMenu_id_pressed(id: int) -> void:
func change_frame_order(rate: int) -> void:
var change := frame + rate
- var project = Global.current_project
+ var project := Global.current_project
project.undo_redo.create_action("Change Frame Order")
- project.undo_redo.add_do_method(project, "move_frame", frame, change)
- project.undo_redo.add_undo_method(project, "move_frame", change, frame)
+ project.undo_redo.add_do_method(project.move_frame.bind(frame, change))
+ project.undo_redo.add_undo_method(project.move_frame.bind(change, frame))
if project.current_frame == frame:
- project.undo_redo.add_do_method(project, "change_cel", change)
+ project.undo_redo.add_do_method(project.change_cel.bind(change))
else:
- project.undo_redo.add_do_method(project, "change_cel", project.current_frame)
+ project.undo_redo.add_do_method(project.change_cel.bind(project.current_frame))
- project.undo_redo.add_undo_method(project, "change_cel", project.current_frame)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
-func get_drag_data(_position: Vector2) -> Array:
+func _get_drag_data(_position: Vector2) -> Variant:
var button := Button.new()
- button.rect_size = rect_size
+ button.size = size
button.theme = Global.control.theme
button.text = text
set_drag_preview(button)
@@ -125,7 +125,7 @@ func get_drag_data(_position: Vector2) -> Array:
return ["Frame", frame]
-func can_drop_data(_pos: Vector2, data) -> bool:
+func _can_drop_data(_pos: Vector2, data) -> bool:
if typeof(data) == TYPE_ARRAY:
if data[0] == "Frame":
if data[1] != frame: # Can't move to same frame
@@ -139,21 +139,21 @@ func can_drop_data(_pos: Vector2, data) -> bool:
else:
region = _get_region_rect(0.875, 1.125)
region.position.x += 2 # Container spacing
- Global.animation_timeline.drag_highlight.rect_global_position = region.position
- Global.animation_timeline.drag_highlight.rect_size = region.size
+ Global.animation_timeline.drag_highlight.global_position = region.position
+ Global.animation_timeline.drag_highlight.size = region.size
Global.animation_timeline.drag_highlight.visible = true
return true
Global.animation_timeline.drag_highlight.visible = false
return false
-func drop_data(_pos: Vector2, data) -> void:
- var drop_frame = data[1]
- var project = Global.current_project
+func _drop_data(_pos: Vector2, data) -> void:
+ var drop_frame: int = data[1]
+ var project := Global.current_project
project.undo_redo.create_action("Change Frame Order")
if Input.is_action_pressed("ctrl"): # Swap frames
- project.undo_redo.add_do_method(project, "swap_frame", frame, drop_frame)
- project.undo_redo.add_undo_method(project, "swap_frame", frame, drop_frame)
+ project.undo_redo.add_do_method(project.swap_frame.bind(frame, drop_frame))
+ project.undo_redo.add_undo_method(project.swap_frame.bind(frame, drop_frame))
else: # Move frames
var to_frame: int
if _get_region_rect(0, 0.5).has_point(get_global_mouse_position()): # Left
@@ -162,16 +162,16 @@ func drop_data(_pos: Vector2, data) -> void:
to_frame = frame + 1
if drop_frame < frame:
to_frame -= 1
- project.undo_redo.add_do_method(project, "move_frame", drop_frame, to_frame)
- project.undo_redo.add_undo_method(project, "move_frame", to_frame, drop_frame)
+ project.undo_redo.add_do_method(project.move_frame.bind(drop_frame, to_frame))
+ project.undo_redo.add_undo_method(project.move_frame.bind(to_frame, drop_frame))
if project.current_frame == drop_frame:
- project.undo_redo.add_do_method(project, "change_cel", frame)
+ project.undo_redo.add_do_method(project.change_cel.bind(frame))
else:
- project.undo_redo.add_do_method(project, "change_cel", project.current_frame)
- project.undo_redo.add_undo_method(project, "change_cel", project.current_frame)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(project.change_cel.bind(project.current_frame))
+ project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
diff --git a/src/UI/Timeline/FrameButton.tscn b/src/UI/Timeline/FrameButton.tscn
index 8950253153e..1a822cbf173 100644
--- a/src/UI/Timeline/FrameButton.tscn
+++ b/src/UI/Timeline/FrameButton.tscn
@@ -1,28 +1,36 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://dnwoi64rtj5vt"]
-[ext_resource path="res://src/UI/Timeline/FrameButton.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Timeline/FrameButton.gd" id="1"]
[node name="FrameButton" type="Button"]
-margin_right = 12.0
-margin_bottom = 20.0
+offset_right = 12.0
+offset_bottom = 20.0
focus_mode = 0
mouse_default_cursor_shape = 2
toggle_mode = true
button_mask = 7
-enabled_focus_mode = 0
text = "1"
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+script = ExtResource("1")
[node name="PopupMenu" type="PopupMenu" parent="."]
-margin_right = 20.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
-items = [ "Remove Frame", null, 0, false, true, -1, 0, null, "", false, "Clone Frame", null, 0, false, false, -1, 0, null, "", false, "Move Left", null, 0, false, true, -1, 0, null, "", false, "Move Right", null, 0, false, true, -1, 0, null, "", false, "Frame Properties", null, 0, false, false, -1, 0, null, "", false, "Reverse Frames", null, 0, false, true, 5, 0, null, "", false, "Center Frames", null, 0, false, false, 6, 0, null, "", false ]
-__meta__ = {
-"_edit_use_anchors_": false
-}
+item_count = 7
+item_0/text = "Remove Frame"
+item_0/id = -1
+item_0/disabled = true
+item_1/text = "Clone Frame"
+item_1/id = -1
+item_2/text = "Move Left"
+item_2/id = -1
+item_2/disabled = true
+item_3/text = "Move Right"
+item_3/id = -1
+item_3/disabled = true
+item_4/text = "Frame Properties"
+item_4/id = -1
+item_5/text = "Reverse Frames"
+item_5/id = 5
+item_5/disabled = true
+item_6/text = "Center Frames"
+item_6/id = 6
[connection signal="id_pressed" from="PopupMenu" to="." method="_on_PopupMenu_id_pressed"]
diff --git a/src/UI/Timeline/FrameProperties.gd b/src/UI/Timeline/FrameProperties.gd
index f5687e69d2f..a91967685ae 100644
--- a/src/UI/Timeline/FrameProperties.gd
+++ b/src/UI/Timeline/FrameProperties.gd
@@ -1,8 +1,8 @@
extends ConfirmationDialog
var frame_indices := []
-onready var frame_num = $VBoxContainer/GridContainer/FrameNum
-onready var frame_dur = $VBoxContainer/GridContainer/FrameTime
+@onready var frame_num = $VBoxContainer/GridContainer/FrameNum
+@onready var frame_dur = $VBoxContainer/GridContainer/FrameTime
func _on_FrameProperties_about_to_show() -> void:
@@ -17,12 +17,12 @@ func _on_FrameProperties_about_to_show() -> void:
frame_dur.set_value(duration)
-func _on_FrameProperties_popup_hide() -> void:
+func _on_FrameProperties_visibility_changed() -> void:
Global.dialog_open(false)
func _on_FrameProperties_confirmed() -> void:
- var project: Project = Global.current_project
+ var project := Global.current_project
var new_duration: float = frame_dur.get_value()
project.undos += 1
project.undo_redo.create_action("Change frame duration")
@@ -31,6 +31,6 @@ func _on_FrameProperties_confirmed() -> void:
project.undo_redo.add_undo_property(
project.frames[frame], "duration", project.frames[frame].duration
)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
project.undo_redo.commit_action()
diff --git a/src/UI/Timeline/FrameProperties.tscn b/src/UI/Timeline/FrameProperties.tscn
index 4ab3face889..4413e17bce1 100644
--- a/src/UI/Timeline/FrameProperties.tscn
+++ b/src/UI/Timeline/FrameProperties.tscn
@@ -1,70 +1,51 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://bs3dnnvnxyp68"]
-[ext_resource path="res://src/UI/Timeline/FrameProperties.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Timeline/FrameProperties.gd" id="1"]
[node name="FrameProperties" type="ConfirmationDialog"]
-margin_right = 209.0
-margin_bottom = 137.0
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+title = "Frame properties"
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 201.0
-margin_bottom = 101.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 201.0
+offset_bottom = 101.0
[node name="Label" type="Label" parent="VBoxContainer"]
-margin_right = 193.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Frame properties"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
-margin_top = 18.0
-margin_right = 193.0
-margin_bottom = 22.0
+layout_mode = 2
[node name="GridContainer" type="GridContainer" parent="VBoxContainer"]
-margin_top = 26.0
-margin_right = 193.0
-margin_bottom = 68.0
+layout_mode = 2
columns = 2
[node name="Frame" type="Label" parent="VBoxContainer/GridContainer"]
-margin_right = 97.0
-margin_bottom = 14.0
+layout_mode = 2
text = "Frame"
[node name="FrameNum" type="Label" parent="VBoxContainer/GridContainer"]
-margin_left = 101.0
-margin_right = 193.0
-margin_bottom = 14.0
+layout_mode = 2
text = "1"
[node name="FrameDuration" type="Label" parent="VBoxContainer/GridContainer"]
-margin_top = 23.0
-margin_right = 97.0
-margin_bottom = 37.0
+layout_mode = 2
text = "Frame duration"
[node name="FrameTime" type="SpinBox" parent="VBoxContainer/GridContainer"]
-margin_left = 101.0
-margin_top = 18.0
-margin_right = 193.0
-margin_bottom = 42.0
-mouse_default_cursor_shape = 2
+layout_mode = 2
size_flags_horizontal = 3
+mouse_default_cursor_shape = 2
min_value = 0.01
step = 0.05
-value = 2.0
+value = 2.01
allow_greater = true
suffix = "x"
-[connection signal="about_to_show" from="." to="." method="_on_FrameProperties_about_to_show"]
+[connection signal="about_to_popup" from="." to="." method="_on_FrameProperties_about_to_show"]
[connection signal="confirmed" from="." to="." method="_on_FrameProperties_confirmed"]
-[connection signal="popup_hide" from="." to="." method="_on_FrameProperties_popup_hide"]
+[connection signal="visibility_changed" from="." to="." method="_on_FrameProperties_visibility_changed"]
diff --git a/src/UI/Timeline/FrameScrollContainer.gd b/src/UI/Timeline/FrameScrollContainer.gd
index 16034bb493e..2798554ad3d 100644
--- a/src/UI/Timeline/FrameScrollContainer.gd
+++ b/src/UI/Timeline/FrameScrollContainer.gd
@@ -1,28 +1,28 @@
extends Container
-const PADDING = 1
+const PADDING := 1
-export var h_scroll_bar_node_path: NodePath
-onready var h_scroll_bar: HScrollBar = get_node_or_null(h_scroll_bar_node_path)
+@export var h_scroll_bar_node_path: NodePath
+@onready var h_scroll_bar: HScrollBar = get_node_or_null(h_scroll_bar_node_path)
func _ready():
- rect_clip_content = true
- connect("sort_children", self, "_on_sort_children")
+ clip_contents = true
+ sort_children.connect(_on_sort_children)
if is_instance_valid(h_scroll_bar):
- h_scroll_bar.connect("resized", self, "_update_scroll")
- h_scroll_bar.connect("value_changed", self, "_on_scroll_bar_value_changed")
+ h_scroll_bar.resized.connect(_update_scroll)
+ h_scroll_bar.value_changed.connect(_on_scroll_bar_value_changed)
func _gui_input(event: InputEvent) -> void:
if get_child_count():
- var vertical_scroll: bool = get_child(0).rect_size.y >= rect_size.y
- if event is InputEventMouseButton and (event.shift or not vertical_scroll):
+ var vertical_scroll: bool = get_child(0).size.y >= size.y
+ if event is InputEventMouseButton and (event.shift_pressed or not vertical_scroll):
if is_instance_valid(h_scroll_bar):
- if event.button_index == BUTTON_WHEEL_UP:
+ if event.button_index == MOUSE_BUTTON_WHEEL_UP:
h_scroll_bar.value -= Global.animation_timeline.cel_size / 2 + 2
accept_event()
- elif event.button_index == BUTTON_WHEEL_DOWN:
+ elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
h_scroll_bar.value += Global.animation_timeline.cel_size / 2 + 2
accept_event()
@@ -30,10 +30,10 @@ func _gui_input(event: InputEvent) -> void:
func _update_scroll() -> void:
if get_child_count():
if is_instance_valid(h_scroll_bar):
- h_scroll_bar.max_value = get_child(0).rect_size.x
- h_scroll_bar.page = rect_size.x
+ h_scroll_bar.max_value = get_child(0).size.x
+ h_scroll_bar.page = size.x
h_scroll_bar.visible = h_scroll_bar.page < h_scroll_bar.max_value
- get_child(0).rect_position.x = -h_scroll_bar.value + PADDING
+ get_child(0).position.x = -h_scroll_bar.value + PADDING
func ensure_control_visible(control: Control):
@@ -42,8 +42,8 @@ func ensure_control_visible(control: Control):
# Based on Godot's implementation in ScrollContainer
var global_rect := get_global_rect()
var other_rect := control.get_global_rect()
- var diff: float = max(
- min(other_rect.position.x, global_rect.position.x),
+ var diff := maxf(
+ minf(other_rect.position.x, global_rect.position.x),
other_rect.position.x + other_rect.size.x - global_rect.size.x
)
h_scroll_bar.value += diff - global_rect.position.x
@@ -51,7 +51,7 @@ func ensure_control_visible(control: Control):
func _on_sort_children() -> void:
if get_child_count():
- get_child(0).rect_size = get_child(0).get_combined_minimum_size()
+ get_child(0).size = get_child(0).get_combined_minimum_size()
_update_scroll()
diff --git a/src/UI/Timeline/FrameTagDialog.gd b/src/UI/Timeline/FrameTagDialog.gd
index b4bfc24b275..2b90e218bc7 100644
--- a/src/UI/Timeline/FrameTagDialog.gd
+++ b/src/UI/Timeline/FrameTagDialog.gd
@@ -4,9 +4,9 @@ var current_tag_id := 0
var tag_vboxes := []
var delete_tag_button: Button
-onready var main_vbox_cont: VBoxContainer = $VBoxContainer/ScrollContainer/VBoxTagContainer
-onready var add_tag_button: Button = $VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag
-onready var options_dialog = $TagOptions
+@onready var main_vbox_cont: VBoxContainer = $VBoxContainer/ScrollContainer/VBoxTagContainer
+@onready var add_tag_button: Button = $VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag
+@onready var options_dialog = $TagOptions
func _ready() -> void:
@@ -33,7 +33,7 @@ func _on_FrameTagDialog_about_to_show() -> void:
var edit_button := Button.new()
edit_button.text = "Edit"
edit_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
- edit_button.connect("pressed", self, "_on_EditButton_pressed", [i, edit_button])
+ edit_button.pressed.connect(_on_EditButton_pressed.bind(i, edit_button))
hbox_cont.add_child(edit_button)
vbox_cont.add_child(hbox_cont)
@@ -43,7 +43,7 @@ func _on_FrameTagDialog_about_to_show() -> void:
vbox_cont.add_child(name_label)
var hsep := HSeparator.new()
- hsep.size_flags_horizontal = SIZE_EXPAND_FILL
+ hsep.size_flags_horizontal = Control.SIZE_EXPAND_FILL
vbox_cont.add_child(hsep)
main_vbox_cont.add_child(vbox_cont)
@@ -55,16 +55,17 @@ func _on_FrameTagDialog_about_to_show() -> void:
main_vbox_cont.move_child(add_tag_button, main_vbox_cont.get_child_count() - 1)
-func _on_FrameTagDialog_popup_hide() -> void:
- Global.dialog_open(false)
+func _on_FrameTagDialog_visibility_changed() -> void:
+ if not visible:
+ Global.dialog_open(false)
func _on_AddTag_pressed() -> void:
- var x_pos = add_tag_button.rect_global_position.x
- var y_pos = add_tag_button.rect_global_position.y + 2 * add_tag_button.rect_size.y
- options_dialog.popup(Rect2(Vector2(x_pos, y_pos), options_dialog.rect_size))
+ var x_pos := add_tag_button.global_position.x
+ var y_pos := add_tag_button.global_position.y + 2 * add_tag_button.size.y
+ options_dialog.popup(Rect2i(position + Vector2i(x_pos, y_pos), options_dialog.size))
current_tag_id = Global.current_project.animation_tags.size()
- # Determine tag values (Array sort method)...
+ # Determine tag values (array sort method)
var frames := []
for cel in Global.current_project.selected_cels:
frames.append(cel[0])
@@ -78,9 +79,9 @@ func _on_AddTag_pressed() -> void:
func _on_EditButton_pressed(_tag_id: int, edit_button: Button) -> void:
- var x_pos = edit_button.rect_global_position.x
- var y_pos = edit_button.rect_global_position.y + 2 * edit_button.rect_size.y
- options_dialog.popup(Rect2(Vector2(x_pos, y_pos), options_dialog.rect_size))
+ var x_pos = edit_button.global_position.x
+ var y_pos = edit_button.global_position.y + 2 * edit_button.size.y
+ options_dialog.popup(Rect2i(position + Vector2i(x_pos, y_pos), options_dialog.size))
current_tag_id = _tag_id
var animation_tag: AnimationTag = Global.current_project.animation_tags[_tag_id]
options_dialog.get_node("GridContainer/NameLineEdit").text = animation_tag.name
@@ -127,8 +128,8 @@ func _on_TagOptions_confirmed() -> void:
# Handle Undo/Redo
Global.current_project.undos += 1
Global.current_project.undo_redo.create_action("Modify Frame Tag")
- Global.current_project.undo_redo.add_do_method(Global, "general_redo")
- Global.current_project.undo_redo.add_undo_method(Global, "general_undo")
+ Global.current_project.undo_redo.add_do_method(Global.general_redo)
+ Global.current_project.undo_redo.add_undo_method(Global.general_undo)
Global.current_project.undo_redo.add_do_property(
Global.current_project, "animation_tags", new_animation_tags
)
@@ -142,12 +143,12 @@ func _on_TagOptions_confirmed() -> void:
func _on_TagOptions_custom_action(action: String) -> void:
if action == "delete_tag":
var new_animation_tags := Global.current_project.animation_tags.duplicate()
- new_animation_tags.remove(current_tag_id)
+ new_animation_tags.remove_at(current_tag_id)
# Handle Undo/Redo
Global.current_project.undos += 1
Global.current_project.undo_redo.create_action("Delete Frame Tag")
- Global.current_project.undo_redo.add_do_method(Global, "general_redo")
- Global.current_project.undo_redo.add_undo_method(Global, "general_undo")
+ Global.current_project.undo_redo.add_do_method(Global.general_redo)
+ Global.current_project.undo_redo.add_undo_method(Global.general_undo)
Global.current_project.undo_redo.add_do_property(
Global.current_project, "animation_tags", new_animation_tags
)
@@ -160,7 +161,7 @@ func _on_TagOptions_custom_action(action: String) -> void:
_on_FrameTagDialog_about_to_show()
-func _on_TagOptions_popup_hide() -> void:
+func _on_TagOptions_visibility_changed() -> void:
if delete_tag_button:
delete_tag_button.visible = false
diff --git a/src/UI/Timeline/FrameTagDialog.tscn b/src/UI/Timeline/FrameTagDialog.tscn
index 9a9221278f4..1db571e90c5 100644
--- a/src/UI/Timeline/FrameTagDialog.tscn
+++ b/src/UI/Timeline/FrameTagDialog.tscn
@@ -1,169 +1,122 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://c6je8lgr850wf"]
-[ext_resource path="res://src/UI/Timeline/FrameTagDialog.gd" type="Script" id=1]
-[ext_resource path="res://assets/graphics/timeline/new_frame.png" type="Texture" id=2]
+[ext_resource type="Script" path="res://src/UI/Timeline/FrameTagDialog.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://d1urikaf1lxwl" path="res://assets/graphics/timeline/new_frame.png" id="2"]
[node name="FrameTagDialog" type="AcceptDialog"]
-margin_right = 83.0
-margin_bottom = 58.0
-rect_min_size = Vector2( 400, 200 )
-window_title = "Frame Tag Properties"
-resizable = true
-script = ExtResource( 1 )
+title = "Frame Tag Properties"
+size = Vector2i(413, 300)
+exclusive = false
+script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
+custom_minimum_size = Vector2(0, 100)
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_left = 8.0
-margin_top = 8.0
-margin_right = -8.0
-margin_bottom = -36.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -49.0
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
-margin_right = 384.0
-margin_bottom = 128.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="VBoxTagContainer" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"]
-margin_right = 384.0
-margin_bottom = 28.0
+layout_mode = 2
size_flags_horizontal = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/ScrollContainer/VBoxTagContainer"]
-margin_right = 384.0
-margin_bottom = 4.0
+layout_mode = 2
size_flags_horizontal = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="AddTag" type="Button" parent="VBoxContainer/ScrollContainer/VBoxTagContainer" groups=["UIButtons"]]
-margin_top = 8.0
-margin_right = 20.0
-margin_bottom = 28.0
-rect_min_size = Vector2( 20, 0 )
-hint_tooltip = "Add a new frame tag"
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(20, 0)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 0
+tooltip_text = "Add a new frame tag"
+mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -6.0
-margin_top = -6.0
-margin_right = 6.0
-margin_bottom = 6.0
-texture = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+offset_left = -6.0
+offset_top = -6.0
+offset_right = 6.0
+offset_bottom = 6.0
+texture = ExtResource("2")
[node name="PlayOnlyTags" type="CheckBox" parent="VBoxContainer"]
-margin_top = 132.0
-margin_right = 333.0
-margin_bottom = 156.0
-hint_tooltip = "If it's selected, the animation plays only on the frames that have the same tag.
+layout_mode = 2
+size_flags_horizontal = 0
+tooltip_text = "If it's selected, the animation plays only on the frames that have the same tag.
If it's not, the animation will play for all frames, ignoring tags."
mouse_default_cursor_shape = 2
-size_flags_horizontal = 0
-pressed = true
text = "Animation plays only on frames of the same tag"
[node name="TagOptions" type="ConfirmationDialog" parent="."]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 392.0
-margin_bottom = 164.0
+size = Vector2i(303, 127)
+exclusive = false
[node name="GridContainer" type="GridContainer" parent="TagOptions"]
-margin_left = 8.0
-margin_top = 8.0
-margin_right = 376.0
-margin_bottom = 120.0
-custom_constants/vseparation = 8
-custom_constants/hseparation = 8
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 295.0
+offset_bottom = 78.0
+theme_override_constants/h_separation = 8
+theme_override_constants/v_separation = 8
columns = 4
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="NameLabel" type="Label" parent="TagOptions/GridContainer"]
-margin_top = 5.0
-margin_right = 42.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Name:"
[node name="NameLineEdit" type="LineEdit" parent="TagOptions/GridContainer"]
-margin_left = 50.0
-margin_right = 124.0
-margin_bottom = 24.0
+layout_mode = 2
caret_blink = true
-caret_blink_speed = 0.5
+caret_blink_interval = 0.5
[node name="ColorLabel" type="Label" parent="TagOptions/GridContainer"]
-margin_left = 132.0
-margin_top = 5.0
-margin_right = 169.0
-margin_bottom = 19.0
+layout_mode = 2
text = "Color:"
[node name="ColorPickerButton" type="ColorPickerButton" parent="TagOptions/GridContainer"]
-margin_left = 177.0
-margin_right = 251.0
-margin_bottom = 24.0
+layout_mode = 2
mouse_default_cursor_shape = 2
-color = Color( 1, 0, 0, 1 )
+color = Color(1, 0, 0, 1)
[node name="FromLabel" type="Label" parent="TagOptions/GridContainer"]
-margin_top = 37.0
-margin_right = 42.0
-margin_bottom = 51.0
+layout_mode = 2
text = "From:"
[node name="FromSpinBox" type="SpinBox" parent="TagOptions/GridContainer"]
-margin_left = 50.0
-margin_top = 32.0
-margin_right = 124.0
-margin_bottom = 56.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 1.0
value = 1.0
allow_greater = true
[node name="ToLabel" type="Label" parent="TagOptions/GridContainer"]
-margin_left = 132.0
-margin_top = 37.0
-margin_right = 169.0
-margin_bottom = 51.0
+layout_mode = 2
text = "To:"
[node name="ToSpinBox" type="SpinBox" parent="TagOptions/GridContainer"]
-margin_left = 177.0
-margin_top = 32.0
-margin_right = 251.0
-margin_bottom = 56.0
+layout_mode = 2
mouse_default_cursor_shape = 2
min_value = 1.0
value = 1.0
allow_greater = true
-[connection signal="about_to_show" from="." to="." method="_on_FrameTagDialog_about_to_show"]
-[connection signal="popup_hide" from="." to="." method="_on_FrameTagDialog_popup_hide"]
+[connection signal="about_to_popup" from="." to="." method="_on_FrameTagDialog_about_to_show"]
+[connection signal="visibility_changed" from="." to="." method="_on_FrameTagDialog_visibility_changed"]
[connection signal="pressed" from="VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag" to="." method="_on_AddTag_pressed"]
[connection signal="toggled" from="VBoxContainer/PlayOnlyTags" to="." method="_on_PlayOnlyTags_toggled"]
[connection signal="confirmed" from="TagOptions" to="." method="_on_TagOptions_confirmed"]
[connection signal="custom_action" from="TagOptions" to="." method="_on_TagOptions_custom_action"]
-[connection signal="popup_hide" from="TagOptions" to="." method="_on_TagOptions_popup_hide"]
+[connection signal="visibility_changed" from="TagOptions" to="." method="_on_TagOptions_visibility_changed"]
diff --git a/src/UI/Timeline/GroupCelButton.tscn b/src/UI/Timeline/GroupCelButton.tscn
index 07476c0099e..fb3267a1280 100644
--- a/src/UI/Timeline/GroupCelButton.tscn
+++ b/src/UI/Timeline/GroupCelButton.tscn
@@ -1,10 +1,10 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://b5qw4utq8u88h"]
-[ext_resource path="res://src/UI/Timeline/BaseCelButton.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Timeline/CelButton.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://byhnvhs6av108" path="res://src/UI/Timeline/BaseCelButton.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Timeline/CelButton.gd" id="2"]
-[node name="GroupCelButton" instance=ExtResource( 1 )]
-script = ExtResource( 2 )
+[node name="GroupCelButton" instance=ExtResource("1")]
+script = ExtResource("2")
[node name="TransparentChecker" parent="CelTexture" index="0"]
visible = false
diff --git a/src/UI/Timeline/GroupLayerButton.tscn b/src/UI/Timeline/GroupLayerButton.tscn
index c1464f47007..f01d8863699 100644
--- a/src/UI/Timeline/GroupLayerButton.tscn
+++ b/src/UI/Timeline/GroupLayerButton.tscn
@@ -1,10 +1,44 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://j2uq83bsi4si"]
-[ext_resource path="res://src/UI/Timeline/BaseLayerButton.tscn" type="PackedScene" id=1]
-[ext_resource path="res://assets/graphics/layers/group_expanded.png" type="Texture" id=4]
+[ext_resource type="PackedScene" uid="uid://bai814sqvk68f" path="res://src/UI/Timeline/BaseLayerButton.tscn" id="1"]
+[ext_resource type="Texture2D" uid="uid://dndlglvqc7v6a" path="res://assets/graphics/layers/group_expanded.png" id="4"]
-[node name="GroupLayerButton" instance=ExtResource( 1 )]
+[node name="GroupLayerButton" instance=ExtResource("1")]
hide_expand_button = false
+[node name="HBoxContainer" parent="." index="0"]
+layout_mode = 1
+anchors_preset = 15
+grow_horizontal = 2
+grow_vertical = 2
+
[node name="TextureRect" parent="HBoxContainer/LayerButtons/ExpandButton" index="0"]
-texture = ExtResource( 4 )
+anchor_left = 0.0
+anchor_top = 0.0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 22.0
+offset_bottom = 22.0
+texture = ExtResource("4")
+
+[node name="TextureRect" parent="HBoxContainer/LayerButtons/VisibilityButton" index="0"]
+anchor_left = 0.0
+anchor_top = 0.0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 22.0
+offset_bottom = 22.0
+
+[node name="TextureRect" parent="HBoxContainer/LayerButtons/LockButton" index="0"]
+anchor_left = 0.0
+anchor_top = 0.0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 22.0
+offset_bottom = 22.0
diff --git a/src/UI/Timeline/LayerButton.gd b/src/UI/Timeline/LayerButton.gd
index d681ff8b62b..6c9a2e8fd56 100644
--- a/src/UI/Timeline/LayerButton.gd
+++ b/src/UI/Timeline/LayerButton.gd
@@ -3,35 +3,35 @@ extends Button
const HIERARCHY_DEPTH_PIXEL_SHIFT = 8
-export var hide_expand_button := true
+@export var hide_expand_button := true
var layer := 0
-onready var expand_button: BaseButton = find_node("ExpandButton")
-onready var visibility_button: BaseButton = find_node("VisibilityButton")
-onready var lock_button: BaseButton = find_node("LockButton")
-onready var label: Label = find_node("Label")
-onready var line_edit: LineEdit = find_node("LineEdit")
-onready var hierarchy_spacer: Control = find_node("HierarchySpacer")
-onready var linked_button: BaseButton = find_node("LinkButton")
+@onready var expand_button: BaseButton = find_child("ExpandButton")
+@onready var visibility_button: BaseButton = find_child("VisibilityButton")
+@onready var lock_button: BaseButton = find_child("LockButton")
+@onready var label: Label = find_child("Label")
+@onready var line_edit: LineEdit = find_child("LineEdit")
+@onready var hierarchy_spacer: Control = find_child("HierarchySpacer")
+@onready var linked_button: BaseButton = find_child("LinkButton")
func _ready() -> void:
- rect_min_size.y = Global.animation_timeline.cel_size
+ custom_minimum_size.y = Global.animation_timeline.cel_size
label.text = Global.current_project.layers[layer].name
line_edit.text = Global.current_project.layers[layer].name
- var layer_buttons = find_node("LayerButtons")
+ var layer_buttons = find_child("LayerButtons")
for child in layer_buttons.get_children():
var texture = child.get_child(0)
texture.modulate = Global.modulate_icon_color
# Visualize how deep into the hierarchy the layer is
- var hierarchy_depth: int = Global.current_project.layers[layer].get_hierarchy_depth()
- hierarchy_spacer.rect_min_size.x = hierarchy_depth * HIERARCHY_DEPTH_PIXEL_SHIFT
+ var hierarchy_depth := Global.current_project.layers[layer].get_hierarchy_depth()
+ hierarchy_spacer.custom_minimum_size.x = hierarchy_depth * HIERARCHY_DEPTH_PIXEL_SHIFT
- if Global.control.theme.get_color("font_color", "Button").v > 0.5: # Light text is dark theme
+ if Global.control.theme.get_color("font_color", "Button").v > 0.5: # Light3D text is dark theme
self_modulate.v = 1 + hierarchy_depth * 0.4
else: # Dark text should be light theme
self_modulate.v = 1 - hierarchy_depth * 0.075
@@ -74,44 +74,40 @@ func update_buttons() -> void:
lock_button.modulate.a = 0.33
-# When pressing a button, change the appearance of other layers (ie: expand or visible)
+## When pressing a button, change the appearance of other layers (ie: expand or visible)
func _update_buttons_all_layers() -> void:
for layer_button in Global.layer_vbox.get_children():
layer_button.update_buttons()
- var expanded = Global.current_project.layers[layer_button.layer].is_expanded_in_hierarchy()
+ var expanded := Global.current_project.layers[layer_button.layer].is_expanded_in_hierarchy()
layer_button.visible = expanded
Global.cel_vbox.get_child(layer_button.get_index()).visible = expanded
func _draw() -> void:
- if hierarchy_spacer.rect_size.x > 0.1:
+ if hierarchy_spacer.size.x > 0.1:
var color := Color(1, 1, 1, 0.33)
- color.v = round(Global.control.theme.get_color("font_color", "Button").v)
- var x = (
- hierarchy_spacer.rect_global_position.x
- - rect_global_position.x
- + hierarchy_spacer.rect_size.x
- )
- draw_line(Vector2(x, 0), Vector2(x, rect_size.y), color)
+ color.v = roundf(Global.control.theme.get_color("font_color", "Button").v)
+ var x := hierarchy_spacer.global_position.x - global_position.x + hierarchy_spacer.size.x
+ draw_line(Vector2(x, 0), Vector2(x, size.y), color)
func _input(event: InputEvent) -> void:
if (
(event.is_action_released("ui_accept") or event.is_action_released("ui_cancel"))
and line_edit.visible
- and event.scancode != KEY_SPACE
+ and event.keycode != KEY_SPACE
):
_save_layer_name(line_edit.text)
func _on_LayerContainer_gui_input(event: InputEvent) -> void:
- var project = Global.current_project
+ var project := Global.current_project
- if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
+ if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
Global.canvas.selection.transform_content_confirm()
- var prev_curr_layer: int = project.current_layer
+ var prev_curr_layer := project.current_layer
if Input.is_action_pressed("shift"):
- var layer_diff_sign = sign(layer - prev_curr_layer)
+ var layer_diff_sign := signi(layer - prev_curr_layer)
if layer_diff_sign == 0:
layer_diff_sign = 1
for i in range(0, project.frames.size()):
@@ -129,7 +125,7 @@ func _on_LayerContainer_gui_input(event: InputEvent) -> void:
else: # If the button is pressed without Shift or Control
_select_current_layer()
- if event.doubleclick:
+ if event.double_click:
label.visible = false
line_edit.visible = true
line_edit.editable = true
@@ -156,7 +152,7 @@ func _on_ExpandButton_pressed() -> void:
func _on_VisibilityButton_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
Global.current_project.layers[layer].visible = !Global.current_project.layers[layer].visible
- Global.canvas.update()
+ Global.canvas.queue_redraw()
if Global.select_layer_on_button_click:
_select_current_layer()
_update_buttons_all_layers()
@@ -172,7 +168,9 @@ func _on_LockButton_pressed() -> void:
func _on_LinkButton_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
- var layer_class: PixelLayer = Global.current_project.layers[layer]
+ var layer_class := Global.current_project.layers[layer]
+ if not layer_class is PixelLayer:
+ return
layer_class.new_cels_linked = !layer_class.new_cels_linked
update_buttons()
if Global.select_layer_on_button_click:
@@ -188,7 +186,7 @@ func _select_current_layer() -> void:
Global.current_project.change_cel(-1, layer)
-func get_drag_data(_position: Vector2) -> Array:
+func _get_drag_data(_position: Vector2) -> Variant:
var layers := range(
layer - Global.current_project.layers[layer].get_child_count(true), layer + 1
)
@@ -196,7 +194,7 @@ func get_drag_data(_position: Vector2) -> Array:
var box := VBoxContainer.new()
for i in layers.size():
var button := Button.new()
- button.rect_min_size = rect_size
+ button.custom_minimum_size = size
button.theme = Global.control.theme
button.text = Global.current_project.layers[layers[-1 - i]].name
box.add_child(button)
@@ -205,7 +203,7 @@ func get_drag_data(_position: Vector2) -> Array:
return ["Layer", layer]
-func can_drop_data(_pos: Vector2, data) -> bool:
+func _can_drop_data(_pos: Vector2, data) -> bool:
if typeof(data) != TYPE_ARRAY:
Global.animation_timeline.drag_highlight.visible = false
return false
@@ -220,16 +218,16 @@ func can_drop_data(_pos: Vector2, data) -> bool:
return false
var region: Rect2
- var depth: int = Global.current_project.layers[layer].get_hierarchy_depth()
+ var depth := Global.current_project.layers[layer].get_hierarchy_depth()
if Input.is_action_pressed("ctrl"): # Swap layers
- if drag_layer.is_a_parent_of(curr_layer) or curr_layer.is_a_parent_of(drag_layer):
+ if drag_layer.is_ancestor_of(curr_layer) or curr_layer.is_ancestor_of(drag_layer):
Global.animation_timeline.drag_highlight.visible = false
return false
region = get_global_rect()
else: # Shift layers
- if drag_layer.is_a_parent_of(curr_layer):
+ if drag_layer.is_ancestor_of(curr_layer):
Global.animation_timeline.drag_highlight.visible = false
return false
# If accepted as a child, is it in the center region?
@@ -249,15 +247,15 @@ func can_drop_data(_pos: Vector2, data) -> bool:
# Shift drawn region to the right a bit for hierarchy depth visualization:
region.position.x += depth * HIERARCHY_DEPTH_PIXEL_SHIFT
region.size.x -= depth * HIERARCHY_DEPTH_PIXEL_SHIFT
- Global.animation_timeline.drag_highlight.rect_global_position = region.position
- Global.animation_timeline.drag_highlight.rect_size = region.size
+ Global.animation_timeline.drag_highlight.global_position = region.position
+ Global.animation_timeline.drag_highlight.size = region.size
Global.animation_timeline.drag_highlight.visible = true
return true
-func drop_data(_pos: Vector2, data) -> void:
+func _drop_data(_pos: Vector2, data) -> void:
var drop_layer: int = data[1]
- var project: Project = Global.current_project
+ var project := Global.current_project
project.undo_redo.create_action("Change Layer Order")
var layers: Array = project.layers # This shouldn't be modified directly
@@ -295,12 +293,12 @@ func drop_data(_pos: Vector2, data) -> void:
a.to_parents[-1] = drop_from_parents[-1]
b.to_parents[-1] = a_from_parents[-1]
- project.undo_redo.add_do_method(project, "swap_layers", a, b)
+ project.undo_redo.add_do_method(project.swap_layers.bind(a, b))
project.undo_redo.add_undo_method(
- project,
- "swap_layers",
- {"from": a.to, "to": a.from, "to_parents": a_from_parents},
- {"from": b.to, "to": drop_from_indices, "to_parents": drop_from_parents}
+ project.swap_layers.bind(
+ {"from": a.to, "to": a.from, "to_parents": a_from_parents},
+ {"from": b.to, "to": drop_from_indices, "to_parents": drop_from_parents}
+ )
)
else: # Move layers
@@ -324,7 +322,7 @@ func drop_data(_pos: Vector2, data) -> void:
if layers[layer].has_children():
to_index = layers[layer].get_children(true)[0].index
- if layers[layer].is_a_parent_of(layers[drop_layer]):
+ if layers[layer].is_ancestor_of(layers[drop_layer]):
to_index += drop_from_indices.size()
else:
to_index = layer
@@ -339,18 +337,18 @@ func drop_data(_pos: Vector2, data) -> void:
to_parents[-1] = to_parent
project.undo_redo.add_do_method(
- project, "move_layers", drop_from_indices, drop_to_indices, to_parents
+ project.move_layers.bind(drop_from_indices, drop_to_indices, to_parents)
)
project.undo_redo.add_undo_method(
- project, "move_layers", drop_to_indices, drop_from_indices, drop_from_parents
+ project.move_layers.bind(drop_to_indices, drop_from_indices, drop_from_parents)
)
if project.current_layer == drop_layer:
- project.undo_redo.add_do_method(project, "change_cel", -1, layer)
+ project.undo_redo.add_do_method(project.change_cel.bind(-1, layer))
else:
- project.undo_redo.add_do_method(project, "change_cel", -1, project.current_layer)
- project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer)
- project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
- project.undo_redo.add_do_method(Global, "undo_or_redo", false)
+ project.undo_redo.add_do_method(project.change_cel.bind(-1, project.current_layer))
+ project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer))
+ project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true))
+ project.undo_redo.add_do_method(Global.undo_or_redo.bind(false))
project.undo_redo.commit_action()
diff --git a/src/UI/Timeline/PasteTagPopup.gd b/src/UI/Timeline/PasteTagPopup.gd
index c5984650962..9d82972384d 100644
--- a/src/UI/Timeline/PasteTagPopup.gd
+++ b/src/UI/Timeline/PasteTagPopup.gd
@@ -2,9 +2,9 @@ extends PopupMenu
func _ready() -> void:
- var tag_container: Control = Global.animation_timeline.find_node("TagContainer")
- connect("id_pressed", self, "_on_TagList_id_pressed")
- tag_container.connect("gui_input", self, "_on_TagContainer_gui_input")
+ var tag_container: Control = Global.animation_timeline.find_child("TagContainer")
+ id_pressed.connect(_on_TagList_id_pressed)
+ tag_container.gui_input.connect(_on_TagContainer_gui_input)
func _on_TagContainer_gui_input(event: InputEvent) -> void:
@@ -12,22 +12,22 @@ func _on_TagContainer_gui_input(event: InputEvent) -> void:
return
if Input.is_action_just_released("right_mouse"):
clear()
- if Global.current_project.animation_tags.empty():
+ if Global.current_project.animation_tags.is_empty():
return
add_separator("Paste content from tag:")
for tag in Global.current_project.animation_tags:
- var img = Image.new()
- img.create(5, 5, true, Image.FORMAT_RGBA8)
+ var img := Image.create(5, 5, true, Image.FORMAT_RGBA8)
img.fill(tag.color)
- var tex = ImageTexture.new()
- tex.create_from_image(img)
- var title = tag.name
- if title == "":
- title = "(Untitled)"
- add_icon_item(tex, title)
- var frame_idx = Global.current_project.current_frame + 2
+ var tex := ImageTexture.create_from_image(img)
+ var tag_name := tag.name
+ if tag_name == "":
+ tag_name = "(Untitled)"
+ add_icon_item(tex, tag_name)
+ var frame_idx := Global.current_project.current_frame + 2
add_separator(str("The pasted frames will start at (Frame ", frame_idx, ")"))
- popup(Rect2(get_global_mouse_position(), Vector2.ONE))
+
+
+# popup(Rect2(get_global_mouse_position(), Vector2.ONE))
func _on_TagList_id_pressed(id: int) -> void:
diff --git a/src/UI/Timeline/PixelCelButton.tscn b/src/UI/Timeline/PixelCelButton.tscn
index a65e032714e..947f31686ed 100644
--- a/src/UI/Timeline/PixelCelButton.tscn
+++ b/src/UI/Timeline/PixelCelButton.tscn
@@ -1,25 +1,25 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://dw7ci3uixjuev"]
-[ext_resource path="res://src/UI/Timeline/BaseCelButton.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Timeline/CelButton.gd" type="Script" id=2]
+[ext_resource type="PackedScene" uid="uid://byhnvhs6av108" path="res://src/UI/Timeline/BaseCelButton.tscn" id="1"]
+[ext_resource type="Script" path="res://src/UI/Timeline/CelButton.gd" id="2"]
-[node name="PixelCelButton" instance=ExtResource( 1 )]
-rect_pivot_offset = Vector2( -18, 6 )
-script = ExtResource( 2 )
+[node name="PixelCelButton" instance=ExtResource("1")]
+pivot_offset = Vector2(-18, 6)
+script = ExtResource("2")
[node name="PopupMenu" type="PopupMenu" parent="." index="1"]
-margin_right = 20.0
-margin_bottom = 20.0
-mouse_default_cursor_shape = 2
-items = [ "Delete", null, 0, false, false, -1, 0, null, "", false, "Link Cels to", null, 0, false, false, -1, 0, null, "", false, "Unlink Cels", null, 0, false, false, 2, 0, null, "", false ]
-__meta__ = {
-"_edit_use_anchors_": false
-}
+item_count = 3
+item_0/text = "Delete"
+item_0/id = -1
+item_1/text = "Link Cels to"
+item_1/id = -1
+item_2/text = "Unlink Cels"
+item_2/id = 2
[node name="LinkedIndicator" type="Polygon2D" parent="." index="2"]
-color = Color( 0, 1, 0, 1 )
-invert_enable = true
+color = Color(0, 1, 0, 1)
+invert_enabled = true
invert_border = 1.0
-polygon = PoolVector2Array( 0, 0, 36, 0, 36, 36, 0, 36 )
+polygon = PackedVector2Array(0, 0, 36, 0, 36, 36, 0, 36)
[connection signal="id_pressed" from="PopupMenu" to="." method="_on_PopupMenu_id_pressed"]
diff --git a/src/UI/Timeline/PixelLayerButton.tscn b/src/UI/Timeline/PixelLayerButton.tscn
index 17391b151d5..d950a36eec3 100644
--- a/src/UI/Timeline/PixelLayerButton.tscn
+++ b/src/UI/Timeline/PixelLayerButton.tscn
@@ -1,37 +1,65 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://b7huapiokn3h4"]
-[ext_resource path="res://src/UI/Timeline/BaseLayerButton.tscn" type="PackedScene" id=1]
-[ext_resource path="res://assets/graphics/layers/unlinked_layer.png" type="Texture" id=4]
+[ext_resource type="PackedScene" uid="uid://bai814sqvk68f" path="res://src/UI/Timeline/BaseLayerButton.tscn" id="1"]
+[ext_resource type="Texture2D" uid="uid://cofw1x6chh4i" path="res://assets/graphics/layers/unlinked_layer.png" id="4"]
-[node name="PixelLayerButton" instance=ExtResource( 1 )]
+[node name="PixelLayerButton" instance=ExtResource("1")]
-[node name="LayerButtons" parent="HBoxContainer" index="1"]
-margin_right = 122.0
+[node name="ExpandButton" parent="HBoxContainer/LayerButtons" index="0"]
+visible = false
-[node name="LinkButton" type="ToolButton" parent="HBoxContainer/LayerButtons" index="3" groups=["UIButtons"]]
-margin_left = 96.0
-margin_top = 7.0
-margin_right = 118.0
-margin_bottom = 29.0
-rect_min_size = Vector2( 22, 22 )
-hint_tooltip = "Enable/disable automatic linking of new cels when creating new frames
+[node name="TextureRect" parent="HBoxContainer/LayerButtons/ExpandButton" index="0"]
+anchor_left = 0.0
+anchor_top = 0.0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 22.0
+offset_bottom = 22.0
-Linked cels share content across multiple frames"
-mouse_default_cursor_shape = 2
+[node name="TextureRect" parent="HBoxContainer/LayerButtons/VisibilityButton" index="0"]
+anchor_left = 0.0
+anchor_top = 0.0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 22.0
+offset_bottom = 22.0
+
+[node name="TextureRect" parent="HBoxContainer/LayerButtons/LockButton" index="0"]
+anchor_left = 0.0
+anchor_top = 0.0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 22.0
+offset_bottom = 22.0
+
+[node name="LinkButton" type="Button" parent="HBoxContainer/LayerButtons" index="3" groups=["UIButtons"]]
+custom_minimum_size = Vector2(22, 22)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
+tooltip_text = "Enable/disable automatic linking of new cels when creating new frames
+
+Linked cels share content across multiple frames"
+mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/LinkButton" index="0"]
+layout_mode = 0
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-margin_left = -11.0
-margin_top = -11.0
-margin_right = 11.0
-margin_bottom = 11.0
+offset_left = -11.0
+offset_top = -11.0
+offset_right = 11.0
+offset_bottom = 11.0
size_flags_horizontal = 0
size_flags_vertical = 0
-texture = ExtResource( 4 )
+texture = ExtResource("4")
[connection signal="pressed" from="HBoxContainer/LayerButtons/LinkButton" to="." method="_on_LinkButton_pressed"]
diff --git a/src/UI/Tools/ToolButtons.gd b/src/UI/Tools/ToolButtons.gd
index f45a9c1c30c..734b62dc8c4 100644
--- a/src/UI/Tools/ToolButtons.gd
+++ b/src/UI/Tools/ToolButtons.gd
@@ -17,24 +17,24 @@ func _input(event: InputEvent) -> void:
if InputMap.has_action("right_" + t.shortcut + "_tool"):
if (
event.is_action_pressed("right_" + t.shortcut + "_tool")
- and (!event.control and !event.command)
+ and (!event.is_command_or_control_pressed())
):
# Shortcut for right button (with Alt)
- Tools.assign_tool(t.name, BUTTON_RIGHT)
+ Tools.assign_tool(t.name, MOUSE_BUTTON_RIGHT)
return
if InputMap.has_action("left_" + t.shortcut + "_tool"):
if (
event.is_action_pressed("left_" + t.shortcut + "_tool")
- and (!event.control and !event.command)
+ and (!event.is_command_or_control_pressed())
):
# Shortcut for left button
- Tools.assign_tool(t.name, BUTTON_LEFT)
+ Tools.assign_tool(t.name, MOUSE_BUTTON_LEFT)
return
func _on_Tool_pressed(tool_pressed: BaseButton) -> void:
var button := -1
- button = BUTTON_LEFT if Input.is_action_just_released("left_mouse") else button
- button = BUTTON_RIGHT if Input.is_action_just_released("right_mouse") else button
+ button = MOUSE_BUTTON_LEFT if Input.is_action_just_released("left_mouse") else button
+ button = MOUSE_BUTTON_RIGHT if Input.is_action_just_released("right_mouse") else button
if button != -1:
Tools.assign_tool(tool_pressed.name, button)
diff --git a/src/UI/Tools/Tools.tscn b/src/UI/Tools/Tools.tscn
index 329b5a0490d..d0c812704e4 100644
--- a/src/UI/Tools/Tools.tscn
+++ b/src/UI/Tools/Tools.tscn
@@ -1,27 +1,21 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://byu3rtoipuvoc"]
-[ext_resource path="res://src/UI/Tools/ToolButtons.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://src/UI/Tools/ToolButtons.gd" id="1"]
[node name="Tools" type="ScrollContainer"]
+custom_minimum_size = Vector2(36, 36)
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = -1242.0
-margin_bottom = -230.0
-rect_min_size = Vector2( 36, 36 )
+offset_right = -1242.0
+offset_bottom = -230.0
size_flags_horizontal = 0
size_flags_vertical = 0
[node name="PanelContainer" type="PanelContainer" parent="."]
-margin_right = 38.0
-margin_bottom = 14.0
+layout_mode = 2
size_flags_horizontal = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="ToolButtons" type="HFlowContainer" parent="PanelContainer"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 31.0
-margin_bottom = 7.0
-script = ExtResource( 1 )
+layout_mode = 2
+script = ExtResource("1")
diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd
index 174beb1a473..fb71bd17f96 100644
--- a/src/UI/TopMenuContainer/TopMenuContainer.gd
+++ b/src/UI/TopMenuContainer/TopMenuContainer.gd
@@ -1,4 +1,6 @@
extends Panel
+# gdlint: ignore=max-line-length
+const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v011---2023-06-13"
var file_menu: PopupMenu
var view_menu: PopupMenu
@@ -12,28 +14,28 @@ var default_layout_size := layouts.size()
var selected_layout := 0
var zen_mode := false
-onready var ui: Container = Global.control.find_node("DockableContainer")
-onready var ui_elements: Array = ui.get_children()
-onready var file_menu_button := $MenuItems/FileMenu
-onready var edit_menu_button := $MenuItems/EditMenu
-onready var select_menu_button := $MenuItems/SelectMenu
-onready var image_menu_button := $MenuItems/ImageMenu
-onready var view_menu_button := $MenuItems/ViewMenu
-onready var window_menu_button := $MenuItems/WindowMenu
-onready var help_menu_button := $MenuItems/HelpMenu
-
-onready var greyscale_vision: ColorRect = ui.find_node("GreyscaleVision")
-onready var new_image_dialog: ConfirmationDialog = Global.control.find_node("CreateNewImage")
-onready var window_opacity_dialog: AcceptDialog = Global.control.find_node("WindowOpacityDialog")
-onready var tile_mode_submenu := PopupMenu.new()
-onready var snap_to_submenu := PopupMenu.new()
-onready var panels_submenu := PopupMenu.new()
-onready var layouts_submenu := PopupMenu.new()
-onready var recent_projects_submenu := PopupMenu.new()
+@onready var ui := Global.control.find_child("DockableContainer") as DockableContainer
+@onready var ui_elements := ui.get_children()
+@onready var file_menu_button := $MenuItems/FileMenu
+@onready var edit_menu_button := $MenuItems/EditMenu
+@onready var select_menu_button := $MenuItems/SelectMenu
+@onready var image_menu_button := $MenuItems/ImageMenu
+@onready var view_menu_button := $MenuItems/ViewMenu
+@onready var window_menu_button := $MenuItems/WindowMenu
+@onready var help_menu_button := $MenuItems/HelpMenu
+
+@onready var greyscale_vision: ColorRect = ui.find_child("GreyscaleVision")
+@onready var new_image_dialog: ConfirmationDialog = Global.control.find_child("CreateNewImage")
+@onready var window_opacity_dialog: AcceptDialog = Global.control.find_child("WindowOpacityDialog")
+@onready var tile_mode_submenu := PopupMenu.new()
+@onready var snap_to_submenu := PopupMenu.new()
+@onready var panels_submenu := PopupMenu.new()
+@onready var layouts_submenu := PopupMenu.new()
+@onready var recent_projects_submenu := PopupMenu.new()
func _ready() -> void:
- var dir := Directory.new()
+ var dir := DirAccess.open("user://")
dir.make_dir("user://layouts")
_setup_file_menu()
_setup_edit_menu()
@@ -46,17 +48,17 @@ func _ready() -> void:
func _setup_file_menu() -> void:
# Order as in FileMenu enum
- var file_menu_items := [
- "New...",
- "Open...",
- "Open last project...",
- "Recent projects",
- "Save...",
- "Save as...",
- "Export...",
- "Export as...",
- "Quit",
- ]
+ var file_menu_items := {
+ "New...": "new_file",
+ "Open...": "open_file",
+ "Open last project...": "open_last_project",
+ "Recent projects": "",
+ "Save...": "save_file",
+ "Save as...": "save_file_as",
+ "Export...": "export_file",
+ "Export as...": "export_file_as",
+ "Quit": "quit",
+ }
file_menu = file_menu_button.get_popup()
var i := 0
for item in file_menu_items:
@@ -64,18 +66,19 @@ func _setup_file_menu() -> void:
_setup_recent_projects_submenu(item)
else:
file_menu.add_item(item, i)
+ _set_menu_shortcut(file_menu_items[item], file_menu, i)
i += 1
- file_menu.connect("id_pressed", self, "file_menu_id_pressed")
+ file_menu.id_pressed.connect(file_menu_id_pressed)
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
file_menu.set_item_disabled(Global.FileMenu.OPEN_LAST_PROJECT, true)
file_menu.set_item_disabled(Global.FileMenu.RECENT, true)
func _setup_recent_projects_submenu(item: String) -> void:
recent_projects = Global.config_cache.get_value("data", "recent_projects", [])
- recent_projects_submenu.connect("id_pressed", self, "_on_recent_projects_submenu_id_pressed")
+ recent_projects_submenu.id_pressed.connect(_on_recent_projects_submenu_id_pressed)
update_recent_projects_submenu()
file_menu.add_child(recent_projects_submenu)
@@ -83,52 +86,53 @@ func _setup_recent_projects_submenu(item: String) -> void:
func update_recent_projects_submenu() -> void:
- var reversed_recent_projects = recent_projects.duplicate()
- reversed_recent_projects.invert()
+ var reversed_recent_projects := recent_projects.duplicate()
+ reversed_recent_projects.reverse()
for project in reversed_recent_projects:
recent_projects_submenu.add_item(project.get_file())
func _setup_edit_menu() -> void:
# Order as in Global.EditMenu enum
- var edit_menu_items := [
- "Undo",
- "Redo",
- "Copy",
- "Cut",
- "Paste",
- "Paste in Place",
- "Delete",
- "New Brush",
- "Preferences"
- ]
+ var edit_menu_items := {
+ "Undo": "undo",
+ "Redo": "redo",
+ "Copy": "copy",
+ "Cut": "cut",
+ "Paste": "paste",
+ "Paste in Place": "paste_in_place",
+ "Delete": "delete",
+ "New Brush": "new_brush",
+ "Preferences": "preferences"
+ }
var edit_menu: PopupMenu = edit_menu_button.get_popup()
var i := 0
for item in edit_menu_items:
edit_menu.add_item(item, i)
+ _set_menu_shortcut(edit_menu_items[item], edit_menu, i)
i += 1
edit_menu.set_item_disabled(Global.EditMenu.NEW_BRUSH, true)
- edit_menu.connect("id_pressed", self, "edit_menu_id_pressed")
+ edit_menu.id_pressed.connect(edit_menu_id_pressed)
func _setup_view_menu() -> void:
# Order as in Global.ViewMenu enum
- var view_menu_items := [
- "Tile Mode",
- "Tile Mode Offsets",
- "Grayscale View",
- "Mirror View",
- "Show Grid",
- "Show Pixel Grid",
- "Show Rulers",
- "Show Guides",
- "Show Mouse Guides",
- "Snap To",
- ]
+ var view_menu_items := {
+ "Tile Mode": "",
+ "Tile Mode Offsets": "",
+ "Grayscale View": "",
+ "Mirror View": "mirror_view",
+ "Show Grid": "show_grid",
+ "Show Pixel Grid": "show_pixel_grid",
+ "Show Rulers": "show_rulers",
+ "Show Guides": "show_guides",
+ "Show Mouse Guides": "",
+ "Snap To": "",
+ }
view_menu = view_menu_button.get_popup()
for i in view_menu_items.size():
- var item: String = view_menu_items[i]
+ var item: String = view_menu_items.keys()[i]
if item == "Tile Mode":
_setup_tile_mode_submenu(item)
elif item == "Snap To":
@@ -137,10 +141,11 @@ func _setup_view_menu() -> void:
view_menu.add_item(item, i)
else:
view_menu.add_check_item(item, i)
+ _set_menu_shortcut(view_menu_items[item], view_menu, i)
view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, true)
view_menu.set_item_checked(Global.ViewMenu.SHOW_GUIDES, true)
view_menu.hide_on_checkable_item_selection = false
- view_menu.connect("id_pressed", self, "view_menu_id_pressed")
+ view_menu.id_pressed.connect(view_menu_id_pressed)
var draw_grid: bool = Global.config_cache.get_value("view_menu", "draw_grid", Global.draw_grid)
if draw_grid != Global.draw_grid:
@@ -179,7 +184,7 @@ func _setup_tile_mode_submenu(item: String) -> void:
tile_mode_submenu.add_radio_check_item("Tiled In Y Axis", Tiles.MODE.Y_AXIS)
tile_mode_submenu.hide_on_checkable_item_selection = false
- tile_mode_submenu.connect("id_pressed", self, "_tile_mode_submenu_id_pressed")
+ tile_mode_submenu.id_pressed.connect(_tile_mode_submenu_id_pressed)
view_menu.add_child(tile_mode_submenu)
view_menu.add_submenu_item(item, tile_mode_submenu.get_name())
@@ -190,21 +195,21 @@ func _setup_snap_to_submenu(item: String) -> void:
snap_to_submenu.add_check_item("Snap to Rectangular Grid Center")
snap_to_submenu.add_check_item("Snap to Guides")
snap_to_submenu.add_check_item("Snap to Perspective Guides")
- snap_to_submenu.connect("id_pressed", self, "_snap_to_submenu_id_pressed")
+ snap_to_submenu.id_pressed.connect(_snap_to_submenu_id_pressed)
view_menu.add_child(snap_to_submenu)
view_menu.add_submenu_item(item, snap_to_submenu.get_name())
func _setup_window_menu() -> void:
# Order as in Global.WindowMenu enum
- var window_menu_items := [
- "Window Opacity",
- "Panels",
- "Layouts",
- "Moveable Panels",
- "Zen Mode",
- "Fullscreen Mode",
- ]
+ var window_menu_items := {
+ "Window Opacity": "",
+ "Panels": "",
+ "Layouts": "",
+ "Moveable Panels": "moveable_panels",
+ "Zen Mode": "zen_mode",
+ "Fullscreen Mode": "toggle_fullscreen",
+ }
window_menu = window_menu_button.get_popup()
var i := 0
for item in window_menu_items:
@@ -216,9 +221,10 @@ func _setup_window_menu() -> void:
window_menu.add_item(item, i)
else:
window_menu.add_check_item(item, i)
+ _set_menu_shortcut(window_menu_items[item], window_menu, i)
i += 1
window_menu.hide_on_checkable_item_selection = false
- window_menu.connect("id_pressed", self, "window_menu_id_pressed")
+ window_menu.id_pressed.connect(window_menu_id_pressed)
# Disable window opacity item if per pixel transparency is not allowed
window_menu.set_item_disabled(
Global.WindowMenu.WINDOW_OPACITY,
@@ -234,28 +240,29 @@ func _setup_panels_submenu(item: String) -> void:
var is_hidden: bool = ui.is_control_hidden(element)
panels_submenu.set_item_checked(ui_elements.find(element), !is_hidden)
- panels_submenu.connect("id_pressed", self, "_panels_submenu_id_pressed")
+ panels_submenu.id_pressed.connect(_panels_submenu_id_pressed)
window_menu.add_child(panels_submenu)
window_menu.add_submenu_item(item, panels_submenu.get_name())
func _setup_layouts_submenu(item: String) -> void:
- var dir := Directory.new()
var path := "user://layouts"
- if dir.open(path) == OK:
+ var dir := DirAccess.open(path)
+ if DirAccess.get_open_error() == OK:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if !dir.current_is_dir():
var file_name_no_tres: String = file_name.get_basename()
- layouts.append([file_name_no_tres, ResourceLoader.load(path.plus_file(file_name))])
+ layouts.append([file_name_no_tres, ResourceLoader.load(path.path_join(file_name))])
file_name = dir.get_next()
+ dir.list_dir_end()
layouts_submenu.set_name("layouts_submenu")
layouts_submenu.hide_on_checkable_item_selection = false
populate_layouts_submenu()
- layouts_submenu.connect("id_pressed", self, "_layouts_submenu_id_pressed")
+ layouts_submenu.id_pressed.connect(_layouts_submenu_id_pressed)
window_menu.add_child(layouts_submenu)
window_menu.add_submenu_item(item, layouts_submenu.get_name())
@@ -272,62 +279,80 @@ func populate_layouts_submenu() -> void:
func _setup_image_menu() -> void:
# Order as in Global.ImageMenu enum
- var image_menu_items := [
- "Resize Canvas",
- "Offset Image",
- "Scale Image",
- "Crop Image",
- "Mirror Image",
- "Rotate Image",
- "Outline",
- "Drop Shadow",
- "Invert Colors",
- "Desaturation",
- "Adjust Hue/Saturation/Value",
- "Posterize",
- "Gradient",
- "Gradient Map",
- # "Shader"
- ]
+ var image_menu_items := {
+ "Resize Canvas": "resize_canvas",
+ "Offset Image": "offset_image",
+ "Scale Image": "scale_image",
+ "Crop Image": "crop_image",
+ "Mirror Image": "mirror_image",
+ "Rotate Image": "rotate_image",
+ "Outline": "outline",
+ "Drop Shadow": "drop_shadow",
+ "Invert Colors": "invert_colors",
+ "Desaturation": "desaturation",
+ "Adjust Hue/Saturation/Value": "adjust_hsv",
+ "Posterize": "posterize",
+ "Gradient": "gradient",
+ "Gradient Map": "gradient_map",
+ # "Shader": ""
+ }
var image_menu: PopupMenu = image_menu_button.get_popup()
var i := 0
for item in image_menu_items:
image_menu.add_item(item, i)
+ _set_menu_shortcut(image_menu_items[item], image_menu, i)
i += 1
- image_menu.connect("id_pressed", self, "image_menu_id_pressed")
+ image_menu.id_pressed.connect(image_menu_id_pressed)
func _setup_select_menu() -> void:
# Order as in Global.SelectMenu enum
- var select_menu_items := ["All", "Clear", "Invert", "Tile Mode"]
+ var select_menu_items := {
+ "All": "select_all",
+ "Clear": "clear_selection",
+ "Invert": "invert_selection",
+ "Tile Mode": ""
+ }
var select_menu: PopupMenu = select_menu_button.get_popup()
for i in select_menu_items.size():
- var item: String = select_menu_items[i]
+ var item: String = select_menu_items.keys()[i]
if item == "Tile Mode":
select_menu.add_check_item(item, i)
else:
select_menu.add_item(item, i)
- select_menu.connect("id_pressed", self, "select_menu_id_pressed")
+ _set_menu_shortcut(select_menu_items[item], select_menu, i)
+ select_menu.id_pressed.connect(select_menu_id_pressed)
func _setup_help_menu() -> void:
# Order as in Global.HelpMenu enum
- var help_menu_items := [
- "View Splash Screen",
- "Online Docs",
- "Issue Tracker",
- "Open Logs Folder",
- "Changelog",
- "About Pixelorama",
- ]
+ var help_menu_items := {
+ "View Splash Screen": "view_splash_screen",
+ "Online Docs": "open_docs",
+ "Issue Tracker": "issue_tracker",
+ "Open Logs Folder": "open_logs_folder",
+ "Changelog": "changelog",
+ "About Pixelorama": "about_pixelorama",
+ }
var help_menu: PopupMenu = help_menu_button.get_popup()
var i := 0
for item in help_menu_items:
help_menu.add_item(item, i)
+ _set_menu_shortcut(help_menu_items[item], help_menu, i)
i += 1
- help_menu.connect("id_pressed", self, "help_menu_id_pressed")
+ help_menu.id_pressed.connect(help_menu_id_pressed)
+
+
+func _set_menu_shortcut(action: String, menu: PopupMenu, index: int) -> void:
+ if action.is_empty():
+ return
+ var shortcut := Shortcut.new()
+ var event := InputEventAction.new()
+ event.action = action
+ shortcut.events.append(event)
+ menu.set_item_shortcut(index, shortcut)
func _handle_metadata(id: int, menu_button: MenuButton) -> void:
@@ -339,8 +364,8 @@ func _handle_metadata(id: int, menu_button: MenuButton) -> void:
metadata.call("menu_item_clicked")
-func _popup_dialog(dialog: Popup, size := Vector2.ZERO) -> void:
- dialog.popup_centered(size)
+func _popup_dialog(dialog: Window, dialog_size := Vector2i.ZERO) -> void:
+ dialog.popup_centered(dialog_size)
Global.dialog_open(true)
@@ -374,7 +399,7 @@ func _on_new_project_file_menu_option_pressed() -> void:
func _open_project_file() -> void:
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
Html5FileExchange.load_image()
else:
_popup_dialog(Global.open_sprites_dialog)
@@ -399,16 +424,16 @@ func _save_project_file() -> void:
func _save_project_file_as() -> void:
Global.dialog_open(true)
- if OS.get_name() == "HTML5":
+ if OS.get_name() == "Web":
var save_dialog: ConfirmationDialog = Global.save_sprites_html5_dialog
var save_filename = save_dialog.get_node("FileNameContainer/FileNameLineEdit")
save_dialog.popup_centered()
save_filename.text = Global.current_project.name
else:
- Global.save_sprites_dialog.get_ok().text = "Save"
+ Global.save_sprites_dialog.get_ok_button().text = "Save"
Global.save_sprites_dialog.popup_centered()
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
Global.save_sprites_dialog.get_line_edit().text = Global.current_project.name
@@ -420,8 +445,8 @@ func _export_file() -> void:
func _on_recent_projects_submenu_id_pressed(id: int) -> void:
- var reversed_recent_projects = recent_projects.duplicate()
- reversed_recent_projects.invert()
+ var reversed_recent_projects := recent_projects.duplicate()
+ reversed_recent_projects.reverse()
Global.control.load_recent_project_file(reversed_recent_projects[id])
@@ -446,7 +471,7 @@ func edit_menu_id_pressed(id: int) -> void:
Global.EditMenu.NEW_BRUSH:
Global.canvas.selection.new_brush()
Global.EditMenu.PREFERENCES:
- _popup_dialog(Global.preferences_dialog, Vector2(600, 400))
+ _popup_dialog(Global.preferences_dialog)
_:
_handle_metadata(id, edit_menu_button)
@@ -474,7 +499,7 @@ func view_menu_id_pressed(id: int) -> void:
_:
_handle_metadata(id, view_menu_button)
- Global.canvas.update()
+ Global.canvas.queue_redraw()
func window_menu_id_pressed(id: int) -> void:
@@ -494,14 +519,14 @@ func window_menu_id_pressed(id: int) -> void:
_handle_metadata(id, window_menu_button)
-func _tile_mode_submenu_id_pressed(id: int) -> void:
+func _tile_mode_submenu_id_pressed(id: Tiles.MODE) -> void:
Global.current_project.tiles.mode = id
Global.transparent_checker.fit_rect(Global.current_project.tiles.get_bounding_rect())
for i in Tiles.MODE.values():
tile_mode_submenu.set_item_checked(i, i == id)
- Global.canvas.tile_mode.update()
- Global.canvas.pixel_grid.update()
- Global.canvas.grid.update()
+ Global.canvas.tile_mode.queue_redraw()
+ Global.canvas.pixel_grid.queue_redraw()
+ Global.canvas.grid.queue_redraw()
Global.tile_mode_offset_dialog.change_mask()
@@ -529,8 +554,8 @@ func _panels_submenu_id_pressed(id: int) -> void:
panels_submenu.set_item_checked(id, !element_visible)
if ui.tabs_visible == false:
ui.tabs_visible = true
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
ui.tabs_visible = false
@@ -547,21 +572,21 @@ func set_layout(id: int) -> void:
selected_layout = id
ui.layout = layouts[id][1].clone() # Clone is needed to avoid modifying premade layouts
for i in layouts.size():
- var offset: int = i + 1
+ var offset := i + 1
layouts_submenu.set_item_checked(offset, offset == (id + 1))
for i in ui_elements.size():
- var is_hidden: bool = ui.is_control_hidden(ui_elements[i])
+ var is_hidden := ui.is_control_hidden(ui_elements[i])
panels_submenu.set_item_checked(i, !is_hidden)
if zen_mode: # Turn zen mode off
- Global.control.find_node("TabsContainer").visible = true
+ Global.control.find_child("TabsContainer").visible = true
zen_mode = false
window_menu.set_item_checked(Global.WindowMenu.ZEN_MODE, false)
# Hacky but without 2 idle frames it doesn't work properly. Should be replaced eventually
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
+ await get_tree().process_frame
+ await get_tree().process_frame
# Call set_tabs_visible to keep tabs visible if there are 2 or more in the same panel
ui.tabs_visible = ui.tabs_visible
@@ -574,16 +599,15 @@ func _toggle_greyscale_view() -> void:
func _toggle_mirror_view() -> void:
Global.mirror_view = !Global.mirror_view
- var marching_ants_outline: Sprite = Global.canvas.selection.marching_ants_outline
+ var marching_ants_outline: Sprite2D = Global.canvas.selection.marching_ants_outline
marching_ants_outline.scale.x = -marching_ants_outline.scale.x
if Global.mirror_view:
marching_ants_outline.position.x = (
- marching_ants_outline.position.x
- + Global.current_project.size.x
+ marching_ants_outline.position.x + Global.current_project.size.x
)
else:
Global.canvas.selection.marching_ants_outline.position.x = 0
- Global.canvas.selection.update()
+ Global.canvas.selection.queue_redraw()
view_menu.set_item_checked(Global.ViewMenu.MIRROR_VIEW, Global.mirror_view)
@@ -591,7 +615,7 @@ func _toggle_show_grid() -> void:
Global.draw_grid = !Global.draw_grid
view_menu.set_item_checked(Global.ViewMenu.SHOW_GRID, Global.draw_grid)
if Global.canvas.grid:
- Global.canvas.grid.update()
+ Global.canvas.grid.queue_redraw()
func _toggle_show_pixel_grid() -> void:
@@ -624,8 +648,8 @@ func _toggle_show_mouse_guides() -> void:
view_menu.set_item_checked(Global.ViewMenu.SHOW_MOUSE_GUIDES, Global.show_mouse_guides)
if Global.show_mouse_guides:
if Global.canvas.mouse_guide_container:
- Global.canvas.mouse_guide_container.get_child(0).update()
- Global.canvas.mouse_guide_container.get_child(1).update()
+ Global.canvas.mouse_guide_container.get_child(0).queue_redraw()
+ Global.canvas.mouse_guide_container.get_child(1).queue_redraw()
func _toggle_zen_mode() -> void:
@@ -635,15 +659,31 @@ func _toggle_zen_mode() -> void:
if !panels_submenu.is_item_checked(i):
continue
ui.set_control_hidden(ui_elements[i], !zen_mode)
- Global.control.find_node("TabsContainer").visible = zen_mode
+ Global.control.find_child("TabsContainer").visible = zen_mode
zen_mode = !zen_mode
window_menu.set_item_checked(Global.WindowMenu.ZEN_MODE, zen_mode)
func _toggle_fullscreen() -> void:
- OS.window_fullscreen = !OS.window_fullscreen
- window_menu.set_item_checked(Global.WindowMenu.FULLSCREEN_MODE, OS.window_fullscreen)
- if OS.window_fullscreen: # If window is fullscreen then reset transparency
+ get_window().mode = (
+ Window.MODE_EXCLUSIVE_FULLSCREEN
+ if (!(
+ (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN)
+ or (get_window().mode == Window.MODE_FULLSCREEN)
+ ))
+ else Window.MODE_WINDOWED
+ )
+ window_menu.set_item_checked(
+ Global.WindowMenu.FULLSCREEN_MODE,
+ (
+ (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN)
+ or (get_window().mode == Window.MODE_FULLSCREEN)
+ )
+ )
+ if (
+ (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN)
+ or (get_window().mode == Window.MODE_FULLSCREEN)
+ ): # If window is fullscreen then reset transparency
window_opacity_dialog.set_window_opacity(100.0)
@@ -729,13 +769,11 @@ func help_menu_id_pressed(id: int) -> void:
Global.HelpMenu.ISSUE_TRACKER:
OS.shell_open("https://github.com/Orama-Interactive/Pixelorama/issues")
Global.HelpMenu.OPEN_LOGS_FOLDER:
- var dir = Directory.new()
+ var dir := DirAccess.open("user://logs")
dir.make_dir_recursive("user://logs") # In case someone deleted it
OS.shell_open(ProjectSettings.globalize_path("user://logs"))
Global.HelpMenu.CHANGELOG:
- OS.shell_open(
- "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v0112---2023-08-31"
- )
+ OS.shell_open(CHANGELOG_URL)
Global.HelpMenu.ABOUT_PIXELORAMA:
_popup_dialog(Global.control.get_node("Dialogs/AboutDialog"))
_:
diff --git a/src/UI/TopMenuContainer/TopMenuContainer.tscn b/src/UI/TopMenuContainer/TopMenuContainer.tscn
index 9ce66eb53b5..1a238e02344 100644
--- a/src/UI/TopMenuContainer/TopMenuContainer.tscn
+++ b/src/UI/TopMenuContainer/TopMenuContainer.tscn
@@ -1,92 +1,80 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3 uid="uid://bsgwar3l6qtgv"]
-[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1]
-[ext_resource path="res://src/UI/TopMenuContainer/TopMenuContainer.gd" type="Script" id=2]
+[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="1"]
+[ext_resource type="Script" path="res://src/UI/TopMenuContainer/TopMenuContainer.gd" id="2"]
[node name="TopMenuContainer" type="Panel"]
-margin_right = 1280.0
-margin_bottom = 28.0
-rect_min_size = Vector2( 0, 28 )
-theme_type_variation = "TopMenuPanel"
-script = ExtResource( 2 )
+custom_minimum_size = Vector2(0, 28)
+offset_right = 1280.0
+offset_bottom = 28.0
+theme_type_variation = &"TopMenuPanel"
+script = ExtResource("2")
[node name="MenuItems" type="HBoxContainer" parent="."]
-margin_left = 7.0
-margin_top = 4.0
-margin_right = 1010.0
+layout_mode = 0
+offset_left = 7.0
+offset_top = 4.0
+offset_right = 1010.0
[node name="FileMenu" type="MenuButton" parent="MenuItems"]
-margin_right = 35.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "File"
switch_on_hover = true
[node name="EditMenu" type="MenuButton" parent="MenuItems"]
-margin_left = 39.0
-margin_right = 75.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Edit"
switch_on_hover = true
[node name="SelectMenu" type="MenuButton" parent="MenuItems"]
-margin_left = 79.0
-margin_right = 130.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Select"
switch_on_hover = true
[node name="ImageMenu" type="MenuButton" parent="MenuItems"]
-margin_left = 134.0
-margin_right = 186.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Image"
switch_on_hover = true
[node name="ViewMenu" type="MenuButton" parent="MenuItems"]
-margin_left = 190.0
-margin_right = 232.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "View"
switch_on_hover = true
[node name="WindowMenu" type="MenuButton" parent="MenuItems"]
-margin_left = 236.0
-margin_right = 299.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Window"
switch_on_hover = true
[node name="HelpMenu" type="MenuButton" parent="MenuItems"]
-margin_left = 303.0
-margin_right = 345.0
-margin_bottom = 20.0
+layout_mode = 2
mouse_default_cursor_shape = 2
text = "Help"
switch_on_hover = true
[node name="TopLabels" type="HBoxContainer" parent="."]
+layout_mode = 0
anchor_left = 0.5
anchor_right = 0.5
anchor_bottom = 1.0
-margin_left = -65.5
-margin_right = 65.5
-custom_constants/separation = 20
+offset_left = -65.5
+offset_right = 65.5
+theme_override_constants/separation = 20
-[node name="RotationSlider" type="TextureProgress" parent="TopLabels"]
+[node name="RotationSlider" type="TextureProgressBar" parent="TopLabels"]
unique_name_in_owner = true
-margin_top = 4.0
-margin_right = 70.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 70, 20 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(70, 20)
+layout_mode = 2
size_flags_vertical = 4
-theme_type_variation = "ValueSlider"
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
min_value = -180.0
max_value = 180.0
step = 0.1
@@ -97,64 +85,51 @@ stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
suffix = "ยฐ"
-[node name="ZoomSlider" type="TextureProgress" parent="TopLabels"]
+[node name="ZoomSlider" type="TextureProgressBar" parent="TopLabels"]
unique_name_in_owner = true
-margin_left = 90.0
-margin_top = 4.0
-margin_right = 160.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 70, 20 )
-mouse_default_cursor_shape = 2
+custom_minimum_size = Vector2(70, 20)
+layout_mode = 2
size_flags_vertical = 4
-theme_type_variation = "ValueSlider"
-min_value = 50.0
-max_value = 2000.0
+focus_mode = 2
+mouse_default_cursor_shape = 2
+theme_type_variation = &"ValueSlider"
+min_value = 1.0
+max_value = 50000.0
value = 50.0
-allow_greater = true
nine_patch_stretch = true
stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
-script = ExtResource( 1 )
+script = ExtResource("1")
suffix = "%"
[node name="CursorPosition" type="Label" parent="TopLabels"]
-margin_left = 180.0
-margin_top = 7.0
-margin_right = 228.0
-margin_bottom = 21.0
+layout_mode = 2
text = "[64ร64]"
-align = 2
[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 0
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
-margin_left = -330.0
-margin_top = -10.0
-margin_right = 0.00012207
-margin_bottom = 13.0
+offset_left = -330.0
+offset_top = -10.0
+offset_right = 0.00012207
+offset_bottom = 13.0
grow_horizontal = 2
alignment = 1
[node name="CurrentFrame" type="Label" parent="HBoxContainer"]
-margin_left = 106.0
-margin_right = 198.0
-margin_bottom = 23.0
+layout_mode = 2
size_flags_vertical = 1
text = "Current frame:"
-__meta__ = {
-"_edit_use_anchors_": false
-}
[node name="CurrentFrameMark" type="Label" parent="HBoxContainer"]
-margin_left = 202.0
-margin_right = 223.0
-margin_bottom = 23.0
+layout_mode = 2
size_flags_vertical = 1
text = "1/1"
diff --git a/src/UI/UI.gd b/src/UI/UI.gd
index 8cb8e1d2041..3cbc532b0ec 100644
--- a/src/UI/UI.gd
+++ b/src/UI/UI.gd
@@ -1,6 +1,6 @@
extends Panel
-onready var main_canvas_container: Container = find_node("Main Canvas")
+@onready var main_canvas_container := find_child("Main Canvas") as Container
func _ready() -> void:
@@ -16,10 +16,10 @@ func _on_main_canvas_visibility_changed() -> void:
func update_transparent_shader() -> void:
+ if not is_instance_valid(main_canvas_container):
+ return
# Works independently of the transparency feature
- var canvas_size: Vector2 = (main_canvas_container.rect_size - Vector2.DOWN * 2) * Global.shrink
- material.set("shader_param/screen_resolution", get_viewport().size)
- material.set(
- "shader_param/position", main_canvas_container.rect_global_position * Global.shrink
- )
- material.set("shader_param/size", canvas_size)
+ var canvas_size: Vector2 = (main_canvas_container.size - Vector2.DOWN * 2) * Global.shrink
+ material.set_shader_parameter("screen_resolution", get_viewport().size)
+ material.set_shader_parameter("position", main_canvas_container.global_position * Global.shrink)
+ material.set_shader_parameter("size", canvas_size)
diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn
index f1c1233c3c5..fd8e74fabaa 100644
--- a/src/UI/UI.tscn
+++ b/src/UI/UI.tscn
@@ -1,467 +1,417 @@
-[gd_scene load_steps=54 format=2]
-
-[ext_resource path="res://src/UI/Tools/Tools.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/UI/Canvas/CanvasPreview.tscn" type="PackedScene" id=2]
-[ext_resource path="res://src/UI/Tabs.gd" type="Script" id=3]
-[ext_resource path="res://src/UI/Canvas/Rulers/VerticalRuler.gd" type="Script" id=4]
-[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=5]
-[ext_resource path="res://src/UI/Canvas/Rulers/HorizontalRuler.gd" type="Script" id=6]
-[ext_resource path="res://src/UI/Canvas/CameraMovement.gd" type="Script" id=7]
-[ext_resource path="res://src/Shaders/Greyscale.gdshader" type="Shader" id=8]
-[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=9]
-[ext_resource path="res://src/UI/GlobalToolOptions/GlobalToolOptions.tscn" type="PackedScene" id=10]
-[ext_resource path="res://src/UI/ReferenceImages/ReferencesPanel.tscn" type="PackedScene" id=11]
-[ext_resource path="res://src/UI/PerspectiveEditor/PerspectiveEditor.tscn" type="PackedScene" id=12]
-[ext_resource path="res://src/UI/Recorder/Recorder.tscn" type="PackedScene" id=13]
-[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=14]
-[ext_resource path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn" type="PackedScene" id=16]
-[ext_resource path="res://src/UI/ColorPickers/ColorPickers.tscn" type="PackedScene" id=17]
-[ext_resource path="res://src/UI/Timeline/AnimationTimeline.tscn" type="PackedScene" id=18]
-[ext_resource path="res://src/UI/Canvas/Canvas.tscn" type="PackedScene" id=19]
-[ext_resource path="res://src/Palette/PalettePanel.tscn" type="PackedScene" id=20]
-[ext_resource path="res://src/UI/ViewportContainer.gd" type="Script" id=23]
-[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=27]
-[ext_resource path="res://addons/dockable_container/dockable_container.gd" type="Script" id=35]
-[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=36]
-[ext_resource path="res://src/UI/UI.gd" type="Script" id=37]
-[ext_resource path="res://src/Shaders/UITransparency.gdshader" type="Shader" id=38]
-
-[sub_resource type="ShaderMaterial" id=26]
-shader = ExtResource( 38 )
-shader_param/alpha = 0.0
-shader_param/screen_resolution = Vector2( 1280, 720 )
-shader_param/position = Vector2( 100, 100 )
-shader_param/size = Vector2( 100, 100 )
-
-[sub_resource type="Resource" id=1]
+[gd_scene load_steps=54 format=3 uid="uid://c8dsi6ggkqa7a"]
+
+[ext_resource type="PackedScene" uid="uid://byu3rtoipuvoc" path="res://src/UI/Tools/Tools.tscn" id="1"]
+[ext_resource type="PackedScene" uid="uid://c546tskdu53j1" path="res://src/UI/Canvas/CanvasPreview.tscn" id="2"]
+[ext_resource type="Script" path="res://src/UI/Tabs.gd" id="3"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Rulers/VerticalRuler.gd" id="4"]
+[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="5"]
+[ext_resource type="Script" path="res://src/UI/Canvas/Rulers/HorizontalRuler.gd" id="6"]
+[ext_resource type="Script" path="res://src/UI/Canvas/CameraMovement.gd" id="7"]
+[ext_resource type="Shader" path="res://src/Shaders/Greyscale.gdshader" id="8"]
+[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="9"]
+[ext_resource type="PackedScene" uid="uid://wo0hqxkst808" path="res://src/UI/GlobalToolOptions/GlobalToolOptions.tscn" id="10"]
+[ext_resource type="PackedScene" uid="uid://b75xk2ix8xxml" path="res://src/UI/ReferenceImages/ReferencesPanel.tscn" id="11"]
+[ext_resource type="PackedScene" uid="uid://cap1bhavhi33g" path="res://src/UI/PerspectiveEditor/PerspectiveEditor.tscn" id="12"]
+[ext_resource type="PackedScene" uid="uid://dl6ook010q86o" path="res://src/UI/Recorder/Recorder.tscn" id="13"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="14"]
+[ext_resource type="PackedScene" uid="uid://ccsihk3yxwei5" path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn" id="16"]
+[ext_resource type="PackedScene" uid="uid://c3vcvhh4d8hd7" path="res://src/UI/ColorPickers/ColorPickers.tscn" id="17"]
+[ext_resource type="PackedScene" uid="uid://dbr6mulku2qju" path="res://src/UI/Timeline/AnimationTimeline.tscn" id="18"]
+[ext_resource type="PackedScene" uid="uid://ba24iuv55m4l3" path="res://src/UI/Canvas/Canvas.tscn" id="19"]
+[ext_resource type="PackedScene" uid="uid://wplk62pbgih4" path="res://src/Palette/PalettePanel.tscn" id="20"]
+[ext_resource type="Script" path="res://src/UI/ViewportContainer.gd" id="23"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="27"]
+[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="35"]
+[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="36"]
+[ext_resource type="Script" path="res://src/UI/UI.gd" id="37"]
+[ext_resource type="Shader" path="res://src/Shaders/UITransparency.gdshader" id="38"]
+
+[sub_resource type="ShaderMaterial" id="26"]
+shader = ExtResource("38")
+shader_parameter/alpha = 0.0
+shader_parameter/screen_resolution = Vector2(1280, 720)
+shader_parameter/position = Vector2(100, 100)
+shader_parameter/size = Vector2(100, 100)
+
+[sub_resource type="Resource" id="Resource_xnnnd"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Tools" )
+script = ExtResource("36")
+names = PackedStringArray("Tools", "Reference Images")
current_tab = 0
-[sub_resource type="Resource" id=8]
+[sub_resource type="Resource" id="Resource_34hle"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Main Canvas" )
+script = ExtResource("36")
+names = PackedStringArray("Main Canvas")
current_tab = 0
-[sub_resource type="Resource" id=33]
+[sub_resource type="Resource" id="Resource_l6i6g"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Perspective Editor" )
+script = ExtResource("36")
+names = PackedStringArray("Perspective Editor")
current_tab = 0
-[sub_resource type="Resource" id=34]
+[sub_resource type="Resource" id="Resource_r2r5t"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 0
percent = 0.5
-first = SubResource( 8 )
-second = SubResource( 33 )
+first = SubResource("Resource_34hle")
+second = SubResource("Resource_l6i6g")
-[sub_resource type="Resource" id=28]
+[sub_resource type="Resource" id="Resource_k7omi"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Second Canvas" )
+script = ExtResource("36")
+names = PackedStringArray("Second Canvas")
current_tab = 0
-[sub_resource type="Resource" id=29]
+[sub_resource type="Resource" id="Resource_l142s"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 0
percent = 0.980952
-first = SubResource( 34 )
-second = SubResource( 28 )
+first = SubResource("Resource_r2r5t")
+second = SubResource("Resource_k7omi")
-[sub_resource type="Resource" id=9]
+[sub_resource type="Resource" id="Resource_wobi1"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Animation Timeline" )
+script = ExtResource("36")
+names = PackedStringArray("Animation Timeline")
current_tab = 0
-[sub_resource type="Resource" id=10]
+[sub_resource type="Resource" id="Resource_85y6p"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 1
-percent = 0.90625
-first = SubResource( 29 )
-second = SubResource( 9 )
+percent = 0.74711
+first = SubResource("Resource_l142s")
+second = SubResource("Resource_wobi1")
-[sub_resource type="Resource" id=11]
+[sub_resource type="Resource" id="Resource_4egp5"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Canvas Preview", "Reference Images" )
+script = ExtResource("36")
+names = PackedStringArray("Canvas Preview")
current_tab = 0
-[sub_resource type="Resource" id=20]
+[sub_resource type="Resource" id="Resource_fcw5v"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Color Pickers" )
+script = ExtResource("36")
+names = PackedStringArray("Color Pickers")
current_tab = 0
-[sub_resource type="Resource" id=30]
+[sub_resource type="Resource" id="Resource_c7hpy"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Global Tool Options" )
+script = ExtResource("36")
+names = PackedStringArray("Global Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=35]
+[sub_resource type="Resource" id="Resource_56tpw"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Recorder" )
+script = ExtResource("36")
+names = PackedStringArray("Recorder")
current_tab = 0
-[sub_resource type="Resource" id=36]
+[sub_resource type="Resource" id="Resource_fhmn0"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 1
percent = 0.5
-first = SubResource( 30 )
-second = SubResource( 35 )
+first = SubResource("Resource_c7hpy")
+second = SubResource("Resource_56tpw")
-[sub_resource type="Resource" id=31]
+[sub_resource type="Resource" id="Resource_u1u2a"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 1
percent = 0.5
-first = SubResource( 20 )
-second = SubResource( 36 )
+first = SubResource("Resource_fcw5v")
+second = SubResource("Resource_fhmn0")
-[sub_resource type="Resource" id=21]
+[sub_resource type="Resource" id="Resource_6eonw"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 1
percent = 0.911765
-first = SubResource( 11 )
-second = SubResource( 31 )
+first = SubResource("Resource_4egp5")
+second = SubResource("Resource_u1u2a")
-[sub_resource type="Resource" id=22]
+[sub_resource type="Resource" id="Resource_6pwxm"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Left Tool Options" )
+script = ExtResource("36")
+names = PackedStringArray("Left Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=23]
+[sub_resource type="Resource" id="Resource_24rfh"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Right Tool Options" )
+script = ExtResource("36")
+names = PackedStringArray("Right Tool Options")
current_tab = 0
-[sub_resource type="Resource" id=24]
+[sub_resource type="Resource" id="Resource_tcb26"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 0
percent = 0.5
-first = SubResource( 22 )
-second = SubResource( 23 )
+first = SubResource("Resource_6pwxm")
+second = SubResource("Resource_24rfh")
-[sub_resource type="Resource" id=13]
+[sub_resource type="Resource" id="Resource_ugja0"]
resource_name = "Tabs"
-script = ExtResource( 36 )
-names = PoolStringArray( "Palettes" )
+script = ExtResource("36")
+names = PackedStringArray("Palettes")
current_tab = 0
-[sub_resource type="Resource" id=14]
+[sub_resource type="Resource" id="Resource_hr77s"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 1
-percent = 0.754808
-first = SubResource( 24 )
-second = SubResource( 13 )
+percent = 0.692661
+first = SubResource("Resource_tcb26")
+second = SubResource("Resource_ugja0")
-[sub_resource type="Resource" id=15]
+[sub_resource type="Resource" id="Resource_l8roh"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 1
-percent = 0.332031
-first = SubResource( 21 )
-second = SubResource( 14 )
+percent = 0.339595
+first = SubResource("Resource_6eonw")
+second = SubResource("Resource_hr77s")
-[sub_resource type="Resource" id=16]
+[sub_resource type="Resource" id="Resource_s2xu6"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 0
-percent = 0.855
-first = SubResource( 10 )
-second = SubResource( 15 )
+percent = 0.727569
+first = SubResource("Resource_85y6p")
+second = SubResource("Resource_l8roh")
-[sub_resource type="Resource" id=5]
+[sub_resource type="Resource" id="Resource_cwe4h"]
resource_name = "Split"
-script = ExtResource( 27 )
+script = ExtResource("27")
direction = 0
-percent = 0.0
-first = SubResource( 1 )
-second = SubResource( 16 )
+percent = 0.0398437
+first = SubResource("Resource_xnnnd")
+second = SubResource("Resource_s2xu6")
-[sub_resource type="Resource" id=37]
+[sub_resource type="Resource" id="Resource_b6o2t"]
resource_name = "Layout"
-script = ExtResource( 14 )
-root = SubResource( 5 )
+script = ExtResource("14")
+root = SubResource("Resource_cwe4h")
hidden_tabs = {
"Perspective Editor": true,
"Recorder": true,
"Second Canvas": true
}
-[sub_resource type="ShaderMaterial" id=2]
-shader = ExtResource( 9 )
-shader_param/size = 10.0
-shader_param/alpha = 1.0
-shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0, 0 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = false
-
-[sub_resource type="ShaderMaterial" id=27]
-shader = ExtResource( 8 )
-
-[sub_resource type="ShaderMaterial" id=3]
-shader = ExtResource( 9 )
-shader_param/size = 10.0
-shader_param/alpha = 1.0
-shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 )
-shader_param/color2 = Color( 1, 1, 1, 1 )
-shader_param/offset = Vector2( 0, 0 )
-shader_param/scale = Vector2( 0, 0 )
-shader_param/rect_size = Vector2( 0, 0 )
-shader_param/follow_movement = false
-shader_param/follow_scale = false
+[sub_resource type="ShaderMaterial" id="2"]
+shader = ExtResource("9")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0, 0)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = false
+
+[sub_resource type="ShaderMaterial" id="27"]
+shader = ExtResource("8")
+
+[sub_resource type="ShaderMaterial" id="3"]
+shader = ExtResource("9")
+shader_parameter/size = 10.0
+shader_parameter/alpha = 1.0
+shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1)
+shader_parameter/color2 = Color(1, 1, 1, 1)
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/scale = Vector2(0, 0)
+shader_parameter/rect_size = Vector2(0, 0)
+shader_parameter/follow_movement = false
+shader_parameter/follow_scale = false
[node name="UI" type="Panel"]
-material = SubResource( 26 )
+material = SubResource("26")
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource( 37 )
+script = ExtResource("37")
[node name="DockableContainer" type="Container" parent="."]
+layout_mode = 0
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource( 35 )
+script = ExtResource("35")
tabs_visible = false
-layout = SubResource( 37 )
+layout = SubResource("Resource_b6o2t")
-[node name="Tools" parent="DockableContainer" instance=ExtResource( 1 )]
-margin_left = 4.0
-margin_top = 8.0
-margin_right = -1240.0
-margin_bottom = -4.0
+[node name="Tools" parent="DockableContainer" instance=ExtResource("1")]
+layout_mode = 2
[node name="Main Canvas" type="VBoxContainer" parent="DockableContainer"]
-margin_left = 60.0
-margin_top = 8.0
-margin_right = 977.0
-margin_bottom = 642.5
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-custom_constants/separation = 0
+theme_override_constants/separation = 0
[node name="TabsContainer" type="PanelContainer" parent="DockableContainer/Main Canvas"]
-margin_right = 917.0
-margin_bottom = 38.0
-
-[node name="Tabs" type="Tabs" parent="DockableContainer/Main Canvas/TabsContainer"]
-margin_left = 7.0
-margin_top = 7.0
-margin_right = 910.0
-margin_bottom = 31.0
-tab_align = 0
+layout_mode = 2
+
+[node name="TabBar" type="TabBar" parent="DockableContainer/Main Canvas/TabsContainer"]
+layout_mode = 2
tab_close_display_policy = 2
drag_to_rearrange_enabled = true
-script = ExtResource( 3 )
+script = ExtResource("3")
[node name="HorizontalRuler" type="Button" parent="DockableContainer/Main Canvas"]
-margin_top = 38.0
-margin_right = 917.0
-margin_bottom = 58.0
-rect_min_size = Vector2( 0, 16 )
+custom_minimum_size = Vector2(0, 16)
+layout_mode = 2
focus_mode = 0
mouse_default_cursor_shape = 14
-theme_type_variation = "RulerButton"
+theme_type_variation = &"RulerButton"
action_mode = 0
-script = ExtResource( 6 )
+script = ExtResource("6")
[node name="ViewportandVerticalRuler" type="HBoxContainer" parent="DockableContainer/Main Canvas"]
-margin_top = 58.0
-margin_right = 917.0
-margin_bottom = 634.0
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-custom_constants/separation = 0
+theme_override_constants/separation = 0
[node name="VerticalRuler" type="Button" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"]
-margin_right = 16.0
-margin_bottom = 576.0
-rect_min_size = Vector2( 16, 0 )
-focus_mode = 0
-mouse_default_cursor_shape = 15
+custom_minimum_size = Vector2(16, 0)
+layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 3
-theme_type_variation = "RulerButton"
+focus_mode = 0
+mouse_default_cursor_shape = 15
+theme_type_variation = &"RulerButton"
action_mode = 0
-script = ExtResource( 4 )
+script = ExtResource("4")
-[node name="ViewportContainer" type="ViewportContainer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"]
-margin_left = 16.0
-margin_right = 917.0
-margin_bottom = 576.0
-focus_mode = 2
-mouse_default_cursor_shape = 3
+[node name="SubViewportContainer" type="SubViewportContainer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"]
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
+focus_mode = 2
+mouse_default_cursor_shape = 3
stretch = true
-script = ExtResource( 23 )
-camera_path = NodePath("Viewport/Camera2D")
+script = ExtResource("23")
+camera_path = NodePath("SubViewport/Camera2D")
-[node name="Viewport" type="Viewport" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer"]
-size = Vector2( 901, 576 )
+[node name="SubViewport" type="SubViewport" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer"]
handle_input_locally = false
-usage = 0
-render_target_update_mode = 3
+canvas_item_default_texture_filter = 0
+size = Vector2i(867, 515)
+render_target_update_mode = 4
-[node name="TransparentChecker" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport" instance=ExtResource( 5 )]
-material = SubResource( 2 )
+[node name="TransparentChecker" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" instance=ExtResource("5")]
+material = SubResource("2")
+anchors_preset = 0
-[node name="Canvas" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport" instance=ExtResource( 19 )]
+[node name="Canvas" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" instance=ExtResource("19")]
-[node name="Camera2D" type="Camera2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport"]
-current = true
-zoom = Vector2( 0.15, 0.15 )
-script = ExtResource( 7 )
+[node name="Camera2D" type="Camera2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"]
+zoom = Vector2(0.15, 0.15)
+script = ExtResource("7")
-[node name="CanvasLayer" type="CanvasLayer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport"]
+[node name="CanvasLayer" type="CanvasLayer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"]
-[node name="GreyscaleVision" type="ColorRect" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport/CanvasLayer"]
+[node name="GreyscaleVision" type="ColorRect" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport/CanvasLayer"]
visible = false
-material = SubResource( 27 )
+material = SubResource("27")
+anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
-margin_right = 40.0
-margin_bottom = 40.0
+offset_right = 40.0
+offset_bottom = 40.0
mouse_filter = 2
-[node name="Second Canvas" type="ViewportContainer" parent="DockableContainer"]
+[node name="Second Canvas" type="SubViewportContainer" parent="DockableContainer"]
visible = false
-margin_left = 1274.0
-margin_top = 8.0
-margin_right = 1276.0
-margin_bottom = 350.0
+layout_mode = 2
size_flags_vertical = 3
stretch = true
-script = ExtResource( 23 )
-camera_path = NodePath("Viewport/Camera2D2")
+script = ExtResource("23")
+camera_path = NodePath("SubViewport/Camera2D2")
-[node name="Viewport" type="Viewport" parent="DockableContainer/Second Canvas"]
-size = Vector2( 2, 342 )
+[node name="SubViewport" type="SubViewport" parent="DockableContainer/Second Canvas"]
handle_input_locally = false
+canvas_item_default_texture_filter = 0
+size = Vector2i(2, 2)
render_target_update_mode = 0
-[node name="TransparentChecker" parent="DockableContainer/Second Canvas/Viewport" instance=ExtResource( 5 )]
-material = SubResource( 3 )
+[node name="TransparentChecker" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("5")]
+material = SubResource("3")
+anchors_preset = 0
-[node name="CanvasPreview" parent="DockableContainer/Second Canvas/Viewport" instance=ExtResource( 2 )]
+[node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("2")]
-[node name="Camera2D2" type="Camera2D" parent="DockableContainer/Second Canvas/Viewport"]
-current = true
-zoom = Vector2( 0.15, 0.15 )
-script = ExtResource( 7 )
+[node name="Camera2D2" type="Camera2D" parent="DockableContainer/Second Canvas/SubViewport"]
+zoom = Vector2(0.15, 0.15)
+script = ExtResource("7")
index = 1
-[node name="Animation Timeline" parent="DockableContainer" instance=ExtResource( 18 )]
-margin_left = 60.0
-margin_top = 666.5
-margin_right = 977.0
-margin_bottom = 716.0
-
-[node name="Canvas Preview" parent="DockableContainer" instance=ExtResource( 16 )]
-margin_left = 997.0
-margin_top = 8.0
-margin_right = 1276.0
-margin_bottom = 98.0
-
-[node name="Color Pickers" parent="DockableContainer" instance=ExtResource( 17 )]
-margin_left = 997.0
-margin_top = 122.0
-margin_bottom = 184.0
-
-[node name="Global Tool Options" parent="DockableContainer" instance=ExtResource( 10 )]
-margin_left = 997.0
-margin_top = 208.0
-margin_right = 1276.0
-margin_bottom = 258.0
+[node name="Animation Timeline" parent="DockableContainer" instance=ExtResource("18")]
+layout_mode = 2
+
+[node name="Canvas Preview" parent="DockableContainer" instance=ExtResource("16")]
+layout_mode = 2
+
+[node name="Color Pickers" parent="DockableContainer" instance=ExtResource("17")]
+layout_mode = 2
+
+[node name="Global Tool Options" parent="DockableContainer" instance=ExtResource("10")]
+layout_mode = 2
[node name="Left Tool Options" type="ScrollContainer" parent="DockableContainer"]
-margin_left = 997.0
-margin_top = 282.0
-margin_right = 1126.5
-margin_bottom = 592.0
-rect_min_size = Vector2( 72, 72 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
+custom_minimum_size = Vector2(72, 72)
+layout_mode = 2
[node name="LeftPanelContainer" type="PanelContainer" parent="DockableContainer/Left Tool Options"]
-margin_right = 130.0
-margin_bottom = 298.0
-rect_min_size = Vector2( 130, 0 )
+custom_minimum_size = Vector2(130, 0)
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Right Tool Options" type="ScrollContainer" parent="DockableContainer"]
-margin_left = 1146.5
-margin_top = 282.0
-margin_right = 1276.0
-margin_bottom = 592.0
-rect_min_size = Vector2( 72, 72 )
+custom_minimum_size = Vector2(72, 72)
+layout_mode = 2
[node name="RightPanelContainer" type="PanelContainer" parent="DockableContainer/Right Tool Options"]
-margin_right = 130.0
-margin_bottom = 298.0
-rect_min_size = Vector2( 130, 0 )
+custom_minimum_size = Vector2(130, 0)
+layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-[node name="Palettes" parent="DockableContainer" instance=ExtResource( 20 )]
-margin_left = 997.0
-margin_top = 616.0
-margin_right = 1276.0
-margin_bottom = 716.0
+[node name="Palettes" parent="DockableContainer" instance=ExtResource("20")]
+layout_mode = 2
-[node name="Reference Images" parent="DockableContainer" instance=ExtResource( 11 )]
+[node name="Reference Images" parent="DockableContainer" instance=ExtResource("11")]
visible = false
-margin_left = 993.0
-margin_right = -166.0
-margin_bottom = -684.0
+layout_mode = 2
-[node name="Perspective Editor" parent="DockableContainer" instance=ExtResource( 12 )]
+[node name="Perspective Editor" parent="DockableContainer" instance=ExtResource("12")]
visible = false
-margin_left = 528.5
-margin_top = 8.0
-margin_right = -303.0
-margin_bottom = -77.5
+layout_mode = 2
-[node name="Recorder" parent="DockableContainer" instance=ExtResource( 13 )]
+[node name="Recorder" parent="DockableContainer" instance=ExtResource("13")]
visible = false
-margin_left = 997.0
-margin_top = 282.0
-margin_right = 1276.0
-margin_bottom = 332.0
+layout_mode = 2
[connection signal="item_rect_changed" from="DockableContainer/Main Canvas" to="." method="_on_main_canvas_item_rect_changed"]
[connection signal="visibility_changed" from="DockableContainer/Main Canvas" to="." method="_on_main_canvas_visibility_changed"]
-[connection signal="reposition_active_tab_request" from="DockableContainer/Main Canvas/TabsContainer/Tabs" to="DockableContainer/Main Canvas/TabsContainer/Tabs" method="_on_Tabs_reposition_active_tab_request"]
-[connection signal="tab_changed" from="DockableContainer/Main Canvas/TabsContainer/Tabs" to="DockableContainer/Main Canvas/TabsContainer/Tabs" method="_on_Tabs_tab_changed"]
-[connection signal="tab_close" from="DockableContainer/Main Canvas/TabsContainer/Tabs" to="DockableContainer/Main Canvas/TabsContainer/Tabs" method="_on_Tabs_tab_close"]
+[connection signal="active_tab_rearranged" from="DockableContainer/Main Canvas/TabsContainer/TabBar" to="DockableContainer/Main Canvas/TabsContainer/TabBar" method="_on_active_tab_rearranged"]
+[connection signal="tab_changed" from="DockableContainer/Main Canvas/TabsContainer/TabBar" to="DockableContainer/Main Canvas/TabsContainer/TabBar" method="_on_Tabs_tab_changed"]
+[connection signal="tab_close_pressed" from="DockableContainer/Main Canvas/TabsContainer/TabBar" to="DockableContainer/Main Canvas/TabsContainer/TabBar" method="_on_tab_close_pressed"]
[connection signal="mouse_entered" from="DockableContainer/Main Canvas/HorizontalRuler" to="DockableContainer/Main Canvas/HorizontalRuler" method="_on_HorizontalRuler_mouse_entered"]
[connection signal="pressed" from="DockableContainer/Main Canvas/HorizontalRuler" to="DockableContainer/Main Canvas/HorizontalRuler" method="_on_HorizontalRuler_pressed"]
[connection signal="pressed" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/VerticalRuler" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/VerticalRuler" method="_on_VerticalRuler_pressed"]
-[connection signal="mouse_entered" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" method="_on_ViewportContainer_mouse_entered"]
-[connection signal="mouse_exited" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" method="_on_ViewportContainer_mouse_exited"]
+[connection signal="mouse_entered" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" method="_on_ViewportContainer_mouse_entered"]
+[connection signal="mouse_exited" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" method="_on_ViewportContainer_mouse_exited"]
[connection signal="mouse_entered" from="DockableContainer/Second Canvas" to="DockableContainer/Second Canvas" method="_on_ViewportContainer_mouse_entered"]
[connection signal="mouse_exited" from="DockableContainer/Second Canvas" to="DockableContainer/Second Canvas" method="_on_ViewportContainer_mouse_exited"]
diff --git a/src/UI/ViewportContainer.gd b/src/UI/ViewportContainer.gd
index 48ca5b84345..d1822f8737e 100644
--- a/src/UI/ViewportContainer.gd
+++ b/src/UI/ViewportContainer.gd
@@ -1,8 +1,8 @@
-extends ViewportContainer
+extends SubViewportContainer
-export(NodePath) var camera_path
+@export var camera_path: NodePath
-onready var camera := get_node(camera_path) as Camera2D
+@onready var camera := get_node(camera_path) as Camera2D
func _ready() -> void:
diff --git a/src/XDGDataPaths.gd b/src/XDGDataPaths.gd
deleted file mode 100644
index c2891970ce1..00000000000
--- a/src/XDGDataPaths.gd
+++ /dev/null
@@ -1,139 +0,0 @@
-extends Reference
-
-# Default location for xdg_data_home relative to $HOME
-const DEFAULT_XDG_DATA_HOME_REL := ".local/share"
-const DEFAULT_XDG_DATA_DIRS := ["/usr/local/share", "/usr/share"]
-
-const CONFIG_SUBDIR_NAME := "pixelorama_data"
-const XDG_CONFIG_SUBDIR_NAME := "pixelorama"
-
-const PALETTES_DATA_SUBDIRECTORY := "Palettes"
-const BRUSHES_DATA_SUBDIRECTORY := "Brushes"
-const PATTERNS_DATA_SUBDIRECTORY := "Patterns"
-
-# These are *with* the config subdirectory name
-var xdg_data_home: String
-var xdg_data_dirs: Array
-
-# These are *without* the config subdirectory name
-var raw_xdg_data_home: String
-var raw_xdg_data_dirs: Array
-
-
-# Get if we should use XDG standard or not nyaaaa
-func use_xdg_standard() -> bool:
- # see: https://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html
- # return OS.has_feature("Linux") or OS.has_feature("BSD")
- # Previous was unreliable and buggy >.< nyaa
- return OS.get_name() == "X11"
-
-
-func _init() -> void:
- if use_xdg_standard():
- print("Detected system where we should use XDG basedir standard (currently Linux or BSD)")
- var home := OS.get_environment("HOME")
- raw_xdg_data_home = home.plus_file(DEFAULT_XDG_DATA_HOME_REL)
- xdg_data_home = raw_xdg_data_home.plus_file(XDG_CONFIG_SUBDIR_NAME)
-
- # Create defaults
- xdg_data_dirs = []
- raw_xdg_data_dirs = DEFAULT_XDG_DATA_DIRS
- for default_loc in raw_xdg_data_dirs:
- xdg_data_dirs.append(default_loc.plus_file(XDG_CONFIG_SUBDIR_NAME))
-
- # Now check the XDG environment variables and if
- # present, replace the defaults with them!
- # See: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
- # Checks the xdg data home var
- if OS.has_environment("XDG_DATA_HOME"):
- raw_xdg_data_home = OS.get_environment("XDG_DATA_HOME")
- xdg_data_home = raw_xdg_data_home.plus_file(XDG_CONFIG_SUBDIR_NAME)
- # Checks the list of files var, and processes them.
- if OS.has_environment("XDG_DATA_DIRS"):
- var raw_env_var := OS.get_environment("XDG_DATA_DIRS")
- # includes empties.
- var unappended_subdirs := raw_env_var.split(":", true)
- raw_xdg_data_dirs = unappended_subdirs
- xdg_data_dirs = []
- for unapp_subdir in raw_xdg_data_dirs:
- xdg_data_dirs.append(unapp_subdir.plus_file(XDG_CONFIG_SUBDIR_NAME))
- xdg_data_dirs.append(Global.root_directory.plus_file(CONFIG_SUBDIR_NAME))
-
- else:
- raw_xdg_data_home = Global.root_directory
- xdg_data_home = raw_xdg_data_home.plus_file(CONFIG_SUBDIR_NAME)
- raw_xdg_data_dirs = []
- xdg_data_dirs = []
-
-
-func append_file_to_all(basepaths: Array, subpath: String) -> Array:
- var res := []
- for _path in basepaths:
- res.append(_path.plus_file(subpath))
- return res
-
-
-# Get search paths in order of priority
-func get_search_paths_in_order() -> Array:
- return [xdg_data_home] + xdg_data_dirs
-
-
-# Gets the paths, in order of search priority, for palettes.
-func get_palette_search_path_in_order() -> Array:
- var base_paths := get_search_paths_in_order()
- return append_file_to_all(base_paths, PALETTES_DATA_SUBDIRECTORY)
-
-
-# Gets the paths, in order of search priority, for brushes.
-func get_brushes_search_path_in_order() -> Array:
- var base_paths := get_search_paths_in_order()
- return append_file_to_all(base_paths, BRUSHES_DATA_SUBDIRECTORY)
-
-
-# Gets the paths, in order of search priority, for patterns.
-func get_patterns_search_path_in_order() -> Array:
- var base_paths := get_search_paths_in_order()
- return append_file_to_all(base_paths, PATTERNS_DATA_SUBDIRECTORY)
-
-
-# Get the path that we are ok to be writing palettes to:
-func get_palette_write_path() -> String:
- return xdg_data_home.plus_file(PALETTES_DATA_SUBDIRECTORY)
-
-
-# Get the path that we are ok to be writing brushes to:
-func get_brushes_write_path() -> String:
- return xdg_data_home.plus_file(BRUSHES_DATA_SUBDIRECTORY)
-
-
-# Get the path that we are ok to be writing patterns to:
-func get_patterns_write_path() -> String:
- return xdg_data_home.plus_file(PATTERNS_DATA_SUBDIRECTORY)
-
-
-# Ensure the user xdg directories exist:
-func ensure_xdg_user_dirs_exist() -> void:
- if !OS.has_feature("standalone"): # Don't execute if we're in the editor
- return
-
- var base_dir := Directory.new()
- base_dir.open(raw_xdg_data_home)
- # Ensure the main config directory exists.
- if not base_dir.dir_exists(xdg_data_home):
- base_dir.make_dir(xdg_data_home)
-
- var actual_data_dir := Directory.new()
- actual_data_dir.open(xdg_data_home)
- var palette_writing_dir := get_palette_write_path()
- var brushes_writing_dir := get_brushes_write_path()
- var pattern_writing_dir := get_patterns_write_path()
- # Create the palette and brush dirs
- if not actual_data_dir.dir_exists(palette_writing_dir):
- print("Making directory %s" % [palette_writing_dir])
- actual_data_dir.make_dir(palette_writing_dir)
- if not actual_data_dir.dir_exists(brushes_writing_dir):
- print("Making directory %s" % [brushes_writing_dir])
- actual_data_dir.make_dir(brushes_writing_dir)
- if not actual_data_dir.dir_exists(pattern_writing_dir):
- print("Making directory %s" % [pattern_writing_dir])
- actual_data_dir.make_dir(pattern_writing_dir)