diff --git a/CHANGELOG_DRAFT.md b/CHANGELOG_DRAFT.md
index 19e72a9..a7eb53b 100644
--- a/CHANGELOG_DRAFT.md
+++ b/CHANGELOG_DRAFT.md
@@ -1,4 +1,27 @@
-## [NEXT]
+## [2.3.1] — 2026-05-11
+- Integrated DM tab system directly into the lobby chatbox — DMs now open as closeable tabs inside ChatPanel instead of a fullscreen overlay.
+- Removed static DMTabBtn; DM tabs are dynamically created per friend using a scene-local DMTabTemplate with (X) close button.
+- Added `@username` auto-suggest popup in ChatInput — typing `@` shows a live-filtered friend list; tap/click to select and format as `@username (message)`.
+- FriendSuggestPanel moved to scene node (editable in editor) with touch/mobile support via item_selected signal.
+- DM messages render in the shared GlobalChat RichTextLabel, switched by active tab context.
+- Incoming DMs from friends automatically create a new tab without opening the Social Panel.
+- Fixed self-DM tab creation — outgoing DM echo no longer triggers a tab for own username.
+- Chat timestamps updated to `[ DD-MM-YY - HH:MM ]` format; DM history loaded oldest-to-newest (oldest at top, newest at bottom).
+- Added `/clear` command — clears DM chat history locally; on Global tab, only admin/owner/moderator can use it.
+- Admin `/clear` on Global also calls `admin_clear_global_chat` RPC to permanently delete persisted messages server-side.
+- Added `admin_clear_global_chat` RPC in `tekton_admin.js` — paginates and removes all messages from the channel.
+- Fixed `theme_override_colors` property error on dynamically created Button nodes — replaced with `add_theme_color_override()`.
+
+## [2.3.0] — 2026-05-06
+- Fixed boot screen crash caused by `TextureButton` cast as `Button` returning nil (`as Button` → `as BaseButton`).
+- Routed boot screen button `.text` assignments through child `Label` nodes for `TextureButton` compatibility.
+- Changed changelog bullet list to BBCode `[table=2]` layout for proper hanging indent on wrapped lines.
+- Fixed changelog `RichTextLabel` scroll by removing `fit_content = true` flag.
+- Synced player avatar, username, leaderboard score, and rank to the Room List panel header on open.
+- Restored preserved hosting logic — wired Play tab `FreeModeBtn` and `StopNGoBtn` to host room with correct game mode.
+- Wired Room tab `RoomFreeModeBtn` and `RoomStopNGoBtn` to filter room list by game mode (toggle).
+- Encoded game mode as `[Mode] Room NNNN` prefix in room name for LAN room discovery filtering.
+- Added `game_mode` field to room dictionaries across `LobbyManager` (Nakama + LAN) and `NakamaManager` match listing.
## [2.2.1] — 2026-05-01
- Updated daily login logic to support multiple reward types (star, gold, fragments).
diff --git a/addons/enhanced_gridmap/meshlibrary/default.tres b/addons/enhanced_gridmap/meshlibrary/default.tres
index 141a3c0..1f089fa 100644
--- a/addons/enhanced_gridmap/meshlibrary/default.tres
+++ b/addons/enhanced_gridmap/meshlibrary/default.tres
@@ -14,7 +14,7 @@
[ext_resource type="Texture2D" uid="uid://dpkx1a780pvwv" path="res://assets/textures/tile_diamond.png" id="10_sx8rm"]
[ext_resource type="BoxMesh" uid="uid://fy4bhoeii40c" path="res://addons/enhanced_gridmap/meshlibrary/tile_safe_zone.tres" id="10_uwjsj"]
[ext_resource type="BoxMesh" uid="uid://b5cc3prem52r6" path="res://addons/enhanced_gridmap/meshlibrary/tile_freeze.tres" id="11_pgnbl"]
-[ext_resource type="BoxMesh" path="res://addons/enhanced_gridmap/meshlibrary/tile_non_walkable.tres" id="11_uwjsj"]
+[ext_resource type="BoxMesh" uid="uid://dcjdwbffgtutt" path="res://addons/enhanced_gridmap/meshlibrary/tile_non_walkable.tres" id="11_uwjsj"]
[ext_resource type="Texture2D" uid="uid://cdnxwlysxnujd" path="res://assets/textures/tile_heart.png" id="12_heart_tex"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uxput"]
diff --git a/assets/data/version.json b/assets/data/version.json
index 4df9075..f8828e2 100644
--- a/assets/data/version.json
+++ b/assets/data/version.json
@@ -1,7 +1,41 @@
{
- "latest_version": "2.2.1",
+ "latest_version": "2.3.1",
"minimum_app_version": "2.1.0",
"releases": [
+ {
+ "version": "2.3.1",
+ "date": "2026-05-11",
+ "pck_url": "https://raw.githubusercontent.com/adtpdn/tekton-updates/main/latest/patch.pck",
+ "pck_size": 0,
+ "changelog": [
+ "Integrated DM tab system directly into lobby chatbox — no more fullscreen overlay",
+ "Added @username auto-suggest popup with touch/mobile support",
+ "DM messages render in shared GlobalChat RichTextLabel by active tab context",
+ "Dynamic DM tabs with (X) close button using scene-local DMTabTemplate",
+ "Incoming DMs auto-create tabs without opening Social Panel",
+ "Fixed self-DM tab creation bug",
+ "Chat timestamps updated to DD-MM-YY - HH:MM format",
+ "Added /clear command for DM (local) and Global (admin-only with server-side RPC)",
+ "Added admin_clear_global_chat server RPC to permanently delete channel messages"
+ ]
+ },
+ {
+ "version": "2.3.0",
+ "date": "2026-05-06",
+ "pck_url": "https://raw.githubusercontent.com/adtpdn/tekton-updates/main/latest/patch.pck",
+ "pck_size": 0,
+ "changelog": [
+ "Fixed boot screen crash caused by TextureButton cast as Button returning nil",
+ "Routed boot screen button text through child Label nodes for TextureButton compatibility",
+ "Changed changelog bullets to BBCode table layout for proper hanging indent alignment",
+ "Fixed changelog RichTextLabel scroll by removing fit_content flag",
+ "Synced player avatar, username, leaderboard score, and rank to Room List panel",
+ "Wired Play tab mode buttons (Freemode, Stop n Go) to restored hosting logic",
+ "Wired Room tab mode buttons to filter room list by game mode",
+ "Encoded game mode prefix in room name for LAN room discovery filtering",
+ "Added game_mode field to room dictionaries in LobbyManager and NakamaManager"
+ ]
+ },
{
"version": "2.2.1",
"date": "2026-05-01",
diff --git a/assets/fonts/Asap-VariableFont_wdth,wght.ttf b/assets/fonts/Asap-VariableFont_wdth,wght.ttf
new file mode 100644
index 0000000..3282441
Binary files /dev/null and b/assets/fonts/Asap-VariableFont_wdth,wght.ttf differ
diff --git a/assets/fonts/Asap-VariableFont_wdth,wght.ttf.import b/assets/fonts/Asap-VariableFont_wdth,wght.ttf.import
new file mode 100644
index 0000000..2f7803e
--- /dev/null
+++ b/assets/fonts/Asap-VariableFont_wdth,wght.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://dckhhpt5emxq0"
+path="res://.godot/imported/Asap-VariableFont_wdth,wght.ttf-6857228dabc3f56ad5491a45ca4cbcdc.fontdata"
+
+[deps]
+
+source_file="res://assets/fonts/Asap-VariableFont_wdth,wght.ttf"
+dest_files=["res://.godot/imported/Asap-VariableFont_wdth,wght.ttf-6857228dabc3f56ad5491a45ca4cbcdc.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/graphics/gui/BG.png b/assets/graphics/gui/BG.png
new file mode 100644
index 0000000..9bdef8c
Binary files /dev/null and b/assets/graphics/gui/BG.png differ
diff --git a/assets/graphics/gui/BG.png.import b/assets/graphics/gui/BG.png.import
new file mode 100644
index 0000000..d95fee4
--- /dev/null
+++ b/assets/graphics/gui/BG.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://jqvv6s55mlsk"
+path="res://.godot/imported/BG.png-ec1853b9ecfd6c7830b06b20ea844cca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/BG.png"
+dest_files=["res://.godot/imported/BG.png-ec1853b9ecfd6c7830b06b20ea844cca.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/Achievement.png b/assets/graphics/gui/achievement/Achievement.png
new file mode 100644
index 0000000..39432df
Binary files /dev/null and b/assets/graphics/gui/achievement/Achievement.png differ
diff --git a/assets/graphics/gui/achievement/Achievement.png.import b/assets/graphics/gui/achievement/Achievement.png.import
new file mode 100644
index 0000000..d0192d3
--- /dev/null
+++ b/assets/graphics/gui/achievement/Achievement.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b7muy251dx6vh"
+path="res://.godot/imported/Achievement.png-1ad97ca132d04d3cf149faa6a5712dba.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/Achievement.png"
+dest_files=["res://.godot/imported/Achievement.png-1ad97ca132d04d3cf149faa6a5712dba.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/Back.png b/assets/graphics/gui/achievement/Back.png
new file mode 100644
index 0000000..e230871
Binary files /dev/null and b/assets/graphics/gui/achievement/Back.png differ
diff --git a/assets/graphics/gui/achievement/Back.png.import b/assets/graphics/gui/achievement/Back.png.import
new file mode 100644
index 0000000..6f000d8
--- /dev/null
+++ b/assets/graphics/gui/achievement/Back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0oukxqlg65wn"
+path="res://.godot/imported/Back.png-81d8bb2fc2533e5c48bc54cde77ce9f3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/Back.png"
+dest_files=["res://.godot/imported/Back.png-81d8bb2fc2533e5c48bc54cde77ce9f3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/achievement0.png b/assets/graphics/gui/achievement/achievement0.png
new file mode 100644
index 0000000..51bc138
Binary files /dev/null and b/assets/graphics/gui/achievement/achievement0.png differ
diff --git a/assets/graphics/gui/achievement/achievement0.png.import b/assets/graphics/gui/achievement/achievement0.png.import
new file mode 100644
index 0000000..7adb9dc
--- /dev/null
+++ b/assets/graphics/gui/achievement/achievement0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d1ghbpf1owvly"
+path="res://.godot/imported/achievement0.png-14ffc626801ce9d17b088822bf23f7bb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/achievement0.png"
+dest_files=["res://.godot/imported/achievement0.png-14ffc626801ce9d17b088822bf23f7bb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/achievement1.png b/assets/graphics/gui/achievement/achievement1.png
new file mode 100644
index 0000000..11a1944
Binary files /dev/null and b/assets/graphics/gui/achievement/achievement1.png differ
diff --git a/assets/graphics/gui/achievement/achievement1.png.import b/assets/graphics/gui/achievement/achievement1.png.import
new file mode 100644
index 0000000..5ecb872
--- /dev/null
+++ b/assets/graphics/gui/achievement/achievement1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dmnx41kcryti8"
+path="res://.godot/imported/achievement1.png-f9239d67811991965fc2903b3b4bb6b2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/achievement1.png"
+dest_files=["res://.godot/imported/achievement1.png-f9239d67811991965fc2903b3b4bb6b2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/collected.png b/assets/graphics/gui/achievement/collected.png
new file mode 100644
index 0000000..b690c34
Binary files /dev/null and b/assets/graphics/gui/achievement/collected.png differ
diff --git a/assets/graphics/gui/achievement/collected.png.import b/assets/graphics/gui/achievement/collected.png.import
new file mode 100644
index 0000000..73c6b82
--- /dev/null
+++ b/assets/graphics/gui/achievement/collected.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bm3qf2amwkf8q"
+path="res://.godot/imported/collected.png-51417a128d2c8dbbb011a38cfadf2008.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/collected.png"
+dest_files=["res://.godot/imported/collected.png-51417a128d2c8dbbb011a38cfadf2008.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/diamond.png b/assets/graphics/gui/achievement/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/achievement/diamond.png differ
diff --git a/assets/graphics/gui/achievement/diamond.png.import b/assets/graphics/gui/achievement/diamond.png.import
new file mode 100644
index 0000000..63aa3d6
--- /dev/null
+++ b/assets/graphics/gui/achievement/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://lxsy8ub8qsvt"
+path="res://.godot/imported/diamond.png-98db8d493a58d9d543da500dfaa2fb87.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-98db8d493a58d9d543da500dfaa2fb87.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/gold.png b/assets/graphics/gui/achievement/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/achievement/gold.png differ
diff --git a/assets/graphics/gui/achievement/gold.png.import b/assets/graphics/gui/achievement/gold.png.import
new file mode 100644
index 0000000..0b0d4fc
--- /dev/null
+++ b/assets/graphics/gui/achievement/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cj6og3p4wmlcg"
+path="res://.godot/imported/gold.png-6bf69761b35451e406a102669dc7f463.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/gold.png"
+dest_files=["res://.godot/imported/gold.png-6bf69761b35451e406a102669dc7f463.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/help.png b/assets/graphics/gui/achievement/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/achievement/help.png differ
diff --git a/assets/graphics/gui/achievement/help.png.import b/assets/graphics/gui/achievement/help.png.import
new file mode 100644
index 0000000..36499c8
--- /dev/null
+++ b/assets/graphics/gui/achievement/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cfuvedv2o1xdg"
+path="res://.godot/imported/help.png-905df902e7d53537528df20189e3e091.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/help.png"
+dest_files=["res://.godot/imported/help.png-905df902e7d53537528df20189e3e091.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/name_bg.png b/assets/graphics/gui/achievement/name_bg.png
new file mode 100644
index 0000000..7832254
Binary files /dev/null and b/assets/graphics/gui/achievement/name_bg.png differ
diff --git a/assets/graphics/gui/achievement/name_bg.png.import b/assets/graphics/gui/achievement/name_bg.png.import
new file mode 100644
index 0000000..7d2a930
--- /dev/null
+++ b/assets/graphics/gui/achievement/name_bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2a1i1cj8ku8y"
+path="res://.godot/imported/name_bg.png-93da9e8ce0a08d2cb79a4cbba9e7ca61.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/name_bg.png"
+dest_files=["res://.godot/imported/name_bg.png-93da9e8ce0a08d2cb79a4cbba9e7ca61.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/resource_slot.png b/assets/graphics/gui/achievement/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/achievement/resource_slot.png differ
diff --git a/assets/graphics/gui/achievement/resource_slot.png.import b/assets/graphics/gui/achievement/resource_slot.png.import
new file mode 100644
index 0000000..0912dd6
--- /dev/null
+++ b/assets/graphics/gui/achievement/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bshuqcbca8y3i"
+path="res://.godot/imported/resource_slot.png-9f37e992ca9941b61edd4bb81de7d033.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-9f37e992ca9941b61edd4bb81de7d033.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/reward.png b/assets/graphics/gui/achievement/reward.png
new file mode 100644
index 0000000..74ee647
Binary files /dev/null and b/assets/graphics/gui/achievement/reward.png differ
diff --git a/assets/graphics/gui/achievement/reward.png.import b/assets/graphics/gui/achievement/reward.png.import
new file mode 100644
index 0000000..d01a89c
--- /dev/null
+++ b/assets/graphics/gui/achievement/reward.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dlw5sqc7jlxkf"
+path="res://.godot/imported/reward.png-71b550adb3a964436475ff39fc659540.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/reward.png"
+dest_files=["res://.godot/imported/reward.png-71b550adb3a964436475ff39fc659540.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/scroll_fill.png b/assets/graphics/gui/achievement/scroll_fill.png
new file mode 100644
index 0000000..feb9635
Binary files /dev/null and b/assets/graphics/gui/achievement/scroll_fill.png differ
diff --git a/assets/graphics/gui/achievement/scroll_fill.png.import b/assets/graphics/gui/achievement/scroll_fill.png.import
new file mode 100644
index 0000000..2703b02
--- /dev/null
+++ b/assets/graphics/gui/achievement/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b57ljkm2853y0"
+path="res://.godot/imported/scroll_fill.png-acec094f32b201c06cdbd7f10553ae99.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-acec094f32b201c06cdbd7f10553ae99.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/achievement/scroll_slot.png b/assets/graphics/gui/achievement/scroll_slot.png
new file mode 100644
index 0000000..902e2d9
Binary files /dev/null and b/assets/graphics/gui/achievement/scroll_slot.png differ
diff --git a/assets/graphics/gui/achievement/scroll_slot.png.import b/assets/graphics/gui/achievement/scroll_slot.png.import
new file mode 100644
index 0000000..8310617
--- /dev/null
+++ b/assets/graphics/gui/achievement/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://psfhvjjdwewr"
+path="res://.godot/imported/scroll_slot.png-99b1349e69f48e2f15c99d1de6a8cf79.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/achievement/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-99b1349e69f48e2f15c99d1de6a8cf79.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/back.png b/assets/graphics/gui/banner/back.png
new file mode 100644
index 0000000..e230871
Binary files /dev/null and b/assets/graphics/gui/banner/back.png differ
diff --git a/assets/graphics/gui/banner/back.png.import b/assets/graphics/gui/banner/back.png.import
new file mode 100644
index 0000000..2ffa983
--- /dev/null
+++ b/assets/graphics/gui/banner/back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://doix1w04h2t6m"
+path="res://.godot/imported/back.png-75f65e6f827cea6303873b556cb7425a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/back.png"
+dest_files=["res://.godot/imported/back.png-75f65e6f827cea6303873b556cb7425a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/banner1.png b/assets/graphics/gui/banner/banner1.png
new file mode 100644
index 0000000..71093f9
Binary files /dev/null and b/assets/graphics/gui/banner/banner1.png differ
diff --git a/assets/graphics/gui/banner/banner1.png.import b/assets/graphics/gui/banner/banner1.png.import
new file mode 100644
index 0000000..277da15
--- /dev/null
+++ b/assets/graphics/gui/banner/banner1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxj1464ifyaoj"
+path="res://.godot/imported/banner1.png-111e78ebe9bcbc060895037e53285458.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/banner1.png"
+dest_files=["res://.godot/imported/banner1.png-111e78ebe9bcbc060895037e53285458.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/banner2.png b/assets/graphics/gui/banner/banner2.png
new file mode 100644
index 0000000..911d61f
Binary files /dev/null and b/assets/graphics/gui/banner/banner2.png differ
diff --git a/assets/graphics/gui/banner/banner2.png.import b/assets/graphics/gui/banner/banner2.png.import
new file mode 100644
index 0000000..482db6e
--- /dev/null
+++ b/assets/graphics/gui/banner/banner2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://di40l7cx7dkt5"
+path="res://.godot/imported/banner2.png-ae807fd1e97b0992f06868d19b90cf59.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/banner2.png"
+dest_files=["res://.godot/imported/banner2.png-ae807fd1e97b0992f06868d19b90cf59.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/banner3.png b/assets/graphics/gui/banner/banner3.png
new file mode 100644
index 0000000..515184d
Binary files /dev/null and b/assets/graphics/gui/banner/banner3.png differ
diff --git a/assets/graphics/gui/banner/banner3.png.import b/assets/graphics/gui/banner/banner3.png.import
new file mode 100644
index 0000000..d3dffd5
--- /dev/null
+++ b/assets/graphics/gui/banner/banner3.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://vhyrsp35vgna"
+path="res://.godot/imported/banner3.png-d5a2d2c7485dfb6c49302ca5c98ba10e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/banner3.png"
+dest_files=["res://.godot/imported/banner3.png-d5a2d2c7485dfb6c49302ca5c98ba10e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/bg_dim.png b/assets/graphics/gui/banner/bg_dim.png
new file mode 100644
index 0000000..af4e142
Binary files /dev/null and b/assets/graphics/gui/banner/bg_dim.png differ
diff --git a/assets/graphics/gui/banner/bg_dim.png.import b/assets/graphics/gui/banner/bg_dim.png.import
new file mode 100644
index 0000000..4b8d130
--- /dev/null
+++ b/assets/graphics/gui/banner/bg_dim.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wfow8xy8nn2g"
+path="res://.godot/imported/bg_dim.png-e74c6286559cbec04c9fab9b6df624a2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/bg_dim.png"
+dest_files=["res://.godot/imported/bg_dim.png-e74c6286559cbec04c9fab9b6df624a2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/diamond.png b/assets/graphics/gui/banner/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/banner/diamond.png differ
diff --git a/assets/graphics/gui/banner/diamond.png.import b/assets/graphics/gui/banner/diamond.png.import
new file mode 100644
index 0000000..4dcea26
--- /dev/null
+++ b/assets/graphics/gui/banner/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://eapfhpe4kd3j"
+path="res://.godot/imported/diamond.png-8400504a95e645b76bd993487e13b825.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-8400504a95e645b76bd993487e13b825.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/fragment.png b/assets/graphics/gui/banner/fragment.png
new file mode 100644
index 0000000..6f8f727
Binary files /dev/null and b/assets/graphics/gui/banner/fragment.png differ
diff --git a/assets/graphics/gui/banner/fragment.png.import b/assets/graphics/gui/banner/fragment.png.import
new file mode 100644
index 0000000..d784397
--- /dev/null
+++ b/assets/graphics/gui/banner/fragment.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5s8dr6nbws5r"
+path="res://.godot/imported/fragment.png-70bc32840091b526666bf8fad6c701db.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/fragment.png"
+dest_files=["res://.godot/imported/fragment.png-70bc32840091b526666bf8fad6c701db.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/gold.png b/assets/graphics/gui/banner/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/banner/gold.png differ
diff --git a/assets/graphics/gui/banner/gold.png.import b/assets/graphics/gui/banner/gold.png.import
new file mode 100644
index 0000000..648d9c7
--- /dev/null
+++ b/assets/graphics/gui/banner/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cydtmsb4meqas"
+path="res://.godot/imported/gold.png-e1dfe1dfde220f8f11eb9f7186e5d57d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/gold.png"
+dest_files=["res://.godot/imported/gold.png-e1dfe1dfde220f8f11eb9f7186e5d57d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/help.png b/assets/graphics/gui/banner/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/banner/help.png differ
diff --git a/assets/graphics/gui/banner/help.png.import b/assets/graphics/gui/banner/help.png.import
new file mode 100644
index 0000000..14383b9
--- /dev/null
+++ b/assets/graphics/gui/banner/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dsandrwidh567"
+path="res://.godot/imported/help.png-b5900f7b94f17f3d639119f838121843.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/help.png"
+dest_files=["res://.godot/imported/help.png-b5900f7b94f17f3d639119f838121843.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/history.png b/assets/graphics/gui/banner/history.png
new file mode 100644
index 0000000..7d5f519
Binary files /dev/null and b/assets/graphics/gui/banner/history.png differ
diff --git a/assets/graphics/gui/banner/history.png.import b/assets/graphics/gui/banner/history.png.import
new file mode 100644
index 0000000..bc6faa8
--- /dev/null
+++ b/assets/graphics/gui/banner/history.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7hmox21ubr1n"
+path="res://.godot/imported/history.png-49a212770263dc146b5aa9367e82ecb2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/history.png"
+dest_files=["res://.godot/imported/history.png-49a212770263dc146b5aa9367e82ecb2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/mall.png b/assets/graphics/gui/banner/mall.png
new file mode 100644
index 0000000..a756068
Binary files /dev/null and b/assets/graphics/gui/banner/mall.png differ
diff --git a/assets/graphics/gui/banner/mall.png.import b/assets/graphics/gui/banner/mall.png.import
new file mode 100644
index 0000000..c8f3734
--- /dev/null
+++ b/assets/graphics/gui/banner/mall.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dq2aqy6iqmwj7"
+path="res://.godot/imported/mall.png-abe25faba786f2d85b3e0253f2aa4bb4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/mall.png"
+dest_files=["res://.godot/imported/mall.png-abe25faba786f2d85b3e0253f2aa4bb4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/pull1.png b/assets/graphics/gui/banner/pull1.png
new file mode 100644
index 0000000..84b086e
Binary files /dev/null and b/assets/graphics/gui/banner/pull1.png differ
diff --git a/assets/graphics/gui/banner/pull1.png.import b/assets/graphics/gui/banner/pull1.png.import
new file mode 100644
index 0000000..28e30bb
--- /dev/null
+++ b/assets/graphics/gui/banner/pull1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://qpsnrq3st4bl"
+path="res://.godot/imported/pull1.png-46ab259be2c00b4019a754ac9f19aead.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/pull1.png"
+dest_files=["res://.godot/imported/pull1.png-46ab259be2c00b4019a754ac9f19aead.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/pull10.png b/assets/graphics/gui/banner/pull10.png
new file mode 100644
index 0000000..2a11a0a
Binary files /dev/null and b/assets/graphics/gui/banner/pull10.png differ
diff --git a/assets/graphics/gui/banner/pull10.png.import b/assets/graphics/gui/banner/pull10.png.import
new file mode 100644
index 0000000..1140647
--- /dev/null
+++ b/assets/graphics/gui/banner/pull10.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mibpqb8kcj83"
+path="res://.godot/imported/pull10.png-e2a86a7ca580473b844e919b1ca9f3c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/pull10.png"
+dest_files=["res://.godot/imported/pull10.png-e2a86a7ca580473b844e919b1ca9f3c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/resource_slot.png b/assets/graphics/gui/banner/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/banner/resource_slot.png differ
diff --git a/assets/graphics/gui/banner/resource_slot.png.import b/assets/graphics/gui/banner/resource_slot.png.import
new file mode 100644
index 0000000..a6a466b
--- /dev/null
+++ b/assets/graphics/gui/banner/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mol7e7bpe5nx"
+path="res://.godot/imported/resource_slot.png-dcc6d042b55fa0ad14ec6ef6fa0f523f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-dcc6d042b55fa0ad14ec6ef6fa0f523f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/rotate.png b/assets/graphics/gui/banner/rotate.png
new file mode 100644
index 0000000..888cdf6
Binary files /dev/null and b/assets/graphics/gui/banner/rotate.png differ
diff --git a/assets/graphics/gui/banner/rotate.png.import b/assets/graphics/gui/banner/rotate.png.import
new file mode 100644
index 0000000..9d6187f
--- /dev/null
+++ b/assets/graphics/gui/banner/rotate.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bftng76gcn02t"
+path="res://.godot/imported/rotate.png-6735f301aabe3c6f16197384b52b0b5f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/rotate.png"
+dest_files=["res://.godot/imported/rotate.png-6735f301aabe3c6f16197384b52b0b5f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/scroll_fill.png b/assets/graphics/gui/banner/scroll_fill.png
new file mode 100644
index 0000000..81ff581
Binary files /dev/null and b/assets/graphics/gui/banner/scroll_fill.png differ
diff --git a/assets/graphics/gui/banner/scroll_fill.png.import b/assets/graphics/gui/banner/scroll_fill.png.import
new file mode 100644
index 0000000..6001ed0
--- /dev/null
+++ b/assets/graphics/gui/banner/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dy0rui3nmgeh3"
+path="res://.godot/imported/scroll_fill.png-06a8b3e2be4f3a0cb30d4b74e5cc1b79.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-06a8b3e2be4f3a0cb30d4b74e5cc1b79.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/scroll_slot.png b/assets/graphics/gui/banner/scroll_slot.png
new file mode 100644
index 0000000..b1591b4
Binary files /dev/null and b/assets/graphics/gui/banner/scroll_slot.png differ
diff --git a/assets/graphics/gui/banner/scroll_slot.png.import b/assets/graphics/gui/banner/scroll_slot.png.import
new file mode 100644
index 0000000..d68dd53
--- /dev/null
+++ b/assets/graphics/gui/banner/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwwc84iprs31w"
+path="res://.godot/imported/scroll_slot.png-e2609b89c749aeceea335cb13c636544.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-e2609b89c749aeceea335cb13c636544.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_all0.png b/assets/graphics/gui/banner/short_all0.png
new file mode 100644
index 0000000..f1ee051
Binary files /dev/null and b/assets/graphics/gui/banner/short_all0.png differ
diff --git a/assets/graphics/gui/banner/short_all0.png.import b/assets/graphics/gui/banner/short_all0.png.import
new file mode 100644
index 0000000..8bd74f2
--- /dev/null
+++ b/assets/graphics/gui/banner/short_all0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c3f6nd6o5hi5a"
+path="res://.godot/imported/short_all0.png-bb6fd5721f551a1a4b8ba60f6037e29e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_all0.png"
+dest_files=["res://.godot/imported/short_all0.png-bb6fd5721f551a1a4b8ba60f6037e29e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_all1.png b/assets/graphics/gui/banner/short_all1.png
new file mode 100644
index 0000000..6628224
Binary files /dev/null and b/assets/graphics/gui/banner/short_all1.png differ
diff --git a/assets/graphics/gui/banner/short_all1.png.import b/assets/graphics/gui/banner/short_all1.png.import
new file mode 100644
index 0000000..f9d95cd
--- /dev/null
+++ b/assets/graphics/gui/banner/short_all1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bx34xg2jq146f"
+path="res://.godot/imported/short_all1.png-bf282203923af55886bea04bfa39189b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_all1.png"
+dest_files=["res://.godot/imported/short_all1.png-bf282203923af55886bea04bfa39189b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_glove0.png b/assets/graphics/gui/banner/short_glove0.png
new file mode 100644
index 0000000..c524353
Binary files /dev/null and b/assets/graphics/gui/banner/short_glove0.png differ
diff --git a/assets/graphics/gui/banner/short_glove0.png.import b/assets/graphics/gui/banner/short_glove0.png.import
new file mode 100644
index 0000000..718e8f0
--- /dev/null
+++ b/assets/graphics/gui/banner/short_glove0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5n2xp4w3ma2v"
+path="res://.godot/imported/short_glove0.png-b1189660715d4479737fcf96829dd7b6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_glove0.png"
+dest_files=["res://.godot/imported/short_glove0.png-b1189660715d4479737fcf96829dd7b6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_glove1.png b/assets/graphics/gui/banner/short_glove1.png
new file mode 100644
index 0000000..285ac4b
Binary files /dev/null and b/assets/graphics/gui/banner/short_glove1.png differ
diff --git a/assets/graphics/gui/banner/short_glove1.png.import b/assets/graphics/gui/banner/short_glove1.png.import
new file mode 100644
index 0000000..0016b31
--- /dev/null
+++ b/assets/graphics/gui/banner/short_glove1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://u3w7r685ufoh"
+path="res://.godot/imported/short_glove1.png-35059f8f72084f51301ed55278086811.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_glove1.png"
+dest_files=["res://.godot/imported/short_glove1.png-35059f8f72084f51301ed55278086811.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_hat0.png b/assets/graphics/gui/banner/short_hat0.png
new file mode 100644
index 0000000..5ecf4e7
Binary files /dev/null and b/assets/graphics/gui/banner/short_hat0.png differ
diff --git a/assets/graphics/gui/banner/short_hat0.png.import b/assets/graphics/gui/banner/short_hat0.png.import
new file mode 100644
index 0000000..53f3d83
--- /dev/null
+++ b/assets/graphics/gui/banner/short_hat0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d0gfuwxibs5yo"
+path="res://.godot/imported/short_hat0.png-3c139ca6b0066b326bd8e9bf85015703.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_hat0.png"
+dest_files=["res://.godot/imported/short_hat0.png-3c139ca6b0066b326bd8e9bf85015703.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_hat1.png b/assets/graphics/gui/banner/short_hat1.png
new file mode 100644
index 0000000..2e366f8
Binary files /dev/null and b/assets/graphics/gui/banner/short_hat1.png differ
diff --git a/assets/graphics/gui/banner/short_hat1.png.import b/assets/graphics/gui/banner/short_hat1.png.import
new file mode 100644
index 0000000..f513acc
--- /dev/null
+++ b/assets/graphics/gui/banner/short_hat1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://s8g8cdbg1v7u"
+path="res://.godot/imported/short_hat1.png-87d0c5897f1df7e2d5a4f219f17535f8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_hat1.png"
+dest_files=["res://.godot/imported/short_hat1.png-87d0c5897f1df7e2d5a4f219f17535f8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_outfit0.png b/assets/graphics/gui/banner/short_outfit0.png
new file mode 100644
index 0000000..d959126
Binary files /dev/null and b/assets/graphics/gui/banner/short_outfit0.png differ
diff --git a/assets/graphics/gui/banner/short_outfit0.png.import b/assets/graphics/gui/banner/short_outfit0.png.import
new file mode 100644
index 0000000..3439e70
--- /dev/null
+++ b/assets/graphics/gui/banner/short_outfit0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhd3qkli5b5yc"
+path="res://.godot/imported/short_outfit0.png-cad445d0ddc030d23cf7e6753e7beaa7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_outfit0.png"
+dest_files=["res://.godot/imported/short_outfit0.png-cad445d0ddc030d23cf7e6753e7beaa7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_outfit1.png b/assets/graphics/gui/banner/short_outfit1.png
new file mode 100644
index 0000000..cbbebcd
Binary files /dev/null and b/assets/graphics/gui/banner/short_outfit1.png differ
diff --git a/assets/graphics/gui/banner/short_outfit1.png.import b/assets/graphics/gui/banner/short_outfit1.png.import
new file mode 100644
index 0000000..67214b6
--- /dev/null
+++ b/assets/graphics/gui/banner/short_outfit1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bvig1vjw84k2y"
+path="res://.godot/imported/short_outfit1.png-5270a29d5e6847d5f9d18b8c50e5ee4d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_outfit1.png"
+dest_files=["res://.godot/imported/short_outfit1.png-5270a29d5e6847d5f9d18b8c50e5ee4d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_slot.png b/assets/graphics/gui/banner/short_slot.png
new file mode 100644
index 0000000..e126aa8
Binary files /dev/null and b/assets/graphics/gui/banner/short_slot.png differ
diff --git a/assets/graphics/gui/banner/short_slot.png.import b/assets/graphics/gui/banner/short_slot.png.import
new file mode 100644
index 0000000..392138d
--- /dev/null
+++ b/assets/graphics/gui/banner/short_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bm20kj1aybouy"
+path="res://.godot/imported/short_slot.png-112a28c19d992b0aee3e6929ad8d6258.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_slot.png"
+dest_files=["res://.godot/imported/short_slot.png-112a28c19d992b0aee3e6929ad8d6258.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_slot1.png b/assets/graphics/gui/banner/short_slot1.png
new file mode 100644
index 0000000..3614c51
Binary files /dev/null and b/assets/graphics/gui/banner/short_slot1.png differ
diff --git a/assets/graphics/gui/banner/short_slot1.png.import b/assets/graphics/gui/banner/short_slot1.png.import
new file mode 100644
index 0000000..fd31e8b
--- /dev/null
+++ b/assets/graphics/gui/banner/short_slot1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://o1w42qs2h3ln"
+path="res://.godot/imported/short_slot1.png-b33ae3d43e1eead59f2990368e4d42bb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_slot1.png"
+dest_files=["res://.godot/imported/short_slot1.png-b33ae3d43e1eead59f2990368e4d42bb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_slot2.png b/assets/graphics/gui/banner/short_slot2.png
new file mode 100644
index 0000000..954b335
Binary files /dev/null and b/assets/graphics/gui/banner/short_slot2.png differ
diff --git a/assets/graphics/gui/banner/short_slot2.png.import b/assets/graphics/gui/banner/short_slot2.png.import
new file mode 100644
index 0000000..f04277c
--- /dev/null
+++ b/assets/graphics/gui/banner/short_slot2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b2lmqggnjajqb"
+path="res://.godot/imported/short_slot2.png-4fce675def5eebe0649401227ef30d7a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_slot2.png"
+dest_files=["res://.godot/imported/short_slot2.png-4fce675def5eebe0649401227ef30d7a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_slot3.png b/assets/graphics/gui/banner/short_slot3.png
new file mode 100644
index 0000000..c955afe
Binary files /dev/null and b/assets/graphics/gui/banner/short_slot3.png differ
diff --git a/assets/graphics/gui/banner/short_slot3.png.import b/assets/graphics/gui/banner/short_slot3.png.import
new file mode 100644
index 0000000..520e7e0
--- /dev/null
+++ b/assets/graphics/gui/banner/short_slot3.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cauv7rrtsshdr"
+path="res://.godot/imported/short_slot3.png-1f62d5435f7c4c771f4727f7c4a8c38d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_slot3.png"
+dest_files=["res://.godot/imported/short_slot3.png-1f62d5435f7c4c771f4727f7c4a8c38d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/banner/short_slot4.png b/assets/graphics/gui/banner/short_slot4.png
new file mode 100644
index 0000000..d8946c3
Binary files /dev/null and b/assets/graphics/gui/banner/short_slot4.png differ
diff --git a/assets/graphics/gui/banner/short_slot4.png.import b/assets/graphics/gui/banner/short_slot4.png.import
new file mode 100644
index 0000000..f7cd919
--- /dev/null
+++ b/assets/graphics/gui/banner/short_slot4.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://gx34dire2qrl"
+path="res://.godot/imported/short_slot4.png-74055f41f1ce85dda49db118f3563961.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/banner/short_slot4.png"
+dest_files=["res://.godot/imported/short_slot4.png-74055f41f1ce85dda49db118f3563961.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/Rectangle 3.png b/assets/graphics/gui/friendlist/Rectangle 3.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/friendlist/Rectangle 3.png differ
diff --git a/assets/graphics/gui/friendlist/Rectangle 3.png.import b/assets/graphics/gui/friendlist/Rectangle 3.png.import
new file mode 100644
index 0000000..abd2e1f
--- /dev/null
+++ b/assets/graphics/gui/friendlist/Rectangle 3.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cc3070wv04e2v"
+path="res://.godot/imported/Rectangle 3.png-569d8462b3b0ed4f7e643b67fec2a1cc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/Rectangle 3.png"
+dest_files=["res://.godot/imported/Rectangle 3.png-569d8462b3b0ed4f7e643b67fec2a1cc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat.png b/assets/graphics/gui/friendlist/chat.png
new file mode 100644
index 0000000..90d97d0
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat.png differ
diff --git a/assets/graphics/gui/friendlist/chat.png.import b/assets/graphics/gui/friendlist/chat.png.import
new file mode 100644
index 0000000..6ba84ff
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cceal37r6f31r"
+path="res://.godot/imported/chat.png-a31c2a07a2ae850eb37ee0c3c20f6ab8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat.png"
+dest_files=["res://.godot/imported/chat.png-a31c2a07a2ae850eb37ee0c3c20f6ab8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat_box.png b/assets/graphics/gui/friendlist/chat_box.png
new file mode 100644
index 0000000..50eb3bd
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat_box.png differ
diff --git a/assets/graphics/gui/friendlist/chat_box.png.import b/assets/graphics/gui/friendlist/chat_box.png.import
new file mode 100644
index 0000000..3731808
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat_box.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://k0uemne7fnb7"
+path="res://.godot/imported/chat_box.png-911d1d0dacf23e23cb41acf18faf58a8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat_box.png"
+dest_files=["res://.godot/imported/chat_box.png-911d1d0dacf23e23cb41acf18faf58a8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat_drop.png b/assets/graphics/gui/friendlist/chat_drop.png
new file mode 100644
index 0000000..70cec24
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat_drop.png differ
diff --git a/assets/graphics/gui/friendlist/chat_drop.png.import b/assets/graphics/gui/friendlist/chat_drop.png.import
new file mode 100644
index 0000000..559565f
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat_drop.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bl5mw8q1cjatq"
+path="res://.godot/imported/chat_drop.png-9a25b7c665a046d60e64d989c3a235e9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat_drop.png"
+dest_files=["res://.godot/imported/chat_drop.png-9a25b7c665a046d60e64d989c3a235e9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat_emoji.png b/assets/graphics/gui/friendlist/chat_emoji.png
new file mode 100644
index 0000000..cfe991e
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat_emoji.png differ
diff --git a/assets/graphics/gui/friendlist/chat_emoji.png.import b/assets/graphics/gui/friendlist/chat_emoji.png.import
new file mode 100644
index 0000000..fad61d0
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat_emoji.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7haudm67knvw"
+path="res://.godot/imported/chat_emoji.png-2b890c47e76a92f9571bc1a1be5a0ff0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat_emoji.png"
+dest_files=["res://.godot/imported/chat_emoji.png-2b890c47e76a92f9571bc1a1be5a0ff0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat_enter.png b/assets/graphics/gui/friendlist/chat_enter.png
new file mode 100644
index 0000000..ecc197f
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat_enter.png differ
diff --git a/assets/graphics/gui/friendlist/chat_enter.png.import b/assets/graphics/gui/friendlist/chat_enter.png.import
new file mode 100644
index 0000000..1d7ce0e
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat_enter.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2b2t6hvlhgch"
+path="res://.godot/imported/chat_enter.png-f82b58d6e10f6e84567852ff95100c6d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat_enter.png"
+dest_files=["res://.godot/imported/chat_enter.png-f82b58d6e10f6e84567852ff95100c6d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat_list.png b/assets/graphics/gui/friendlist/chat_list.png
new file mode 100644
index 0000000..ee55990
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat_list.png differ
diff --git a/assets/graphics/gui/friendlist/chat_list.png.import b/assets/graphics/gui/friendlist/chat_list.png.import
new file mode 100644
index 0000000..7d75cb2
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat_list.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmk2f1tkxwri6"
+path="res://.godot/imported/chat_list.png-5f3d6e8816f3fe945a6894dec12d8145.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat_list.png"
+dest_files=["res://.godot/imported/chat_list.png-5f3d6e8816f3fe945a6894dec12d8145.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/chat_page.png b/assets/graphics/gui/friendlist/chat_page.png
new file mode 100644
index 0000000..b855a40
Binary files /dev/null and b/assets/graphics/gui/friendlist/chat_page.png differ
diff --git a/assets/graphics/gui/friendlist/chat_page.png.import b/assets/graphics/gui/friendlist/chat_page.png.import
new file mode 100644
index 0000000..8b905c9
--- /dev/null
+++ b/assets/graphics/gui/friendlist/chat_page.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cwxh56xtm0xl1"
+path="res://.godot/imported/chat_page.png-5057f302f514afc7d109e83fbaa6993f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/chat_page.png"
+dest_files=["res://.godot/imported/chat_page.png-5057f302f514afc7d109e83fbaa6993f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/diamond.png b/assets/graphics/gui/friendlist/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/friendlist/diamond.png differ
diff --git a/assets/graphics/gui/friendlist/diamond.png.import b/assets/graphics/gui/friendlist/diamond.png.import
new file mode 100644
index 0000000..a374b77
--- /dev/null
+++ b/assets/graphics/gui/friendlist/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://f6tlui56jpkc"
+path="res://.godot/imported/diamond.png-f9d1839f20cc05fcaa3b2a063ce83637.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-f9d1839f20cc05fcaa3b2a063ce83637.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_add0.png b/assets/graphics/gui/friendlist/friend_add0.png
new file mode 100644
index 0000000..006094c
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_add0.png differ
diff --git a/assets/graphics/gui/friendlist/friend_add0.png.import b/assets/graphics/gui/friendlist/friend_add0.png.import
new file mode 100644
index 0000000..8e62a2d
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_add0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2rh7nljlyf6g"
+path="res://.godot/imported/friend_add0.png-4ff3211d743b878aead1f04e88b2df69.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_add0.png"
+dest_files=["res://.godot/imported/friend_add0.png-4ff3211d743b878aead1f04e88b2df69.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_add1.png b/assets/graphics/gui/friendlist/friend_add1.png
new file mode 100644
index 0000000..4429fb5
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_add1.png differ
diff --git a/assets/graphics/gui/friendlist/friend_add1.png.import b/assets/graphics/gui/friendlist/friend_add1.png.import
new file mode 100644
index 0000000..e376a47
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_add1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cl02ccx88erbi"
+path="res://.godot/imported/friend_add1.png-68d6fe596f422dbe285cc44602338731.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_add1.png"
+dest_files=["res://.godot/imported/friend_add1.png-68d6fe596f422dbe285cc44602338731.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_avail.png b/assets/graphics/gui/friendlist/friend_avail.png
new file mode 100644
index 0000000..43081d0
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_avail.png differ
diff --git a/assets/graphics/gui/friendlist/friend_avail.png.import b/assets/graphics/gui/friendlist/friend_avail.png.import
new file mode 100644
index 0000000..fdf5690
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_avail.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bt2syhdbw5nry"
+path="res://.godot/imported/friend_avail.png-8fd00045147d207f4c0d4a89e87d3b4a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_avail.png"
+dest_files=["res://.godot/imported/friend_avail.png-8fd00045147d207f4c0d4a89e87d3b4a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_block0.png.png b/assets/graphics/gui/friendlist/friend_block0.png.png
new file mode 100644
index 0000000..a2e63a3
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_block0.png.png differ
diff --git a/assets/graphics/gui/friendlist/friend_block0.png.png.import b/assets/graphics/gui/friendlist/friend_block0.png.png.import
new file mode 100644
index 0000000..e331193
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_block0.png.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b407bjgji55hs"
+path="res://.godot/imported/friend_block0.png.png-0546e7392454b172dcdea791a57a4fcc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_block0.png.png"
+dest_files=["res://.godot/imported/friend_block0.png.png-0546e7392454b172dcdea791a57a4fcc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_block1.png b/assets/graphics/gui/friendlist/friend_block1.png
new file mode 100644
index 0000000..a6b76f9
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_block1.png differ
diff --git a/assets/graphics/gui/friendlist/friend_block1.png.import b/assets/graphics/gui/friendlist/friend_block1.png.import
new file mode 100644
index 0000000..c1c865c
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_block1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d18atioe840i"
+path="res://.godot/imported/friend_block1.png-07868d33bb09641ea478e77545160c7f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_block1.png"
+dest_files=["res://.godot/imported/friend_block1.png-07868d33bb09641ea478e77545160c7f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_chat.png b/assets/graphics/gui/friendlist/friend_chat.png
new file mode 100644
index 0000000..7397be5
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_chat.png differ
diff --git a/assets/graphics/gui/friendlist/friend_chat.png.import b/assets/graphics/gui/friendlist/friend_chat.png.import
new file mode 100644
index 0000000..193167c
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_chat.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bu80ibe63kel3"
+path="res://.godot/imported/friend_chat.png-6a207a6b5b4f1cdd7899d5eaa948a8c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_chat.png"
+dest_files=["res://.godot/imported/friend_chat.png-6a207a6b5b4f1cdd7899d5eaa948a8c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_list0.png b/assets/graphics/gui/friendlist/friend_list0.png
new file mode 100644
index 0000000..b0383f8
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_list0.png differ
diff --git a/assets/graphics/gui/friendlist/friend_list0.png.import b/assets/graphics/gui/friendlist/friend_list0.png.import
new file mode 100644
index 0000000..9d87ca9
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_list0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bldyi85ydabau"
+path="res://.godot/imported/friend_list0.png-9fc1a570a14dc936c4bb235ee896aa30.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_list0.png"
+dest_files=["res://.godot/imported/friend_list0.png-9fc1a570a14dc936c4bb235ee896aa30.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friend_list1.png b/assets/graphics/gui/friendlist/friend_list1.png
new file mode 100644
index 0000000..f0346de
Binary files /dev/null and b/assets/graphics/gui/friendlist/friend_list1.png differ
diff --git a/assets/graphics/gui/friendlist/friend_list1.png.import b/assets/graphics/gui/friendlist/friend_list1.png.import
new file mode 100644
index 0000000..8a1592d
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friend_list1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ca48x2gu0m115"
+path="res://.godot/imported/friend_list1.png-6133f0a39e236e700de1831eab78a68c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friend_list1.png"
+dest_files=["res://.godot/imported/friend_list1.png-6133f0a39e236e700de1831eab78a68c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/friendlist.png b/assets/graphics/gui/friendlist/friendlist.png
new file mode 100644
index 0000000..c098b33
Binary files /dev/null and b/assets/graphics/gui/friendlist/friendlist.png differ
diff --git a/assets/graphics/gui/friendlist/friendlist.png.import b/assets/graphics/gui/friendlist/friendlist.png.import
new file mode 100644
index 0000000..a7dd2ad
--- /dev/null
+++ b/assets/graphics/gui/friendlist/friendlist.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mtu1vpapg0qa"
+path="res://.godot/imported/friendlist.png-edf2a99e864dc9fbbdbfaf3de09bf10d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/friendlist.png"
+dest_files=["res://.godot/imported/friendlist.png-edf2a99e864dc9fbbdbfaf3de09bf10d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/gold.png b/assets/graphics/gui/friendlist/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/friendlist/gold.png differ
diff --git a/assets/graphics/gui/friendlist/gold.png.import b/assets/graphics/gui/friendlist/gold.png.import
new file mode 100644
index 0000000..6f5bebc
--- /dev/null
+++ b/assets/graphics/gui/friendlist/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://n2dsfvlmnoe8"
+path="res://.godot/imported/gold.png-9aec9a95547c645b987066059fe6a6d4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/gold.png"
+dest_files=["res://.godot/imported/gold.png-9aec9a95547c645b987066059fe6a6d4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/help.png b/assets/graphics/gui/friendlist/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/friendlist/help.png differ
diff --git a/assets/graphics/gui/friendlist/help.png.import b/assets/graphics/gui/friendlist/help.png.import
new file mode 100644
index 0000000..d13d67c
--- /dev/null
+++ b/assets/graphics/gui/friendlist/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0a1kyisrq3nr"
+path="res://.godot/imported/help.png-1826ba0f0c2b7024aec484b5a373f83e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/help.png"
+dest_files=["res://.godot/imported/help.png-1826ba0f0c2b7024aec484b5a373f83e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/mailbox.png b/assets/graphics/gui/friendlist/mailbox.png
new file mode 100644
index 0000000..91a6ef8
Binary files /dev/null and b/assets/graphics/gui/friendlist/mailbox.png differ
diff --git a/assets/graphics/gui/friendlist/mailbox.png.import b/assets/graphics/gui/friendlist/mailbox.png.import
new file mode 100644
index 0000000..d10c2e0
--- /dev/null
+++ b/assets/graphics/gui/friendlist/mailbox.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5kqea0oktlnt"
+path="res://.godot/imported/mailbox.png-52bc8231d216d644129ba7bae1150702.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/mailbox.png"
+dest_files=["res://.godot/imported/mailbox.png-52bc8231d216d644129ba7bae1150702.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/mc_copper.png b/assets/graphics/gui/friendlist/mc_copper.png
new file mode 100644
index 0000000..5890f90
Binary files /dev/null and b/assets/graphics/gui/friendlist/mc_copper.png differ
diff --git a/assets/graphics/gui/friendlist/mc_copper.png.import b/assets/graphics/gui/friendlist/mc_copper.png.import
new file mode 100644
index 0000000..d900bc7
--- /dev/null
+++ b/assets/graphics/gui/friendlist/mc_copper.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cqjx2m0fb8a4f"
+path="res://.godot/imported/mc_copper.png-aaddfa49f79595034d34f6195935eae8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/mc_copper.png"
+dest_files=["res://.godot/imported/mc_copper.png-aaddfa49f79595034d34f6195935eae8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/notif.png b/assets/graphics/gui/friendlist/notif.png
new file mode 100644
index 0000000..24c70a7
Binary files /dev/null and b/assets/graphics/gui/friendlist/notif.png differ
diff --git a/assets/graphics/gui/friendlist/notif.png.import b/assets/graphics/gui/friendlist/notif.png.import
new file mode 100644
index 0000000..3c71b61
--- /dev/null
+++ b/assets/graphics/gui/friendlist/notif.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://br1fbfp7gpn47"
+path="res://.godot/imported/notif.png-5fbf5432d47f4e7023bcb2ca428f28a8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/notif.png"
+dest_files=["res://.godot/imported/notif.png-5fbf5432d47f4e7023bcb2ca428f28a8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/option.png b/assets/graphics/gui/friendlist/option.png
new file mode 100644
index 0000000..1b0f101
Binary files /dev/null and b/assets/graphics/gui/friendlist/option.png differ
diff --git a/assets/graphics/gui/friendlist/option.png.import b/assets/graphics/gui/friendlist/option.png.import
new file mode 100644
index 0000000..65e4596
--- /dev/null
+++ b/assets/graphics/gui/friendlist/option.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxkwdwcr7ux4p"
+path="res://.godot/imported/option.png-cdfbff37234d0715d015e36cab52c351.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/option.png"
+dest_files=["res://.godot/imported/option.png-cdfbff37234d0715d015e36cab52c351.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/rank.png b/assets/graphics/gui/friendlist/rank.png
new file mode 100644
index 0000000..07e9290
Binary files /dev/null and b/assets/graphics/gui/friendlist/rank.png differ
diff --git a/assets/graphics/gui/friendlist/rank.png.import b/assets/graphics/gui/friendlist/rank.png.import
new file mode 100644
index 0000000..22811d1
--- /dev/null
+++ b/assets/graphics/gui/friendlist/rank.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2so4nof8fyq7"
+path="res://.godot/imported/rank.png-688e02cc26e3d0af7e520bdfa0a59015.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/rank.png"
+dest_files=["res://.godot/imported/rank.png-688e02cc26e3d0af7e520bdfa0a59015.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/scroll_fill.png b/assets/graphics/gui/friendlist/scroll_fill.png
new file mode 100644
index 0000000..feb9635
Binary files /dev/null and b/assets/graphics/gui/friendlist/scroll_fill.png differ
diff --git a/assets/graphics/gui/friendlist/scroll_fill.png.import b/assets/graphics/gui/friendlist/scroll_fill.png.import
new file mode 100644
index 0000000..4aeb679
--- /dev/null
+++ b/assets/graphics/gui/friendlist/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cm1n8iqdq8saj"
+path="res://.godot/imported/scroll_fill.png-6e2e9e95642961f7397aa4eea6d556df.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-6e2e9e95642961f7397aa4eea6d556df.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/scroll_slot.png b/assets/graphics/gui/friendlist/scroll_slot.png
new file mode 100644
index 0000000..902e2d9
Binary files /dev/null and b/assets/graphics/gui/friendlist/scroll_slot.png differ
diff --git a/assets/graphics/gui/friendlist/scroll_slot.png.import b/assets/graphics/gui/friendlist/scroll_slot.png.import
new file mode 100644
index 0000000..1f35c69
--- /dev/null
+++ b/assets/graphics/gui/friendlist/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3v2vmvk1qm1g"
+path="res://.godot/imported/scroll_slot.png-a8c25e3c9970d65f5658fa67649f3f29.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-a8c25e3c9970d65f5658fa67649f3f29.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/uid_search_button.png b/assets/graphics/gui/friendlist/uid_search_button.png
new file mode 100644
index 0000000..e6e1b82
Binary files /dev/null and b/assets/graphics/gui/friendlist/uid_search_button.png differ
diff --git a/assets/graphics/gui/friendlist/uid_search_button.png.import b/assets/graphics/gui/friendlist/uid_search_button.png.import
new file mode 100644
index 0000000..2ecd34f
--- /dev/null
+++ b/assets/graphics/gui/friendlist/uid_search_button.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://coc7o8v4ebnb7"
+path="res://.godot/imported/uid_search_button.png-f88d6a47cdee7a0d35b31429f9b41c39.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/uid_search_button.png"
+dest_files=["res://.godot/imported/uid_search_button.png-f88d6a47cdee7a0d35b31429f9b41c39.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/friendlist/uid_search_slot.png b/assets/graphics/gui/friendlist/uid_search_slot.png
new file mode 100644
index 0000000..6a792a7
Binary files /dev/null and b/assets/graphics/gui/friendlist/uid_search_slot.png differ
diff --git a/assets/graphics/gui/friendlist/uid_search_slot.png.import b/assets/graphics/gui/friendlist/uid_search_slot.png.import
new file mode 100644
index 0000000..ac338f8
--- /dev/null
+++ b/assets/graphics/gui/friendlist/uid_search_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://k6q4w4hxef8i"
+path="res://.godot/imported/uid_search_slot.png-6e4926bb46b8e35bd56c0b8b2628716e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/friendlist/uid_search_slot.png"
+dest_files=["res://.godot/imported/uid_search_slot.png-6e4926bb46b8e35bd56c0b8b2628716e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/SSR.png b/assets/graphics/gui/inventory/SSR.png
new file mode 100644
index 0000000..2d779ee
Binary files /dev/null and b/assets/graphics/gui/inventory/SSR.png differ
diff --git a/assets/graphics/gui/inventory/SSR.png.import b/assets/graphics/gui/inventory/SSR.png.import
new file mode 100644
index 0000000..49f7b89
--- /dev/null
+++ b/assets/graphics/gui/inventory/SSR.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://owqin4q4m38b"
+path="res://.godot/imported/SSR.png-c0a26c0fc0a8be75180ae5a4aa605c8d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/SSR.png"
+dest_files=["res://.godot/imported/SSR.png-c0a26c0fc0a8be75180ae5a4aa605c8d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/back.png b/assets/graphics/gui/inventory/back.png
new file mode 100644
index 0000000..e230871
Binary files /dev/null and b/assets/graphics/gui/inventory/back.png differ
diff --git a/assets/graphics/gui/inventory/back.png.import b/assets/graphics/gui/inventory/back.png.import
new file mode 100644
index 0000000..2f7b5c5
--- /dev/null
+++ b/assets/graphics/gui/inventory/back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xxtqkfmh7vo"
+path="res://.godot/imported/back.png-af0daa543ca45e576a36833e4e72eaf9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/back.png"
+dest_files=["res://.godot/imported/back.png-af0daa543ca45e576a36833e4e72eaf9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/banner1.png b/assets/graphics/gui/inventory/banner1.png
new file mode 100644
index 0000000..71093f9
Binary files /dev/null and b/assets/graphics/gui/inventory/banner1.png differ
diff --git a/assets/graphics/gui/inventory/banner1.png.import b/assets/graphics/gui/inventory/banner1.png.import
new file mode 100644
index 0000000..4c12fea
--- /dev/null
+++ b/assets/graphics/gui/inventory/banner1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bhxtjdf0g2yi"
+path="res://.godot/imported/banner1.png-9b400bd9827a2d5eacfd7daa5e3a3c0c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/banner1.png"
+dest_files=["res://.godot/imported/banner1.png-9b400bd9827a2d5eacfd7daa5e3a3c0c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/banner2.png b/assets/graphics/gui/inventory/banner2.png
new file mode 100644
index 0000000..911d61f
Binary files /dev/null and b/assets/graphics/gui/inventory/banner2.png differ
diff --git a/assets/graphics/gui/inventory/banner2.png.import b/assets/graphics/gui/inventory/banner2.png.import
new file mode 100644
index 0000000..9d0e879
--- /dev/null
+++ b/assets/graphics/gui/inventory/banner2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c7kroidmvlmha"
+path="res://.godot/imported/banner2.png-a860134ddb18f75b8c0068f3cfceb9c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/banner2.png"
+dest_files=["res://.godot/imported/banner2.png-a860134ddb18f75b8c0068f3cfceb9c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/banner3.png b/assets/graphics/gui/inventory/banner3.png
new file mode 100644
index 0000000..515184d
Binary files /dev/null and b/assets/graphics/gui/inventory/banner3.png differ
diff --git a/assets/graphics/gui/inventory/banner3.png.import b/assets/graphics/gui/inventory/banner3.png.import
new file mode 100644
index 0000000..76c9ccb
--- /dev/null
+++ b/assets/graphics/gui/inventory/banner3.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1g6fwuvyd0qa"
+path="res://.godot/imported/banner3.png-1282311dd33a14da3b5ab126165777f8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/banner3.png"
+dest_files=["res://.godot/imported/banner3.png-1282311dd33a14da3b5ab126165777f8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/bg_dim.png b/assets/graphics/gui/inventory/bg_dim.png
new file mode 100644
index 0000000..b888417
Binary files /dev/null and b/assets/graphics/gui/inventory/bg_dim.png differ
diff --git a/assets/graphics/gui/inventory/bg_dim.png.import b/assets/graphics/gui/inventory/bg_dim.png.import
new file mode 100644
index 0000000..5970c73
--- /dev/null
+++ b/assets/graphics/gui/inventory/bg_dim.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://x64yuna1p0iy"
+path="res://.godot/imported/bg_dim.png-76d1cabd5a5b51c7c6395a11844d4407.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/bg_dim.png"
+dest_files=["res://.godot/imported/bg_dim.png-76d1cabd5a5b51c7c6395a11844d4407.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/change_left.png b/assets/graphics/gui/inventory/change_left.png
new file mode 100644
index 0000000..0ba10cc
Binary files /dev/null and b/assets/graphics/gui/inventory/change_left.png differ
diff --git a/assets/graphics/gui/inventory/change_left.png.import b/assets/graphics/gui/inventory/change_left.png.import
new file mode 100644
index 0000000..a85f4ad
--- /dev/null
+++ b/assets/graphics/gui/inventory/change_left.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dsw3ehml13hjp"
+path="res://.godot/imported/change_left.png-383cbda789b9db3aea00df8fd37e9b0e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/change_left.png"
+dest_files=["res://.godot/imported/change_left.png-383cbda789b9db3aea00df8fd37e9b0e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/change_right.png b/assets/graphics/gui/inventory/change_right.png
new file mode 100644
index 0000000..07a3a1b
Binary files /dev/null and b/assets/graphics/gui/inventory/change_right.png differ
diff --git a/assets/graphics/gui/inventory/change_right.png.import b/assets/graphics/gui/inventory/change_right.png.import
new file mode 100644
index 0000000..664d9ec
--- /dev/null
+++ b/assets/graphics/gui/inventory/change_right.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crmi5tgujr57e"
+path="res://.godot/imported/change_right.png-c16ac2e597b44e3667d03d4307fc4c14.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/change_right.png"
+dest_files=["res://.godot/imported/change_right.png-c16ac2e597b44e3667d03d4307fc4c14.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/combine_fragment.png b/assets/graphics/gui/inventory/combine_fragment.png
new file mode 100644
index 0000000..6df508a
Binary files /dev/null and b/assets/graphics/gui/inventory/combine_fragment.png differ
diff --git a/assets/graphics/gui/inventory/combine_fragment.png.import b/assets/graphics/gui/inventory/combine_fragment.png.import
new file mode 100644
index 0000000..c849dcc
--- /dev/null
+++ b/assets/graphics/gui/inventory/combine_fragment.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wxpbilpck5r2"
+path="res://.godot/imported/combine_fragment.png-ca0e95a5b3e8285f566bf4ba34ce7480.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/combine_fragment.png"
+dest_files=["res://.godot/imported/combine_fragment.png-ca0e95a5b3e8285f566bf4ba34ce7480.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/delete.png b/assets/graphics/gui/inventory/delete.png
new file mode 100644
index 0000000..f143ad9
Binary files /dev/null and b/assets/graphics/gui/inventory/delete.png differ
diff --git a/assets/graphics/gui/inventory/delete.png.import b/assets/graphics/gui/inventory/delete.png.import
new file mode 100644
index 0000000..8ae30a0
--- /dev/null
+++ b/assets/graphics/gui/inventory/delete.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://df7mayrjwenn"
+path="res://.godot/imported/delete.png-5d477eb5c426406e69ffc2788f7c7a6f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/delete.png"
+dest_files=["res://.godot/imported/delete.png-5d477eb5c426406e69ffc2788f7c7a6f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/diamond.png b/assets/graphics/gui/inventory/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/inventory/diamond.png differ
diff --git a/assets/graphics/gui/inventory/diamond.png.import b/assets/graphics/gui/inventory/diamond.png.import
new file mode 100644
index 0000000..6b64b05
--- /dev/null
+++ b/assets/graphics/gui/inventory/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d1wqrhp7wo5rr"
+path="res://.godot/imported/diamond.png-293b20cd4284a9fef9db80f8519dd064.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-293b20cd4284a9fef9db80f8519dd064.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/drop.png b/assets/graphics/gui/inventory/drop.png
new file mode 100644
index 0000000..72c8945
Binary files /dev/null and b/assets/graphics/gui/inventory/drop.png differ
diff --git a/assets/graphics/gui/inventory/drop.png.import b/assets/graphics/gui/inventory/drop.png.import
new file mode 100644
index 0000000..b427c5c
--- /dev/null
+++ b/assets/graphics/gui/inventory/drop.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bisxyx0p40ivd"
+path="res://.godot/imported/drop.png-80e9752f865d7f451aa7077bf42f995e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/drop.png"
+dest_files=["res://.godot/imported/drop.png-80e9752f865d7f451aa7077bf42f995e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/emot_a0.png b/assets/graphics/gui/inventory/emot_a0.png
new file mode 100644
index 0000000..65c6900
Binary files /dev/null and b/assets/graphics/gui/inventory/emot_a0.png differ
diff --git a/assets/graphics/gui/inventory/emot_a0.png.import b/assets/graphics/gui/inventory/emot_a0.png.import
new file mode 100644
index 0000000..46b16e1
--- /dev/null
+++ b/assets/graphics/gui/inventory/emot_a0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmbn2afsomwe5"
+path="res://.godot/imported/emot_a0.png-69b75ee0b3275c0edfc18d01210cb64d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/emot_a0.png"
+dest_files=["res://.godot/imported/emot_a0.png-69b75ee0b3275c0edfc18d01210cb64d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/emot_a1.png b/assets/graphics/gui/inventory/emot_a1.png
new file mode 100644
index 0000000..74f5187
Binary files /dev/null and b/assets/graphics/gui/inventory/emot_a1.png differ
diff --git a/assets/graphics/gui/inventory/emot_a1.png.import b/assets/graphics/gui/inventory/emot_a1.png.import
new file mode 100644
index 0000000..fd2c6c4
--- /dev/null
+++ b/assets/graphics/gui/inventory/emot_a1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnwdt2g1d6wbo"
+path="res://.godot/imported/emot_a1.png-d756011ff9ec5ad78e4a053bffde052b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/emot_a1.png"
+dest_files=["res://.godot/imported/emot_a1.png-d756011ff9ec5ad78e4a053bffde052b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/emot_b0.png b/assets/graphics/gui/inventory/emot_b0.png
new file mode 100644
index 0000000..39eca13
Binary files /dev/null and b/assets/graphics/gui/inventory/emot_b0.png differ
diff --git a/assets/graphics/gui/inventory/emot_b0.png.import b/assets/graphics/gui/inventory/emot_b0.png.import
new file mode 100644
index 0000000..ffb99bc
--- /dev/null
+++ b/assets/graphics/gui/inventory/emot_b0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://sk3o6htudqpj"
+path="res://.godot/imported/emot_b0.png-c5fc96e475283731b8c02fa503307742.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/emot_b0.png"
+dest_files=["res://.godot/imported/emot_b0.png-c5fc96e475283731b8c02fa503307742.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/emot_b1.png b/assets/graphics/gui/inventory/emot_b1.png
new file mode 100644
index 0000000..a60fea0
Binary files /dev/null and b/assets/graphics/gui/inventory/emot_b1.png differ
diff --git a/assets/graphics/gui/inventory/emot_b1.png.import b/assets/graphics/gui/inventory/emot_b1.png.import
new file mode 100644
index 0000000..566c18f
--- /dev/null
+++ b/assets/graphics/gui/inventory/emot_b1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fcqdp5bqyfhk"
+path="res://.godot/imported/emot_b1.png-7edadabe7364c2daccf05525d81af9a8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/emot_b1.png"
+dest_files=["res://.godot/imported/emot_b1.png-7edadabe7364c2daccf05525d81af9a8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/emot_c0.png b/assets/graphics/gui/inventory/emot_c0.png
new file mode 100644
index 0000000..235b33e
Binary files /dev/null and b/assets/graphics/gui/inventory/emot_c0.png differ
diff --git a/assets/graphics/gui/inventory/emot_c0.png.import b/assets/graphics/gui/inventory/emot_c0.png.import
new file mode 100644
index 0000000..96ec79e
--- /dev/null
+++ b/assets/graphics/gui/inventory/emot_c0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cim6whqrxlwc0"
+path="res://.godot/imported/emot_c0.png-4103e3d47193feec760c395ad85204be.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/emot_c0.png"
+dest_files=["res://.godot/imported/emot_c0.png-4103e3d47193feec760c395ad85204be.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/emot_c1.png b/assets/graphics/gui/inventory/emot_c1.png
new file mode 100644
index 0000000..e51d78c
Binary files /dev/null and b/assets/graphics/gui/inventory/emot_c1.png differ
diff --git a/assets/graphics/gui/inventory/emot_c1.png.import b/assets/graphics/gui/inventory/emot_c1.png.import
new file mode 100644
index 0000000..583529c
--- /dev/null
+++ b/assets/graphics/gui/inventory/emot_c1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://daoni3mfn1ojx"
+path="res://.godot/imported/emot_c1.png-a11837eff30fc65d67fdeb164d4c6f82.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/emot_c1.png"
+dest_files=["res://.godot/imported/emot_c1.png-a11837eff30fc65d67fdeb164d4c6f82.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/equip.png b/assets/graphics/gui/inventory/equip.png
new file mode 100644
index 0000000..076e39e
Binary files /dev/null and b/assets/graphics/gui/inventory/equip.png differ
diff --git a/assets/graphics/gui/inventory/equip.png.import b/assets/graphics/gui/inventory/equip.png.import
new file mode 100644
index 0000000..60049c0
--- /dev/null
+++ b/assets/graphics/gui/inventory/equip.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nuklwd1tdih8"
+path="res://.godot/imported/equip.png-d15fa16afd223756236dccc2b75824a4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/equip.png"
+dest_files=["res://.godot/imported/equip.png-d15fa16afd223756236dccc2b75824a4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/filter_1.png b/assets/graphics/gui/inventory/filter_1.png
new file mode 100644
index 0000000..cdac34d
Binary files /dev/null and b/assets/graphics/gui/inventory/filter_1.png differ
diff --git a/assets/graphics/gui/inventory/filter_1.png.import b/assets/graphics/gui/inventory/filter_1.png.import
new file mode 100644
index 0000000..5426f65
--- /dev/null
+++ b/assets/graphics/gui/inventory/filter_1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ck8juy8gmhbot"
+path="res://.godot/imported/filter_1.png-daf323e7d31a3533c0bb06bd8b8e5bfc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/filter_1.png"
+dest_files=["res://.godot/imported/filter_1.png-daf323e7d31a3533c0bb06bd8b8e5bfc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/gold.png b/assets/graphics/gui/inventory/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/inventory/gold.png differ
diff --git a/assets/graphics/gui/inventory/gold.png.import b/assets/graphics/gui/inventory/gold.png.import
new file mode 100644
index 0000000..495564d
--- /dev/null
+++ b/assets/graphics/gui/inventory/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuew82bf6qisc"
+path="res://.godot/imported/gold.png-da44d1de003c3a667d87f47ed87874c7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/gold.png"
+dest_files=["res://.godot/imported/gold.png-da44d1de003c3a667d87f47ed87874c7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/help.png b/assets/graphics/gui/inventory/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/inventory/help.png differ
diff --git a/assets/graphics/gui/inventory/help.png.import b/assets/graphics/gui/inventory/help.png.import
new file mode 100644
index 0000000..334151a
--- /dev/null
+++ b/assets/graphics/gui/inventory/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1qg5r6ruiaws"
+path="res://.godot/imported/help.png-0debd965a9816852be215aac1399c936.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/help.png"
+dest_files=["res://.godot/imported/help.png-0debd965a9816852be215aac1399c936.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/inventory.png b/assets/graphics/gui/inventory/inventory.png
new file mode 100644
index 0000000..5e2ec2b
Binary files /dev/null and b/assets/graphics/gui/inventory/inventory.png differ
diff --git a/assets/graphics/gui/inventory/inventory.png.import b/assets/graphics/gui/inventory/inventory.png.import
new file mode 100644
index 0000000..1e2416a
--- /dev/null
+++ b/assets/graphics/gui/inventory/inventory.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ci2h55sl1meh0"
+path="res://.godot/imported/inventory.png-6d3a7ea7ed80e30744dfc16fa65a834b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/inventory.png"
+dest_files=["res://.godot/imported/inventory.png-6d3a7ea7ed80e30744dfc16fa65a834b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/item_equiped.png b/assets/graphics/gui/inventory/item_equiped.png
new file mode 100644
index 0000000..5dd9f11
Binary files /dev/null and b/assets/graphics/gui/inventory/item_equiped.png differ
diff --git a/assets/graphics/gui/inventory/item_equiped.png.import b/assets/graphics/gui/inventory/item_equiped.png.import
new file mode 100644
index 0000000..6a5c724
--- /dev/null
+++ b/assets/graphics/gui/inventory/item_equiped.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b855pr4o06eva"
+path="res://.godot/imported/item_equiped.png-eba4e7447bab3d87771bebf88d7e94c9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/item_equiped.png"
+dest_files=["res://.godot/imported/item_equiped.png-eba4e7447bab3d87771bebf88d7e94c9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/item_equipmentpreview.png b/assets/graphics/gui/inventory/item_equipmentpreview.png
new file mode 100644
index 0000000..4ef5dd2
Binary files /dev/null and b/assets/graphics/gui/inventory/item_equipmentpreview.png differ
diff --git a/assets/graphics/gui/inventory/item_equipmentpreview.png.import b/assets/graphics/gui/inventory/item_equipmentpreview.png.import
new file mode 100644
index 0000000..df505ad
--- /dev/null
+++ b/assets/graphics/gui/inventory/item_equipmentpreview.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://o1tgv6v533ub"
+path="res://.godot/imported/item_equipmentpreview.png-aae5c4c4b6c46f824263eddce912cf37.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/item_equipmentpreview.png"
+dest_files=["res://.godot/imported/item_equipmentpreview.png-aae5c4c4b6c46f824263eddce912cf37.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/item_inventory_slot0.png b/assets/graphics/gui/inventory/item_inventory_slot0.png
new file mode 100644
index 0000000..d2d5bb9
Binary files /dev/null and b/assets/graphics/gui/inventory/item_inventory_slot0.png differ
diff --git a/assets/graphics/gui/inventory/item_inventory_slot0.png.import b/assets/graphics/gui/inventory/item_inventory_slot0.png.import
new file mode 100644
index 0000000..d938182
--- /dev/null
+++ b/assets/graphics/gui/inventory/item_inventory_slot0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2q8novvvkm10"
+path="res://.godot/imported/item_inventory_slot0.png-496992fe7be8b04bbd1fdd3bcb6af7bb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/item_inventory_slot0.png"
+dest_files=["res://.godot/imported/item_inventory_slot0.png-496992fe7be8b04bbd1fdd3bcb6af7bb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/item_inventory_slot1.png b/assets/graphics/gui/inventory/item_inventory_slot1.png
new file mode 100644
index 0000000..87f8685
Binary files /dev/null and b/assets/graphics/gui/inventory/item_inventory_slot1.png differ
diff --git a/assets/graphics/gui/inventory/item_inventory_slot1.png.import b/assets/graphics/gui/inventory/item_inventory_slot1.png.import
new file mode 100644
index 0000000..f61d559
--- /dev/null
+++ b/assets/graphics/gui/inventory/item_inventory_slot1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuq4bxwp0xda3"
+path="res://.godot/imported/item_inventory_slot1.png-26b5dd81c662f0187fc8feeb2cc79651.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/item_inventory_slot1.png"
+dest_files=["res://.godot/imported/item_inventory_slot1.png-26b5dd81c662f0187fc8feeb2cc79651.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/preset_1.png b/assets/graphics/gui/inventory/preset_1.png
new file mode 100644
index 0000000..c63ba50
Binary files /dev/null and b/assets/graphics/gui/inventory/preset_1.png differ
diff --git a/assets/graphics/gui/inventory/preset_1.png.import b/assets/graphics/gui/inventory/preset_1.png.import
new file mode 100644
index 0000000..db1a91d
--- /dev/null
+++ b/assets/graphics/gui/inventory/preset_1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bivxii7lr22h0"
+path="res://.godot/imported/preset_1.png-157c02e54fc43f30a45ca924736627c3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/preset_1.png"
+dest_files=["res://.godot/imported/preset_1.png-157c02e54fc43f30a45ca924736627c3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/resource_slot.png b/assets/graphics/gui/inventory/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/inventory/resource_slot.png differ
diff --git a/assets/graphics/gui/inventory/resource_slot.png.import b/assets/graphics/gui/inventory/resource_slot.png.import
new file mode 100644
index 0000000..8335ab7
--- /dev/null
+++ b/assets/graphics/gui/inventory/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dapfxuteohqy7"
+path="res://.godot/imported/resource_slot.png-03621f0daee84922b4a2c3136e7aae46.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-03621f0daee84922b4a2c3136e7aae46.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/rotate.png b/assets/graphics/gui/inventory/rotate.png
new file mode 100644
index 0000000..879adfd
Binary files /dev/null and b/assets/graphics/gui/inventory/rotate.png differ
diff --git a/assets/graphics/gui/inventory/rotate.png.import b/assets/graphics/gui/inventory/rotate.png.import
new file mode 100644
index 0000000..2ff6df6
--- /dev/null
+++ b/assets/graphics/gui/inventory/rotate.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://di8dn5wixtarq"
+path="res://.godot/imported/rotate.png-2888c4e822c67cd4535a5ab8e97622e2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/rotate.png"
+dest_files=["res://.godot/imported/rotate.png-2888c4e822c67cd4535a5ab8e97622e2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_all0.png b/assets/graphics/gui/inventory/short_all0.png
new file mode 100644
index 0000000..f1ee051
Binary files /dev/null and b/assets/graphics/gui/inventory/short_all0.png differ
diff --git a/assets/graphics/gui/inventory/short_all0.png.import b/assets/graphics/gui/inventory/short_all0.png.import
new file mode 100644
index 0000000..db41dae
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_all0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxm8o4bf3udhu"
+path="res://.godot/imported/short_all0.png-2173d52f1d8c5e3f51873ffcb86b6a26.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_all0.png"
+dest_files=["res://.godot/imported/short_all0.png-2173d52f1d8c5e3f51873ffcb86b6a26.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_all1.png b/assets/graphics/gui/inventory/short_all1.png
new file mode 100644
index 0000000..6628224
Binary files /dev/null and b/assets/graphics/gui/inventory/short_all1.png differ
diff --git a/assets/graphics/gui/inventory/short_all1.png.import b/assets/graphics/gui/inventory/short_all1.png.import
new file mode 100644
index 0000000..c1202d3
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_all1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dqm2u8e2m6u0q"
+path="res://.godot/imported/short_all1.png-b09fdd3b2c89e54428a9d2a35d98fbf6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_all1.png"
+dest_files=["res://.godot/imported/short_all1.png-b09fdd3b2c89e54428a9d2a35d98fbf6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_fragment0.png b/assets/graphics/gui/inventory/short_fragment0.png
new file mode 100644
index 0000000..0e30ff8
Binary files /dev/null and b/assets/graphics/gui/inventory/short_fragment0.png differ
diff --git a/assets/graphics/gui/inventory/short_fragment0.png.import b/assets/graphics/gui/inventory/short_fragment0.png.import
new file mode 100644
index 0000000..dbc8a0a
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_fragment0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://duxtljxtrgfw0"
+path="res://.godot/imported/short_fragment0.png-a43cb8154366202650de9436b3c781aa.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_fragment0.png"
+dest_files=["res://.godot/imported/short_fragment0.png-a43cb8154366202650de9436b3c781aa.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_fragment1.png b/assets/graphics/gui/inventory/short_fragment1.png
new file mode 100644
index 0000000..7a00c66
Binary files /dev/null and b/assets/graphics/gui/inventory/short_fragment1.png differ
diff --git a/assets/graphics/gui/inventory/short_fragment1.png.import b/assets/graphics/gui/inventory/short_fragment1.png.import
new file mode 100644
index 0000000..6e55897
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_fragment1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2qkjxhf5ksfn"
+path="res://.godot/imported/short_fragment1.png-e3aa8fb439a3dbf7181cfb456776759d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_fragment1.png"
+dest_files=["res://.godot/imported/short_fragment1.png-e3aa8fb439a3dbf7181cfb456776759d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_glove0.png b/assets/graphics/gui/inventory/short_glove0.png
new file mode 100644
index 0000000..c524353
Binary files /dev/null and b/assets/graphics/gui/inventory/short_glove0.png differ
diff --git a/assets/graphics/gui/inventory/short_glove0.png.import b/assets/graphics/gui/inventory/short_glove0.png.import
new file mode 100644
index 0000000..2249cd5
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_glove0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blk4ya61xfiuj"
+path="res://.godot/imported/short_glove0.png-ef5d3948e2d859041a73fcfee1e0382c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_glove0.png"
+dest_files=["res://.godot/imported/short_glove0.png-ef5d3948e2d859041a73fcfee1e0382c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_glove1.png b/assets/graphics/gui/inventory/short_glove1.png
new file mode 100644
index 0000000..285ac4b
Binary files /dev/null and b/assets/graphics/gui/inventory/short_glove1.png differ
diff --git a/assets/graphics/gui/inventory/short_glove1.png.import b/assets/graphics/gui/inventory/short_glove1.png.import
new file mode 100644
index 0000000..6493a22
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_glove1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://p1r0lvtajpv4"
+path="res://.godot/imported/short_glove1.png-598b2340ed0d61fe1ec322bdeee5bb36.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_glove1.png"
+dest_files=["res://.godot/imported/short_glove1.png-598b2340ed0d61fe1ec322bdeee5bb36.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_hat0.png b/assets/graphics/gui/inventory/short_hat0.png
new file mode 100644
index 0000000..5ecf4e7
Binary files /dev/null and b/assets/graphics/gui/inventory/short_hat0.png differ
diff --git a/assets/graphics/gui/inventory/short_hat0.png.import b/assets/graphics/gui/inventory/short_hat0.png.import
new file mode 100644
index 0000000..5527b89
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_hat0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bd6ogw045es4w"
+path="res://.godot/imported/short_hat0.png-60dbbfbfa049627a54c39da5ef050ec6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_hat0.png"
+dest_files=["res://.godot/imported/short_hat0.png-60dbbfbfa049627a54c39da5ef050ec6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_hat1.png b/assets/graphics/gui/inventory/short_hat1.png
new file mode 100644
index 0000000..2e366f8
Binary files /dev/null and b/assets/graphics/gui/inventory/short_hat1.png differ
diff --git a/assets/graphics/gui/inventory/short_hat1.png.import b/assets/graphics/gui/inventory/short_hat1.png.import
new file mode 100644
index 0000000..6497ea1
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_hat1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ra7mfqnyg2dw"
+path="res://.godot/imported/short_hat1.png-4a53c93b49930f0fa80993b6fe2a1883.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_hat1.png"
+dest_files=["res://.godot/imported/short_hat1.png-4a53c93b49930f0fa80993b6fe2a1883.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_outfit0.png b/assets/graphics/gui/inventory/short_outfit0.png
new file mode 100644
index 0000000..d959126
Binary files /dev/null and b/assets/graphics/gui/inventory/short_outfit0.png differ
diff --git a/assets/graphics/gui/inventory/short_outfit0.png.import b/assets/graphics/gui/inventory/short_outfit0.png.import
new file mode 100644
index 0000000..ad84c25
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_outfit0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rb6kb4jfjc7l"
+path="res://.godot/imported/short_outfit0.png-99cf05361ffe488a82e2245b1ee5c792.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_outfit0.png"
+dest_files=["res://.godot/imported/short_outfit0.png-99cf05361ffe488a82e2245b1ee5c792.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_outfit1.png b/assets/graphics/gui/inventory/short_outfit1.png
new file mode 100644
index 0000000..cbbebcd
Binary files /dev/null and b/assets/graphics/gui/inventory/short_outfit1.png differ
diff --git a/assets/graphics/gui/inventory/short_outfit1.png.import b/assets/graphics/gui/inventory/short_outfit1.png.import
new file mode 100644
index 0000000..03a3d75
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_outfit1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dssem6vfgasd6"
+path="res://.godot/imported/short_outfit1.png-f48e8ef3ea576ef4a171abe8194c45eb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_outfit1.png"
+dest_files=["res://.godot/imported/short_outfit1.png-f48e8ef3ea576ef4a171abe8194c45eb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_slot.png b/assets/graphics/gui/inventory/short_slot.png
new file mode 100644
index 0000000..3b69e84
Binary files /dev/null and b/assets/graphics/gui/inventory/short_slot.png differ
diff --git a/assets/graphics/gui/inventory/short_slot.png.import b/assets/graphics/gui/inventory/short_slot.png.import
new file mode 100644
index 0000000..a7f5e69
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bj0mfkuuemj8g"
+path="res://.godot/imported/short_slot.png-2ff964f4fba2b618f4c3aa066cd359b4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_slot.png"
+dest_files=["res://.godot/imported/short_slot.png-2ff964f4fba2b618f4c3aa066cd359b4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_slot1.png b/assets/graphics/gui/inventory/short_slot1.png
new file mode 100644
index 0000000..25f8973
Binary files /dev/null and b/assets/graphics/gui/inventory/short_slot1.png differ
diff --git a/assets/graphics/gui/inventory/short_slot1.png.import b/assets/graphics/gui/inventory/short_slot1.png.import
new file mode 100644
index 0000000..175047b
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_slot1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4d7qv4745oq0"
+path="res://.godot/imported/short_slot1.png-d639f51ac193d63c9255c660ea953a1e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_slot1.png"
+dest_files=["res://.godot/imported/short_slot1.png-d639f51ac193d63c9255c660ea953a1e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_slot2.png b/assets/graphics/gui/inventory/short_slot2.png
new file mode 100644
index 0000000..aff6749
Binary files /dev/null and b/assets/graphics/gui/inventory/short_slot2.png differ
diff --git a/assets/graphics/gui/inventory/short_slot2.png.import b/assets/graphics/gui/inventory/short_slot2.png.import
new file mode 100644
index 0000000..b91814d
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_slot2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5b8ul2c51wyv"
+path="res://.godot/imported/short_slot2.png-d46c8cff60e9e62fb7dc16ddea7aba59.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_slot2.png"
+dest_files=["res://.godot/imported/short_slot2.png-d46c8cff60e9e62fb7dc16ddea7aba59.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_slot3.png b/assets/graphics/gui/inventory/short_slot3.png
new file mode 100644
index 0000000..e5f2ce9
Binary files /dev/null and b/assets/graphics/gui/inventory/short_slot3.png differ
diff --git a/assets/graphics/gui/inventory/short_slot3.png.import b/assets/graphics/gui/inventory/short_slot3.png.import
new file mode 100644
index 0000000..e71d30b
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_slot3.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b2d717f23rayo"
+path="res://.godot/imported/short_slot3.png-da045e9f5a0bd206220d1b115eead889.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_slot3.png"
+dest_files=["res://.godot/imported/short_slot3.png-da045e9f5a0bd206220d1b115eead889.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_slot4.png b/assets/graphics/gui/inventory/short_slot4.png
new file mode 100644
index 0000000..a83df99
Binary files /dev/null and b/assets/graphics/gui/inventory/short_slot4.png differ
diff --git a/assets/graphics/gui/inventory/short_slot4.png.import b/assets/graphics/gui/inventory/short_slot4.png.import
new file mode 100644
index 0000000..03d49bb
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_slot4.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cbbs8b817at4k"
+path="res://.godot/imported/short_slot4.png-1ecb4c62428d553e782a909b7d46bc9f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_slot4.png"
+dest_files=["res://.godot/imported/short_slot4.png-1ecb4c62428d553e782a909b7d46bc9f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/inventory/short_slot5.png b/assets/graphics/gui/inventory/short_slot5.png
new file mode 100644
index 0000000..4165bbc
Binary files /dev/null and b/assets/graphics/gui/inventory/short_slot5.png differ
diff --git a/assets/graphics/gui/inventory/short_slot5.png.import b/assets/graphics/gui/inventory/short_slot5.png.import
new file mode 100644
index 0000000..857d454
--- /dev/null
+++ b/assets/graphics/gui/inventory/short_slot5.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuh4rjx1ek782"
+path="res://.godot/imported/short_slot5.png-48ac6df0d6ddd4702641197d4e1e4c93.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/inventory/short_slot5.png"
+dest_files=["res://.godot/imported/short_slot5.png-48ac6df0d6ddd4702641197d4e1e4c93.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/Host.png b/assets/graphics/gui/lobby/Host.png
new file mode 100644
index 0000000..e67ed79
Binary files /dev/null and b/assets/graphics/gui/lobby/Host.png differ
diff --git a/assets/graphics/gui/lobby/Host.png.import b/assets/graphics/gui/lobby/Host.png.import
new file mode 100644
index 0000000..bf8bbec
--- /dev/null
+++ b/assets/graphics/gui/lobby/Host.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://oee14j7dyc57"
+path="res://.godot/imported/Host.png-f083b7e8d172053ac737a3b5502ddaeb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/Host.png"
+dest_files=["res://.godot/imported/Host.png-f083b7e8d172053ac737a3b5502ddaeb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/arena_selection.png b/assets/graphics/gui/lobby/arena_selection.png
new file mode 100644
index 0000000..5f5abd3
Binary files /dev/null and b/assets/graphics/gui/lobby/arena_selection.png differ
diff --git a/assets/graphics/gui/lobby/arena_selection.png.import b/assets/graphics/gui/lobby/arena_selection.png.import
new file mode 100644
index 0000000..e681bc3
--- /dev/null
+++ b/assets/graphics/gui/lobby/arena_selection.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8jjxpsrx6vav"
+path="res://.godot/imported/arena_selection.png-98c08f070452bac3393f0798241bde74.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/arena_selection.png"
+dest_files=["res://.godot/imported/arena_selection.png-98c08f070452bac3393f0798241bde74.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/back.png b/assets/graphics/gui/lobby/back.png
new file mode 100644
index 0000000..ca19218
Binary files /dev/null and b/assets/graphics/gui/lobby/back.png differ
diff --git a/assets/graphics/gui/lobby/back.png.import b/assets/graphics/gui/lobby/back.png.import
new file mode 100644
index 0000000..b71a789
--- /dev/null
+++ b/assets/graphics/gui/lobby/back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rnnbs0bnu8av"
+path="res://.godot/imported/back.png-9af22f9d7c9a9f872e39e8989cab61ad.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/back.png"
+dest_files=["res://.godot/imported/back.png-9af22f9d7c9a9f872e39e8989cab61ad.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/button_ready0.png b/assets/graphics/gui/lobby/button_ready0.png
new file mode 100644
index 0000000..f754d05
Binary files /dev/null and b/assets/graphics/gui/lobby/button_ready0.png differ
diff --git a/assets/graphics/gui/lobby/button_ready0.png.import b/assets/graphics/gui/lobby/button_ready0.png.import
new file mode 100644
index 0000000..e060a77
--- /dev/null
+++ b/assets/graphics/gui/lobby/button_ready0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b7syqgvosrxrr"
+path="res://.godot/imported/button_ready0.png-5a2d581d1abf4fed41a051bae737b15a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/button_ready0.png"
+dest_files=["res://.godot/imported/button_ready0.png-5a2d581d1abf4fed41a051bae737b15a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/button_ready1.png b/assets/graphics/gui/lobby/button_ready1.png
new file mode 100644
index 0000000..c776158
Binary files /dev/null and b/assets/graphics/gui/lobby/button_ready1.png differ
diff --git a/assets/graphics/gui/lobby/button_ready1.png.import b/assets/graphics/gui/lobby/button_ready1.png.import
new file mode 100644
index 0000000..b77e258
--- /dev/null
+++ b/assets/graphics/gui/lobby/button_ready1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cnmlygm0pihk8"
+path="res://.godot/imported/button_ready1.png-304ee4fbcda8ef92c951c7085e351bc6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/button_ready1.png"
+dest_files=["res://.godot/imported/button_ready1.png-304ee4fbcda8ef92c951c7085e351bc6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/button_start0.png b/assets/graphics/gui/lobby/button_start0.png
new file mode 100644
index 0000000..35b2d94
Binary files /dev/null and b/assets/graphics/gui/lobby/button_start0.png differ
diff --git a/assets/graphics/gui/lobby/button_start0.png.import b/assets/graphics/gui/lobby/button_start0.png.import
new file mode 100644
index 0000000..2416838
--- /dev/null
+++ b/assets/graphics/gui/lobby/button_start0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2nkci3g4m77x"
+path="res://.godot/imported/button_start0.png-7c30f4bde9442d5669fb193cd860fa5a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/button_start0.png"
+dest_files=["res://.godot/imported/button_start0.png-7c30f4bde9442d5669fb193cd860fa5a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/button_start1.png b/assets/graphics/gui/lobby/button_start1.png
new file mode 100644
index 0000000..2f4b950
Binary files /dev/null and b/assets/graphics/gui/lobby/button_start1.png differ
diff --git a/assets/graphics/gui/lobby/button_start1.png.import b/assets/graphics/gui/lobby/button_start1.png.import
new file mode 100644
index 0000000..75b4bd9
--- /dev/null
+++ b/assets/graphics/gui/lobby/button_start1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://deql5jrpemj0s"
+path="res://.godot/imported/button_start1.png-fb3574503f83f3eacf17952a3f19cb80.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/button_start1.png"
+dest_files=["res://.godot/imported/button_start1.png-fb3574503f83f3eacf17952a3f19cb80.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/dailylogin.png b/assets/graphics/gui/lobby/dailylogin.png
new file mode 100644
index 0000000..f64e8fc
Binary files /dev/null and b/assets/graphics/gui/lobby/dailylogin.png differ
diff --git a/assets/graphics/gui/lobby/dailylogin.png.import b/assets/graphics/gui/lobby/dailylogin.png.import
new file mode 100644
index 0000000..2c9c3b0
--- /dev/null
+++ b/assets/graphics/gui/lobby/dailylogin.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmmajc7h7o4dg"
+path="res://.godot/imported/dailylogin.png-2fc694b02cbed6cf19ffa22fafb019cb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/dailylogin.png"
+dest_files=["res://.godot/imported/dailylogin.png-2fc694b02cbed6cf19ffa22fafb019cb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/friends.png b/assets/graphics/gui/lobby/friends.png
new file mode 100644
index 0000000..f4198e3
Binary files /dev/null and b/assets/graphics/gui/lobby/friends.png differ
diff --git a/assets/graphics/gui/lobby/friends.png.import b/assets/graphics/gui/lobby/friends.png.import
new file mode 100644
index 0000000..ce85be9
--- /dev/null
+++ b/assets/graphics/gui/lobby/friends.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dv782w5t0xlcc"
+path="res://.godot/imported/friends.png-7e958073f129794e949ecc9922e3d370.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/friends.png"
+dest_files=["res://.godot/imported/friends.png-7e958073f129794e949ecc9922e3d370.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/gold.png b/assets/graphics/gui/lobby/gold.png
new file mode 100644
index 0000000..7be546a
Binary files /dev/null and b/assets/graphics/gui/lobby/gold.png differ
diff --git a/assets/graphics/gui/lobby/gold.png.import b/assets/graphics/gui/lobby/gold.png.import
new file mode 100644
index 0000000..3ab74c9
--- /dev/null
+++ b/assets/graphics/gui/lobby/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b5pp08fke7ptd"
+path="res://.godot/imported/gold.png-257904ffc6b68176ba8f5ee59e152144.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/gold.png"
+dest_files=["res://.godot/imported/gold.png-257904ffc6b68176ba8f5ee59e152144.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/gold.svg b/assets/graphics/gui/lobby/gold.svg
new file mode 100644
index 0000000..1b4d38d
--- /dev/null
+++ b/assets/graphics/gui/lobby/gold.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/graphics/gui/lobby/gold.svg.import b/assets/graphics/gui/lobby/gold.svg.import
new file mode 100644
index 0000000..150ef58
--- /dev/null
+++ b/assets/graphics/gui/lobby/gold.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nqtdykqioj5e"
+path="res://.godot/imported/gold.svg-782eac04e3fdfb9d155aaca590ddea25.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/gold.svg"
+dest_files=["res://.godot/imported/gold.svg-782eac04e3fdfb9d155aaca590ddea25.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/gui/lobby/help.png b/assets/graphics/gui/lobby/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/lobby/help.png differ
diff --git a/assets/graphics/gui/lobby/help.png.import b/assets/graphics/gui/lobby/help.png.import
new file mode 100644
index 0000000..d457c1f
--- /dev/null
+++ b/assets/graphics/gui/lobby/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bd6qc1j5q6yk3"
+path="res://.godot/imported/help.png-35b2e8071e38c9af29ea2ffdc4a50679.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/help.png"
+dest_files=["res://.godot/imported/help.png-35b2e8071e38c9af29ea2ffdc4a50679.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/leaderboards.png b/assets/graphics/gui/lobby/leaderboards.png
new file mode 100644
index 0000000..bb78a63
Binary files /dev/null and b/assets/graphics/gui/lobby/leaderboards.png differ
diff --git a/assets/graphics/gui/lobby/leaderboards.png.import b/assets/graphics/gui/lobby/leaderboards.png.import
new file mode 100644
index 0000000..c919ef8
--- /dev/null
+++ b/assets/graphics/gui/lobby/leaderboards.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://jted80o4uarv"
+path="res://.godot/imported/leaderboards.png-bea1c03cd2a631d767f93887c3aee9ba.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/leaderboards.png"
+dest_files=["res://.godot/imported/leaderboards.png-bea1c03cd2a631d767f93887c3aee9ba.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/player_add.png b/assets/graphics/gui/lobby/player_add.png
new file mode 100644
index 0000000..8b79de6
Binary files /dev/null and b/assets/graphics/gui/lobby/player_add.png differ
diff --git a/assets/graphics/gui/lobby/player_add.png.import b/assets/graphics/gui/lobby/player_add.png.import
new file mode 100644
index 0000000..f4b562b
--- /dev/null
+++ b/assets/graphics/gui/lobby/player_add.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0aqqut4tx4qx"
+path="res://.godot/imported/player_add.png-896d3b174d430b7e00cd33e3749f48e6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/player_add.png"
+dest_files=["res://.godot/imported/player_add.png-896d3b174d430b7e00cd33e3749f48e6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/player_ready.png b/assets/graphics/gui/lobby/player_ready.png
new file mode 100644
index 0000000..7d63396
Binary files /dev/null and b/assets/graphics/gui/lobby/player_ready.png differ
diff --git a/assets/graphics/gui/lobby/player_ready.png.import b/assets/graphics/gui/lobby/player_ready.png.import
new file mode 100644
index 0000000..69e4a48
--- /dev/null
+++ b/assets/graphics/gui/lobby/player_ready.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dee1b812jagxk"
+path="res://.godot/imported/player_ready.png-28aa3716a040600d054493aaad20774c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/player_ready.png"
+dest_files=["res://.godot/imported/player_ready.png-28aa3716a040600d054493aaad20774c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/player_slot.png b/assets/graphics/gui/lobby/player_slot.png
new file mode 100644
index 0000000..d53a96b
Binary files /dev/null and b/assets/graphics/gui/lobby/player_slot.png differ
diff --git a/assets/graphics/gui/lobby/player_slot.png.import b/assets/graphics/gui/lobby/player_slot.png.import
new file mode 100644
index 0000000..e2356e3
--- /dev/null
+++ b/assets/graphics/gui/lobby/player_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://p4ehm1staaqr"
+path="res://.godot/imported/player_slot.png-debe8f2f9a5e8eab97414937a039507c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/player_slot.png"
+dest_files=["res://.godot/imported/player_slot.png-debe8f2f9a5e8eab97414937a039507c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/profile.png b/assets/graphics/gui/lobby/profile.png
new file mode 100644
index 0000000..09da8d0
Binary files /dev/null and b/assets/graphics/gui/lobby/profile.png differ
diff --git a/assets/graphics/gui/lobby/profile.png.import b/assets/graphics/gui/lobby/profile.png.import
new file mode 100644
index 0000000..de248c0
--- /dev/null
+++ b/assets/graphics/gui/lobby/profile.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://l03huy5c0vvy"
+path="res://.godot/imported/profile.png-7b4f67a67a235d9c14b25a744ab14807.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/profile.png"
+dest_files=["res://.godot/imported/profile.png-7b4f67a67a235d9c14b25a744ab14807.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/settings.png b/assets/graphics/gui/lobby/settings.png
new file mode 100644
index 0000000..7ff6680
Binary files /dev/null and b/assets/graphics/gui/lobby/settings.png differ
diff --git a/assets/graphics/gui/lobby/settings.png.import b/assets/graphics/gui/lobby/settings.png.import
new file mode 100644
index 0000000..32789c1
--- /dev/null
+++ b/assets/graphics/gui/lobby/settings.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bqcxrfu2jlplr"
+path="res://.godot/imported/settings.png-66cd89f16c09fc42bf5a3cc6774f1166.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/settings.png"
+dest_files=["res://.godot/imported/settings.png-66cd89f16c09fc42bf5a3cc6774f1166.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/shop.png b/assets/graphics/gui/lobby/shop.png
new file mode 100644
index 0000000..11825e0
Binary files /dev/null and b/assets/graphics/gui/lobby/shop.png differ
diff --git a/assets/graphics/gui/lobby/shop.png.import b/assets/graphics/gui/lobby/shop.png.import
new file mode 100644
index 0000000..24ecfb2
--- /dev/null
+++ b/assets/graphics/gui/lobby/shop.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bvugtpcgc2qkx"
+path="res://.godot/imported/shop.png-37b7053dc36287831032fc61cdb27b30.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/shop.png"
+dest_files=["res://.godot/imported/shop.png-37b7053dc36287831032fc61cdb27b30.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/star.png b/assets/graphics/gui/lobby/star.png
new file mode 100644
index 0000000..bbb5828
Binary files /dev/null and b/assets/graphics/gui/lobby/star.png differ
diff --git a/assets/graphics/gui/lobby/star.png.import b/assets/graphics/gui/lobby/star.png.import
new file mode 100644
index 0000000..12b025f
--- /dev/null
+++ b/assets/graphics/gui/lobby/star.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d0ouvm3x8h42c"
+path="res://.godot/imported/star.png-3476b0e29f9ae72081dd3ca243792005.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/star.png"
+dest_files=["res://.godot/imported/star.png-3476b0e29f9ae72081dd3ca243792005.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/lobby/star.svg b/assets/graphics/gui/lobby/star.svg
new file mode 100644
index 0000000..96a9c3f
--- /dev/null
+++ b/assets/graphics/gui/lobby/star.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/graphics/gui/lobby/star.svg.import b/assets/graphics/gui/lobby/star.svg.import
new file mode 100644
index 0000000..2a208df
--- /dev/null
+++ b/assets/graphics/gui/lobby/star.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1fvgas1nbdiq"
+path="res://.godot/imported/star.svg-8ee92541527157f95e7a935744bf7867.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/star.svg"
+dest_files=["res://.godot/imported/star.svg-8ee92541527157f95e7a935744bf7867.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/assets/graphics/gui/lobby/swap_row.png b/assets/graphics/gui/lobby/swap_row.png
new file mode 100644
index 0000000..1be14d8
Binary files /dev/null and b/assets/graphics/gui/lobby/swap_row.png differ
diff --git a/assets/graphics/gui/lobby/swap_row.png.import b/assets/graphics/gui/lobby/swap_row.png.import
new file mode 100644
index 0000000..91891c1
--- /dev/null
+++ b/assets/graphics/gui/lobby/swap_row.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://8wn173kae2o4"
+path="res://.godot/imported/swap_row.png-745f250ec064c16c782fca010b978525.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/lobby/swap_row.png"
+dest_files=["res://.godot/imported/swap_row.png-745f250ec064c16c782fca010b978525.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/login_panel/login.png b/assets/graphics/gui/login_panel/login.png
new file mode 100644
index 0000000..6dc73f5
Binary files /dev/null and b/assets/graphics/gui/login_panel/login.png differ
diff --git a/assets/graphics/gui/login_panel/login.png.import b/assets/graphics/gui/login_panel/login.png.import
new file mode 100644
index 0000000..aee54e9
--- /dev/null
+++ b/assets/graphics/gui/login_panel/login.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bimudeflwifwn"
+path="res://.godot/imported/login.png-4eef93acbd9745bae5a64a8f821159bb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/login_panel/login.png"
+dest_files=["res://.godot/imported/login.png-4eef93acbd9745bae5a64a8f821159bb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/login_panel/register.png b/assets/graphics/gui/login_panel/register.png
new file mode 100644
index 0000000..019513d
Binary files /dev/null and b/assets/graphics/gui/login_panel/register.png differ
diff --git a/assets/graphics/gui/login_panel/register.png.import b/assets/graphics/gui/login_panel/register.png.import
new file mode 100644
index 0000000..dd52a5e
--- /dev/null
+++ b/assets/graphics/gui/login_panel/register.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dvqqg0sif2knc"
+path="res://.godot/imported/register.png-6f25a56d5331f6201d57d2b433042931.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/login_panel/register.png"
+dest_files=["res://.godot/imported/register.png-6f25a56d5331f6201d57d2b433042931.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/login_panel/steam.png b/assets/graphics/gui/login_panel/steam.png
new file mode 100644
index 0000000..c40e1b4
Binary files /dev/null and b/assets/graphics/gui/login_panel/steam.png differ
diff --git a/assets/graphics/gui/login_panel/steam.png.import b/assets/graphics/gui/login_panel/steam.png.import
new file mode 100644
index 0000000..7b0fc77
--- /dev/null
+++ b/assets/graphics/gui/login_panel/steam.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cwhe3g5dai0pv"
+path="res://.godot/imported/steam.png-c0504ff924af79e3e81ec6a717226c3a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/login_panel/steam.png"
+dest_files=["res://.godot/imported/steam.png-c0504ff924af79e3e81ec6a717226c3a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/back.png b/assets/graphics/gui/mailbox/back.png
new file mode 100644
index 0000000..e230871
Binary files /dev/null and b/assets/graphics/gui/mailbox/back.png differ
diff --git a/assets/graphics/gui/mailbox/back.png.import b/assets/graphics/gui/mailbox/back.png.import
new file mode 100644
index 0000000..84afc8f
--- /dev/null
+++ b/assets/graphics/gui/mailbox/back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bl63ct1n8m4he"
+path="res://.godot/imported/back.png-10cab4ee25fa0d5e0742c1abdfdbdb5d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/back.png"
+dest_files=["res://.godot/imported/back.png-10cab4ee25fa0d5e0742c1abdfdbdb5d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/bg_dim.png b/assets/graphics/gui/mailbox/bg_dim.png
new file mode 100644
index 0000000..af4e142
Binary files /dev/null and b/assets/graphics/gui/mailbox/bg_dim.png differ
diff --git a/assets/graphics/gui/mailbox/bg_dim.png.import b/assets/graphics/gui/mailbox/bg_dim.png.import
new file mode 100644
index 0000000..b26636a
--- /dev/null
+++ b/assets/graphics/gui/mailbox/bg_dim.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3p3n54wfg0wb"
+path="res://.godot/imported/bg_dim.png-eb07766344d2412058c0a0f1415a5e8e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/bg_dim.png"
+dest_files=["res://.godot/imported/bg_dim.png-eb07766344d2412058c0a0f1415a5e8e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/button_delete.png b/assets/graphics/gui/mailbox/button_delete.png
new file mode 100644
index 0000000..b4c2f9b
Binary files /dev/null and b/assets/graphics/gui/mailbox/button_delete.png differ
diff --git a/assets/graphics/gui/mailbox/button_delete.png.import b/assets/graphics/gui/mailbox/button_delete.png.import
new file mode 100644
index 0000000..5372900
--- /dev/null
+++ b/assets/graphics/gui/mailbox/button_delete.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3xjd1bf5guif"
+path="res://.godot/imported/button_delete.png-d385e6ecc00048eba398788736812242.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/button_delete.png"
+dest_files=["res://.godot/imported/button_delete.png-d385e6ecc00048eba398788736812242.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/diamond.png b/assets/graphics/gui/mailbox/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/mailbox/diamond.png differ
diff --git a/assets/graphics/gui/mailbox/diamond.png.import b/assets/graphics/gui/mailbox/diamond.png.import
new file mode 100644
index 0000000..36ccfba
--- /dev/null
+++ b/assets/graphics/gui/mailbox/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bk4yqkq774xm2"
+path="res://.godot/imported/diamond.png-c921ba7f39e98381f2ccd3ee6ed5ae8d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-c921ba7f39e98381f2ccd3ee6ed5ae8d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/gold.png b/assets/graphics/gui/mailbox/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/mailbox/gold.png differ
diff --git a/assets/graphics/gui/mailbox/gold.png.import b/assets/graphics/gui/mailbox/gold.png.import
new file mode 100644
index 0000000..44b6f25
--- /dev/null
+++ b/assets/graphics/gui/mailbox/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dcuhnt8a3h2lg"
+path="res://.godot/imported/gold.png-bb2228d3292511e15087320db98c08c8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/gold.png"
+dest_files=["res://.godot/imported/gold.png-bb2228d3292511e15087320db98c08c8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/help.png b/assets/graphics/gui/mailbox/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/mailbox/help.png differ
diff --git a/assets/graphics/gui/mailbox/help.png.import b/assets/graphics/gui/mailbox/help.png.import
new file mode 100644
index 0000000..2736ed9
--- /dev/null
+++ b/assets/graphics/gui/mailbox/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://saqvg32kwni7"
+path="res://.godot/imported/help.png-7d19fdec09e5951c8496ca8170595312.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/help.png"
+dest_files=["res://.godot/imported/help.png-7d19fdec09e5951c8496ca8170595312.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/item_claimed.png b/assets/graphics/gui/mailbox/item_claimed.png
new file mode 100644
index 0000000..32c3895
Binary files /dev/null and b/assets/graphics/gui/mailbox/item_claimed.png differ
diff --git a/assets/graphics/gui/mailbox/item_claimed.png.import b/assets/graphics/gui/mailbox/item_claimed.png.import
new file mode 100644
index 0000000..9179b71
--- /dev/null
+++ b/assets/graphics/gui/mailbox/item_claimed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c7p51wnjplvw2"
+path="res://.godot/imported/item_claimed.png-e4f018b4c42a8dd98bb0bfb85c94c540.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/item_claimed.png"
+dest_files=["res://.godot/imported/item_claimed.png-e4f018b4c42a8dd98bb0bfb85c94c540.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/item_slot.png b/assets/graphics/gui/mailbox/item_slot.png
new file mode 100644
index 0000000..8a22bb9
Binary files /dev/null and b/assets/graphics/gui/mailbox/item_slot.png differ
diff --git a/assets/graphics/gui/mailbox/item_slot.png.import b/assets/graphics/gui/mailbox/item_slot.png.import
new file mode 100644
index 0000000..43e175a
--- /dev/null
+++ b/assets/graphics/gui/mailbox/item_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuq6c3ina1ucw"
+path="res://.godot/imported/item_slot.png-47aaff86dab87fe0faa2e17ecd2887d2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/item_slot.png"
+dest_files=["res://.godot/imported/item_slot.png-47aaff86dab87fe0faa2e17ecd2887d2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/mailbox.png b/assets/graphics/gui/mailbox/mailbox.png
new file mode 100644
index 0000000..ff2e3fa
Binary files /dev/null and b/assets/graphics/gui/mailbox/mailbox.png differ
diff --git a/assets/graphics/gui/mailbox/mailbox.png.import b/assets/graphics/gui/mailbox/mailbox.png.import
new file mode 100644
index 0000000..f50b903
--- /dev/null
+++ b/assets/graphics/gui/mailbox/mailbox.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtki0amtmp8q"
+path="res://.godot/imported/mailbox.png-caad32ade3ebbeae5cb18dc971d55068.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/mailbox.png"
+dest_files=["res://.godot/imported/mailbox.png-caad32ade3ebbeae5cb18dc971d55068.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/mailbox_var1.png b/assets/graphics/gui/mailbox/mailbox_var1.png
new file mode 100644
index 0000000..5ffa6ae
Binary files /dev/null and b/assets/graphics/gui/mailbox/mailbox_var1.png differ
diff --git a/assets/graphics/gui/mailbox/mailbox_var1.png.import b/assets/graphics/gui/mailbox/mailbox_var1.png.import
new file mode 100644
index 0000000..1e367e2
--- /dev/null
+++ b/assets/graphics/gui/mailbox/mailbox_var1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://jpvvnpb7vaab"
+path="res://.godot/imported/mailbox_var1.png-6cb3127377114daca28f0180c08d318f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/mailbox_var1.png"
+dest_files=["res://.godot/imported/mailbox_var1.png-6cb3127377114daca28f0180c08d318f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/mailbox_var2.png b/assets/graphics/gui/mailbox/mailbox_var2.png
new file mode 100644
index 0000000..ad204f3
Binary files /dev/null and b/assets/graphics/gui/mailbox/mailbox_var2.png differ
diff --git a/assets/graphics/gui/mailbox/mailbox_var2.png.import b/assets/graphics/gui/mailbox/mailbox_var2.png.import
new file mode 100644
index 0000000..2029175
--- /dev/null
+++ b/assets/graphics/gui/mailbox/mailbox_var2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mxkrrgihq6mg"
+path="res://.godot/imported/mailbox_var2.png-4fda83bb5c64a57fd9098a8c4ea7c6cf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/mailbox_var2.png"
+dest_files=["res://.godot/imported/mailbox_var2.png-4fda83bb5c64a57fd9098a8c4ea7c6cf.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/resource_slot.png b/assets/graphics/gui/mailbox/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/mailbox/resource_slot.png differ
diff --git a/assets/graphics/gui/mailbox/resource_slot.png.import b/assets/graphics/gui/mailbox/resource_slot.png.import
new file mode 100644
index 0000000..4ad1948
--- /dev/null
+++ b/assets/graphics/gui/mailbox/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1mg71y72s4a5"
+path="res://.godot/imported/resource_slot.png-39644b219afad05acc474ce36dcbc04d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-39644b219afad05acc474ce36dcbc04d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/scroll_fill.png b/assets/graphics/gui/mailbox/scroll_fill.png
new file mode 100644
index 0000000..81ff581
Binary files /dev/null and b/assets/graphics/gui/mailbox/scroll_fill.png differ
diff --git a/assets/graphics/gui/mailbox/scroll_fill.png.import b/assets/graphics/gui/mailbox/scroll_fill.png.import
new file mode 100644
index 0000000..22ec74a
--- /dev/null
+++ b/assets/graphics/gui/mailbox/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3g4ftg0ge3vg"
+path="res://.godot/imported/scroll_fill.png-9c07935321c136eef96be39c14206704.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-9c07935321c136eef96be39c14206704.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/scroll_slot.png b/assets/graphics/gui/mailbox/scroll_slot.png
new file mode 100644
index 0000000..b1591b4
Binary files /dev/null and b/assets/graphics/gui/mailbox/scroll_slot.png differ
diff --git a/assets/graphics/gui/mailbox/scroll_slot.png.import b/assets/graphics/gui/mailbox/scroll_slot.png.import
new file mode 100644
index 0000000..662908c
--- /dev/null
+++ b/assets/graphics/gui/mailbox/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://di41r4uwhtrcj"
+path="res://.godot/imported/scroll_slot.png-8edf98ea9a2b3b5f18bbc0161a90dec7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-8edf98ea9a2b3b5f18bbc0161a90dec7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mailbox/translate.png b/assets/graphics/gui/mailbox/translate.png
new file mode 100644
index 0000000..f84523c
Binary files /dev/null and b/assets/graphics/gui/mailbox/translate.png differ
diff --git a/assets/graphics/gui/mailbox/translate.png.import b/assets/graphics/gui/mailbox/translate.png.import
new file mode 100644
index 0000000..64da567
--- /dev/null
+++ b/assets/graphics/gui/mailbox/translate.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crwu4c1c8pk54"
+path="res://.godot/imported/translate.png-e41140e6e4c096e42a46a28af86f03b3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mailbox/translate.png"
+dest_files=["res://.godot/imported/translate.png-e41140e6e4c096e42a46a28af86f03b3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/achievement.png b/assets/graphics/gui/mainmenu/achievement.png
new file mode 100644
index 0000000..f28a3a1
Binary files /dev/null and b/assets/graphics/gui/mainmenu/achievement.png differ
diff --git a/assets/graphics/gui/mainmenu/achievement.png.import b/assets/graphics/gui/mainmenu/achievement.png.import
new file mode 100644
index 0000000..584eb48
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/achievement.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cbbgmpugkixpe"
+path="res://.godot/imported/achievement.png-66a65c4d956dbd034ceb3ce7e3b72f67.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/achievement.png"
+dest_files=["res://.godot/imported/achievement.png-66a65c4d956dbd034ceb3ce7e3b72f67.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/attendant.png b/assets/graphics/gui/mainmenu/attendant.png
new file mode 100644
index 0000000..53e0377
Binary files /dev/null and b/assets/graphics/gui/mainmenu/attendant.png differ
diff --git a/assets/graphics/gui/mainmenu/attendant.png.import b/assets/graphics/gui/mainmenu/attendant.png.import
new file mode 100644
index 0000000..e62522a
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/attendant.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://hg1xhetgpg3c"
+path="res://.godot/imported/attendant.png-96c7f9a19a23fcd476f7a907c6f85aa7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/attendant.png"
+dest_files=["res://.godot/imported/attendant.png-96c7f9a19a23fcd476f7a907c6f85aa7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/banner.png b/assets/graphics/gui/mainmenu/banner.png
new file mode 100644
index 0000000..a121099
Binary files /dev/null and b/assets/graphics/gui/mainmenu/banner.png differ
diff --git a/assets/graphics/gui/mainmenu/banner.png.import b/assets/graphics/gui/mainmenu/banner.png.import
new file mode 100644
index 0000000..5691b83
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/banner.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dfrs4a04d0ntu"
+path="res://.godot/imported/banner.png-b67bef01d4cf9b6076c7f194340131d0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/banner.png"
+dest_files=["res://.godot/imported/banner.png-b67bef01d4cf9b6076c7f194340131d0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/battlepass.png b/assets/graphics/gui/mainmenu/battlepass.png
new file mode 100644
index 0000000..bc788c6
Binary files /dev/null and b/assets/graphics/gui/mainmenu/battlepass.png differ
diff --git a/assets/graphics/gui/mainmenu/battlepass.png.import b/assets/graphics/gui/mainmenu/battlepass.png.import
new file mode 100644
index 0000000..ddc66af
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/battlepass.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://k1hfn3t505ph"
+path="res://.godot/imported/battlepass.png-f554a02ab279448d30ac3b9b7f3f6f8c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/battlepass.png"
+dest_files=["res://.godot/imported/battlepass.png-f554a02ab279448d30ac3b9b7f3f6f8c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/button_play.png b/assets/graphics/gui/mainmenu/button_play.png
new file mode 100644
index 0000000..e06a4a2
Binary files /dev/null and b/assets/graphics/gui/mainmenu/button_play.png differ
diff --git a/assets/graphics/gui/mainmenu/button_play.png.import b/assets/graphics/gui/mainmenu/button_play.png.import
new file mode 100644
index 0000000..b4ba5de
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/button_play.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dllwxub5n4361"
+path="res://.godot/imported/button_play.png-5679da145b7d89e7847a44f4fefb2ca7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/button_play.png"
+dest_files=["res://.godot/imported/button_play.png-5679da145b7d89e7847a44f4fefb2ca7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/button_play_interact.png b/assets/graphics/gui/mainmenu/button_play_interact.png
new file mode 100644
index 0000000..23ba300
Binary files /dev/null and b/assets/graphics/gui/mainmenu/button_play_interact.png differ
diff --git a/assets/graphics/gui/mainmenu/button_play_interact.png.import b/assets/graphics/gui/mainmenu/button_play_interact.png.import
new file mode 100644
index 0000000..9d4a17b
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/button_play_interact.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c6ahbdxx23e3b"
+path="res://.godot/imported/button_play_interact.png-bdd68e9f0191954cb338a177ca6b0bc2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/button_play_interact.png"
+dest_files=["res://.godot/imported/button_play_interact.png-bdd68e9f0191954cb338a177ca6b0bc2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/button_room.png b/assets/graphics/gui/mainmenu/button_room.png
new file mode 100644
index 0000000..e77c280
Binary files /dev/null and b/assets/graphics/gui/mainmenu/button_room.png differ
diff --git a/assets/graphics/gui/mainmenu/button_room.png.import b/assets/graphics/gui/mainmenu/button_room.png.import
new file mode 100644
index 0000000..4307c2a
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/button_room.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://q8vw41qd00lx"
+path="res://.godot/imported/button_room.png-59657cacbd5c9dbf41b24e0bada84d38.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/button_room.png"
+dest_files=["res://.godot/imported/button_room.png-59657cacbd5c9dbf41b24e0bada84d38.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/button_room_interact.png b/assets/graphics/gui/mainmenu/button_room_interact.png
new file mode 100644
index 0000000..9b88c83
Binary files /dev/null and b/assets/graphics/gui/mainmenu/button_room_interact.png differ
diff --git a/assets/graphics/gui/mainmenu/button_room_interact.png.import b/assets/graphics/gui/mainmenu/button_room_interact.png.import
new file mode 100644
index 0000000..1a2e3fb
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/button_room_interact.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcgu0jku4ntcw"
+path="res://.godot/imported/button_room_interact.png-970f4cdbf355aa7b400afbba61446b14.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/button_room_interact.png"
+dest_files=["res://.godot/imported/button_room_interact.png-970f4cdbf355aa7b400afbba61446b14.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat.png b/assets/graphics/gui/mainmenu/chat.png
new file mode 100644
index 0000000..3a26944
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat.png differ
diff --git a/assets/graphics/gui/mainmenu/chat.png.import b/assets/graphics/gui/mainmenu/chat.png.import
new file mode 100644
index 0000000..588553a
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8xwpkvvwa7a4"
+path="res://.godot/imported/chat.png-13cac1186a0e0f785f8ae33ff3d0397a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat.png"
+dest_files=["res://.godot/imported/chat.png-13cac1186a0e0f785f8ae33ff3d0397a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat_box.png b/assets/graphics/gui/mainmenu/chat_box.png
new file mode 100644
index 0000000..50eb3bd
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat_box.png differ
diff --git a/assets/graphics/gui/mainmenu/chat_box.png.import b/assets/graphics/gui/mainmenu/chat_box.png.import
new file mode 100644
index 0000000..7996554
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat_box.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nli866pauy5h"
+path="res://.godot/imported/chat_box.png-7a100d93f6a36fe06db43dbcd910c0d8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat_box.png"
+dest_files=["res://.godot/imported/chat_box.png-7a100d93f6a36fe06db43dbcd910c0d8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat_drop.png b/assets/graphics/gui/mainmenu/chat_drop.png
new file mode 100644
index 0000000..70cec24
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat_drop.png differ
diff --git a/assets/graphics/gui/mainmenu/chat_drop.png.import b/assets/graphics/gui/mainmenu/chat_drop.png.import
new file mode 100644
index 0000000..feeebe6
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat_drop.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dfvwq061dipl6"
+path="res://.godot/imported/chat_drop.png-47d0e0f8e0b4bb0289c84bc50333dc6a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat_drop.png"
+dest_files=["res://.godot/imported/chat_drop.png-47d0e0f8e0b4bb0289c84bc50333dc6a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat_emoji.png b/assets/graphics/gui/mainmenu/chat_emoji.png
new file mode 100644
index 0000000..1cf8fec
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat_emoji.png differ
diff --git a/assets/graphics/gui/mainmenu/chat_emoji.png.import b/assets/graphics/gui/mainmenu/chat_emoji.png.import
new file mode 100644
index 0000000..cbd42ef
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat_emoji.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c05mo12h5umgi"
+path="res://.godot/imported/chat_emoji.png-7331719626da385628c6d5fadd8860ba.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat_emoji.png"
+dest_files=["res://.godot/imported/chat_emoji.png-7331719626da385628c6d5fadd8860ba.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat_enter.png b/assets/graphics/gui/mainmenu/chat_enter.png
new file mode 100644
index 0000000..df33c92
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat_enter.png differ
diff --git a/assets/graphics/gui/mainmenu/chat_enter.png.import b/assets/graphics/gui/mainmenu/chat_enter.png.import
new file mode 100644
index 0000000..d7e98cf
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat_enter.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://kflvrkha1jwy"
+path="res://.godot/imported/chat_enter.png-d3286eb785a573b0097a11a701ebc70e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat_enter.png"
+dest_files=["res://.godot/imported/chat_enter.png-d3286eb785a573b0097a11a701ebc70e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat_list.png b/assets/graphics/gui/mainmenu/chat_list.png
new file mode 100644
index 0000000..ee55990
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat_list.png differ
diff --git a/assets/graphics/gui/mainmenu/chat_list.png.import b/assets/graphics/gui/mainmenu/chat_list.png.import
new file mode 100644
index 0000000..c67bf29
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat_list.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://uctxsn7hxkl1"
+path="res://.godot/imported/chat_list.png-dce605de04f348dd7d62a833a3676eaf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat_list.png"
+dest_files=["res://.godot/imported/chat_list.png-dce605de04f348dd7d62a833a3676eaf.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/chat_page.png b/assets/graphics/gui/mainmenu/chat_page.png
new file mode 100644
index 0000000..b855a40
Binary files /dev/null and b/assets/graphics/gui/mainmenu/chat_page.png differ
diff --git a/assets/graphics/gui/mainmenu/chat_page.png.import b/assets/graphics/gui/mainmenu/chat_page.png.import
new file mode 100644
index 0000000..8134032
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/chat_page.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dar26100nn2sp"
+path="res://.godot/imported/chat_page.png-dce2ccadc46cb4dac1402b5ce04f1393.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/chat_page.png"
+dest_files=["res://.godot/imported/chat_page.png-dce2ccadc46cb4dac1402b5ce04f1393.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/diamond.png b/assets/graphics/gui/mainmenu/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/mainmenu/diamond.png differ
diff --git a/assets/graphics/gui/mainmenu/diamond.png.import b/assets/graphics/gui/mainmenu/diamond.png.import
new file mode 100644
index 0000000..236bd9b
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cjslm8jf1fdir"
+path="res://.godot/imported/diamond.png-3957e4fe1c7f903e5ef516130fe5a91e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-3957e4fe1c7f903e5ef516130fe5a91e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/friend.png b/assets/graphics/gui/mainmenu/friend.png
new file mode 100644
index 0000000..36475e9
Binary files /dev/null and b/assets/graphics/gui/mainmenu/friend.png differ
diff --git a/assets/graphics/gui/mainmenu/friend.png.import b/assets/graphics/gui/mainmenu/friend.png.import
new file mode 100644
index 0000000..7e9dddb
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/friend.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5gcb3r63w7cs"
+path="res://.godot/imported/friend.png-0fac41fd16466d6bae6370c9e8c0b785.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/friend.png"
+dest_files=["res://.godot/imported/friend.png-0fac41fd16466d6bae6370c9e8c0b785.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/gold.png b/assets/graphics/gui/mainmenu/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/mainmenu/gold.png differ
diff --git a/assets/graphics/gui/mainmenu/gold.png.import b/assets/graphics/gui/mainmenu/gold.png.import
new file mode 100644
index 0000000..a60e36c
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c3c720m2m66o2"
+path="res://.godot/imported/gold.png-edfc9e8b6be0b23593be0f6a729f3998.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/gold.png"
+dest_files=["res://.godot/imported/gold.png-edfc9e8b6be0b23593be0f6a729f3998.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/help.png b/assets/graphics/gui/mainmenu/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/mainmenu/help.png differ
diff --git a/assets/graphics/gui/mainmenu/help.png.import b/assets/graphics/gui/mainmenu/help.png.import
new file mode 100644
index 0000000..c58d657
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cyd461840qx78"
+path="res://.godot/imported/help.png-20b9da273040ee118db10312cd2219ad.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/help.png"
+dest_files=["res://.godot/imported/help.png-20b9da273040ee118db10312cd2219ad.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/inventory.png b/assets/graphics/gui/mainmenu/inventory.png
new file mode 100644
index 0000000..4eec7a8
Binary files /dev/null and b/assets/graphics/gui/mainmenu/inventory.png differ
diff --git a/assets/graphics/gui/mainmenu/inventory.png.import b/assets/graphics/gui/mainmenu/inventory.png.import
new file mode 100644
index 0000000..06c5ad2
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/inventory.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0y1lt7cdxddo"
+path="res://.godot/imported/inventory.png-3075f49258d279380a9012da3cf1f2ac.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/inventory.png"
+dest_files=["res://.godot/imported/inventory.png-3075f49258d279380a9012da3cf1f2ac.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/leftreward_notif1.png b/assets/graphics/gui/mainmenu/leftreward_notif1.png
new file mode 100644
index 0000000..4987074
Binary files /dev/null and b/assets/graphics/gui/mainmenu/leftreward_notif1.png differ
diff --git a/assets/graphics/gui/mainmenu/leftreward_notif1.png.import b/assets/graphics/gui/mainmenu/leftreward_notif1.png.import
new file mode 100644
index 0000000..9b9e2ef
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/leftreward_notif1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://g6mlm8mm05e6"
+path="res://.godot/imported/leftreward_notif1.png-cef48baae68d3d8f48fceecae30077f4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/leftreward_notif1.png"
+dest_files=["res://.godot/imported/leftreward_notif1.png-cef48baae68d3d8f48fceecae30077f4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/leftreward_notif2.png b/assets/graphics/gui/mainmenu/leftreward_notif2.png
new file mode 100644
index 0000000..23f230e
Binary files /dev/null and b/assets/graphics/gui/mainmenu/leftreward_notif2.png differ
diff --git a/assets/graphics/gui/mainmenu/leftreward_notif2.png.import b/assets/graphics/gui/mainmenu/leftreward_notif2.png.import
new file mode 100644
index 0000000..471c32d
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/leftreward_notif2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0qvvvxan0d4d"
+path="res://.godot/imported/leftreward_notif2.png-d2d0108b2170c3ade41328f85cc7eddc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/leftreward_notif2.png"
+dest_files=["res://.godot/imported/leftreward_notif2.png-d2d0108b2170c3ade41328f85cc7eddc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/mailbox.png b/assets/graphics/gui/mainmenu/mailbox.png
new file mode 100644
index 0000000..af429e2
Binary files /dev/null and b/assets/graphics/gui/mainmenu/mailbox.png differ
diff --git a/assets/graphics/gui/mainmenu/mailbox.png.import b/assets/graphics/gui/mainmenu/mailbox.png.import
new file mode 100644
index 0000000..161de08
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/mailbox.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bm0d40n1rwvvs"
+path="res://.godot/imported/mailbox.png-667ce7f4d5017be637144ee207a27464.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/mailbox.png"
+dest_files=["res://.godot/imported/mailbox.png-667ce7f4d5017be637144ee207a27464.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/mall.png b/assets/graphics/gui/mainmenu/mall.png
new file mode 100644
index 0000000..a756068
Binary files /dev/null and b/assets/graphics/gui/mainmenu/mall.png differ
diff --git a/assets/graphics/gui/mainmenu/mall.png.import b/assets/graphics/gui/mainmenu/mall.png.import
new file mode 100644
index 0000000..eb54b01
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/mall.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drh8pk8cu787p"
+path="res://.godot/imported/mall.png-a3ed12dbba645c909c7581e90b51764a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/mall.png"
+dest_files=["res://.godot/imported/mall.png-a3ed12dbba645c909c7581e90b51764a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/mc_copper.png b/assets/graphics/gui/mainmenu/mc_copper.png
new file mode 100644
index 0000000..8d252df
Binary files /dev/null and b/assets/graphics/gui/mainmenu/mc_copper.png differ
diff --git a/assets/graphics/gui/mainmenu/mc_copper.png.import b/assets/graphics/gui/mainmenu/mc_copper.png.import
new file mode 100644
index 0000000..7fba8c4
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/mc_copper.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c23y6jobd1bsi"
+path="res://.godot/imported/mc_copper.png-41d0efa2f69ce6d47251041afe4afed4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/mc_copper.png"
+dest_files=["res://.godot/imported/mc_copper.png-41d0efa2f69ce6d47251041afe4afed4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/notif.png b/assets/graphics/gui/mainmenu/notif.png
new file mode 100644
index 0000000..24c70a7
Binary files /dev/null and b/assets/graphics/gui/mainmenu/notif.png differ
diff --git a/assets/graphics/gui/mainmenu/notif.png.import b/assets/graphics/gui/mainmenu/notif.png.import
new file mode 100644
index 0000000..4133fb8
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/notif.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpmkgpf6g8umu"
+path="res://.godot/imported/notif.png-0ee915c2bc718ccd40d88ea5c64fc179.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/notif.png"
+dest_files=["res://.godot/imported/notif.png-0ee915c2bc718ccd40d88ea5c64fc179.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/quest.png b/assets/graphics/gui/mainmenu/quest.png
new file mode 100644
index 0000000..336f824
Binary files /dev/null and b/assets/graphics/gui/mainmenu/quest.png differ
diff --git a/assets/graphics/gui/mainmenu/quest.png.import b/assets/graphics/gui/mainmenu/quest.png.import
new file mode 100644
index 0000000..86bab87
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/quest.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmmjfpuo6lt47"
+path="res://.godot/imported/quest.png-9b30fb7118270820470bff3e6855da5b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/quest.png"
+dest_files=["res://.godot/imported/quest.png-9b30fb7118270820470bff3e6855da5b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/quest_done.png b/assets/graphics/gui/mainmenu/quest_done.png
new file mode 100644
index 0000000..7572fda
Binary files /dev/null and b/assets/graphics/gui/mainmenu/quest_done.png differ
diff --git a/assets/graphics/gui/mainmenu/quest_done.png.import b/assets/graphics/gui/mainmenu/quest_done.png.import
new file mode 100644
index 0000000..2681c88
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/quest_done.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b66jywb5fnte0"
+path="res://.godot/imported/quest_done.png-c914cfe072cbf2722db92da73900e77f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/quest_done.png"
+dest_files=["res://.godot/imported/quest_done.png-c914cfe072cbf2722db92da73900e77f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/quest_list.png b/assets/graphics/gui/mainmenu/quest_list.png
new file mode 100644
index 0000000..3150712
Binary files /dev/null and b/assets/graphics/gui/mainmenu/quest_list.png differ
diff --git a/assets/graphics/gui/mainmenu/quest_list.png.import b/assets/graphics/gui/mainmenu/quest_list.png.import
new file mode 100644
index 0000000..7e92820
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/quest_list.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bjf3xyx346bbu"
+path="res://.godot/imported/quest_list.png-7e9516e3c0c7746785ceafce1861a88e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/quest_list.png"
+dest_files=["res://.godot/imported/quest_list.png-7e9516e3c0c7746785ceafce1861a88e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/quest_page.png b/assets/graphics/gui/mainmenu/quest_page.png
new file mode 100644
index 0000000..626afd9
Binary files /dev/null and b/assets/graphics/gui/mainmenu/quest_page.png differ
diff --git a/assets/graphics/gui/mainmenu/quest_page.png.import b/assets/graphics/gui/mainmenu/quest_page.png.import
new file mode 100644
index 0000000..c7ca5ee
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/quest_page.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dbu0oh4jpo675"
+path="res://.godot/imported/quest_page.png-4620f30dd37ee79d9c32b817c73aa088.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/quest_page.png"
+dest_files=["res://.godot/imported/quest_page.png-4620f30dd37ee79d9c32b817c73aa088.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/rank.png b/assets/graphics/gui/mainmenu/rank.png
new file mode 100644
index 0000000..07e9290
Binary files /dev/null and b/assets/graphics/gui/mainmenu/rank.png differ
diff --git a/assets/graphics/gui/mainmenu/rank.png.import b/assets/graphics/gui/mainmenu/rank.png.import
new file mode 100644
index 0000000..afc54fd
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/rank.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dws5b02fr5it"
+path="res://.godot/imported/rank.png-a7209c64e8d94ae099622193f2866a34.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/rank.png"
+dest_files=["res://.godot/imported/rank.png-a7209c64e8d94ae099622193f2866a34.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/rectangle-ui-box.png b/assets/graphics/gui/mainmenu/rectangle-ui-box.png
new file mode 100644
index 0000000..3d1786f
Binary files /dev/null and b/assets/graphics/gui/mainmenu/rectangle-ui-box.png differ
diff --git a/assets/graphics/gui/mainmenu/rectangle-ui-box.png.import b/assets/graphics/gui/mainmenu/rectangle-ui-box.png.import
new file mode 100644
index 0000000..79255ae
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/rectangle-ui-box.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://40ax7e6egpc2"
+path="res://.godot/imported/rectangle-ui-box.png-2b5e0fc005d3a046d5909e06f7eb3ad8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/rectangle-ui-box.png"
+dest_files=["res://.godot/imported/rectangle-ui-box.png-2b5e0fc005d3a046d5909e06f7eb3ad8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/resource_slot.png b/assets/graphics/gui/mainmenu/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/mainmenu/resource_slot.png differ
diff --git a/assets/graphics/gui/mainmenu/resource_slot.png.import b/assets/graphics/gui/mainmenu/resource_slot.png.import
new file mode 100644
index 0000000..0c66ecb
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://tyibhq0lg2hj"
+path="res://.godot/imported/resource_slot.png-56c3b1eb4db9b541582fb3b3a55e5909.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-56c3b1eb4db9b541582fb3b3a55e5909.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/rightreward_notif1.png b/assets/graphics/gui/mainmenu/rightreward_notif1.png
new file mode 100644
index 0000000..d1b4004
Binary files /dev/null and b/assets/graphics/gui/mainmenu/rightreward_notif1.png differ
diff --git a/assets/graphics/gui/mainmenu/rightreward_notif1.png.import b/assets/graphics/gui/mainmenu/rightreward_notif1.png.import
new file mode 100644
index 0000000..bd773e6
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/rightreward_notif1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://psnimrdsej0h"
+path="res://.godot/imported/rightreward_notif1.png-8ab01277dfeed22b6f15e4333c7265b4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/rightreward_notif1.png"
+dest_files=["res://.godot/imported/rightreward_notif1.png-8ab01277dfeed22b6f15e4333c7265b4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/seperator_name.png b/assets/graphics/gui/mainmenu/seperator_name.png
new file mode 100644
index 0000000..79a2548
Binary files /dev/null and b/assets/graphics/gui/mainmenu/seperator_name.png differ
diff --git a/assets/graphics/gui/mainmenu/seperator_name.png.import b/assets/graphics/gui/mainmenu/seperator_name.png.import
new file mode 100644
index 0000000..bcd71b3
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/seperator_name.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2o4irobuxq1s"
+path="res://.godot/imported/seperator_name.png-711a3506ad492261b31b3eb875b43fb2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/seperator_name.png"
+dest_files=["res://.godot/imported/seperator_name.png-711a3506ad492261b31b3eb875b43fb2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/setting.png b/assets/graphics/gui/mainmenu/setting.png
new file mode 100644
index 0000000..ccda44a
Binary files /dev/null and b/assets/graphics/gui/mainmenu/setting.png differ
diff --git a/assets/graphics/gui/mainmenu/setting.png.import b/assets/graphics/gui/mainmenu/setting.png.import
new file mode 100644
index 0000000..0ac755b
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/setting.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ccpowd3x7oj8l"
+path="res://.godot/imported/setting.png-8008aa5f6b6be8505bb47e4e248203b1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/setting.png"
+dest_files=["res://.godot/imported/setting.png-8008aa5f6b6be8505bb47e4e248203b1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/slider_banner0.png b/assets/graphics/gui/mainmenu/slider_banner0.png
new file mode 100644
index 0000000..19a5665
Binary files /dev/null and b/assets/graphics/gui/mainmenu/slider_banner0.png differ
diff --git a/assets/graphics/gui/mainmenu/slider_banner0.png.import b/assets/graphics/gui/mainmenu/slider_banner0.png.import
new file mode 100644
index 0000000..382b541
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/slider_banner0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4lin8wggjvyn"
+path="res://.godot/imported/slider_banner0.png-6e89a9347383b49d0f2ecc2b49009198.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/slider_banner0.png"
+dest_files=["res://.godot/imported/slider_banner0.png-6e89a9347383b49d0f2ecc2b49009198.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/slider_banner1.png b/assets/graphics/gui/mainmenu/slider_banner1.png
new file mode 100644
index 0000000..611b173
Binary files /dev/null and b/assets/graphics/gui/mainmenu/slider_banner1.png differ
diff --git a/assets/graphics/gui/mainmenu/slider_banner1.png.import b/assets/graphics/gui/mainmenu/slider_banner1.png.import
new file mode 100644
index 0000000..28b7b96
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/slider_banner1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rog44iij0uoi"
+path="res://.godot/imported/slider_banner1.png-209bd7de1a690754175b23506827b346.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/slider_banner1.png"
+dest_files=["res://.godot/imported/slider_banner1.png-209bd7de1a690754175b23506827b346.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/slider_pass0.png b/assets/graphics/gui/mainmenu/slider_pass0.png
new file mode 100644
index 0000000..0494b20
Binary files /dev/null and b/assets/graphics/gui/mainmenu/slider_pass0.png differ
diff --git a/assets/graphics/gui/mainmenu/slider_pass0.png.import b/assets/graphics/gui/mainmenu/slider_pass0.png.import
new file mode 100644
index 0000000..6c87b5e
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/slider_pass0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://myxwih4gj2s3"
+path="res://.godot/imported/slider_pass0.png-d45ef54155baa7e572bc4d0bcceacf07.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/slider_pass0.png"
+dest_files=["res://.godot/imported/slider_pass0.png-d45ef54155baa7e572bc4d0bcceacf07.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/slider_pass1.png b/assets/graphics/gui/mainmenu/slider_pass1.png
new file mode 100644
index 0000000..58c6405
Binary files /dev/null and b/assets/graphics/gui/mainmenu/slider_pass1.png differ
diff --git a/assets/graphics/gui/mainmenu/slider_pass1.png.import b/assets/graphics/gui/mainmenu/slider_pass1.png.import
new file mode 100644
index 0000000..8b078c9
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/slider_pass1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv6qcejwbe4q1"
+path="res://.godot/imported/slider_pass1.png-d681b0dfe221d6cf78741bd70962416b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/slider_pass1.png"
+dest_files=["res://.godot/imported/slider_pass1.png-d681b0dfe221d6cf78741bd70962416b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/mainmenu/task.png b/assets/graphics/gui/mainmenu/task.png
new file mode 100644
index 0000000..6affa4a
Binary files /dev/null and b/assets/graphics/gui/mainmenu/task.png differ
diff --git a/assets/graphics/gui/mainmenu/task.png.import b/assets/graphics/gui/mainmenu/task.png.import
new file mode 100644
index 0000000..ee87acb
--- /dev/null
+++ b/assets/graphics/gui/mainmenu/task.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnunjsxeuk7qr"
+path="res://.godot/imported/task.png-5b801394ce7152393bf5d22a9b7c272c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/mainmenu/task.png"
+dest_files=["res://.godot/imported/task.png-5b801394ce7152393bf5d22a9b7c272c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/Rank.png b/assets/graphics/gui/play/Rank.png
new file mode 100644
index 0000000..190a62e
Binary files /dev/null and b/assets/graphics/gui/play/Rank.png differ
diff --git a/assets/graphics/gui/play/Rank.png.import b/assets/graphics/gui/play/Rank.png.import
new file mode 100644
index 0000000..3029001
--- /dev/null
+++ b/assets/graphics/gui/play/Rank.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8dgaw0bk3x6f"
+path="res://.godot/imported/Rank.png-aa213149b8c0cbdfd009890ee6f28221.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/Rank.png"
+dest_files=["res://.godot/imported/Rank.png-aa213149b8c0cbdfd009890ee6f28221.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/bg.png b/assets/graphics/gui/play/bg.png
new file mode 100644
index 0000000..4ed6034
Binary files /dev/null and b/assets/graphics/gui/play/bg.png differ
diff --git a/assets/graphics/gui/play/bg.png.import b/assets/graphics/gui/play/bg.png.import
new file mode 100644
index 0000000..6ce299d
--- /dev/null
+++ b/assets/graphics/gui/play/bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bpco6lch7homj"
+path="res://.godot/imported/bg.png-786938d5644eb473985c6d1c81607bc5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/bg.png"
+dest_files=["res://.godot/imported/bg.png-786938d5644eb473985c6d1c81607bc5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_green.png b/assets/graphics/gui/play/btn_green.png
new file mode 100644
index 0000000..a83c591
Binary files /dev/null and b/assets/graphics/gui/play/btn_green.png differ
diff --git a/assets/graphics/gui/play/btn_green.png.import b/assets/graphics/gui/play/btn_green.png.import
new file mode 100644
index 0000000..e61388f
--- /dev/null
+++ b/assets/graphics/gui/play/btn_green.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtamjfqk2a0ir"
+path="res://.godot/imported/btn_green.png-641825d5bcc7cbea834d43ec0f410f3c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_green.png"
+dest_files=["res://.godot/imported/btn_green.png-641825d5bcc7cbea834d43ec0f410f3c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_green_small.png b/assets/graphics/gui/play/btn_green_small.png
new file mode 100644
index 0000000..d9d31e3
Binary files /dev/null and b/assets/graphics/gui/play/btn_green_small.png differ
diff --git a/assets/graphics/gui/play/btn_green_small.png.import b/assets/graphics/gui/play/btn_green_small.png.import
new file mode 100644
index 0000000..90c1379
--- /dev/null
+++ b/assets/graphics/gui/play/btn_green_small.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1yi5lwgle4g0"
+path="res://.godot/imported/btn_green_small.png-e1767e4f3c246553e6a51447314772af.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_green_small.png"
+dest_files=["res://.godot/imported/btn_green_small.png-e1767e4f3c246553e6a51447314772af.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_green_small_darken.png b/assets/graphics/gui/play/btn_green_small_darken.png
new file mode 100644
index 0000000..92d78f6
Binary files /dev/null and b/assets/graphics/gui/play/btn_green_small_darken.png differ
diff --git a/assets/graphics/gui/play/btn_green_small_darken.png.import b/assets/graphics/gui/play/btn_green_small_darken.png.import
new file mode 100644
index 0000000..8f64cbd
--- /dev/null
+++ b/assets/graphics/gui/play/btn_green_small_darken.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuw72qcwxxbjg"
+path="res://.godot/imported/btn_green_small_darken.png-c3f200ff07ca2eb50057fad053a8d781.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_green_small_darken.png"
+dest_files=["res://.godot/imported/btn_green_small_darken.png-c3f200ff07ca2eb50057fad053a8d781.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_green_small_white.png b/assets/graphics/gui/play/btn_green_small_white.png
new file mode 100644
index 0000000..4639a61
Binary files /dev/null and b/assets/graphics/gui/play/btn_green_small_white.png differ
diff --git a/assets/graphics/gui/play/btn_green_small_white.png.import b/assets/graphics/gui/play/btn_green_small_white.png.import
new file mode 100644
index 0000000..4854597
--- /dev/null
+++ b/assets/graphics/gui/play/btn_green_small_white.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxlhp5uwgdyvh"
+path="res://.godot/imported/btn_green_small_white.png-1dff8aeb0426634c57eb065c11ddf596.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_green_small_white.png"
+dest_files=["res://.godot/imported/btn_green_small_white.png-1dff8aeb0426634c57eb065c11ddf596.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_orange.png b/assets/graphics/gui/play/btn_orange.png
new file mode 100644
index 0000000..32ecc5a
Binary files /dev/null and b/assets/graphics/gui/play/btn_orange.png differ
diff --git a/assets/graphics/gui/play/btn_orange.png.import b/assets/graphics/gui/play/btn_orange.png.import
new file mode 100644
index 0000000..78fef81
--- /dev/null
+++ b/assets/graphics/gui/play/btn_orange.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dexy7go5iyxfc"
+path="res://.godot/imported/btn_orange.png-8bdddea7f148d7c836f61cc72e25b10a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_orange.png"
+dest_files=["res://.godot/imported/btn_orange.png-8bdddea7f148d7c836f61cc72e25b10a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_yellow_small.png b/assets/graphics/gui/play/btn_yellow_small.png
new file mode 100644
index 0000000..374c55b
Binary files /dev/null and b/assets/graphics/gui/play/btn_yellow_small.png differ
diff --git a/assets/graphics/gui/play/btn_yellow_small.png.import b/assets/graphics/gui/play/btn_yellow_small.png.import
new file mode 100644
index 0000000..4794e1d
--- /dev/null
+++ b/assets/graphics/gui/play/btn_yellow_small.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cy6bk8we4pwbp"
+path="res://.godot/imported/btn_yellow_small.png-335f7fe8a56e3d9d452866405b15d00d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_yellow_small.png"
+dest_files=["res://.godot/imported/btn_yellow_small.png-335f7fe8a56e3d9d452866405b15d00d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_yellow_small_darken.png b/assets/graphics/gui/play/btn_yellow_small_darken.png
new file mode 100644
index 0000000..2c651f3
Binary files /dev/null and b/assets/graphics/gui/play/btn_yellow_small_darken.png differ
diff --git a/assets/graphics/gui/play/btn_yellow_small_darken.png.import b/assets/graphics/gui/play/btn_yellow_small_darken.png.import
new file mode 100644
index 0000000..63585d8
--- /dev/null
+++ b/assets/graphics/gui/play/btn_yellow_small_darken.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://codhx1scvisgj"
+path="res://.godot/imported/btn_yellow_small_darken.png-9993ca74911f34d2a5dc55e35cd218c7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_yellow_small_darken.png"
+dest_files=["res://.godot/imported/btn_yellow_small_darken.png-9993ca74911f34d2a5dc55e35cd218c7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/btn_yellow_small_white.png b/assets/graphics/gui/play/btn_yellow_small_white.png
new file mode 100644
index 0000000..515c649
Binary files /dev/null and b/assets/graphics/gui/play/btn_yellow_small_white.png differ
diff --git a/assets/graphics/gui/play/btn_yellow_small_white.png.import b/assets/graphics/gui/play/btn_yellow_small_white.png.import
new file mode 100644
index 0000000..1353572
--- /dev/null
+++ b/assets/graphics/gui/play/btn_yellow_small_white.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5om8b1doitm"
+path="res://.godot/imported/btn_yellow_small_white.png-ce43c469afb1d1a904914df6509ba8da.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/btn_yellow_small_white.png"
+dest_files=["res://.godot/imported/btn_yellow_small_white.png-ce43c469afb1d1a904914df6509ba8da.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/dim_bg.png b/assets/graphics/gui/play/dim_bg.png
new file mode 100644
index 0000000..b6766f6
Binary files /dev/null and b/assets/graphics/gui/play/dim_bg.png differ
diff --git a/assets/graphics/gui/play/dim_bg.png.import b/assets/graphics/gui/play/dim_bg.png.import
new file mode 100644
index 0000000..1714a87
--- /dev/null
+++ b/assets/graphics/gui/play/dim_bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ca3yxdwwqsf1b"
+path="res://.godot/imported/dim_bg.png-f2e6836a38836cdf7f5dc61acf930224.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/dim_bg.png"
+dest_files=["res://.godot/imported/dim_bg.png-f2e6836a38836cdf7f5dc61acf930224.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/free_vertical0.png b/assets/graphics/gui/play/free_vertical0.png
new file mode 100644
index 0000000..d4d0b19
Binary files /dev/null and b/assets/graphics/gui/play/free_vertical0.png differ
diff --git a/assets/graphics/gui/play/free_vertical0.png.import b/assets/graphics/gui/play/free_vertical0.png.import
new file mode 100644
index 0000000..d773a17
--- /dev/null
+++ b/assets/graphics/gui/play/free_vertical0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dn70i58gks8il"
+path="res://.godot/imported/free_vertical0.png-78fd0264cbeec0f40d491a898377af58.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/free_vertical0.png"
+dest_files=["res://.godot/imported/free_vertical0.png-78fd0264cbeec0f40d491a898377af58.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode-dimmed.png b/assets/graphics/gui/play/freemode-dimmed.png
new file mode 100644
index 0000000..c68a944
Binary files /dev/null and b/assets/graphics/gui/play/freemode-dimmed.png differ
diff --git a/assets/graphics/gui/play/freemode-dimmed.png.import b/assets/graphics/gui/play/freemode-dimmed.png.import
new file mode 100644
index 0000000..4a1191a
--- /dev/null
+++ b/assets/graphics/gui/play/freemode-dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1lilep4qo3tc"
+path="res://.godot/imported/freemode-dimmed.png-6ecfb5516b3166887427ce5bae2b1870.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode-dimmed.png"
+dest_files=["res://.godot/imported/freemode-dimmed.png-6ecfb5516b3166887427ce5bae2b1870.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode.png b/assets/graphics/gui/play/freemode.png
new file mode 100644
index 0000000..84ba093
Binary files /dev/null and b/assets/graphics/gui/play/freemode.png differ
diff --git a/assets/graphics/gui/play/freemode.png.import b/assets/graphics/gui/play/freemode.png.import
new file mode 100644
index 0000000..433fd19
--- /dev/null
+++ b/assets/graphics/gui/play/freemode.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4nejhkohp70d"
+path="res://.godot/imported/freemode.png-e72f317710d7244619f0cc80dc59e59d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode.png"
+dest_files=["res://.godot/imported/freemode.png-e72f317710d7244619f0cc80dc59e59d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode_art.png b/assets/graphics/gui/play/freemode_art.png
new file mode 100644
index 0000000..590770c
Binary files /dev/null and b/assets/graphics/gui/play/freemode_art.png differ
diff --git a/assets/graphics/gui/play/freemode_art.png.import b/assets/graphics/gui/play/freemode_art.png.import
new file mode 100644
index 0000000..ae2e81f
--- /dev/null
+++ b/assets/graphics/gui/play/freemode_art.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://iysns4it18op"
+path="res://.godot/imported/freemode_art.png-29caa09cc0b9c79432a0c4e0b4f1297b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode_art.png"
+dest_files=["res://.godot/imported/freemode_art.png-29caa09cc0b9c79432a0c4e0b4f1297b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode_bg.png b/assets/graphics/gui/play/freemode_bg.png
new file mode 100644
index 0000000..1319c4a
Binary files /dev/null and b/assets/graphics/gui/play/freemode_bg.png differ
diff --git a/assets/graphics/gui/play/freemode_bg.png.import b/assets/graphics/gui/play/freemode_bg.png.import
new file mode 100644
index 0000000..35461ee
--- /dev/null
+++ b/assets/graphics/gui/play/freemode_bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4s7luipbmmmb"
+path="res://.godot/imported/freemode_bg.png-8f523e290a33191b83c97e8f928a5a9a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode_bg.png"
+dest_files=["res://.godot/imported/freemode_bg.png-8f523e290a33191b83c97e8f928a5a9a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode_text.png b/assets/graphics/gui/play/freemode_text.png
new file mode 100644
index 0000000..0449ee0
Binary files /dev/null and b/assets/graphics/gui/play/freemode_text.png differ
diff --git a/assets/graphics/gui/play/freemode_text.png.import b/assets/graphics/gui/play/freemode_text.png.import
new file mode 100644
index 0000000..635de27
--- /dev/null
+++ b/assets/graphics/gui/play/freemode_text.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2yuljsh3so54"
+path="res://.godot/imported/freemode_text.png-a4c71deab7620096c448f5e2162c6ef4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode_text.png"
+dest_files=["res://.godot/imported/freemode_text.png-a4c71deab7620096c448f5e2162c6ef4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode_vertical.png b/assets/graphics/gui/play/freemode_vertical.png
new file mode 100644
index 0000000..5098a71
Binary files /dev/null and b/assets/graphics/gui/play/freemode_vertical.png differ
diff --git a/assets/graphics/gui/play/freemode_vertical.png.import b/assets/graphics/gui/play/freemode_vertical.png.import
new file mode 100644
index 0000000..1f40cae
--- /dev/null
+++ b/assets/graphics/gui/play/freemode_vertical.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://6lopq2j3kmai"
+path="res://.godot/imported/freemode_vertical.png-f17c96e25c17b2cbff4ec756927b42d4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode_vertical.png"
+dest_files=["res://.godot/imported/freemode_vertical.png-f17c96e25c17b2cbff4ec756927b42d4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode_vertical1.png b/assets/graphics/gui/play/freemode_vertical1.png
new file mode 100644
index 0000000..0bcebfb
Binary files /dev/null and b/assets/graphics/gui/play/freemode_vertical1.png differ
diff --git a/assets/graphics/gui/play/freemode_vertical1.png.import b/assets/graphics/gui/play/freemode_vertical1.png.import
new file mode 100644
index 0000000..c916dd0
--- /dev/null
+++ b/assets/graphics/gui/play/freemode_vertical1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcayym3mthcnt"
+path="res://.godot/imported/freemode_vertical1.png-db0cb1f15952e78f95ee3edd0e821e31.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode_vertical1.png"
+dest_files=["res://.godot/imported/freemode_vertical1.png-db0cb1f15952e78f95ee3edd0e821e31.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/freemode_vertical_dimmed.png b/assets/graphics/gui/play/freemode_vertical_dimmed.png
new file mode 100644
index 0000000..d3aff35
Binary files /dev/null and b/assets/graphics/gui/play/freemode_vertical_dimmed.png differ
diff --git a/assets/graphics/gui/play/freemode_vertical_dimmed.png.import b/assets/graphics/gui/play/freemode_vertical_dimmed.png.import
new file mode 100644
index 0000000..df56c97
--- /dev/null
+++ b/assets/graphics/gui/play/freemode_vertical_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bbuxwuypygk38"
+path="res://.godot/imported/freemode_vertical_dimmed.png-e1f79d7ef369c600994a2c77b3ea4492.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/freemode_vertical_dimmed.png"
+dest_files=["res://.godot/imported/freemode_vertical_dimmed.png-e1f79d7ef369c600994a2c77b3ea4492.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/host_bg.png b/assets/graphics/gui/play/host_bg.png
new file mode 100644
index 0000000..20f8060
Binary files /dev/null and b/assets/graphics/gui/play/host_bg.png differ
diff --git a/assets/graphics/gui/play/host_bg.png.import b/assets/graphics/gui/play/host_bg.png.import
new file mode 100644
index 0000000..2313e40
--- /dev/null
+++ b/assets/graphics/gui/play/host_bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b5g314ngid6le"
+path="res://.godot/imported/host_bg.png-4e0df17446b9c9ceef64bb7acbec5c1e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/host_bg.png"
+dest_files=["res://.godot/imported/host_bg.png-4e0df17446b9c9ceef64bb7acbec5c1e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/hot_icon.png b/assets/graphics/gui/play/hot_icon.png
new file mode 100644
index 0000000..53d94e9
Binary files /dev/null and b/assets/graphics/gui/play/hot_icon.png differ
diff --git a/assets/graphics/gui/play/hot_icon.png.import b/assets/graphics/gui/play/hot_icon.png.import
new file mode 100644
index 0000000..3532e00
--- /dev/null
+++ b/assets/graphics/gui/play/hot_icon.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ca23hhu7ekptl"
+path="res://.godot/imported/hot_icon.png-82b0ec5cf77053730396be7681703c52.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/hot_icon.png"
+dest_files=["res://.godot/imported/hot_icon.png-82b0ec5cf77053730396be7681703c52.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/join.png b/assets/graphics/gui/play/join.png
new file mode 100644
index 0000000..b7dd689
Binary files /dev/null and b/assets/graphics/gui/play/join.png differ
diff --git a/assets/graphics/gui/play/join.png.import b/assets/graphics/gui/play/join.png.import
new file mode 100644
index 0000000..9d8cd03
--- /dev/null
+++ b/assets/graphics/gui/play/join.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bupl61vxuub71"
+path="res://.godot/imported/join.png-9cda2a62acc2164c232bf714a0a23741.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/join.png"
+dest_files=["res://.godot/imported/join.png-9cda2a62acc2164c232bf714a0a23741.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/join_button.png b/assets/graphics/gui/play/join_button.png
new file mode 100644
index 0000000..e413939
Binary files /dev/null and b/assets/graphics/gui/play/join_button.png differ
diff --git a/assets/graphics/gui/play/join_button.png.import b/assets/graphics/gui/play/join_button.png.import
new file mode 100644
index 0000000..1143d95
--- /dev/null
+++ b/assets/graphics/gui/play/join_button.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhsf3whftmdgv"
+path="res://.godot/imported/join_button.png-1091a25b72920e91aafd8413a4b7daea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/join_button.png"
+dest_files=["res://.godot/imported/join_button.png-1091a25b72920e91aafd8413a4b7daea.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/join_dimmed.png b/assets/graphics/gui/play/join_dimmed.png
new file mode 100644
index 0000000..9644ba2
Binary files /dev/null and b/assets/graphics/gui/play/join_dimmed.png differ
diff --git a/assets/graphics/gui/play/join_dimmed.png.import b/assets/graphics/gui/play/join_dimmed.png.import
new file mode 100644
index 0000000..4d976aa
--- /dev/null
+++ b/assets/graphics/gui/play/join_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d4mt1q2fxkjy"
+path="res://.godot/imported/join_dimmed.png-bd0342c3152c06d7b81c0f3d4f97078d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/join_dimmed.png"
+dest_files=["res://.godot/imported/join_dimmed.png-bd0342c3152c06d7b81c0f3d4f97078d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/locked_room.png b/assets/graphics/gui/play/locked_room.png
new file mode 100644
index 0000000..e9abe48
Binary files /dev/null and b/assets/graphics/gui/play/locked_room.png differ
diff --git a/assets/graphics/gui/play/locked_room.png.import b/assets/graphics/gui/play/locked_room.png.import
new file mode 100644
index 0000000..aa972ac
--- /dev/null
+++ b/assets/graphics/gui/play/locked_room.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cgkv824v1pxy3"
+path="res://.godot/imported/locked_room.png-e7dcfb6150fa9adb90e3669cced2d805.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/locked_room.png"
+dest_files=["res://.godot/imported/locked_room.png-e7dcfb6150fa9adb90e3669cced2d805.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/locked_roomdim.png b/assets/graphics/gui/play/locked_roomdim.png
new file mode 100644
index 0000000..c4d2df6
Binary files /dev/null and b/assets/graphics/gui/play/locked_roomdim.png differ
diff --git a/assets/graphics/gui/play/locked_roomdim.png.import b/assets/graphics/gui/play/locked_roomdim.png.import
new file mode 100644
index 0000000..822a2e2
--- /dev/null
+++ b/assets/graphics/gui/play/locked_roomdim.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cm5o757lqbwy2"
+path="res://.godot/imported/locked_roomdim.png-5363ceb1694d54a29e9cb6e6a4622357.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/locked_roomdim.png"
+dest_files=["res://.godot/imported/locked_roomdim.png-5363ceb1694d54a29e9cb6e6a4622357.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/navi_row.png b/assets/graphics/gui/play/navi_row.png
new file mode 100644
index 0000000..32aac46
Binary files /dev/null and b/assets/graphics/gui/play/navi_row.png differ
diff --git a/assets/graphics/gui/play/navi_row.png.import b/assets/graphics/gui/play/navi_row.png.import
new file mode 100644
index 0000000..98b54d2
--- /dev/null
+++ b/assets/graphics/gui/play/navi_row.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8bgvfnqa46u8"
+path="res://.godot/imported/navi_row.png-b6aebc59460d96a6b41d73711473742d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/navi_row.png"
+dest_files=["res://.godot/imported/navi_row.png-b6aebc59460d96a6b41d73711473742d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/point.png b/assets/graphics/gui/play/point.png
new file mode 100644
index 0000000..ade4d39
Binary files /dev/null and b/assets/graphics/gui/play/point.png differ
diff --git a/assets/graphics/gui/play/point.png.import b/assets/graphics/gui/play/point.png.import
new file mode 100644
index 0000000..d00ff4a
--- /dev/null
+++ b/assets/graphics/gui/play/point.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwkyn0bq7dufh"
+path="res://.godot/imported/point.png-45f2473bbd782e4cd8e8c2a99098897b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/point.png"
+dest_files=["res://.godot/imported/point.png-45f2473bbd782e4cd8e8c2a99098897b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/proceed.png b/assets/graphics/gui/play/proceed.png
new file mode 100644
index 0000000..b00fc84
Binary files /dev/null and b/assets/graphics/gui/play/proceed.png differ
diff --git a/assets/graphics/gui/play/proceed.png.import b/assets/graphics/gui/play/proceed.png.import
new file mode 100644
index 0000000..b0e5f61
--- /dev/null
+++ b/assets/graphics/gui/play/proceed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpmmadr834r7s"
+path="res://.godot/imported/proceed.png-99c02bac71043718110580ad25638b13.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/proceed.png"
+dest_files=["res://.godot/imported/proceed.png-99c02bac71043718110580ad25638b13.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/rank_slot.png b/assets/graphics/gui/play/rank_slot.png
new file mode 100644
index 0000000..e7cfb06
Binary files /dev/null and b/assets/graphics/gui/play/rank_slot.png differ
diff --git a/assets/graphics/gui/play/rank_slot.png.import b/assets/graphics/gui/play/rank_slot.png.import
new file mode 100644
index 0000000..b64d1a3
--- /dev/null
+++ b/assets/graphics/gui/play/rank_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cwtbb0vfhfd27"
+path="res://.godot/imported/rank_slot.png-6d7ae160e97ad934c1b78b3b53b47e99.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/rank_slot.png"
+dest_files=["res://.godot/imported/rank_slot.png-6d7ae160e97ad934c1b78b3b53b47e99.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/referesh_dimmed.png b/assets/graphics/gui/play/referesh_dimmed.png
new file mode 100644
index 0000000..0966a5d
Binary files /dev/null and b/assets/graphics/gui/play/referesh_dimmed.png differ
diff --git a/assets/graphics/gui/play/referesh_dimmed.png.import b/assets/graphics/gui/play/referesh_dimmed.png.import
new file mode 100644
index 0000000..84c7e0e
--- /dev/null
+++ b/assets/graphics/gui/play/referesh_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bwu5ms5nsyy43"
+path="res://.godot/imported/referesh_dimmed.png-32a2aa04c9662d59bdbc74efb04d00cc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/referesh_dimmed.png"
+dest_files=["res://.godot/imported/referesh_dimmed.png-32a2aa04c9662d59bdbc74efb04d00cc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/refresh.png b/assets/graphics/gui/play/refresh.png
new file mode 100644
index 0000000..6745b0a
Binary files /dev/null and b/assets/graphics/gui/play/refresh.png differ
diff --git a/assets/graphics/gui/play/refresh.png.import b/assets/graphics/gui/play/refresh.png.import
new file mode 100644
index 0000000..f0db6c2
--- /dev/null
+++ b/assets/graphics/gui/play/refresh.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dimb6edbhvbrm"
+path="res://.godot/imported/refresh.png-269628f88f992a7e4f8b4d90a160d2fb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/refresh.png"
+dest_files=["res://.godot/imported/refresh.png-269628f88f992a7e4f8b4d90a160d2fb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/room_list.png b/assets/graphics/gui/play/room_list.png
new file mode 100644
index 0000000..9cf5e9b
Binary files /dev/null and b/assets/graphics/gui/play/room_list.png differ
diff --git a/assets/graphics/gui/play/room_list.png.import b/assets/graphics/gui/play/room_list.png.import
new file mode 100644
index 0000000..ed41a04
--- /dev/null
+++ b/assets/graphics/gui/play/room_list.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxngyrdx5riab"
+path="res://.godot/imported/room_list.png-fe35aeb6d9ceebe325b1a05ed6cbeaca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/room_list.png"
+dest_files=["res://.godot/imported/room_list.png-fe35aeb6d9ceebe325b1a05ed6cbeaca.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/room_slot.png b/assets/graphics/gui/play/room_slot.png
new file mode 100644
index 0000000..3d61087
Binary files /dev/null and b/assets/graphics/gui/play/room_slot.png differ
diff --git a/assets/graphics/gui/play/room_slot.png.import b/assets/graphics/gui/play/room_slot.png.import
new file mode 100644
index 0000000..40694b6
--- /dev/null
+++ b/assets/graphics/gui/play/room_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cc86r1lyarmba"
+path="res://.godot/imported/room_slot.png-1db45c6721e888af7fcbc9af99bc8fd2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/room_slot.png"
+dest_files=["res://.godot/imported/room_slot.png-1db45c6721e888af7fcbc9af99bc8fd2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/roomid_enter.png b/assets/graphics/gui/play/roomid_enter.png
new file mode 100644
index 0000000..e0ad21f
Binary files /dev/null and b/assets/graphics/gui/play/roomid_enter.png differ
diff --git a/assets/graphics/gui/play/roomid_enter.png.import b/assets/graphics/gui/play/roomid_enter.png.import
new file mode 100644
index 0000000..80c0d19
--- /dev/null
+++ b/assets/graphics/gui/play/roomid_enter.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dfr353bf24w43"
+path="res://.godot/imported/roomid_enter.png-45736fee66f14e625ed94eff315148c7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/roomid_enter.png"
+dest_files=["res://.godot/imported/roomid_enter.png-45736fee66f14e625ed94eff315148c7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/roomid_slot.png b/assets/graphics/gui/play/roomid_slot.png
new file mode 100644
index 0000000..ce25d09
Binary files /dev/null and b/assets/graphics/gui/play/roomid_slot.png differ
diff --git a/assets/graphics/gui/play/roomid_slot.png.import b/assets/graphics/gui/play/roomid_slot.png.import
new file mode 100644
index 0000000..6277f17
--- /dev/null
+++ b/assets/graphics/gui/play/roomid_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bkhuiohnhysmj"
+path="res://.godot/imported/roomid_slot.png-04383c0fa496a62b8dfec8c06f27319c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/roomid_slot.png"
+dest_files=["res://.godot/imported/roomid_slot.png-04383c0fa496a62b8dfec8c06f27319c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/scroll_fill.png b/assets/graphics/gui/play/scroll_fill.png
new file mode 100644
index 0000000..e47561b
Binary files /dev/null and b/assets/graphics/gui/play/scroll_fill.png differ
diff --git a/assets/graphics/gui/play/scroll_fill.png.import b/assets/graphics/gui/play/scroll_fill.png.import
new file mode 100644
index 0000000..58e1cf5
--- /dev/null
+++ b/assets/graphics/gui/play/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c1bc4af14p8s3"
+path="res://.godot/imported/scroll_fill.png-e0c56527ed0cfacafaaa9cab45f023d9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-e0c56527ed0cfacafaaa9cab45f023d9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/scroll_slot.png b/assets/graphics/gui/play/scroll_slot.png
new file mode 100644
index 0000000..d357fe6
Binary files /dev/null and b/assets/graphics/gui/play/scroll_slot.png differ
diff --git a/assets/graphics/gui/play/scroll_slot.png.import b/assets/graphics/gui/play/scroll_slot.png.import
new file mode 100644
index 0000000..10028ba
--- /dev/null
+++ b/assets/graphics/gui/play/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ory63nmognvm"
+path="res://.godot/imported/scroll_slot.png-260697a0bf643113cbfe9edf9457e257.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-260697a0bf643113cbfe9edf9457e257.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/selection_play0.png b/assets/graphics/gui/play/selection_play0.png
new file mode 100644
index 0000000..a5ea66a
Binary files /dev/null and b/assets/graphics/gui/play/selection_play0.png differ
diff --git a/assets/graphics/gui/play/selection_play0.png.import b/assets/graphics/gui/play/selection_play0.png.import
new file mode 100644
index 0000000..fe091ca
--- /dev/null
+++ b/assets/graphics/gui/play/selection_play0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://6agwwbc1l4g3"
+path="res://.godot/imported/selection_play0.png-4785a4b5674666fde03189316c63f320.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/selection_play0.png"
+dest_files=["res://.godot/imported/selection_play0.png-4785a4b5674666fde03189316c63f320.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/selection_play1.png b/assets/graphics/gui/play/selection_play1.png
new file mode 100644
index 0000000..4df7df7
Binary files /dev/null and b/assets/graphics/gui/play/selection_play1.png differ
diff --git a/assets/graphics/gui/play/selection_play1.png.import b/assets/graphics/gui/play/selection_play1.png.import
new file mode 100644
index 0000000..625442e
--- /dev/null
+++ b/assets/graphics/gui/play/selection_play1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpy5lppf3ro02"
+path="res://.godot/imported/selection_play1.png-c382582c8b900f36f55c141db01d3ac2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/selection_play1.png"
+dest_files=["res://.godot/imported/selection_play1.png-c382582c8b900f36f55c141db01d3ac2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/selection_room0.png b/assets/graphics/gui/play/selection_room0.png
new file mode 100644
index 0000000..163d94f
Binary files /dev/null and b/assets/graphics/gui/play/selection_room0.png differ
diff --git a/assets/graphics/gui/play/selection_room0.png.import b/assets/graphics/gui/play/selection_room0.png.import
new file mode 100644
index 0000000..86adfaf
--- /dev/null
+++ b/assets/graphics/gui/play/selection_room0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0ovmvcm8rt2n"
+path="res://.godot/imported/selection_room0.png-ccc8ccef926afe736c9263504c007e07.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/selection_room0.png"
+dest_files=["res://.godot/imported/selection_room0.png-ccc8ccef926afe736c9263504c007e07.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/selection_room1.png b/assets/graphics/gui/play/selection_room1.png
new file mode 100644
index 0000000..02ebda5
Binary files /dev/null and b/assets/graphics/gui/play/selection_room1.png differ
diff --git a/assets/graphics/gui/play/selection_room1.png.import b/assets/graphics/gui/play/selection_room1.png.import
new file mode 100644
index 0000000..e580ac0
--- /dev/null
+++ b/assets/graphics/gui/play/selection_room1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3p0sabd1og31"
+path="res://.godot/imported/selection_room1.png-0304863f950bb9de2915e81c219d6a71.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/selection_room1.png"
+dest_files=["res://.godot/imported/selection_room1.png-0304863f950bb9de2915e81c219d6a71.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo.png b/assets/graphics/gui/play/stopngo.png
new file mode 100644
index 0000000..97854dd
Binary files /dev/null and b/assets/graphics/gui/play/stopngo.png differ
diff --git a/assets/graphics/gui/play/stopngo.png.import b/assets/graphics/gui/play/stopngo.png.import
new file mode 100644
index 0000000..e5fbd07
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3kcp8qjd1vfm"
+path="res://.godot/imported/stopngo.png-623d984e741ad4e2ec16169cb0224da9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo.png"
+dest_files=["res://.godot/imported/stopngo.png-623d984e741ad4e2ec16169cb0224da9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_art.png b/assets/graphics/gui/play/stopngo_art.png
new file mode 100644
index 0000000..1194126
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_art.png differ
diff --git a/assets/graphics/gui/play/stopngo_art.png.import b/assets/graphics/gui/play/stopngo_art.png.import
new file mode 100644
index 0000000..1070e36
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_art.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bh2w7lukhq1oi"
+path="res://.godot/imported/stopngo_art.png-c14f5121ee842f989a25cc21e4c43e74.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_art.png"
+dest_files=["res://.godot/imported/stopngo_art.png-c14f5121ee842f989a25cc21e4c43e74.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_bg.png b/assets/graphics/gui/play/stopngo_bg.png
new file mode 100644
index 0000000..946a710
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_bg.png differ
diff --git a/assets/graphics/gui/play/stopngo_bg.png.import b/assets/graphics/gui/play/stopngo_bg.png.import
new file mode 100644
index 0000000..770a3ec
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://haitsks7x0dv"
+path="res://.godot/imported/stopngo_bg.png-6078f883a18d06d08bf5f21eb119896a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_bg.png"
+dest_files=["res://.godot/imported/stopngo_bg.png-6078f883a18d06d08bf5f21eb119896a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_dimmed.png b/assets/graphics/gui/play/stopngo_dimmed.png
new file mode 100644
index 0000000..db863e5
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_dimmed.png differ
diff --git a/assets/graphics/gui/play/stopngo_dimmed.png.import b/assets/graphics/gui/play/stopngo_dimmed.png.import
new file mode 100644
index 0000000..6cc6c39
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3tsnxh8xbxr5"
+path="res://.godot/imported/stopngo_dimmed.png-6504907a6ca6b2eaa481b9ccc96c9ee0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_dimmed.png"
+dest_files=["res://.godot/imported/stopngo_dimmed.png-6504907a6ca6b2eaa481b9ccc96c9ee0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_text.png b/assets/graphics/gui/play/stopngo_text.png
new file mode 100644
index 0000000..5e2ba53
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_text.png differ
diff --git a/assets/graphics/gui/play/stopngo_text.png.import b/assets/graphics/gui/play/stopngo_text.png.import
new file mode 100644
index 0000000..ff3f278
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_text.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cj6c2iaxo8stq"
+path="res://.godot/imported/stopngo_text.png-ce1a593fcd17fbbbef0ce1a82bdcc059.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_text.png"
+dest_files=["res://.godot/imported/stopngo_text.png-ce1a593fcd17fbbbef0ce1a82bdcc059.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_vertical.png b/assets/graphics/gui/play/stopngo_vertical.png
new file mode 100644
index 0000000..f407673
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_vertical.png differ
diff --git a/assets/graphics/gui/play/stopngo_vertical.png.import b/assets/graphics/gui/play/stopngo_vertical.png.import
new file mode 100644
index 0000000..f845ecf
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_vertical.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blh0vhxpbiqip"
+path="res://.godot/imported/stopngo_vertical.png-da27bdc1b568a65d08e26d8661a25461.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_vertical.png"
+dest_files=["res://.godot/imported/stopngo_vertical.png-da27bdc1b568a65d08e26d8661a25461.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_vertical0.png b/assets/graphics/gui/play/stopngo_vertical0.png
new file mode 100644
index 0000000..ffc7bb8
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_vertical0.png differ
diff --git a/assets/graphics/gui/play/stopngo_vertical0.png.import b/assets/graphics/gui/play/stopngo_vertical0.png.import
new file mode 100644
index 0000000..ed07eab
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_vertical0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://l8x4x5835poe"
+path="res://.godot/imported/stopngo_vertical0.png-3d31a6a21dde8fc9df688950a83e24cc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_vertical0.png"
+dest_files=["res://.godot/imported/stopngo_vertical0.png-3d31a6a21dde8fc9df688950a83e24cc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_vertical1.png b/assets/graphics/gui/play/stopngo_vertical1.png
new file mode 100644
index 0000000..afa8a8f
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_vertical1.png differ
diff --git a/assets/graphics/gui/play/stopngo_vertical1.png.import b/assets/graphics/gui/play/stopngo_vertical1.png.import
new file mode 100644
index 0000000..e0f4c3d
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_vertical1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cmiwu6otbgtna"
+path="res://.godot/imported/stopngo_vertical1.png-d8c100827da4797195c5b0bdc4038158.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_vertical1.png"
+dest_files=["res://.godot/imported/stopngo_vertical1.png-d8c100827da4797195c5b0bdc4038158.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/stopngo_vertical_dimmed.png b/assets/graphics/gui/play/stopngo_vertical_dimmed.png
new file mode 100644
index 0000000..5d9e480
Binary files /dev/null and b/assets/graphics/gui/play/stopngo_vertical_dimmed.png differ
diff --git a/assets/graphics/gui/play/stopngo_vertical_dimmed.png.import b/assets/graphics/gui/play/stopngo_vertical_dimmed.png.import
new file mode 100644
index 0000000..0a7777a
--- /dev/null
+++ b/assets/graphics/gui/play/stopngo_vertical_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cniyw4aa1kc4n"
+path="res://.godot/imported/stopngo_vertical_dimmed.png-c61a46d48d5848fb1683cfce8b9ad4cf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/stopngo_vertical_dimmed.png"
+dest_files=["res://.godot/imported/stopngo_vertical_dimmed.png-c61a46d48d5848fb1683cfce8b9ad4cf.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/story.png b/assets/graphics/gui/play/story.png
new file mode 100644
index 0000000..277d42d
Binary files /dev/null and b/assets/graphics/gui/play/story.png differ
diff --git a/assets/graphics/gui/play/story.png.import b/assets/graphics/gui/play/story.png.import
new file mode 100644
index 0000000..f397d41
--- /dev/null
+++ b/assets/graphics/gui/play/story.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chkt6c6tt7gdb"
+path="res://.godot/imported/story.png-1e8ea1592aae654646defe8317d0b8c3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/story.png"
+dest_files=["res://.godot/imported/story.png-1e8ea1592aae654646defe8317d0b8c3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/story_dimmed.png b/assets/graphics/gui/play/story_dimmed.png
new file mode 100644
index 0000000..5c6aff2
Binary files /dev/null and b/assets/graphics/gui/play/story_dimmed.png differ
diff --git a/assets/graphics/gui/play/story_dimmed.png.import b/assets/graphics/gui/play/story_dimmed.png.import
new file mode 100644
index 0000000..e1013e1
--- /dev/null
+++ b/assets/graphics/gui/play/story_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://6oeuovfdxahu"
+path="res://.godot/imported/story_dimmed.png-f7eb5b59a1dd22f9b615b5cb685dd832.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/story_dimmed.png"
+dest_files=["res://.godot/imported/story_dimmed.png-f7eb5b59a1dd22f9b615b5cb685dd832.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/storymode_art.png b/assets/graphics/gui/play/storymode_art.png
new file mode 100644
index 0000000..1e81a37
Binary files /dev/null and b/assets/graphics/gui/play/storymode_art.png differ
diff --git a/assets/graphics/gui/play/storymode_art.png.import b/assets/graphics/gui/play/storymode_art.png.import
new file mode 100644
index 0000000..5cfa131
--- /dev/null
+++ b/assets/graphics/gui/play/storymode_art.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7te0w8jhvy30"
+path="res://.godot/imported/storymode_art.png-5a7be3f4ab29c2ccfa7f1b625e4ece28.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/storymode_art.png"
+dest_files=["res://.godot/imported/storymode_art.png-5a7be3f4ab29c2ccfa7f1b625e4ece28.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/storymode_bg.png b/assets/graphics/gui/play/storymode_bg.png
new file mode 100644
index 0000000..d1f2634
Binary files /dev/null and b/assets/graphics/gui/play/storymode_bg.png differ
diff --git a/assets/graphics/gui/play/storymode_bg.png.import b/assets/graphics/gui/play/storymode_bg.png.import
new file mode 100644
index 0000000..3092433
--- /dev/null
+++ b/assets/graphics/gui/play/storymode_bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bkonx178dcm78"
+path="res://.godot/imported/storymode_bg.png-000c14fbbcc142581a19d49ad56b22dd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/storymode_bg.png"
+dest_files=["res://.godot/imported/storymode_bg.png-000c14fbbcc142581a19d49ad56b22dd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/storymode_text.png b/assets/graphics/gui/play/storymode_text.png
new file mode 100644
index 0000000..80f8e90
Binary files /dev/null and b/assets/graphics/gui/play/storymode_text.png differ
diff --git a/assets/graphics/gui/play/storymode_text.png.import b/assets/graphics/gui/play/storymode_text.png.import
new file mode 100644
index 0000000..9834f17
--- /dev/null
+++ b/assets/graphics/gui/play/storymode_text.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://csynv4vq8k6fj"
+path="res://.godot/imported/storymode_text.png-13da1f1d42227c2cf76115b7e9d046a9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/storymode_text.png"
+dest_files=["res://.godot/imported/storymode_text.png-13da1f1d42227c2cf76115b7e9d046a9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/x.png b/assets/graphics/gui/play/x.png
new file mode 100644
index 0000000..9c89c6a
Binary files /dev/null and b/assets/graphics/gui/play/x.png differ
diff --git a/assets/graphics/gui/play/x.png.import b/assets/graphics/gui/play/x.png.import
new file mode 100644
index 0000000..064fcdb
--- /dev/null
+++ b/assets/graphics/gui/play/x.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://23tvis1trvfr"
+path="res://.godot/imported/x.png-6f35067cb7765ea524c22176ead2004e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/x.png"
+dest_files=["res://.godot/imported/x.png-6f35067cb7765ea524c22176ead2004e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/play/x_dimmed.png b/assets/graphics/gui/play/x_dimmed.png
new file mode 100644
index 0000000..9bca851
Binary files /dev/null and b/assets/graphics/gui/play/x_dimmed.png differ
diff --git a/assets/graphics/gui/play/x_dimmed.png.import b/assets/graphics/gui/play/x_dimmed.png.import
new file mode 100644
index 0000000..7b01320
--- /dev/null
+++ b/assets/graphics/gui/play/x_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cb454spy2usoa"
+path="res://.godot/imported/x_dimmed.png-38838f913f493aa0ffffa045b8ff7afe.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/play/x_dimmed.png"
+dest_files=["res://.godot/imported/x_dimmed.png-38838f913f493aa0ffffa045b8ff7afe.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/achievement1.png b/assets/graphics/gui/playerinfo/achievement1.png
new file mode 100644
index 0000000..7c7f643
Binary files /dev/null and b/assets/graphics/gui/playerinfo/achievement1.png differ
diff --git a/assets/graphics/gui/playerinfo/achievement1.png.import b/assets/graphics/gui/playerinfo/achievement1.png.import
new file mode 100644
index 0000000..1a56037
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/achievement1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b6kmrs5yvvdm2"
+path="res://.godot/imported/achievement1.png-7de12eb16f6c4613895bce0a10549cfc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/achievement1.png"
+dest_files=["res://.godot/imported/achievement1.png-7de12eb16f6c4613895bce0a10549cfc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/achievement1_slot.png b/assets/graphics/gui/playerinfo/achievement1_slot.png
new file mode 100644
index 0000000..9fc6bb0
Binary files /dev/null and b/assets/graphics/gui/playerinfo/achievement1_slot.png differ
diff --git a/assets/graphics/gui/playerinfo/achievement1_slot.png.import b/assets/graphics/gui/playerinfo/achievement1_slot.png.import
new file mode 100644
index 0000000..cd9d8d6
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/achievement1_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bb1tuunopeqrb"
+path="res://.godot/imported/achievement1_slot.png-084cd0dba38d220fdbfe64c913fa98f2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/achievement1_slot.png"
+dest_files=["res://.godot/imported/achievement1_slot.png-084cd0dba38d220fdbfe64c913fa98f2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/bg.png b/assets/graphics/gui/playerinfo/bg.png
new file mode 100644
index 0000000..e1e71b8
Binary files /dev/null and b/assets/graphics/gui/playerinfo/bg.png differ
diff --git a/assets/graphics/gui/playerinfo/bg.png.import b/assets/graphics/gui/playerinfo/bg.png.import
new file mode 100644
index 0000000..6ebb78d
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://on1rm1lb1q4v"
+path="res://.godot/imported/bg.png-19aa0c633d4c602e2aed9742b32ccc59.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/bg.png"
+dest_files=["res://.godot/imported/bg.png-19aa0c633d4c602e2aed9742b32ccc59.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/button_addfriend.png b/assets/graphics/gui/playerinfo/button_addfriend.png
new file mode 100644
index 0000000..62a40dc
Binary files /dev/null and b/assets/graphics/gui/playerinfo/button_addfriend.png differ
diff --git a/assets/graphics/gui/playerinfo/button_addfriend.png.import b/assets/graphics/gui/playerinfo/button_addfriend.png.import
new file mode 100644
index 0000000..b1e9b81
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/button_addfriend.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1rsvasc56qth"
+path="res://.godot/imported/button_addfriend.png-8322f4bfd2362f18c5c4a3efa40d00a1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/button_addfriend.png"
+dest_files=["res://.godot/imported/button_addfriend.png-8322f4bfd2362f18c5c4a3efa40d00a1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/button_chat.png b/assets/graphics/gui/playerinfo/button_chat.png
new file mode 100644
index 0000000..6d17835
Binary files /dev/null and b/assets/graphics/gui/playerinfo/button_chat.png differ
diff --git a/assets/graphics/gui/playerinfo/button_chat.png.import b/assets/graphics/gui/playerinfo/button_chat.png.import
new file mode 100644
index 0000000..11f502d
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/button_chat.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bg7ii1r31uefb"
+path="res://.godot/imported/button_chat.png-545333c01ef84f5e05aec38beb66629b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/button_chat.png"
+dest_files=["res://.godot/imported/button_chat.png-545333c01ef84f5e05aec38beb66629b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/button_report.png b/assets/graphics/gui/playerinfo/button_report.png
new file mode 100644
index 0000000..e5bc0a6
Binary files /dev/null and b/assets/graphics/gui/playerinfo/button_report.png differ
diff --git a/assets/graphics/gui/playerinfo/button_report.png.import b/assets/graphics/gui/playerinfo/button_report.png.import
new file mode 100644
index 0000000..1b8f79c
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/button_report.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bgtq7j80gvrld"
+path="res://.godot/imported/button_report.png-b21b8fba9452ad562a76aff10fce8a08.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/button_report.png"
+dest_files=["res://.godot/imported/button_report.png-b21b8fba9452ad562a76aff10fce8a08.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/mc_copper copy.png b/assets/graphics/gui/playerinfo/mc_copper copy.png
new file mode 100644
index 0000000..4397ac4
Binary files /dev/null and b/assets/graphics/gui/playerinfo/mc_copper copy.png differ
diff --git a/assets/graphics/gui/playerinfo/mc_copper copy.png.import b/assets/graphics/gui/playerinfo/mc_copper copy.png.import
new file mode 100644
index 0000000..8e82a95
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/mc_copper copy.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c46xgqtp3evq6"
+path="res://.godot/imported/mc_copper copy.png-e08687c7e093c48b292f03e183af55b6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/mc_copper copy.png"
+dest_files=["res://.godot/imported/mc_copper copy.png-e08687c7e093c48b292f03e183af55b6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/point.png b/assets/graphics/gui/playerinfo/point.png
new file mode 100644
index 0000000..ade4d39
Binary files /dev/null and b/assets/graphics/gui/playerinfo/point.png differ
diff --git a/assets/graphics/gui/playerinfo/point.png.import b/assets/graphics/gui/playerinfo/point.png.import
new file mode 100644
index 0000000..e86160a
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/point.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dd580dsdy7116"
+path="res://.godot/imported/point.png-e21471c60ff7a919cf3ca6178294d332.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/point.png"
+dest_files=["res://.godot/imported/point.png-e21471c60ff7a919cf3ca6178294d332.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/preview_dasher1.png b/assets/graphics/gui/playerinfo/preview_dasher1.png
new file mode 100644
index 0000000..8e11c95
Binary files /dev/null and b/assets/graphics/gui/playerinfo/preview_dasher1.png differ
diff --git a/assets/graphics/gui/playerinfo/preview_dasher1.png.import b/assets/graphics/gui/playerinfo/preview_dasher1.png.import
new file mode 100644
index 0000000..c6e9877
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/preview_dasher1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rsyv2apbj7nk"
+path="res://.godot/imported/preview_dasher1.png-0c42eb24413d0154c701fae407390549.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/preview_dasher1.png"
+dest_files=["res://.godot/imported/preview_dasher1.png-0c42eb24413d0154c701fae407390549.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/preview_dasher2.png b/assets/graphics/gui/playerinfo/preview_dasher2.png
new file mode 100644
index 0000000..b58abc3
Binary files /dev/null and b/assets/graphics/gui/playerinfo/preview_dasher2.png differ
diff --git a/assets/graphics/gui/playerinfo/preview_dasher2.png.import b/assets/graphics/gui/playerinfo/preview_dasher2.png.import
new file mode 100644
index 0000000..430c4b2
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/preview_dasher2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://p3s0ehf0agmm"
+path="res://.godot/imported/preview_dasher2.png-26255bee99f32569be998fc07e16a3c2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/preview_dasher2.png"
+dest_files=["res://.godot/imported/preview_dasher2.png-26255bee99f32569be998fc07e16a3c2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/preview_left.png b/assets/graphics/gui/playerinfo/preview_left.png
new file mode 100644
index 0000000..0ae5f67
Binary files /dev/null and b/assets/graphics/gui/playerinfo/preview_left.png differ
diff --git a/assets/graphics/gui/playerinfo/preview_left.png.import b/assets/graphics/gui/playerinfo/preview_left.png.import
new file mode 100644
index 0000000..c1e7919
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/preview_left.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://brgrxl20ewgt3"
+path="res://.godot/imported/preview_left.png-888a84d3796f9e3490a536e4ea45c1c6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/preview_left.png"
+dest_files=["res://.godot/imported/preview_left.png-888a84d3796f9e3490a536e4ea45c1c6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/preview_right.png b/assets/graphics/gui/playerinfo/preview_right.png
new file mode 100644
index 0000000..bfa8a6b
Binary files /dev/null and b/assets/graphics/gui/playerinfo/preview_right.png differ
diff --git a/assets/graphics/gui/playerinfo/preview_right.png.import b/assets/graphics/gui/playerinfo/preview_right.png.import
new file mode 100644
index 0000000..0a8c32d
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/preview_right.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtlrkbqgo3cuc"
+path="res://.godot/imported/preview_right.png-cb992a7602a3781342a86878865bac17.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/preview_right.png"
+dest_files=["res://.godot/imported/preview_right.png-cb992a7602a3781342a86878865bac17.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/rank_slot.png b/assets/graphics/gui/playerinfo/rank_slot.png
new file mode 100644
index 0000000..e7cfb06
Binary files /dev/null and b/assets/graphics/gui/playerinfo/rank_slot.png differ
diff --git a/assets/graphics/gui/playerinfo/rank_slot.png.import b/assets/graphics/gui/playerinfo/rank_slot.png.import
new file mode 100644
index 0000000..37909a5
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/rank_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blm7lfdwvnubf"
+path="res://.godot/imported/rank_slot.png-2484dd3be0f2164dbdc0fd3a97189191.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/rank_slot.png"
+dest_files=["res://.godot/imported/rank_slot.png-2484dd3be0f2164dbdc0fd3a97189191.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/selection_dasher0.png b/assets/graphics/gui/playerinfo/selection_dasher0.png
new file mode 100644
index 0000000..6a7322b
Binary files /dev/null and b/assets/graphics/gui/playerinfo/selection_dasher0.png differ
diff --git a/assets/graphics/gui/playerinfo/selection_dasher0.png.import b/assets/graphics/gui/playerinfo/selection_dasher0.png.import
new file mode 100644
index 0000000..a621ba2
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/selection_dasher0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5xteix2pvbhx"
+path="res://.godot/imported/selection_dasher0.png-60633865db6cedb85156e94370c1d4e8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/selection_dasher0.png"
+dest_files=["res://.godot/imported/selection_dasher0.png-60633865db6cedb85156e94370c1d4e8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/selection_dasher1.png b/assets/graphics/gui/playerinfo/selection_dasher1.png
new file mode 100644
index 0000000..60d77e0
Binary files /dev/null and b/assets/graphics/gui/playerinfo/selection_dasher1.png differ
diff --git a/assets/graphics/gui/playerinfo/selection_dasher1.png.import b/assets/graphics/gui/playerinfo/selection_dasher1.png.import
new file mode 100644
index 0000000..43be8f7
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/selection_dasher1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bg77xxqcaakpp"
+path="res://.godot/imported/selection_dasher1.png-4469fd1341b3ad582b0a4e9d4ca00dcf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/selection_dasher1.png"
+dest_files=["res://.godot/imported/selection_dasher1.png-4469fd1341b3ad582b0a4e9d4ca00dcf.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/selection_playerinfo0.png b/assets/graphics/gui/playerinfo/selection_playerinfo0.png
new file mode 100644
index 0000000..2998e08
Binary files /dev/null and b/assets/graphics/gui/playerinfo/selection_playerinfo0.png differ
diff --git a/assets/graphics/gui/playerinfo/selection_playerinfo0.png.import b/assets/graphics/gui/playerinfo/selection_playerinfo0.png.import
new file mode 100644
index 0000000..08f0e03
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/selection_playerinfo0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0ujbqw0t858m"
+path="res://.godot/imported/selection_playerinfo0.png-bc19aaa2a61dc99ce2382801017de8f9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/selection_playerinfo0.png"
+dest_files=["res://.godot/imported/selection_playerinfo0.png-bc19aaa2a61dc99ce2382801017de8f9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/selection_playerinfo1.png b/assets/graphics/gui/playerinfo/selection_playerinfo1.png
new file mode 100644
index 0000000..846fc2d
Binary files /dev/null and b/assets/graphics/gui/playerinfo/selection_playerinfo1.png differ
diff --git a/assets/graphics/gui/playerinfo/selection_playerinfo1.png.import b/assets/graphics/gui/playerinfo/selection_playerinfo1.png.import
new file mode 100644
index 0000000..555f5e4
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/selection_playerinfo1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://du160utsg6h0c"
+path="res://.godot/imported/selection_playerinfo1.png-146779148a2114878e3832f4b5089d29.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/selection_playerinfo1.png"
+dest_files=["res://.godot/imported/selection_playerinfo1.png-146779148a2114878e3832f4b5089d29.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/playerinfo/x.png b/assets/graphics/gui/playerinfo/x.png
new file mode 100644
index 0000000..59e5cd2
Binary files /dev/null and b/assets/graphics/gui/playerinfo/x.png differ
diff --git a/assets/graphics/gui/playerinfo/x.png.import b/assets/graphics/gui/playerinfo/x.png.import
new file mode 100644
index 0000000..11058c6
--- /dev/null
+++ b/assets/graphics/gui/playerinfo/x.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btbusrqto1xej"
+path="res://.godot/imported/x.png-2f5ef2e50e9a613cc900d38e417a57c1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/playerinfo/x.png"
+dest_files=["res://.godot/imported/x.png-2f5ef2e50e9a613cc900d38e417a57c1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/Rectangle 984.png b/assets/graphics/gui/rank/Rectangle 984.png
new file mode 100644
index 0000000..fb3d27e
Binary files /dev/null and b/assets/graphics/gui/rank/Rectangle 984.png differ
diff --git a/assets/graphics/gui/rank/Rectangle 984.png.import b/assets/graphics/gui/rank/Rectangle 984.png.import
new file mode 100644
index 0000000..fbb51e4
--- /dev/null
+++ b/assets/graphics/gui/rank/Rectangle 984.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ce4cjsx2b4muv"
+path="res://.godot/imported/Rectangle 984.png-c48e5df786e9257543acab11eeb3af0f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/Rectangle 984.png"
+dest_files=["res://.godot/imported/Rectangle 984.png-c48e5df786e9257543acab11eeb3af0f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/back.png b/assets/graphics/gui/rank/back.png
new file mode 100644
index 0000000..e230871
Binary files /dev/null and b/assets/graphics/gui/rank/back.png differ
diff --git a/assets/graphics/gui/rank/back.png.import b/assets/graphics/gui/rank/back.png.import
new file mode 100644
index 0000000..772bf4a
--- /dev/null
+++ b/assets/graphics/gui/rank/back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://niypnpibnpv"
+path="res://.godot/imported/back.png-384420da9c47b3c0f03969503055ab2e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/back.png"
+dest_files=["res://.godot/imported/back.png-384420da9c47b3c0f03969503055ab2e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/bg.png b/assets/graphics/gui/rank/bg.png
new file mode 100644
index 0000000..7019e14
Binary files /dev/null and b/assets/graphics/gui/rank/bg.png differ
diff --git a/assets/graphics/gui/rank/bg.png.import b/assets/graphics/gui/rank/bg.png.import
new file mode 100644
index 0000000..b55e053
--- /dev/null
+++ b/assets/graphics/gui/rank/bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dcva1fghlpnyp"
+path="res://.godot/imported/bg.png-9c8240403eb8e31ee681144bf688efa5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/bg.png"
+dest_files=["res://.godot/imported/bg.png-9c8240403eb8e31ee681144bf688efa5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/diamond.png b/assets/graphics/gui/rank/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/rank/diamond.png differ
diff --git a/assets/graphics/gui/rank/diamond.png.import b/assets/graphics/gui/rank/diamond.png.import
new file mode 100644
index 0000000..55ba8ba
--- /dev/null
+++ b/assets/graphics/gui/rank/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b6h3m0xjvsa4g"
+path="res://.godot/imported/diamond.png-dff2f26aea54b89e2b40c96ea5c0e4c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-dff2f26aea54b89e2b40c96ea5c0e4c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/gold.png b/assets/graphics/gui/rank/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/rank/gold.png differ
diff --git a/assets/graphics/gui/rank/gold.png.import b/assets/graphics/gui/rank/gold.png.import
new file mode 100644
index 0000000..3cb6420
--- /dev/null
+++ b/assets/graphics/gui/rank/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnfta2bbscspo"
+path="res://.godot/imported/gold.png-4a14e4077402876a23e0961b981c8369.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/gold.png"
+dest_files=["res://.godot/imported/gold.png-4a14e4077402876a23e0961b981c8369.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/mailbox.png b/assets/graphics/gui/rank/mailbox.png
new file mode 100644
index 0000000..91a6ef8
Binary files /dev/null and b/assets/graphics/gui/rank/mailbox.png differ
diff --git a/assets/graphics/gui/rank/mailbox.png.import b/assets/graphics/gui/rank/mailbox.png.import
new file mode 100644
index 0000000..e778c65
--- /dev/null
+++ b/assets/graphics/gui/rank/mailbox.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b6fq7r8rswxpl"
+path="res://.godot/imported/mailbox.png-ec05e50cdb9a2e4d37c14698f75e10d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/mailbox.png"
+dest_files=["res://.godot/imported/mailbox.png-ec05e50cdb9a2e4d37c14698f75e10d5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/mc_copper copy.png b/assets/graphics/gui/rank/mc_copper copy.png
new file mode 100644
index 0000000..5ca4307
Binary files /dev/null and b/assets/graphics/gui/rank/mc_copper copy.png differ
diff --git a/assets/graphics/gui/rank/mc_copper copy.png.import b/assets/graphics/gui/rank/mc_copper copy.png.import
new file mode 100644
index 0000000..ee69f4f
--- /dev/null
+++ b/assets/graphics/gui/rank/mc_copper copy.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dr75libl8pypu"
+path="res://.godot/imported/mc_copper copy.png-d75d9de995a957c325501914c8a4c1c6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/mc_copper copy.png"
+dest_files=["res://.godot/imported/mc_copper copy.png-d75d9de995a957c325501914c8a4c1c6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/notif.png b/assets/graphics/gui/rank/notif.png
new file mode 100644
index 0000000..24c70a7
Binary files /dev/null and b/assets/graphics/gui/rank/notif.png differ
diff --git a/assets/graphics/gui/rank/notif.png.import b/assets/graphics/gui/rank/notif.png.import
new file mode 100644
index 0000000..e04cf03
--- /dev/null
+++ b/assets/graphics/gui/rank/notif.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5ll0s3t7c15t"
+path="res://.godot/imported/notif.png-8f71383f212c7bc5425595164e189d27.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/notif.png"
+dest_files=["res://.godot/imported/notif.png-8f71383f212c7bc5425595164e189d27.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/point.png b/assets/graphics/gui/rank/point.png
new file mode 100644
index 0000000..6ab160f
Binary files /dev/null and b/assets/graphics/gui/rank/point.png differ
diff --git a/assets/graphics/gui/rank/point.png.import b/assets/graphics/gui/rank/point.png.import
new file mode 100644
index 0000000..e7b61c1
--- /dev/null
+++ b/assets/graphics/gui/rank/point.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b5u3yfspngfsd"
+path="res://.godot/imported/point.png-66a4ca726207a4ff69d34ac711b0415a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/point.png"
+dest_files=["res://.godot/imported/point.png-66a4ca726207a4ff69d34ac711b0415a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/rank.png b/assets/graphics/gui/rank/rank.png
new file mode 100644
index 0000000..7214500
Binary files /dev/null and b/assets/graphics/gui/rank/rank.png differ
diff --git a/assets/graphics/gui/rank/rank.png.import b/assets/graphics/gui/rank/rank.png.import
new file mode 100644
index 0000000..4ce6e1e
--- /dev/null
+++ b/assets/graphics/gui/rank/rank.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crbnxod3pwmsw"
+path="res://.godot/imported/rank.png-ca512dbc9ba5da45af075a7b6e39641d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/rank.png"
+dest_files=["res://.godot/imported/rank.png-ca512dbc9ba5da45af075a7b6e39641d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/resource_slot.png b/assets/graphics/gui/rank/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/rank/resource_slot.png differ
diff --git a/assets/graphics/gui/rank/resource_slot.png.import b/assets/graphics/gui/rank/resource_slot.png.import
new file mode 100644
index 0000000..ee23efe
--- /dev/null
+++ b/assets/graphics/gui/rank/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://oks2v23nsqxm"
+path="res://.godot/imported/resource_slot.png-96597f1a334fe8f0d36f878a6d97323e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-96597f1a334fe8f0d36f878a6d97323e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/reward.png b/assets/graphics/gui/rank/reward.png
new file mode 100644
index 0000000..74ee647
Binary files /dev/null and b/assets/graphics/gui/rank/reward.png differ
diff --git a/assets/graphics/gui/rank/reward.png.import b/assets/graphics/gui/rank/reward.png.import
new file mode 100644
index 0000000..23d2677
--- /dev/null
+++ b/assets/graphics/gui/rank/reward.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://diu7pekaqcsq0"
+path="res://.godot/imported/reward.png-5a0aab74514cc671fc10d48cf5fccce0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/reward.png"
+dest_files=["res://.godot/imported/reward.png-5a0aab74514cc671fc10d48cf5fccce0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/scroll_fill.png b/assets/graphics/gui/rank/scroll_fill.png
new file mode 100644
index 0000000..feb9635
Binary files /dev/null and b/assets/graphics/gui/rank/scroll_fill.png differ
diff --git a/assets/graphics/gui/rank/scroll_fill.png.import b/assets/graphics/gui/rank/scroll_fill.png.import
new file mode 100644
index 0000000..c7416e2
--- /dev/null
+++ b/assets/graphics/gui/rank/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3gwykh6tc4iq"
+path="res://.godot/imported/scroll_fill.png-6f47c3c7fdf5861d5e8361e9b43bd859.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-6f47c3c7fdf5861d5e8361e9b43bd859.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/scroll_slot.png b/assets/graphics/gui/rank/scroll_slot.png
new file mode 100644
index 0000000..902e2d9
Binary files /dev/null and b/assets/graphics/gui/rank/scroll_slot.png differ
diff --git a/assets/graphics/gui/rank/scroll_slot.png.import b/assets/graphics/gui/rank/scroll_slot.png.import
new file mode 100644
index 0000000..6f48149
--- /dev/null
+++ b/assets/graphics/gui/rank/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drhoscv3g5c62"
+path="res://.godot/imported/scroll_slot.png-2c78d85c7ed43b097c6f46ed1fddd9f1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-2c78d85c7ed43b097c6f46ed1fddd9f1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/selection_freemode0.png b/assets/graphics/gui/rank/selection_freemode0.png
new file mode 100644
index 0000000..b1c3b52
Binary files /dev/null and b/assets/graphics/gui/rank/selection_freemode0.png differ
diff --git a/assets/graphics/gui/rank/selection_freemode0.png.import b/assets/graphics/gui/rank/selection_freemode0.png.import
new file mode 100644
index 0000000..64f5051
--- /dev/null
+++ b/assets/graphics/gui/rank/selection_freemode0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://n5kxpqwfcjvg"
+path="res://.godot/imported/selection_freemode0.png-ae050adccc4991e9af8d22432821a8d9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/selection_freemode0.png"
+dest_files=["res://.godot/imported/selection_freemode0.png-ae050adccc4991e9af8d22432821a8d9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/selection_freemode1.png b/assets/graphics/gui/rank/selection_freemode1.png
new file mode 100644
index 0000000..88e23a0
Binary files /dev/null and b/assets/graphics/gui/rank/selection_freemode1.png differ
diff --git a/assets/graphics/gui/rank/selection_freemode1.png.import b/assets/graphics/gui/rank/selection_freemode1.png.import
new file mode 100644
index 0000000..b76ce76
--- /dev/null
+++ b/assets/graphics/gui/rank/selection_freemode1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bepl5msibfl4w"
+path="res://.godot/imported/selection_freemode1.png-71c976440cab129e03e18bb1233e2fe2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/selection_freemode1.png"
+dest_files=["res://.godot/imported/selection_freemode1.png-71c976440cab129e03e18bb1233e2fe2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/selection_reward0.png b/assets/graphics/gui/rank/selection_reward0.png
new file mode 100644
index 0000000..bffe80a
Binary files /dev/null and b/assets/graphics/gui/rank/selection_reward0.png differ
diff --git a/assets/graphics/gui/rank/selection_reward0.png.import b/assets/graphics/gui/rank/selection_reward0.png.import
new file mode 100644
index 0000000..1d9cfb1
--- /dev/null
+++ b/assets/graphics/gui/rank/selection_reward0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkdusih3dhxeu"
+path="res://.godot/imported/selection_reward0.png-5007e39123e4e87577d28b90a84f09c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/selection_reward0.png"
+dest_files=["res://.godot/imported/selection_reward0.png-5007e39123e4e87577d28b90a84f09c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/selection_reward1.png b/assets/graphics/gui/rank/selection_reward1.png
new file mode 100644
index 0000000..fb69113
Binary files /dev/null and b/assets/graphics/gui/rank/selection_reward1.png differ
diff --git a/assets/graphics/gui/rank/selection_reward1.png.import b/assets/graphics/gui/rank/selection_reward1.png.import
new file mode 100644
index 0000000..ac8fe08
--- /dev/null
+++ b/assets/graphics/gui/rank/selection_reward1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0gpi1p6e72yk"
+path="res://.godot/imported/selection_reward1.png-a0f236a21a8d781a3fa84f5e5a0ca59c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/selection_reward1.png"
+dest_files=["res://.godot/imported/selection_reward1.png-a0f236a21a8d781a3fa84f5e5a0ca59c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/selection_stopngo0.png b/assets/graphics/gui/rank/selection_stopngo0.png
new file mode 100644
index 0000000..967c8cc
Binary files /dev/null and b/assets/graphics/gui/rank/selection_stopngo0.png differ
diff --git a/assets/graphics/gui/rank/selection_stopngo0.png.import b/assets/graphics/gui/rank/selection_stopngo0.png.import
new file mode 100644
index 0000000..d6b5f66
--- /dev/null
+++ b/assets/graphics/gui/rank/selection_stopngo0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cb01mmf7j1di3"
+path="res://.godot/imported/selection_stopngo0.png-5afeb4a960aca85d1dd4ffd504b37421.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/selection_stopngo0.png"
+dest_files=["res://.godot/imported/selection_stopngo0.png-5afeb4a960aca85d1dd4ffd504b37421.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/selection_stopngo1.png b/assets/graphics/gui/rank/selection_stopngo1.png
new file mode 100644
index 0000000..57ae95d
Binary files /dev/null and b/assets/graphics/gui/rank/selection_stopngo1.png differ
diff --git a/assets/graphics/gui/rank/selection_stopngo1.png.import b/assets/graphics/gui/rank/selection_stopngo1.png.import
new file mode 100644
index 0000000..4feb51d
--- /dev/null
+++ b/assets/graphics/gui/rank/selection_stopngo1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bll42n48xgpkl"
+path="res://.godot/imported/selection_stopngo1.png-20629e8cf271ba8079de53fb3575c960.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/selection_stopngo1.png"
+dest_files=["res://.godot/imported/selection_stopngo1.png-20629e8cf271ba8079de53fb3575c960.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/seperator.png b/assets/graphics/gui/rank/seperator.png
new file mode 100644
index 0000000..388d993
Binary files /dev/null and b/assets/graphics/gui/rank/seperator.png differ
diff --git a/assets/graphics/gui/rank/seperator.png.import b/assets/graphics/gui/rank/seperator.png.import
new file mode 100644
index 0000000..ab3fe9b
--- /dev/null
+++ b/assets/graphics/gui/rank/seperator.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://8l41fwr1dwsf"
+path="res://.godot/imported/seperator.png-2d99e441d5efbc85255d4533a061aad2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/seperator.png"
+dest_files=["res://.godot/imported/seperator.png-2d99e441d5efbc85255d4533a061aad2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/uid_search_button.png b/assets/graphics/gui/rank/uid_search_button.png
new file mode 100644
index 0000000..e6e1b82
Binary files /dev/null and b/assets/graphics/gui/rank/uid_search_button.png differ
diff --git a/assets/graphics/gui/rank/uid_search_button.png.import b/assets/graphics/gui/rank/uid_search_button.png.import
new file mode 100644
index 0000000..1b7f3dc
--- /dev/null
+++ b/assets/graphics/gui/rank/uid_search_button.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bh5sceh60vw3t"
+path="res://.godot/imported/uid_search_button.png-b54cb227f94ba13c19be65a9a5d99563.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/uid_search_button.png"
+dest_files=["res://.godot/imported/uid_search_button.png-b54cb227f94ba13c19be65a9a5d99563.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/rank/uid_search_slot.png b/assets/graphics/gui/rank/uid_search_slot.png
new file mode 100644
index 0000000..46b45a3
Binary files /dev/null and b/assets/graphics/gui/rank/uid_search_slot.png differ
diff --git a/assets/graphics/gui/rank/uid_search_slot.png.import b/assets/graphics/gui/rank/uid_search_slot.png.import
new file mode 100644
index 0000000..e5d98bb
--- /dev/null
+++ b/assets/graphics/gui/rank/uid_search_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blbm82tobnaub"
+path="res://.godot/imported/uid_search_slot.png-1266b15d0d56edac35c8242a3c3810cd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/rank/uid_search_slot.png"
+dest_files=["res://.godot/imported/uid_search_slot.png-1266b15d0d56edac35c8242a3c3810cd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/bg.png b/assets/graphics/gui/setting/bg.png
new file mode 100644
index 0000000..2c9ceba
Binary files /dev/null and b/assets/graphics/gui/setting/bg.png differ
diff --git a/assets/graphics/gui/setting/bg.png.import b/assets/graphics/gui/setting/bg.png.import
new file mode 100644
index 0000000..c620be7
--- /dev/null
+++ b/assets/graphics/gui/setting/bg.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dulv1edill20r"
+path="res://.godot/imported/bg.png-275dfaccda6cd2f15cf9bf4e3ad8acb9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/bg.png"
+dest_files=["res://.godot/imported/bg.png-275dfaccda6cd2f15cf9bf4e3ad8acb9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/bg_dim.png b/assets/graphics/gui/setting/bg_dim.png
new file mode 100644
index 0000000..b6766f6
Binary files /dev/null and b/assets/graphics/gui/setting/bg_dim.png differ
diff --git a/assets/graphics/gui/setting/bg_dim.png.import b/assets/graphics/gui/setting/bg_dim.png.import
new file mode 100644
index 0000000..2e9f799
--- /dev/null
+++ b/assets/graphics/gui/setting/bg_dim.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cvyw854rdutrt"
+path="res://.godot/imported/bg_dim.png-21ffa52ce1dcd77c6f90d2115100f852.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/bg_dim.png"
+dest_files=["res://.godot/imported/bg_dim.png-21ffa52ce1dcd77c6f90d2115100f852.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/check_check.png b/assets/graphics/gui/setting/check_check.png
new file mode 100644
index 0000000..32c3895
Binary files /dev/null and b/assets/graphics/gui/setting/check_check.png differ
diff --git a/assets/graphics/gui/setting/check_check.png.import b/assets/graphics/gui/setting/check_check.png.import
new file mode 100644
index 0000000..9310581
--- /dev/null
+++ b/assets/graphics/gui/setting/check_check.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://duq4r0c85e0iw"
+path="res://.godot/imported/check_check.png-f24f845459aca24670da861098f9a66c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/check_check.png"
+dest_files=["res://.godot/imported/check_check.png-f24f845459aca24670da861098f9a66c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/check_coloum.png b/assets/graphics/gui/setting/check_coloum.png
new file mode 100644
index 0000000..8fceb99
Binary files /dev/null and b/assets/graphics/gui/setting/check_coloum.png differ
diff --git a/assets/graphics/gui/setting/check_coloum.png.import b/assets/graphics/gui/setting/check_coloum.png.import
new file mode 100644
index 0000000..eb45adf
--- /dev/null
+++ b/assets/graphics/gui/setting/check_coloum.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://byplwijq21pph"
+path="res://.godot/imported/check_coloum.png-414788e88c7716dd2337f9a4ef5d2d6e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/check_coloum.png"
+dest_files=["res://.godot/imported/check_coloum.png-414788e88c7716dd2337f9a4ef5d2d6e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/check_slot.png b/assets/graphics/gui/setting/check_slot.png
new file mode 100644
index 0000000..cff7195
Binary files /dev/null and b/assets/graphics/gui/setting/check_slot.png differ
diff --git a/assets/graphics/gui/setting/check_slot.png.import b/assets/graphics/gui/setting/check_slot.png.import
new file mode 100644
index 0000000..0db0a7c
--- /dev/null
+++ b/assets/graphics/gui/setting/check_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dehila5k42xs8"
+path="res://.godot/imported/check_slot.png-66a86861840690f109913e889961a165.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/check_slot.png"
+dest_files=["res://.godot/imported/check_slot.png-66a86861840690f109913e889961a165.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/display.png b/assets/graphics/gui/setting/display.png
new file mode 100644
index 0000000..7c6940e
Binary files /dev/null and b/assets/graphics/gui/setting/display.png differ
diff --git a/assets/graphics/gui/setting/display.png.import b/assets/graphics/gui/setting/display.png.import
new file mode 100644
index 0000000..1d88952
--- /dev/null
+++ b/assets/graphics/gui/setting/display.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dk1jrsyjr8m0n"
+path="res://.godot/imported/display.png-94960659a4ab6c665bedfca9afae63e2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/display.png"
+dest_files=["res://.godot/imported/display.png-94960659a4ab6c665bedfca9afae63e2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/help.png b/assets/graphics/gui/setting/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/setting/help.png differ
diff --git a/assets/graphics/gui/setting/help.png.import b/assets/graphics/gui/setting/help.png.import
new file mode 100644
index 0000000..59c8202
--- /dev/null
+++ b/assets/graphics/gui/setting/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cajbq1fyyn27n"
+path="res://.godot/imported/help.png-da59e74a62714cdb6b85202b3f9d7175.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/help.png"
+dest_files=["res://.godot/imported/help.png-da59e74a62714cdb6b85202b3f9d7175.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/selection_control0.png b/assets/graphics/gui/setting/selection_control0.png
new file mode 100644
index 0000000..376a483
Binary files /dev/null and b/assets/graphics/gui/setting/selection_control0.png differ
diff --git a/assets/graphics/gui/setting/selection_control0.png.import b/assets/graphics/gui/setting/selection_control0.png.import
new file mode 100644
index 0000000..9e484b4
--- /dev/null
+++ b/assets/graphics/gui/setting/selection_control0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2csk448nwk13"
+path="res://.godot/imported/selection_control0.png-2a98231ace6795c9a2295803c5fa967f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/selection_control0.png"
+dest_files=["res://.godot/imported/selection_control0.png-2a98231ace6795c9a2295803c5fa967f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/selection_control1.png b/assets/graphics/gui/setting/selection_control1.png
new file mode 100644
index 0000000..45b1656
Binary files /dev/null and b/assets/graphics/gui/setting/selection_control1.png differ
diff --git a/assets/graphics/gui/setting/selection_control1.png.import b/assets/graphics/gui/setting/selection_control1.png.import
new file mode 100644
index 0000000..f4eb8ca
--- /dev/null
+++ b/assets/graphics/gui/setting/selection_control1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3ix0dryg58mk"
+path="res://.godot/imported/selection_control1.png-a5e62d9dea25bb7e2e81cb640b216d6d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/selection_control1.png"
+dest_files=["res://.godot/imported/selection_control1.png-a5e62d9dea25bb7e2e81cb640b216d6d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/selection_display0.png b/assets/graphics/gui/setting/selection_display0.png
new file mode 100644
index 0000000..32dfb18
Binary files /dev/null and b/assets/graphics/gui/setting/selection_display0.png differ
diff --git a/assets/graphics/gui/setting/selection_display0.png.import b/assets/graphics/gui/setting/selection_display0.png.import
new file mode 100644
index 0000000..54185af
--- /dev/null
+++ b/assets/graphics/gui/setting/selection_display0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpde3f6eosa0c"
+path="res://.godot/imported/selection_display0.png-751ae27e2ecd007faf1a5151ff4ae560.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/selection_display0.png"
+dest_files=["res://.godot/imported/selection_display0.png-751ae27e2ecd007faf1a5151ff4ae560.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/selection_display1.png b/assets/graphics/gui/setting/selection_display1.png
new file mode 100644
index 0000000..72cf785
Binary files /dev/null and b/assets/graphics/gui/setting/selection_display1.png differ
diff --git a/assets/graphics/gui/setting/selection_display1.png.import b/assets/graphics/gui/setting/selection_display1.png.import
new file mode 100644
index 0000000..7fbf948
--- /dev/null
+++ b/assets/graphics/gui/setting/selection_display1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw5kjpk57ogyg"
+path="res://.godot/imported/selection_display1.png-c93b97932e64ec23f0e849a36cacc6ba.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/selection_display1.png"
+dest_files=["res://.godot/imported/selection_display1.png-c93b97932e64ec23f0e849a36cacc6ba.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/selection_sound0.png b/assets/graphics/gui/setting/selection_sound0.png
new file mode 100644
index 0000000..e8b7cc0
Binary files /dev/null and b/assets/graphics/gui/setting/selection_sound0.png differ
diff --git a/assets/graphics/gui/setting/selection_sound0.png.import b/assets/graphics/gui/setting/selection_sound0.png.import
new file mode 100644
index 0000000..9dc78ad
--- /dev/null
+++ b/assets/graphics/gui/setting/selection_sound0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://o4kfy11q4fjp"
+path="res://.godot/imported/selection_sound0.png-487edb38526fb1504b731809b13f3779.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/selection_sound0.png"
+dest_files=["res://.godot/imported/selection_sound0.png-487edb38526fb1504b731809b13f3779.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/setting/selection_sound1.png b/assets/graphics/gui/setting/selection_sound1.png
new file mode 100644
index 0000000..c8a758d
Binary files /dev/null and b/assets/graphics/gui/setting/selection_sound1.png differ
diff --git a/assets/graphics/gui/setting/selection_sound1.png.import b/assets/graphics/gui/setting/selection_sound1.png.import
new file mode 100644
index 0000000..917e000
--- /dev/null
+++ b/assets/graphics/gui/setting/selection_sound1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cu1s74lptks1r"
+path="res://.godot/imported/selection_sound1.png-3305f9dce37f0a8c0fef9d34d6c4d4d2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/setting/selection_sound1.png"
+dest_files=["res://.godot/imported/selection_sound1.png-3305f9dce37f0a8c0fef9d34d6c4d4d2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/back.png b/assets/graphics/gui/shop/back.png
new file mode 100644
index 0000000..e230871
Binary files /dev/null and b/assets/graphics/gui/shop/back.png differ
diff --git a/assets/graphics/gui/shop/back.png.import b/assets/graphics/gui/shop/back.png.import
new file mode 100644
index 0000000..6708285
--- /dev/null
+++ b/assets/graphics/gui/shop/back.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://tqn7l2u7hgt6"
+path="res://.godot/imported/back.png-3ecf34cdc1b84697a293a1b26d1a2eab.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/back.png"
+dest_files=["res://.godot/imported/back.png-3ecf34cdc1b84697a293a1b26d1a2eab.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/banner1.png b/assets/graphics/gui/shop/banner1.png
new file mode 100644
index 0000000..71093f9
Binary files /dev/null and b/assets/graphics/gui/shop/banner1.png differ
diff --git a/assets/graphics/gui/shop/banner1.png.import b/assets/graphics/gui/shop/banner1.png.import
new file mode 100644
index 0000000..7a09eba
--- /dev/null
+++ b/assets/graphics/gui/shop/banner1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://x807a5wx0gab"
+path="res://.godot/imported/banner1.png-b626472c58e282f254143c7dbad23397.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/banner1.png"
+dest_files=["res://.godot/imported/banner1.png-b626472c58e282f254143c7dbad23397.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/banner2.png b/assets/graphics/gui/shop/banner2.png
new file mode 100644
index 0000000..911d61f
Binary files /dev/null and b/assets/graphics/gui/shop/banner2.png differ
diff --git a/assets/graphics/gui/shop/banner2.png.import b/assets/graphics/gui/shop/banner2.png.import
new file mode 100644
index 0000000..3be5307
--- /dev/null
+++ b/assets/graphics/gui/shop/banner2.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dldqf7q361gxo"
+path="res://.godot/imported/banner2.png-c0d40d4ad642aa7acc152133f1d14de7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/banner2.png"
+dest_files=["res://.godot/imported/banner2.png-c0d40d4ad642aa7acc152133f1d14de7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/banner3.png b/assets/graphics/gui/shop/banner3.png
new file mode 100644
index 0000000..515184d
Binary files /dev/null and b/assets/graphics/gui/shop/banner3.png differ
diff --git a/assets/graphics/gui/shop/banner3.png.import b/assets/graphics/gui/shop/banner3.png.import
new file mode 100644
index 0000000..b282317
--- /dev/null
+++ b/assets/graphics/gui/shop/banner3.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bjvkcwhec18pa"
+path="res://.godot/imported/banner3.png-62e8565d9b7a6e3de880e5c6208403c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/banner3.png"
+dest_files=["res://.godot/imported/banner3.png-62e8565d9b7a6e3de880e5c6208403c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/bg_dim.png b/assets/graphics/gui/shop/bg_dim.png
new file mode 100644
index 0000000..b888417
Binary files /dev/null and b/assets/graphics/gui/shop/bg_dim.png differ
diff --git a/assets/graphics/gui/shop/bg_dim.png.import b/assets/graphics/gui/shop/bg_dim.png.import
new file mode 100644
index 0000000..6b8609b
--- /dev/null
+++ b/assets/graphics/gui/shop/bg_dim.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xc221uvh164f"
+path="res://.godot/imported/bg_dim.png-bb99f57e64caed71ec89a8990f0adc88.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/bg_dim.png"
+dest_files=["res://.godot/imported/bg_dim.png-bb99f57e64caed71ec89a8990f0adc88.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/diamond.png b/assets/graphics/gui/shop/diamond.png
new file mode 100644
index 0000000..9ffc930
Binary files /dev/null and b/assets/graphics/gui/shop/diamond.png differ
diff --git a/assets/graphics/gui/shop/diamond.png.import b/assets/graphics/gui/shop/diamond.png.import
new file mode 100644
index 0000000..6cc64a2
--- /dev/null
+++ b/assets/graphics/gui/shop/diamond.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bu6vvjjbm6j2p"
+path="res://.godot/imported/diamond.png-eaead6a543d3268d6bb5101fb5204e22.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/diamond.png"
+dest_files=["res://.godot/imported/diamond.png-eaead6a543d3268d6bb5101fb5204e22.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/drop.png b/assets/graphics/gui/shop/drop.png
new file mode 100644
index 0000000..72c8945
Binary files /dev/null and b/assets/graphics/gui/shop/drop.png differ
diff --git a/assets/graphics/gui/shop/drop.png.import b/assets/graphics/gui/shop/drop.png.import
new file mode 100644
index 0000000..4144c54
--- /dev/null
+++ b/assets/graphics/gui/shop/drop.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dklablpnxa0ug"
+path="res://.godot/imported/drop.png-45257886865c230b55d7953575de5083.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/drop.png"
+dest_files=["res://.godot/imported/drop.png-45257886865c230b55d7953575de5083.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/filter_slot.png b/assets/graphics/gui/shop/filter_slot.png
new file mode 100644
index 0000000..cdac34d
Binary files /dev/null and b/assets/graphics/gui/shop/filter_slot.png differ
diff --git a/assets/graphics/gui/shop/filter_slot.png.import b/assets/graphics/gui/shop/filter_slot.png.import
new file mode 100644
index 0000000..831aee0
--- /dev/null
+++ b/assets/graphics/gui/shop/filter_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw7ugmq081av0"
+path="res://.godot/imported/filter_slot.png-65650b402386b4eb7c61f34062b59b02.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/filter_slot.png"
+dest_files=["res://.godot/imported/filter_slot.png-65650b402386b4eb7c61f34062b59b02.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/gold.png b/assets/graphics/gui/shop/gold.png
new file mode 100644
index 0000000..02af3ef
Binary files /dev/null and b/assets/graphics/gui/shop/gold.png differ
diff --git a/assets/graphics/gui/shop/gold.png.import b/assets/graphics/gui/shop/gold.png.import
new file mode 100644
index 0000000..c776572
--- /dev/null
+++ b/assets/graphics/gui/shop/gold.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cbwnebpbeobpu"
+path="res://.godot/imported/gold.png-e8e4bdc93fdd576905c0ee1d2aa1f49b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/gold.png"
+dest_files=["res://.godot/imported/gold.png-e8e4bdc93fdd576905c0ee1d2aa1f49b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/help.png b/assets/graphics/gui/shop/help.png
new file mode 100644
index 0000000..28792b8
Binary files /dev/null and b/assets/graphics/gui/shop/help.png differ
diff --git a/assets/graphics/gui/shop/help.png.import b/assets/graphics/gui/shop/help.png.import
new file mode 100644
index 0000000..7914cc7
--- /dev/null
+++ b/assets/graphics/gui/shop/help.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dk82iy4ao72h7"
+path="res://.godot/imported/help.png-42d53f477bb12c1d125a90f9945fd00a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/help.png"
+dest_files=["res://.godot/imported/help.png-42d53f477bb12c1d125a90f9945fd00a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/item_slot0.png b/assets/graphics/gui/shop/item_slot0.png
new file mode 100644
index 0000000..2e2eb5a
Binary files /dev/null and b/assets/graphics/gui/shop/item_slot0.png differ
diff --git a/assets/graphics/gui/shop/item_slot0.png.import b/assets/graphics/gui/shop/item_slot0.png.import
new file mode 100644
index 0000000..a0ff795
--- /dev/null
+++ b/assets/graphics/gui/shop/item_slot0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dqkdme52hw8kj"
+path="res://.godot/imported/item_slot0.png-82c33144e6bb34cd79d8cf67debcc217.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/item_slot0.png"
+dest_files=["res://.godot/imported/item_slot0.png-82c33144e6bb34cd79d8cf67debcc217.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/item_slot1.png b/assets/graphics/gui/shop/item_slot1.png
new file mode 100644
index 0000000..b97ab94
Binary files /dev/null and b/assets/graphics/gui/shop/item_slot1.png differ
diff --git a/assets/graphics/gui/shop/item_slot1.png.import b/assets/graphics/gui/shop/item_slot1.png.import
new file mode 100644
index 0000000..d8e2ccf
--- /dev/null
+++ b/assets/graphics/gui/shop/item_slot1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crsidbefk2qcc"
+path="res://.godot/imported/item_slot1.png-b4e6744bda94c19ef4bc08d5201d8fe9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/item_slot1.png"
+dest_files=["res://.godot/imported/item_slot1.png-b4e6744bda94c19ef4bc08d5201d8fe9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/notif.png b/assets/graphics/gui/shop/notif.png
new file mode 100644
index 0000000..24c70a7
Binary files /dev/null and b/assets/graphics/gui/shop/notif.png differ
diff --git a/assets/graphics/gui/shop/notif.png.import b/assets/graphics/gui/shop/notif.png.import
new file mode 100644
index 0000000..ebd1d43
--- /dev/null
+++ b/assets/graphics/gui/shop/notif.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wg240dpars48"
+path="res://.godot/imported/notif.png-19aa293354d02a6892bae0f2b0f2b094.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/notif.png"
+dest_files=["res://.godot/imported/notif.png-19aa293354d02a6892bae0f2b0f2b094.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/preview_left.png b/assets/graphics/gui/shop/preview_left.png
new file mode 100644
index 0000000..0ba10cc
Binary files /dev/null and b/assets/graphics/gui/shop/preview_left.png differ
diff --git a/assets/graphics/gui/shop/preview_left.png.import b/assets/graphics/gui/shop/preview_left.png.import
new file mode 100644
index 0000000..11e39ae
--- /dev/null
+++ b/assets/graphics/gui/shop/preview_left.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxve6x1ijxogb"
+path="res://.godot/imported/preview_left.png-5982092e1516eedd3491f9d9a469338d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/preview_left.png"
+dest_files=["res://.godot/imported/preview_left.png-5982092e1516eedd3491f9d9a469338d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/preview_right.png b/assets/graphics/gui/shop/preview_right.png
new file mode 100644
index 0000000..07a3a1b
Binary files /dev/null and b/assets/graphics/gui/shop/preview_right.png differ
diff --git a/assets/graphics/gui/shop/preview_right.png.import b/assets/graphics/gui/shop/preview_right.png.import
new file mode 100644
index 0000000..5e1352d
--- /dev/null
+++ b/assets/graphics/gui/shop/preview_right.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://kcdobkbw8ou0"
+path="res://.godot/imported/preview_right.png-99dead12d04de14e4287095189b0cd30.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/preview_right.png"
+dest_files=["res://.godot/imported/preview_right.png-99dead12d04de14e4287095189b0cd30.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/resource_slot.png b/assets/graphics/gui/shop/resource_slot.png
new file mode 100644
index 0000000..b3f29c2
Binary files /dev/null and b/assets/graphics/gui/shop/resource_slot.png differ
diff --git a/assets/graphics/gui/shop/resource_slot.png.import b/assets/graphics/gui/shop/resource_slot.png.import
new file mode 100644
index 0000000..b5ccf52
--- /dev/null
+++ b/assets/graphics/gui/shop/resource_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cc56laqjk8sed"
+path="res://.godot/imported/resource_slot.png-90c7ebc5a554c76060a7f5228e959895.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/resource_slot.png"
+dest_files=["res://.godot/imported/resource_slot.png-90c7ebc5a554c76060a7f5228e959895.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/rotate.png b/assets/graphics/gui/shop/rotate.png
new file mode 100644
index 0000000..879adfd
Binary files /dev/null and b/assets/graphics/gui/shop/rotate.png differ
diff --git a/assets/graphics/gui/shop/rotate.png.import b/assets/graphics/gui/shop/rotate.png.import
new file mode 100644
index 0000000..08f8903
--- /dev/null
+++ b/assets/graphics/gui/shop/rotate.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnkcrst6tsklr"
+path="res://.godot/imported/rotate.png-6bcc24baea92080fd02cdfad76aaa99c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/rotate.png"
+dest_files=["res://.godot/imported/rotate.png-6bcc24baea92080fd02cdfad76aaa99c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/scroll_fill.png b/assets/graphics/gui/shop/scroll_fill.png
new file mode 100644
index 0000000..afe43ba
Binary files /dev/null and b/assets/graphics/gui/shop/scroll_fill.png differ
diff --git a/assets/graphics/gui/shop/scroll_fill.png.import b/assets/graphics/gui/shop/scroll_fill.png.import
new file mode 100644
index 0000000..2d4a528
--- /dev/null
+++ b/assets/graphics/gui/shop/scroll_fill.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ba5el0i1werie"
+path="res://.godot/imported/scroll_fill.png-555b62884bbea7ac3a83cd014577fb25.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/scroll_fill.png"
+dest_files=["res://.godot/imported/scroll_fill.png-555b62884bbea7ac3a83cd014577fb25.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/scroll_slot.png b/assets/graphics/gui/shop/scroll_slot.png
new file mode 100644
index 0000000..902e2d9
Binary files /dev/null and b/assets/graphics/gui/shop/scroll_slot.png differ
diff --git a/assets/graphics/gui/shop/scroll_slot.png.import b/assets/graphics/gui/shop/scroll_slot.png.import
new file mode 100644
index 0000000..5b94fa6
--- /dev/null
+++ b/assets/graphics/gui/shop/scroll_slot.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv6aptfdc4fjg"
+path="res://.godot/imported/scroll_slot.png-e544d6a63b20a61707139a207af0a2c8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/scroll_slot.png"
+dest_files=["res://.godot/imported/scroll_slot.png-e544d6a63b20a61707139a207af0a2c8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/shop.png b/assets/graphics/gui/shop/shop.png
new file mode 100644
index 0000000..4b2f635
Binary files /dev/null and b/assets/graphics/gui/shop/shop.png differ
diff --git a/assets/graphics/gui/shop/shop.png.import b/assets/graphics/gui/shop/shop.png.import
new file mode 100644
index 0000000..7a2fd4b
--- /dev/null
+++ b/assets/graphics/gui/shop/shop.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dymowyxqvm1pk"
+path="res://.godot/imported/shop.png-5fb0081d91bd87c91a8e08b2b78cda2b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/shop.png"
+dest_files=["res://.godot/imported/shop.png-5fb0081d91bd87c91a8e08b2b78cda2b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_all0.png b/assets/graphics/gui/shop/short_all0.png
new file mode 100644
index 0000000..944b7ba
Binary files /dev/null and b/assets/graphics/gui/shop/short_all0.png differ
diff --git a/assets/graphics/gui/shop/short_all0.png.import b/assets/graphics/gui/shop/short_all0.png.import
new file mode 100644
index 0000000..89de7bb
--- /dev/null
+++ b/assets/graphics/gui/shop/short_all0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cplkmayfwfsj3"
+path="res://.godot/imported/short_all0.png-d5016ecc18524917e751bf36e58f6961.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_all0.png"
+dest_files=["res://.godot/imported/short_all0.png-d5016ecc18524917e751bf36e58f6961.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_all1.png b/assets/graphics/gui/shop/short_all1.png
new file mode 100644
index 0000000..e6caecd
Binary files /dev/null and b/assets/graphics/gui/shop/short_all1.png differ
diff --git a/assets/graphics/gui/shop/short_all1.png.import b/assets/graphics/gui/shop/short_all1.png.import
new file mode 100644
index 0000000..e29292b
--- /dev/null
+++ b/assets/graphics/gui/shop/short_all1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnma2l34sdvtn"
+path="res://.godot/imported/short_all1.png-b4d97f8a9a5b7047444f3be4fc21c270.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_all1.png"
+dest_files=["res://.godot/imported/short_all1.png-b4d97f8a9a5b7047444f3be4fc21c270.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_diamond0.png b/assets/graphics/gui/shop/short_diamond0.png
new file mode 100644
index 0000000..b48e184
Binary files /dev/null and b/assets/graphics/gui/shop/short_diamond0.png differ
diff --git a/assets/graphics/gui/shop/short_diamond0.png.import b/assets/graphics/gui/shop/short_diamond0.png.import
new file mode 100644
index 0000000..74b6c9a
--- /dev/null
+++ b/assets/graphics/gui/shop/short_diamond0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkgr73o66olmp"
+path="res://.godot/imported/short_diamond0.png-38b044fb879283d93691fd2fc728e6ca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_diamond0.png"
+dest_files=["res://.godot/imported/short_diamond0.png-38b044fb879283d93691fd2fc728e6ca.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_diamond1.png b/assets/graphics/gui/shop/short_diamond1.png
new file mode 100644
index 0000000..c325aaf
Binary files /dev/null and b/assets/graphics/gui/shop/short_diamond1.png differ
diff --git a/assets/graphics/gui/shop/short_diamond1.png.import b/assets/graphics/gui/shop/short_diamond1.png.import
new file mode 100644
index 0000000..e4c9346
--- /dev/null
+++ b/assets/graphics/gui/shop/short_diamond1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blk247oxn3gri"
+path="res://.godot/imported/short_diamond1.png-0c820b35247d3383fe48468f6b474bf6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_diamond1.png"
+dest_files=["res://.godot/imported/short_diamond1.png-0c820b35247d3383fe48468f6b474bf6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_emot0.png b/assets/graphics/gui/shop/short_emot0.png
new file mode 100644
index 0000000..9fb4573
Binary files /dev/null and b/assets/graphics/gui/shop/short_emot0.png differ
diff --git a/assets/graphics/gui/shop/short_emot0.png.import b/assets/graphics/gui/shop/short_emot0.png.import
new file mode 100644
index 0000000..c2b3e5a
--- /dev/null
+++ b/assets/graphics/gui/shop/short_emot0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bkvihaw0j8xqp"
+path="res://.godot/imported/short_emot0.png-7b05360ead6f8a0cb50b65dc5d6b6fcb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_emot0.png"
+dest_files=["res://.godot/imported/short_emot0.png-7b05360ead6f8a0cb50b65dc5d6b6fcb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_emot1.png b/assets/graphics/gui/shop/short_emot1.png
new file mode 100644
index 0000000..eccd83c
Binary files /dev/null and b/assets/graphics/gui/shop/short_emot1.png differ
diff --git a/assets/graphics/gui/shop/short_emot1.png.import b/assets/graphics/gui/shop/short_emot1.png.import
new file mode 100644
index 0000000..e570d02
--- /dev/null
+++ b/assets/graphics/gui/shop/short_emot1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmd4uvt4vjgfy"
+path="res://.godot/imported/short_emot1.png-aa1b3f2fe355839b1010df9596ac7e69.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_emot1.png"
+dest_files=["res://.godot/imported/short_emot1.png-aa1b3f2fe355839b1010df9596ac7e69.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_fragment0.png b/assets/graphics/gui/shop/short_fragment0.png
new file mode 100644
index 0000000..0e30ff8
Binary files /dev/null and b/assets/graphics/gui/shop/short_fragment0.png differ
diff --git a/assets/graphics/gui/shop/short_fragment0.png.import b/assets/graphics/gui/shop/short_fragment0.png.import
new file mode 100644
index 0000000..884655f
--- /dev/null
+++ b/assets/graphics/gui/shop/short_fragment0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ci7tgtwwr7ifh"
+path="res://.godot/imported/short_fragment0.png-e34579dd2f75cbf47c3e651b80b8f1dd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_fragment0.png"
+dest_files=["res://.godot/imported/short_fragment0.png-e34579dd2f75cbf47c3e651b80b8f1dd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_fragment1.png b/assets/graphics/gui/shop/short_fragment1.png
new file mode 100644
index 0000000..7a00c66
Binary files /dev/null and b/assets/graphics/gui/shop/short_fragment1.png differ
diff --git a/assets/graphics/gui/shop/short_fragment1.png.import b/assets/graphics/gui/shop/short_fragment1.png.import
new file mode 100644
index 0000000..142a528
--- /dev/null
+++ b/assets/graphics/gui/shop/short_fragment1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d0h5dac1e4prt"
+path="res://.godot/imported/short_fragment1.png-b93bf25030e4d3dd83c38f20b3e9ca0a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_fragment1.png"
+dest_files=["res://.godot/imported/short_fragment1.png-b93bf25030e4d3dd83c38f20b3e9ca0a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_gold0.png b/assets/graphics/gui/shop/short_gold0.png
new file mode 100644
index 0000000..2011809
Binary files /dev/null and b/assets/graphics/gui/shop/short_gold0.png differ
diff --git a/assets/graphics/gui/shop/short_gold0.png.import b/assets/graphics/gui/shop/short_gold0.png.import
new file mode 100644
index 0000000..8c5f58b
--- /dev/null
+++ b/assets/graphics/gui/shop/short_gold0.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cs13hv8hk7dvg"
+path="res://.godot/imported/short_gold0.png-2cb85474a9c81154de662fff41d5e7e5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_gold0.png"
+dest_files=["res://.godot/imported/short_gold0.png-2cb85474a9c81154de662fff41d5e7e5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/gui/shop/short_gold1.png b/assets/graphics/gui/shop/short_gold1.png
new file mode 100644
index 0000000..c5085e1
Binary files /dev/null and b/assets/graphics/gui/shop/short_gold1.png differ
diff --git a/assets/graphics/gui/shop/short_gold1.png.import b/assets/graphics/gui/shop/short_gold1.png.import
new file mode 100644
index 0000000..027e9f7
--- /dev/null
+++ b/assets/graphics/gui/shop/short_gold1.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwvy48iyvdpc3"
+path="res://.godot/imported/short_gold1.png-a9a790a2f5287e4ca8fce89dbbe1d401.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/gui/shop/short_gold1.png"
+dest_files=["res://.godot/imported/short_gold1.png-a9a790a2f5287e4ca8fce89dbbe1d401.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/login_panel/modal.png b/assets/graphics/login_panel/modal.png
new file mode 100644
index 0000000..29a5a78
Binary files /dev/null and b/assets/graphics/login_panel/modal.png differ
diff --git a/assets/graphics/login_panel/modal.png.import b/assets/graphics/login_panel/modal.png.import
new file mode 100644
index 0000000..6eadac0
--- /dev/null
+++ b/assets/graphics/login_panel/modal.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btcdh3j4rp1y2"
+path="res://.godot/imported/modal.png-d129fe30a25b272c24918a06a3fe77cc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/login_panel/modal.png"
+dest_files=["res://.godot/imported/modal.png-d129fe30a25b272c24918a06a3fe77cc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/login_panel/sign_in.png b/assets/graphics/login_panel/sign_in.png
new file mode 100644
index 0000000..5acb2ba
Binary files /dev/null and b/assets/graphics/login_panel/sign_in.png differ
diff --git a/assets/graphics/login_panel/sign_in.png.import b/assets/graphics/login_panel/sign_in.png.import
new file mode 100644
index 0000000..61397a9
--- /dev/null
+++ b/assets/graphics/login_panel/sign_in.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bvy60hfe7hr4j"
+path="res://.godot/imported/sign_in.png-5455eb12acd484d7b83e63472cd96e9e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/login_panel/sign_in.png"
+dest_files=["res://.godot/imported/sign_in.png-5455eb12acd484d7b83e63472cd96e9e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/login_panel/sign_in_dimmed.png b/assets/graphics/login_panel/sign_in_dimmed.png
new file mode 100644
index 0000000..acb721b
Binary files /dev/null and b/assets/graphics/login_panel/sign_in_dimmed.png differ
diff --git a/assets/graphics/login_panel/sign_in_dimmed.png.import b/assets/graphics/login_panel/sign_in_dimmed.png.import
new file mode 100644
index 0000000..585851e
--- /dev/null
+++ b/assets/graphics/login_panel/sign_in_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://36uhj6e6piai"
+path="res://.godot/imported/sign_in_dimmed.png-362e259faf733c41d9885e999d38ea6d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/login_panel/sign_in_dimmed.png"
+dest_files=["res://.godot/imported/sign_in_dimmed.png-362e259faf733c41d9885e999d38ea6d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/login_panel/sign_up.png b/assets/graphics/login_panel/sign_up.png
new file mode 100644
index 0000000..a78b982
Binary files /dev/null and b/assets/graphics/login_panel/sign_up.png differ
diff --git a/assets/graphics/login_panel/sign_up.png.import b/assets/graphics/login_panel/sign_up.png.import
new file mode 100644
index 0000000..b4f3696
--- /dev/null
+++ b/assets/graphics/login_panel/sign_up.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkjiv40yjf2w7"
+path="res://.godot/imported/sign_up.png-b8dc48508ac452e218f195231228bf42.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/login_panel/sign_up.png"
+dest_files=["res://.godot/imported/sign_up.png-b8dc48508ac452e218f195231228bf42.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/login_panel/sign_up_dimmed.png b/assets/graphics/login_panel/sign_up_dimmed.png
new file mode 100644
index 0000000..28bb646
Binary files /dev/null and b/assets/graphics/login_panel/sign_up_dimmed.png differ
diff --git a/assets/graphics/login_panel/sign_up_dimmed.png.import b/assets/graphics/login_panel/sign_up_dimmed.png.import
new file mode 100644
index 0000000..1fc7cb3
--- /dev/null
+++ b/assets/graphics/login_panel/sign_up_dimmed.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3c2hwrbatvsh"
+path="res://.godot/imported/sign_up_dimmed.png-0535126071ba8d9e61eefb257917bc52.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/login_panel/sign_up_dimmed.png"
+dest_files=["res://.godot/imported/sign_up_dimmed.png-0535126071ba8d9e61eefb257917bc52.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/splash.png b/assets/graphics/splash.png
new file mode 100644
index 0000000..49489c2
Binary files /dev/null and b/assets/graphics/splash.png differ
diff --git a/assets/graphics/splash.png.import b/assets/graphics/splash.png.import
new file mode 100644
index 0000000..d463920
--- /dev/null
+++ b/assets/graphics/splash.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b10e6kr508642"
+path="res://.godot/imported/splash.png-17460da1948f3a674809d951b9a8184a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/splash.png"
+dest_files=["res://.godot/imported/splash.png-17460da1948f3a674809d951b9a8184a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/models/meshes/lobby.tscn b/assets/models/meshes/lobby.tscn
index 0c98e5f..641b1cb 100644
--- a/assets/models/meshes/lobby.tscn
+++ b/assets/models/meshes/lobby.tscn
@@ -1,9 +1,9 @@
-[gd_scene load_steps=3 format=3 uid="uid://dhc76l8jafa85"]
+[gd_scene format=3 uid="uid://xpalyawdgnyl"]
[ext_resource type="Script" uid="uid://b5q6yekyk0tld" path="res://scenes/lobby.gd" id="1_lp6xi"]
[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2_theme"]
-[node name="Lobby" type="Control"]
+[node name="Lobby" type="Control" unique_id=1681755368]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -13,7 +13,7 @@ grow_vertical = 2
theme = ExtResource("2_theme")
script = ExtResource("1_lp6xi")
-[node name="Background" type="ColorRect" parent="."]
+[node name="Background" type="ColorRect" parent="." unique_id=610186638]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -22,7 +22,7 @@ grow_horizontal = 2
grow_vertical = 2
color = Color(0.12, 0.1, 0.08, 1)
-[node name="MainMenuPanel" type="PanelContainer" parent="."]
+[node name="MainMenuPanel" type="PanelContainer" parent="." unique_id=749972967]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
@@ -36,15 +36,15 @@ offset_bottom = 240.0
grow_horizontal = 2
grow_vertical = 2
-[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel"]
+[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel" unique_id=172832102]
layout_mode = 2
theme_override_constants/separation = 18
-[node name="TitleContainer" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer"]
+[node name="TitleContainer" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer" unique_id=1254704944]
layout_mode = 2
theme_override_constants/separation = 4
-[node name="Title" type="Label" parent="MainMenuPanel/VBoxContainer/TitleContainer"]
+[node name="Title" type="Label" parent="MainMenuPanel/VBoxContainer/TitleContainer" unique_id=1313646849]
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
theme_override_font_sizes/font_size = 44
@@ -52,49 +52,49 @@ text = "TEKTON DASH"
horizontal_alignment = 1
vertical_alignment = 1
-[node name="Subtitle" type="Label" parent="MainMenuPanel/VBoxContainer/TitleContainer"]
+[node name="Subtitle" type="Label" parent="MainMenuPanel/VBoxContainer/TitleContainer" unique_id=981494139]
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 12
text = "ARMAGEDDON VERSION"
horizontal_alignment = 1
-[node name="Separator" type="HSeparator" parent="MainMenuPanel/VBoxContainer"]
+[node name="Separator" type="HSeparator" parent="MainMenuPanel/VBoxContainer" unique_id=1861761683]
layout_mode = 2
-[node name="InputSection" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer"]
+[node name="InputSection" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer" unique_id=113453689]
layout_mode = 2
theme_override_constants/separation = 10
-[node name="PlayerNameLabel" type="Label" parent="MainMenuPanel/VBoxContainer/InputSection"]
+[node name="PlayerNameLabel" type="Label" parent="MainMenuPanel/VBoxContainer/InputSection" unique_id=2007198770]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 13
text = "YOUR NAME"
-[node name="PlayerNameInput" type="LineEdit" parent="MainMenuPanel/VBoxContainer/InputSection"]
+[node name="PlayerNameInput" type="LineEdit" parent="MainMenuPanel/VBoxContainer/InputSection" unique_id=543986981]
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
text = "Player"
placeholder_text = "Enter your name..."
-[node name="ButtonSection" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer"]
+[node name="ButtonSection" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer" unique_id=357245135]
layout_mode = 2
theme_override_constants/separation = 12
-[node name="CreateRoomBtn" type="Button" parent="MainMenuPanel/VBoxContainer/ButtonSection"]
+[node name="CreateRoomBtn" type="Button" parent="MainMenuPanel/VBoxContainer/ButtonSection" unique_id=1297504653]
custom_minimum_size = Vector2(0, 48)
layout_mode = 2
theme_override_font_sizes/font_size = 16
text = "CREATE ROOM"
-[node name="BrowseRoomsBtn" type="Button" parent="MainMenuPanel/VBoxContainer/ButtonSection"]
+[node name="BrowseRoomsBtn" type="Button" parent="MainMenuPanel/VBoxContainer/ButtonSection" unique_id=1825906901]
custom_minimum_size = Vector2(0, 48)
layout_mode = 2
theme_override_font_sizes/font_size = 16
text = "BROWSE ROOMS"
-[node name="RoomListPanel" type="PanelContainer" parent="."]
+[node name="RoomListPanel" type="PanelContainer" parent="." unique_id=1969054574]
visible = false
layout_mode = 1
anchors_preset = 8
@@ -109,63 +109,63 @@ offset_bottom = 260.0
grow_horizontal = 2
grow_vertical = 2
-[node name="VBoxContainer" type="VBoxContainer" parent="RoomListPanel"]
+[node name="VBoxContainer" type="VBoxContainer" parent="RoomListPanel" unique_id=726092140]
layout_mode = 2
theme_override_constants/separation = 14
-[node name="Header" type="Label" parent="RoomListPanel/VBoxContainer"]
+[node name="Header" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=1272860526]
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
theme_override_font_sizes/font_size = 28
text = "SERVER BROWSER"
horizontal_alignment = 1
-[node name="HSeparator" type="HSeparator" parent="RoomListPanel/VBoxContainer"]
+[node name="HSeparator" type="HSeparator" parent="RoomListPanel/VBoxContainer" unique_id=38843595]
layout_mode = 2
-[node name="MatchIdLabel" type="Label" parent="RoomListPanel/VBoxContainer"]
+[node name="MatchIdLabel" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=316758674]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 12
text = "DIRECT CONNECT (MATCH ID)"
-[node name="MatchIdInput" type="LineEdit" parent="RoomListPanel/VBoxContainer"]
+[node name="MatchIdInput" type="LineEdit" parent="RoomListPanel/VBoxContainer" unique_id=159753310]
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
placeholder_text = "Paste match ID here..."
-[node name="RoomListLabel" type="Label" parent="RoomListPanel/VBoxContainer"]
+[node name="RoomListLabel" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=867057060]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 12
text = "AVAILABLE SERVERS"
-[node name="RoomList" type="ItemList" parent="RoomListPanel/VBoxContainer"]
+[node name="RoomList" type="ItemList" parent="RoomListPanel/VBoxContainer" unique_id=203590990]
custom_minimum_size = Vector2(0, 200)
layout_mode = 2
allow_reselect = true
-[node name="ButtonContainer" type="HBoxContainer" parent="RoomListPanel/VBoxContainer"]
+[node name="ButtonContainer" type="HBoxContainer" parent="RoomListPanel/VBoxContainer" unique_id=178401080]
layout_mode = 2
theme_override_constants/separation = 14
alignment = 1
-[node name="RefreshBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer"]
+[node name="RefreshBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1068680772]
custom_minimum_size = Vector2(110, 44)
layout_mode = 2
text = "REFRESH"
-[node name="JoinBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer"]
+[node name="JoinBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=822083530]
custom_minimum_size = Vector2(130, 44)
layout_mode = 2
text = "JOIN SERVER"
-[node name="BackBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer"]
+[node name="BackBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1873303918]
custom_minimum_size = Vector2(110, 44)
layout_mode = 2
text = "BACK"
-[node name="LobbyPanel" type="PanelContainer" parent="."]
+[node name="LobbyPanel" type="PanelContainer" parent="." unique_id=1955208668]
visible = false
layout_mode = 1
anchors_preset = 8
@@ -180,77 +180,77 @@ offset_bottom = 260.0
grow_horizontal = 2
grow_vertical = 2
-[node name="VBoxContainer" type="VBoxContainer" parent="LobbyPanel"]
+[node name="VBoxContainer" type="VBoxContainer" parent="LobbyPanel" unique_id=1443407103]
layout_mode = 2
theme_override_constants/separation = 14
-[node name="RoomNameHeader" type="Label" parent="LobbyPanel/VBoxContainer"]
+[node name="RoomNameHeader" type="Label" parent="LobbyPanel/VBoxContainer" unique_id=2019479226]
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
theme_override_font_sizes/font_size = 26
text = "ROOM: "
horizontal_alignment = 1
-[node name="MatchIdContainer" type="HBoxContainer" parent="LobbyPanel/VBoxContainer"]
+[node name="MatchIdContainer" type="HBoxContainer" parent="LobbyPanel/VBoxContainer" unique_id=280307543]
layout_mode = 2
alignment = 1
-[node name="MatchIdDisplay" type="Label" parent="LobbyPanel/VBoxContainer/MatchIdContainer"]
+[node name="MatchIdDisplay" type="Label" parent="LobbyPanel/VBoxContainer/MatchIdContainer" unique_id=1883524532]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 0.5, 0.55, 1)
theme_override_font_sizes/font_size = 10
text = "Match ID: "
-[node name="CopyIdBtn" type="Button" parent="LobbyPanel/VBoxContainer/MatchIdContainer"]
+[node name="CopyIdBtn" type="Button" parent="LobbyPanel/VBoxContainer/MatchIdContainer" unique_id=1770583860]
custom_minimum_size = Vector2(80, 32)
layout_mode = 2
theme_override_font_sizes/font_size = 10
text = "COPY"
-[node name="HSeparator" type="HSeparator" parent="LobbyPanel/VBoxContainer"]
+[node name="HSeparator" type="HSeparator" parent="LobbyPanel/VBoxContainer" unique_id=346787128]
layout_mode = 2
-[node name="PlayersLabel" type="Label" parent="LobbyPanel/VBoxContainer"]
+[node name="PlayersLabel" type="Label" parent="LobbyPanel/VBoxContainer" unique_id=1266635921]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 13
text = "PLAYERS"
-[node name="PlayerList" type="ItemList" parent="LobbyPanel/VBoxContainer"]
+[node name="PlayerList" type="ItemList" parent="LobbyPanel/VBoxContainer" unique_id=1481128408]
custom_minimum_size = Vector2(0, 160)
layout_mode = 2
allow_reselect = true
-[node name="StatusLabel" type="Label" parent="LobbyPanel/VBoxContainer"]
+[node name="StatusLabel" type="Label" parent="LobbyPanel/VBoxContainer" unique_id=1750308910]
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Waiting for players..."
horizontal_alignment = 1
-[node name="ButtonContainer" type="HBoxContainer" parent="LobbyPanel/VBoxContainer"]
+[node name="ButtonContainer" type="HBoxContainer" parent="LobbyPanel/VBoxContainer" unique_id=941148439]
layout_mode = 2
theme_override_constants/separation = 14
alignment = 1
-[node name="ReadyBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer"]
+[node name="ReadyBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer" unique_id=386730307]
custom_minimum_size = Vector2(110, 48)
layout_mode = 2
toggle_mode = true
text = "READY"
-[node name="StartGameBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer"]
+[node name="StartGameBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer" unique_id=1510805318]
custom_minimum_size = Vector2(140, 48)
layout_mode = 2
disabled = true
text = "START GAME"
-[node name="LeaveBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer"]
+[node name="LeaveBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer" unique_id=1773320572]
custom_minimum_size = Vector2(110, 48)
layout_mode = 2
text = "LEAVE"
-[node name="StatusBar" type="PanelContainer" parent="."]
+[node name="StatusBar" type="PanelContainer" parent="." unique_id=547557114]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
@@ -263,14 +263,14 @@ offset_bottom = -24.0
grow_horizontal = 2
grow_vertical = 0
-[node name="ConnectionStatus" type="Label" parent="StatusBar"]
+[node name="ConnectionStatus" type="Label" parent="StatusBar" unique_id=1282790307]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 12
text = "NOT CONNECTED"
horizontal_alignment = 1
-[node name="VersionLabel" type="Label" parent="."]
+[node name="VersionLabel" type="Label" parent="." unique_id=1619858099]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
diff --git a/assets/themes/GUI_Tekton.tres b/assets/themes/GUI_Tekton.tres
new file mode 100644
index 0000000..1c872db
--- /dev/null
+++ b/assets/themes/GUI_Tekton.tres
@@ -0,0 +1,254 @@
+[gd_resource type="Theme" format=3 uid="uid://cxab3xxy00"]
+
+[ext_resource type="FontFile" uid="uid://dckhhpt5emxq0" path="res://assets/fonts/Asap-VariableFont_wdth,wght.ttf" id="font_asap"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_button_disabled"]
+content_margin_left = 16.0
+content_margin_top = 12.0
+content_margin_right = 16.0
+content_margin_bottom = 12.0
+bg_color = Color(0.3, 0.3, 0.3, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.2, 0.2, 0.2, 1)
+corner_radius_top_left = 6
+corner_radius_top_right = 6
+corner_radius_bottom_right = 6
+corner_radius_bottom_left = 6
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_button_hover"]
+content_margin_left = 16.0
+content_margin_top = 12.0
+content_margin_right = 16.0
+content_margin_bottom = 12.0
+bg_color = Color(0.45, 0.73, 0.91, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.33, 0.62, 0.78, 1)
+corner_radius_top_left = 6
+corner_radius_top_right = 6
+corner_radius_bottom_right = 6
+corner_radius_bottom_left = 6
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_button_normal"]
+content_margin_left = 16.0
+content_margin_top = 12.0
+content_margin_right = 16.0
+content_margin_bottom = 12.0
+bg_color = Color(0.1, 0.19, 0.27, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.07, 0.14, 0.2, 1)
+corner_radius_top_left = 6
+corner_radius_top_right = 6
+corner_radius_bottom_right = 6
+corner_radius_bottom_left = 6
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_button_pressed"]
+content_margin_left = 16.0
+content_margin_top = 12.0
+content_margin_right = 16.0
+content_margin_bottom = 12.0
+bg_color = Color(0.61, 0.83, 0.2, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.44, 0.63, 0.13, 1)
+corner_radius_top_left = 6
+corner_radius_top_right = 6
+corner_radius_bottom_right = 6
+corner_radius_bottom_left = 6
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_separator"]
+content_margin_top = 2.0
+content_margin_bottom = 2.0
+bg_color = Color(0.33, 0.62, 0.78, 0.5)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_slider_fill"]
+bg_color = Color(0.61, 0.83, 0.2, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_slider_bg"]
+content_margin_left = 4.0
+content_margin_top = 4.0
+content_margin_right = 4.0
+content_margin_bottom = 4.0
+bg_color = Color(0.14, 0.15, 0.16, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_panel_bg"]
+content_margin_left = 16.0
+content_margin_top = 16.0
+content_margin_right = 16.0
+content_margin_bottom = 16.0
+bg_color = Color(0.4, 0.45, 0.49, 1)
+border_width_left = 4
+border_width_top = 4
+border_width_right = 4
+border_width_bottom = 4
+border_color = Color(0.5568628, 0.61960787, 0.67058825, 1)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_input_focus"]
+content_margin_left = 12.0
+content_margin_top = 10.0
+content_margin_right = 12.0
+content_margin_bottom = 10.0
+bg_color = Color(0.18, 0.2, 0.22, 1)
+border_width_left = 3
+border_width_top = 3
+border_width_right = 3
+border_width_bottom = 3
+border_color = Color(0.45, 0.73, 0.91, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_input_normal"]
+content_margin_left = 12.0
+content_margin_top = 10.0
+content_margin_right = 12.0
+content_margin_bottom = 10.0
+bg_color = Color(0.14, 0.15, 0.16, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.1, 0.11, 0.13, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dropdown_normal"]
+content_margin_left = 12.0
+content_margin_top = 8.0
+content_margin_right = 12.0
+content_margin_bottom = 8.0
+bg_color = Color(0.1, 0.19, 0.27, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.07, 0.14, 0.2, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_popup_panel"]
+content_margin_left = 8.0
+content_margin_top = 8.0
+content_margin_right = 8.0
+content_margin_bottom = 8.0
+bg_color = Color(0.4, 0.45, 0.49, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.3, 0.35, 0.39, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_progress_bg"]
+bg_color = Color(0.14, 0.15, 0.16, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_progress_fill"]
+bg_color = Color(0.61, 0.83, 0.2, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_selected"]
+content_margin_left = 12.0
+content_margin_top = 8.0
+content_margin_right = 12.0
+content_margin_bottom = 8.0
+bg_color = Color(0.45, 0.73, 0.91, 1)
+border_color = Color(0.33, 0.62, 0.78, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_unselected"]
+content_margin_left = 12.0
+content_margin_top = 8.0
+content_margin_right = 12.0
+content_margin_bottom = 8.0
+bg_color = Color(0.1, 0.19, 0.27, 1)
+border_color = Color(0.07, 0.14, 0.2, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+
+[resource]
+default_font = ExtResource("font_asap")
+Button/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+Button/colors/font_disabled_color = Color(0.5, 0.5, 0.5, 1)
+Button/colors/font_hover_color = Color(1, 1, 1, 1)
+Button/colors/font_pressed_color = Color(1, 1, 1, 1)
+Button/font_sizes/font_size = 16
+Button/styles/disabled = SubResource("StyleBoxFlat_button_disabled")
+Button/styles/hover = SubResource("StyleBoxFlat_button_hover")
+Button/styles/normal = SubResource("StyleBoxFlat_button_normal")
+Button/styles/pressed = SubResource("StyleBoxFlat_button_pressed")
+CheckBox/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+CheckBox/colors/font_hover_color = Color(0.45, 0.73, 0.91, 1)
+CheckBox/colors/font_pressed_color = Color(0.61, 0.83, 0.2, 1)
+HSeparator/styles/separator = SubResource("StyleBoxFlat_separator")
+HSlider/colors/font_color = Color(0.45, 0.73, 0.91, 1)
+HSlider/styles/grabber_area = SubResource("StyleBoxFlat_slider_fill")
+HSlider/styles/slider = SubResource("StyleBoxFlat_slider_bg")
+ItemList/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+ItemList/colors/font_selected_color = Color(1, 1, 1, 1)
+ItemList/styles/panel = SubResource("StyleBoxFlat_panel_bg")
+Label/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+Label/font_sizes/font_size = 14
+LineEdit/colors/caret_color = Color(0.45, 0.73, 0.91, 1)
+LineEdit/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+LineEdit/colors/font_placeholder_color = Color(0.28, 0.33, 0.37, 1)
+LineEdit/font_sizes/font_size = 14
+LineEdit/styles/focus = SubResource("StyleBoxFlat_input_focus")
+LineEdit/styles/normal = SubResource("StyleBoxFlat_input_normal")
+LinkButton/colors/font_color = Color(0.45, 0.73, 0.91, 1)
+LinkButton/colors/font_hover_color = Color(0.61, 0.83, 0.2, 1)
+LinkButton/colors/font_pressed_color = Color(1, 1, 1, 1)
+OptionButton/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+OptionButton/colors/font_hover_color = Color(1, 1, 1, 1)
+OptionButton/styles/hover = SubResource("StyleBoxFlat_button_hover")
+OptionButton/styles/normal = SubResource("StyleBoxFlat_dropdown_normal")
+OptionButton/styles/pressed = SubResource("StyleBoxFlat_button_pressed")
+PanelContainer/styles/panel = SubResource("StyleBoxFlat_panel_bg")
+PopupMenu/colors/font_color = Color(0.88, 0.9, 0.93, 1)
+PopupMenu/colors/font_hover_color = Color(1, 1, 1, 1)
+PopupMenu/styles/panel = SubResource("StyleBoxFlat_popup_panel")
+ProgressBar/styles/background = SubResource("StyleBoxFlat_progress_bg")
+ProgressBar/styles/fill = SubResource("StyleBoxFlat_progress_fill")
+TabContainer/colors/font_selected_color = Color(1, 1, 1, 1)
+TabContainer/colors/font_unselected_color = Color(0.88, 0.9, 0.93, 1)
+TabContainer/styles/panel = SubResource("StyleBoxFlat_panel_bg")
+TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_tab_selected")
+TabContainer/styles/tab_unselected = SubResource("StyleBoxFlat_tab_unselected")
+TextEdit/fonts/font = ExtResource("font_asap")
diff --git a/export_presets.cfg b/export_presets.cfg
index 86f631c..b0e0a12 100644
--- a/export_presets.cfg
+++ b/export_presets.cfg
@@ -8,7 +8,7 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
-export_path="build/tekton_armageddon_v2.2.1.exe"
+export_path="build/tekton_armageddon_v2.3.1.exe"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
@@ -42,8 +42,8 @@ application/modify_resources=false
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
-application/file_version="2.1"
-application/product_version="2.1"
+application/file_version="2.3"
+application/product_version="2.3"
application/company_name="DanchieGo"
application/product_name="Tekton Armageddon"
application/file_description=""
@@ -80,7 +80,7 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
-export_path="build/tekton-dash-armageddon-v.2.2.1.apk"
+export_path="build/tekton-dash-armageddon-v.2.3.1.apk"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
@@ -110,8 +110,8 @@ architectures/armeabi-v7a=false
architectures/arm64-v8a=true
architectures/x86=false
architectures/x86_64=false
-version/code=2
-version/name="2.1.5"
+version/code=3
+version/name="2.3.1"
package/unique_name="com.danchiego.$genname"
package/name="Tekton Dash Armageddon"
package/signed=true
@@ -306,7 +306,7 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
-export_path="build/tekton_armageddon_v2.2.1.zip"
+export_path="build/tekton_armageddon_v2.3.1.zip"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
@@ -565,8 +565,8 @@ codesign/digest_algorithm=1
codesign/identity_type=0
application/modify_resources=false
application/console_wrapper_icon=""
-application/file_version="2.1"
-application/product_version="2.1"
+application/file_version="2.3"
+application/product_version="2.3"
application/company_name="DanchieGo"
application/product_name="Tekton Armageddon"
application/file_description=""
@@ -582,7 +582,7 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
-export_path="build/tekton_armageddon_v2.2.1.x86_64"
+export_path="build/tekton_armageddon_v2.3.1.x86_64"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
diff --git a/project.godot b/project.godot
index 3ff8f88..7cd383e 100644
--- a/project.godot
+++ b/project.godot
@@ -15,10 +15,14 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true
[application]
config/name="Tekton Dash Armageddon"
-config/version="2.2.1"
+config/version="2.3.1"
run/main_scene="res://scenes/ui/boot_screen.tscn"
config/features=PackedStringArray("4.6", "Forward Plus")
+boot_splash/bg_color=Color(0.16470589, 0.6745098, 0.9372549, 1)
+boot_splash/stretch_mode=0
+boot_splash/image="uid://b10e6kr508642"
config/icon="res://icon.svg"
+boot_splash/minimum_display_time=2
[autoload]
@@ -43,11 +47,14 @@ SkinManager="*res://scripts/managers/skin_manager.gd"
GachaManager="*res://scripts/managers/gacha_manager.gd"
BackendService="*res://scripts/services/backend_service.gd"
FriendManager="*res://scripts/managers/friend_manager.gd"
+MailManager="*res://scripts/managers/mail_manager.gd"
[display]
window/size/viewport_width=1366
-window/size/viewport_height=720
+window/size/viewport_height=768
+window/size/window_width_override=1280
+window/size/window_height_override=720
window/stretch/mode="viewport"
[editor_plugins]
diff --git a/scenes/lobby.gd b/scenes/lobby.gd
index 4026195..18e9b85 100644
--- a/scenes/lobby.gd
+++ b/scenes/lobby.gd
@@ -29,17 +29,28 @@ extends Control
@onready var leaderboard_btn = %LeaderboardBtn
@onready var shop_btn = %CartBtn
@onready var top_right_profile_btn = %ProfileBtn
-@onready var banner1_btn = %Banner1
-@onready var ticket_btn = $MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/TicketBtn
+@onready var mailbox_btn = get_node_or_null("%MailboxBtn")
+@onready var banner1_btn = get_node_or_null("%Banner1")
+@onready var ticket_btn = get_node_or_null("%TicketBtn")
+@onready var mailbox_panel = get_node_or_null("MailboxPanel")
# UI References - Room List
-@onready var room_list_panel = $RoomListPanel
-@onready var room_list = $RoomListPanel/VBoxContainer/RoomList
-@onready var match_id_input = $RoomListPanel/VBoxContainer/MatchIdInput
-@onready var refresh_btn = $RoomListPanel/VBoxContainer/ButtonContainer/RefreshBtn
-@onready var join_btn = $RoomListPanel/VBoxContainer/ButtonContainer/JoinBtn
-@onready var back_btn = $RoomListPanel/VBoxContainer/ButtonContainer/BackBtn
-@onready var room_list_profile_btn = $RoomListPanel/VBoxContainer/ButtonContainer/ProfileBtn
+@onready var room_list_panel = %RoomListPanel
+@onready var room_list = get_node_or_null("%RoomList")
+@onready var match_id_input = get_node_or_null("%MatchIdInput")
+@onready var refresh_btn = get_node_or_null("%RefreshBtn")
+@onready var join_btn = get_node_or_null("%JoinBtn")
+@onready var back_btn = get_node_or_null("%RoomListCloseBtn")
+@onready var room_list_profile_btn = get_node_or_null("%RoomListProfileBtn")
+@onready var item_template = get_node_or_null("%ItemTemplate")
+
+@onready var room_player_username = get_node_or_null("%PlayerUsername")
+@onready var room_player_score = get_node_or_null("%PlayerScore")
+@onready var room_player_rank = get_node_or_null("%Rank")
+@onready var room_avatar = get_node_or_null("%Avatar")
+
+# Cached leaderboard rank for local player
+var _local_player_rank: int = 0
# UI References - Lobby Panel
@onready var lobby_panel = $LobbyPanel
@@ -124,6 +135,9 @@ var daily_reward_panel_instance: Control
# Bot name tracking keyed by slot index to avoid re-generating on each update
var _bot_names: Dictionary = {}
+# Room list filter ("" = all, "Freemode", "Stop n Go", etc.)
+var _room_mode_filter: String = ""
+
# =============================================================================
# Chat System
# =============================================================================
@@ -135,6 +149,9 @@ var _chat_messages: Array = []
@onready var chat_input: LineEdit = %ChatInput
@onready var chat_send_btn: Button = %SendBtn
+var _friend_suggest_panel: PanelContainer
+var _friend_suggest_list: ItemList
+
# Server Selection Controls (Now in tscn)
# var server_option: OptionButton
# var server_ip_input: LineEdit
@@ -167,6 +184,8 @@ func _ready():
main_menu_profile_btn.pressed.connect(_on_profile_btn_pressed)
if top_right_profile_btn:
top_right_profile_btn.pressed.connect(_on_profile_btn_pressed)
+ if mailbox_btn:
+ mailbox_btn.pressed.connect(_on_mailbox_pressed)
if lobby_settings_btn:
lobby_settings_btn.pressed.connect(_on_settings_pressed)
@@ -191,6 +210,16 @@ func _ready():
var social_btn = get_node_or_null("%SocialBtn")
if social_btn:
social_btn.pressed.connect(_on_social_pressed)
+
+ # Connect Social / Friend UI
+ var global_chat_tab_btn = get_node_or_null("%GlobalChatTabBtn")
+ if global_chat_tab_btn:
+ global_chat_tab_btn.pressed.connect(func(): _switch_chat_tab("global"))
+
+ FriendManager.dm_message_received.connect(_on_lobby_dm_received)
+
+
+
# Connect Server Selection signals
if server_option:
@@ -202,15 +231,53 @@ func _ready():
server_ip_input.focus_exited.connect(func(): _on_server_ip_submitted(server_ip_input.text))
# Connect button signals - Room List
- refresh_btn.pressed.connect(_on_refresh_pressed)
- join_btn.pressed.connect(_on_join_pressed)
- back_btn.pressed.connect(_on_back_pressed)
+ if refresh_btn: refresh_btn.pressed.connect(_on_refresh_pressed)
+ if join_btn: join_btn.pressed.connect(_on_join_pressed)
+ if back_btn: back_btn.pressed.connect(_on_back_pressed)
+ if match_id_input:
+ match_id_input.text_submitted.connect(func(_text): _on_join_pressed())
if room_list:
room_list.item_selected.connect(_on_room_selected)
room_list.item_activated.connect(_on_room_activated)
if room_list_profile_btn:
room_list_profile_btn.pressed.connect(_on_profile_btn_pressed)
+
+ # Connect Side Tab switching
+ var play_side_btn = get_node_or_null("%PlayTabSideBtn")
+ var room_side_btn = get_node_or_null("%RoomTabSideBtn")
+ var room_tabs = get_node_or_null("%RoomListTabs")
+ if play_side_btn and room_side_btn and room_tabs:
+ play_side_btn.pressed.connect(func():
+ room_tabs.current_tab = 0
+ play_side_btn.button_pressed = true
+ room_side_btn.button_pressed = false
+ )
+ room_side_btn.pressed.connect(func():
+ room_tabs.current_tab = 1
+ play_side_btn.button_pressed = false
+ room_side_btn.button_pressed = true
+ )
+
+ # Connect Play Tab mode buttons
+ var free_mode_btn = get_node_or_null("%FreeModeBtn")
+ var stop_n_go_btn = get_node_or_null("%StopNGoBtn")
+ var room_free_mode_btn = get_node_or_null("%RoomFreeModeBtn")
+ var room_stop_n_go_btn = get_node_or_null("%RoomStopNGoBtn")
+ if free_mode_btn:
+ free_mode_btn.pressed.connect(func(): _host_room("Freemode"))
+ if stop_n_go_btn:
+ stop_n_go_btn.pressed.connect(func(): _host_room("Stop n Go"))
+ if room_free_mode_btn:
+ room_free_mode_btn.pressed.connect(func():
+ _room_mode_filter = "Freemode" if _room_mode_filter != "Freemode" else ""
+ LobbyManager.refresh_room_list()
+ )
+ if room_stop_n_go_btn:
+ room_stop_n_go_btn.pressed.connect(func():
+ _room_mode_filter = "Stop n Go" if _room_mode_filter != "Stop n Go" else ""
+ LobbyManager.refresh_room_list()
+ )
# Connect button signals - Lobby
profile_btn.pressed.connect(_on_profile_btn_pressed)
@@ -274,6 +341,13 @@ func _ready():
chat_send_btn.pressed.connect(_on_chat_send_pressed)
if chat_input:
chat_input.text_submitted.connect(func(_t): _on_chat_send_pressed())
+ chat_input.text_changed.connect(_on_chat_input_changed)
+
+ _setup_friend_suggest_ui()
+
+ # Connect Mailbox UI
+ if MailManager:
+ MailManager.unread_count_changed.connect(_on_mail_unread_count_changed)
# Connect Social / Friend UI
invite_btn = get_node_or_null("LobbyPanel/BottomBar/InviteBtn")
@@ -455,38 +529,68 @@ func _on_tutorial_pressed() -> void:
LobbyManager.start_game(true)
func _on_create_room_pressed() -> void:
- # Use profile name for logged-in users, or guest for others
+ _show_panel("room_list")
+ var tabs = get_node_or_null("%RoomListTabs")
+ if tabs:
+ tabs.current_tab = 0
+ if get_node_or_null("%PlayTabSideBtn"): get_node("%PlayTabSideBtn").button_pressed = true
+ if get_node_or_null("%RoomTabSideBtn"): get_node("%RoomTabSideBtn").button_pressed = false
+ _sync_room_profile_card()
+
+ # --- PRESERVED HOSTING LOGIC ---
+ # Moved to _host_room() — called by FreeModeBtn / StopNGoBtn
+ # -------------------------------
+
+func _host_room(game_mode: String) -> void:
+ """Restore preserved hosting logic. Called by mode buttons.
+ game_mode: set LobbyManager.game_mode before hosting (e.g. 'Stop n Go'), or 'Freemode' to keep default."""
+ # Set player name
if AuthManager.is_guest:
if LobbyManager.local_player_name.is_empty() or LobbyManager.local_player_name == "Player":
LobbyManager.local_player_name = NameGenerator.generate_guest_name()
else:
LobbyManager.local_player_name = UserProfileManager.get_display_name()
+ # Set game mode BEFORE is_host flag (set_game_mode guards on is_host)
+ if not game_mode.is_empty():
+ LobbyManager.game_mode = game_mode
+ LobbyManager._update_available_areas(game_mode)
+
+ _apply_loadout_character()
+
+ var mode_prefix := "[%s] " % game_mode if not game_mode.is_empty() else ""
+
if LobbyManager.is_lan_mode:
connection_status.text = "Starting LAN room..."
- # Apply loadout character before creating room
- _apply_loadout_character()
- var ok = await LobbyManager.create_room_lan("LAN Room " + str(randi_range(100, 999)))
+ var room_label := "%sLAN Room %d" % [mode_prefix, randi_range(100, 999)]
+ var ok = await LobbyManager.create_room_lan(room_label)
if not ok:
connection_status.text = "Failed to start LAN room. Check port 7777."
else:
connection_status.text = "Creating Nakama room..."
- # Apply loadout character before creating room
- _apply_loadout_character()
- LobbyManager.create_room("Room %d" % randi_range(1000, 9999))
+ var room_label := "%sRoom %d" % [mode_prefix, randi_range(1000, 9999)]
+ LobbyManager.create_room(room_label)
func _on_browse_rooms_pressed() -> void:
_show_panel("room_list")
+ var tabs = get_node_or_null("%RoomListTabs")
+ if tabs:
+ tabs.current_tab = 1
+ if get_node_or_null("%PlayTabSideBtn"): get_node("%PlayTabSideBtn").button_pressed = false
+ if get_node_or_null("%RoomTabSideBtn"): get_node("%RoomTabSideBtn").button_pressed = true
+ _sync_room_profile_card()
+
+ var match_id_label = get_node_or_null("%RoomListPanel/RoomListTabs/RoomTab/HBoxContainer/RightCol/MatchIdLabel")
if LobbyManager.is_lan_mode:
connection_status.text = "LAN Mode - Enter Host IP to join"
match_id_input.placeholder_text = "Enter Host IP (e.g. 192.168.1.10)..."
- $RoomListPanel/VBoxContainer/MatchIdLabel.text = "DIRECT CONNECT (HOST IP)"
+ if match_id_label: match_id_label.text = "DIRECT CONNECT (HOST IP)"
_on_refresh_pressed() # Try to discover rooms if implemented
else:
connection_status.text = "Loading Nakama rooms..."
match_id_input.placeholder_text = "Paste match ID here..."
- $RoomListPanel/VBoxContainer/MatchIdLabel.text = "DIRECT CONNECT (MATCH ID)"
+ if match_id_label: match_id_label.text = "DIRECT CONNECT (MATCH ID)"
LobbyManager.refresh_room_list()
# =============================================================================
@@ -765,6 +869,29 @@ func _on_profile_btn_pressed() -> void:
main_menu_panel.hide()
profile_panel_instance.show_panel()
+func _on_mailbox_pressed() -> void:
+ if mailbox_panel:
+ mailbox_panel.show_panel()
+ if main_menu_panel:
+ main_menu_panel.hide()
+
+ # Connect the closed signal to reshow main menu if not connected
+ if not mailbox_panel.closed.is_connected(_on_mailbox_closed):
+ mailbox_panel.closed.connect(_on_mailbox_closed)
+
+func _on_mailbox_closed() -> void:
+ if main_menu_panel:
+ main_menu_panel.show()
+
+func _on_mail_unread_count_changed(count: int) -> void:
+ if mailbox_btn:
+ if count > 0:
+ mailbox_btn.text = "MAIL (%d)" % count
+ mailbox_btn.add_theme_color_override("font_color", Color.YELLOW)
+ else:
+ mailbox_btn.text = "MAIL"
+ mailbox_btn.remove_theme_color_override("font_color")
+
func _on_logout_pressed() -> void:
AuthManager.logout()
_go_to_login()
@@ -895,17 +1022,75 @@ func _go_to_login() -> void:
func _on_room_list_updated(rooms: Array) -> void:
room_list.clear()
- for room in rooms:
- var room_name = room.get("room_name", "Unknown")
- var host_name = room.get("host_name", "Unknown")
- var player_count = room.get("player_count", 1)
- var max_players = room.get("max_players", 4)
- room_list.add_item("%s - %s (%d/%d)" % [room_name, host_name, player_count, max_players])
+ # Remove previously cloned row nodes (children after Head and ItemTemplate)
+ if item_template:
+ var parent = item_template.get_parent()
+ for child in parent.get_children():
+ if child.has_meta("room_row"):
+ child.queue_free()
- if rooms.size() == 0:
- connection_status.text = "No rooms available"
+ var filtered := rooms.filter(func(r):
+ return _room_mode_filter.is_empty() or r.get("game_mode", "") == _room_mode_filter
+ )
+
+ if item_template:
+ # Use visual row template
+ var parent = item_template.get_parent()
+ for i in range(filtered.size()):
+ var room = filtered[i]
+ var row = item_template.duplicate()
+ row.visible = true
+ row.set_meta("room_row", true)
+ row.set_meta("room_index", i)
+
+ var room_id_short = room.get("room_name", "???")
+ var host_name = room.get("host_name", "Unknown")
+ var player_count = room.get("player_count", 1)
+ var max_players = room.get("max_players", 8)
+ var mode = room.get("game_mode", "")
+ var mode_short = "FMD" if mode == "Freemode" else ("SNG" if mode == "Stop n Go" else mode.left(3).to_upper())
+
+ # Populate labels inside the cloned template
+ var hbox = row.get_node("PanelContainer/MarginContainer/HBoxContainer")
+ if hbox:
+ var lbl_id = hbox.get_child(0) # ListRoomID
+ var lbl_host = hbox.get_child(1) # ListHost
+ var lbl_mode = hbox.get_child(2) # ListMode
+ var lbl_cap = hbox.get_child(3) # ListCap
+ if lbl_id: lbl_id.text = room_id_short
+ if lbl_host: lbl_host.text = host_name
+ if lbl_mode: lbl_mode.text = mode_short
+ if lbl_cap: lbl_cap.text = "%d/%d" % [player_count, max_players]
+
+ parent.add_child(row)
+
+ # Make row clickable — select in ItemList + fill MatchIdInput
+ var panel_box = row.get_node_or_null("PanelContainer")
+ if panel_box:
+ var idx = i
+ panel_box.gui_input.connect(func(event: InputEvent):
+ if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
+ _on_room_selected(idx)
+ if event.double_click:
+ _on_room_activated(idx)
+ )
+ panel_box.mouse_filter = Control.MOUSE_FILTER_STOP
else:
- connection_status.text = "Found %d room(s)" % rooms.size()
+ # Fallback: flat strings in ItemList
+ for room in filtered:
+ var room_name = room.get("room_name", "Unknown")
+ var host_name = room.get("host_name", "Unknown")
+ var player_count = room.get("player_count", 1)
+ var max_players = room.get("max_players", 4)
+ var mode = room.get("game_mode", "")
+ var mode_tag = " [%s]" % mode if not mode.is_empty() else ""
+ room_list.add_item("%s - %s (%d/%d)%s" % [room_name, host_name, player_count, max_players, mode_tag])
+
+ var filter_note = " [Filter: %s]" % _room_mode_filter if not _room_mode_filter.is_empty() else ""
+ if filtered.size() == 0:
+ connection_status.text = "No rooms available%s" % filter_note
+ else:
+ connection_status.text = "Found %d room(s)%s" % [filtered.size(), filter_note]
func _on_room_joined(room_data: Dictionary) -> void:
_show_panel("lobby")
@@ -1051,12 +1236,76 @@ func _on_profile_updated() -> void:
gold_label.text = str(UserProfileManager.wallet.get("gold", 0))
if star_label and UserProfileManager.is_profile_loaded:
star_label.text = str(UserProfileManager.wallet.get("star", 0))
+
+ # Update Room tab stats
+ if room_player_username:
+ room_player_username.text = display_name
+ if room_player_score and UserProfileManager.is_profile_loaded:
+ var total = UserProfileManager.stats.get("total_score", 0)
+ room_player_score.text = str(total).pad_zeros(6)
+ if room_player_rank and UserProfileManager.is_profile_loaded:
+ room_player_rank.text = str(_local_player_rank).pad_zeros(2)
+
+ if room_avatar and avatar_display and avatar_display.texture:
+ # Copy the style and override it to use the avatar texture
+ var style = StyleBoxTexture.new()
+ style.texture = avatar_display.texture
+ room_avatar.add_theme_stylebox_override("panel", style)
# Sync to LobbyManager
LobbyManager.set_player_name(display_name)
_setup_3d_preview()
+# =============================================================================
+# Room Profile Card Sync
+# =============================================================================
+
+func _sync_room_profile_card() -> void:
+ """Sync username, total_score, rank, and avatar into the RoomTab profile card."""
+ if room_player_username:
+ room_player_username.text = UserProfileManager.get_display_name() if UserProfileManager.is_profile_loaded else LobbyManager.local_player_name
+ if room_player_score and UserProfileManager.is_profile_loaded:
+ var total = UserProfileManager.stats.get("total_score", 0)
+ room_player_score.text = str(total).pad_zeros(6)
+ if room_player_rank:
+ room_player_rank.text = str(_local_player_rank).pad_zeros(2)
+ if room_avatar and avatar_display and avatar_display.texture:
+ var style = StyleBoxTexture.new()
+ style.texture = avatar_display.texture
+ room_avatar.add_theme_stylebox_override("panel", style)
+ # Fetch rank from leaderboard in background and update label when done
+ _fetch_local_player_rank()
+
+# =============================================================================
+# Leaderboard Rank Fetch
+# =============================================================================
+
+func _fetch_local_player_rank() -> void:
+ """Fetch local player's rank from Nakama leaderboard and update the Rank label."""
+ if not NakamaManager.session or AuthManager.is_guest:
+ return
+ var my_id := NakamaManager.session.user_id
+ # List around the local player to get their rank
+ var result = await NakamaManager.client.list_leaderboard_records_around_owner_async(
+ NakamaManager.session,
+ "global_high_score",
+ my_id,
+ null,
+ 1
+ )
+ if result.is_exception():
+ return
+ if result.owner_records and result.owner_records.size() > 0:
+ var rec = result.owner_records[0]
+ _local_player_rank = int(rec.rank)
+ elif result.records and result.records.size() > 0:
+ _local_player_rank = int(result.records[0].rank)
+ else:
+ return
+ if room_player_rank and room_list_panel.visible:
+ room_player_rank.text = str(_local_player_rank).pad_zeros(2)
+
# =============================================================================
# Player Slot Updates
# =============================================================================
@@ -1286,26 +1535,75 @@ func _on_invite_accepted() -> void:
_pending_invite_match_id = ""
func _on_social_pressed() -> void:
- """Open social / friend list panel."""
if not social_panel_instance:
var scene = load("res://scenes/ui/social_panel.tscn")
if scene:
social_panel_instance = scene.instantiate()
social_panel_instance.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
- add_child(social_panel_instance)
+
+ # Wrap in CanvasLayer so it draws above 3D viewport and all lobby UI
+ var cl := CanvasLayer.new()
+ cl.layer = 100
+ cl.name = "SocialCanvasLayer"
+ add_child(cl)
+ cl.add_child(social_panel_instance)
+
+ if social_panel_instance.has_signal("dm_requested"):
+ social_panel_instance.dm_requested.connect(func(user_id, username):
+ social_panel_instance.hide()
+ _open_dm_tab(user_id, username)
+ # Restore Lobby UI
+ if main_menu_panel:
+ var main_hbox = main_menu_panel.get_node_or_null("MainMargin/MainHBox")
+ if main_hbox:
+ var left_col = main_hbox.get_node_or_null("LeftCol")
+ if left_col:
+ for child in left_col.get_children():
+ child.show()
+ var right_col = main_hbox.get_node_or_null("RightCol")
+ if right_col: right_col.show()
+ )
+
if social_panel_instance.has_signal("closed"):
social_panel_instance.closed.connect(func():
social_panel_instance.hide()
- if main_menu_panel: main_menu_panel.show()
+ # Restore Lobby UI
+ if main_menu_panel:
+ var main_hbox = main_menu_panel.get_node_or_null("MainMargin/MainHBox")
+ if main_hbox:
+ var left_col = main_hbox.get_node_or_null("LeftCol")
+ if left_col:
+ for child in left_col.get_children():
+ child.show()
+ var right_col = main_hbox.get_node_or_null("RightCol")
+ if right_col: right_col.show()
)
if social_panel_instance:
- if main_menu_panel: main_menu_panel.hide()
+ # Hide unnecessary UI to focus on Social/Chat
+ if main_menu_panel:
+ var main_hbox = main_menu_panel.get_node_or_null("MainMargin/MainHBox")
+ if main_hbox:
+ var left_col = main_hbox.get_node_or_null("LeftCol")
+ if left_col:
+ for child in left_col.get_children():
+ # Keep Chat, Input, and Spacer (to keep chat at bottom)
+ if child.name not in ["ChatPanel", "HBoxContainer", "SpacerMiddle"]:
+ child.hide()
+ var right_col = main_hbox.get_node_or_null("RightCol")
+ if right_col: right_col.hide()
social_panel_instance.show()
+
+
+
# =============================================================================
# Global Chat System
# =============================================================================
+var _active_chat_context: String = "global"
+var _dm_tabs: Dictionary = {} # user_id -> Control
+var _dm_messages: Dictionary = {} # user_id -> Array
+
func _join_global_chat() -> void:
"""Join the persistent global lobby chat channel via Nakama socket."""
# Already in the channel — don't rejoin
@@ -1388,7 +1686,7 @@ func _add_chat_message(message, refresh_display: bool) -> void:
_refresh_chat_display()
func _on_chat_send_pressed() -> void:
- """Send a message to the global chat channel."""
+ """Send a message to the global chat channel or DM."""
if chat_input == null or chat_input.text.strip_edges().is_empty():
return
@@ -1396,6 +1694,68 @@ func _on_chat_send_pressed() -> void:
chat_input.text = ""
chat_input.grab_focus()
+ if _friend_suggest_panel and _friend_suggest_panel.visible:
+ _friend_suggest_panel.hide()
+
+ # Check if user used @ shortcut
+ if text.begins_with("@"):
+ var space_idx = text.find(" ")
+ var target_username = ""
+ var dm_message = ""
+
+ if space_idx > 0:
+ target_username = text.substr(1, space_idx - 1)
+ dm_message = text.substr(space_idx + 1).strip_edges()
+ else:
+ target_username = text.substr(1).strip_edges()
+
+ if not target_username.is_empty():
+ var target_friend = null
+ for f in FriendManager.friends:
+ if f.get("username", "") == target_username:
+ target_friend = f
+ break
+
+ if target_friend:
+ var user_id = target_friend.get("user_id", "")
+ var username = target_friend.get("username", "")
+
+ _open_dm_tab(user_id, username)
+
+ if not dm_message.is_empty():
+ _send_dm_message(user_id, dm_message)
+ return
+ elif text.begins_with("@"):
+ _inject_local_message("User %s not found in friends." % target_username)
+ return
+
+ if _active_chat_context != "global":
+ if text == "/clear":
+ _dm_messages[_active_chat_context] = []
+ _refresh_chat_display()
+ return
+ _send_dm_message(_active_chat_context, text)
+ return
+
+ # Handle /clear command on global tab
+ if text == "/clear":
+ var is_admin = await AdminManager._check_admin_status()
+ if is_admin:
+ # Clear local buffer
+ _chat_messages.clear()
+ _refresh_chat_display()
+ # Also clear server-side persisted messages so they don't reload
+ if _chat_channel and NakamaManager.session and NakamaManager.client:
+ var payload = JSON.stringify({"channel_id": _chat_channel.id})
+ var rpc_result = await NakamaManager.client.rpc_async(NakamaManager.session, "admin_clear_global_chat", payload)
+ if rpc_result.is_exception():
+ push_warning("[Chat] admin_clear_global_chat RPC failed: " + rpc_result.get_exception().message)
+ else:
+ _inject_local_message("[SYSTEM] : Global chat cleared by admin.")
+ else:
+ _inject_local_message("[SYSTEM] : Unknown cmd, /clear only usable on DM between user.")
+ return
+
# Instantly show locally for best UX
_inject_local_message(text)
@@ -1409,10 +1769,130 @@ func _on_chat_send_pressed() -> void:
if result.is_exception():
push_warning("[Chat] Failed to send message: " + result.get_exception().message)
+func _send_dm_message(user_id: String, text: String) -> void:
+ var sent = await FriendManager.send_dm(user_id, text)
+ if sent:
+ if not _dm_messages.has(user_id):
+ _dm_messages[user_id] = []
+ _dm_messages[user_id].append({"sender": "You", "content": text, "ts": _get_local_time()})
+ if _active_chat_context == user_id:
+ _refresh_chat_display()
+
+func _on_lobby_dm_received(from_user_id: String, from_name: String, message: String) -> void:
+ if not _dm_messages.has(from_user_id):
+ _dm_messages[from_user_id] = []
+
+ _dm_messages[from_user_id].append({"sender": from_name, "content": message, "ts": _get_local_time()})
+
+ if not _dm_tabs.has(from_user_id):
+ _create_dm_tab(from_user_id, from_name)
+
+ if _active_chat_context == from_user_id:
+ _refresh_chat_display()
+
+func _open_dm_tab(user_id: String, username: String) -> void:
+ if not _dm_tabs.has(user_id):
+ _create_dm_tab(user_id, username)
+ _dm_messages[user_id] = []
+ _switch_chat_tab(user_id)
+
+ var history = await FriendManager.get_dm_history(user_id)
+ var my_id = NakamaManager.session.user_id if NakamaManager.session else ""
+ for entry in history:
+ var is_self = entry.get("from") == my_id
+ var sender_name = "You" if is_self else username
+ var ts = _format_nakama_time(entry.get("create_time", ""))
+ _dm_messages[user_id].append({"sender": sender_name, "content": entry.get("msg", ""), "ts": ts})
+
+ if _active_chat_context == user_id:
+ _refresh_chat_display()
+ else:
+ _switch_chat_tab(user_id)
+
+func _create_dm_tab(user_id: String, username: String) -> void:
+ var tabs_container = get_node_or_null("%ChatTabsContainer")
+ var template = get_node_or_null("%DMTabTemplate")
+ if not tabs_container or not template: return
+
+ var hbox = template.duplicate()
+ hbox.visible = true
+
+ var btn = hbox.get_node("DMTabBtn")
+ if btn:
+ btn.text = username
+ btn.pressed.connect(func(): _switch_chat_tab(user_id))
+
+ var close_btn = hbox.get_node("DMTabCloseBtn")
+ if close_btn:
+ close_btn.pressed.connect(func(): _close_dm_tab(user_id))
+
+ tabs_container.add_child(hbox)
+ _dm_tabs[user_id] = hbox
+
+func _close_dm_tab(user_id: String) -> void:
+ if _dm_tabs.has(user_id):
+ var tab = _dm_tabs[user_id]
+ tab.queue_free()
+ _dm_tabs.erase(user_id)
+
+ if _active_chat_context == user_id:
+ _switch_chat_tab("global")
+
+func _switch_chat_tab(context_id: String) -> void:
+ _active_chat_context = context_id
+ _refresh_chat_display()
+
+ var tabs_container = get_node_or_null("%ChatTabsContainer")
+ if tabs_container:
+ var global_btn = get_node_or_null("%GlobalChatTabBtn")
+ if global_btn:
+ global_btn.modulate = Color(1.0, 1.0, 1.0) if context_id == "global" else Color(0.6, 0.6, 0.6)
+
+ for u_id in _dm_tabs:
+ var tab_hbox = _dm_tabs[u_id]
+ tab_hbox.modulate = Color(1.0, 1.0, 1.0) if context_id == u_id else Color(0.6, 0.6, 0.6)
+
+func _setup_friend_suggest_ui() -> void:
+ _friend_suggest_panel = get_node_or_null("%FriendSuggestPanel")
+ _friend_suggest_list = get_node_or_null("%FriendSuggestList")
+ if not _friend_suggest_panel or not _friend_suggest_list:
+ push_warning("[Lobby] FriendSuggestPanel or FriendSuggestList not found in scene")
+ return
+ _friend_suggest_panel.visible = false
+ # item_activated fires on double-click / Enter (desktop)
+ _friend_suggest_list.item_activated.connect(_on_friend_suggest_activated)
+ # item_selected fires on single tap (touch / mobile)
+ _friend_suggest_list.item_selected.connect(_on_friend_suggest_activated)
+
+func _on_chat_input_changed(new_text: String) -> void:
+ if not _friend_suggest_panel or not _friend_suggest_list:
+ return
+ if new_text.begins_with("@") and not " " in new_text:
+ var search = new_text.substr(1).to_lower()
+ _friend_suggest_list.clear()
+ for f in FriendManager.friends:
+ if f.get("state", -1) == FriendManager.STATE_FRIEND:
+ var uname = f.get("username", "")
+ if uname.to_lower().begins_with(search) or search.is_empty():
+ _friend_suggest_list.add_item(uname)
+
+ _friend_suggest_panel.visible = _friend_suggest_list.item_count > 0
+ else:
+ _friend_suggest_panel.visible = false
+
+func _on_friend_suggest_activated(index: int) -> void:
+ if not _friend_suggest_list:
+ return
+ var uname = _friend_suggest_list.get_item_text(index)
+ chat_input.text = "@%s " % uname
+ chat_input.caret_column = chat_input.text.length()
+ chat_input.grab_focus()
+ _friend_suggest_panel.visible = false
+
func _inject_local_message(text: String) -> void:
"""Display a message as the local player when offline/fallback."""
var display_name = UserProfileManager.get_display_name("You")
- var ts_str = _get_local_time_hhmm()
+ var ts_str = _get_local_time()
_chat_messages.append({
"sender": display_name,
"content": text,
@@ -1432,7 +1912,15 @@ func _refresh_chat_display() -> void:
return
chat_display.clear()
- for msg in _chat_messages:
+
+ var messages_to_show = _chat_messages
+ if _active_chat_context != "global":
+ if _dm_messages.has(_active_chat_context):
+ messages_to_show = _dm_messages[_active_chat_context]
+ else:
+ messages_to_show = []
+
+ for msg in messages_to_show:
var ts: String = msg.get("ts", "")
var sender: String = msg.get("sender", "?")
var text: String = msg.get("content", "")
@@ -1448,27 +1936,29 @@ func _refresh_chat_display() -> void:
chat_display.scroll_to_line(chat_display.get_line_count())
func _format_nakama_time(time_str: String) -> String:
- """Convert Nakama time to local 'HH:MM'."""
- # Nakama returns UNIX epoch as string (e.g. "1714418656") or ISO string.
+ """Convert Nakama time to local 'DD-MM-YY - HH:MM'."""
if time_str.is_valid_int():
var unix_time = time_str.to_int()
- var dict = Time.get_time_dict_from_unix_time(unix_time)
- return "%02d:%02d" % [dict.hour, dict.minute]
+ var d = Time.get_date_dict_from_unix_time(unix_time)
+ var t = Time.get_time_dict_from_unix_time(unix_time)
+ return "%02d-%02d-%02d - %02d:%02d" % [d.day, d.month, d.year % 100, t.hour, t.minute]
# Fallback for ISO strings or empty
- if time_str.length() < 19:
- return _get_local_time_hhmm()
- var t_parts = time_str.split("T")
- if t_parts.size() < 2:
- return _get_local_time_hhmm()
- var time_part = t_parts[1].replace("Z", "").split(":")
- if time_part.size() < 2:
- return _get_local_time_hhmm()
- return "%s:%s" % [time_part[0], time_part[1]]
+ if time_str.length() >= 19:
+ var date_part = time_str.substr(0, 10).split("-")
+ var time_part = time_str.substr(11, 5) # HH:MM
+ if date_part.size() == 3:
+ var year = date_part[0].substr(2, 2)
+ var month = date_part[1]
+ var day = date_part[2]
+ return "%s-%s-%s - %s" % [day, month, year, time_part]
+
+ return _get_local_time()
-func _get_local_time_hhmm() -> String:
+func _get_local_time() -> String:
+ var d = Time.get_date_dict_from_system()
var t = Time.get_time_dict_from_system()
- return "%02d:%02d" % [t.hour, t.minute]
+ return "%02d-%02d-%02d - %02d:%02d" % [d.day, d.month, d.year % 100, t.hour, t.minute]
func _leave_global_chat() -> void:
"""Leave the chat channel cleanly."""
diff --git a/scenes/lobby.tscn b/scenes/lobby.tscn
index 6caba86..6d7c256 100644
--- a/scenes/lobby.tscn
+++ b/scenes/lobby.tscn
@@ -2,6 +2,7 @@
[ext_resource type="Script" uid="uid://b5q6yekyk0tld" path="res://scenes/lobby.gd" id="1_lp6xi"]
[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2_theme"]
+[ext_resource type="Texture2D" uid="uid://jqvv6s55mlsk" path="res://assets/graphics/gui/BG.png" id="3_iulku"]
[ext_resource type="Texture2D" uid="uid://2d1ks5pmblc7" path="res://assets/graphics/main_menu/bg_back.png" id="3_q60fs"]
[ext_resource type="PackedScene" uid="uid://ejeamn0pyey4" path="res://assets/characters/Bob.glb" id="4_bob"]
[ext_resource type="PackedScene" uid="uid://d4cul3w3wem5w" path="res://assets/characters/Gatot.glb" id="4_gatot"]
@@ -11,6 +12,46 @@
[ext_resource type="AnimationLibrary" uid="uid://c3pyopnwibckj" path="res://assets/characters/animations/animation-pack.res" id="5_animlib"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="5_pc087"]
[ext_resource type="Texture2D" uid="uid://brhn1dhp1gm13" path="res://assets/graphics/character_selection/sc_characters/sc_copper.png" id="10_dyhay"]
+[ext_resource type="Texture2D" uid="uid://c8xwpkvvwa7a4" path="res://assets/graphics/gui/mainmenu/chat.png" id="12_dfnwm"]
+[ext_resource type="Texture2D" uid="uid://b5pp08fke7ptd" path="res://assets/graphics/gui/lobby/gold.png" id="12_gufxi"]
+[ext_resource type="Texture2D" uid="uid://c05mo12h5umgi" path="res://assets/graphics/gui/mainmenu/chat_emoji.png" id="13_0jb4q"]
+[ext_resource type="Texture2D" uid="uid://d0ouvm3x8h42c" path="res://assets/graphics/gui/lobby/star.png" id="13_arjad"]
+[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="14_2630d"]
+[ext_resource type="FontFile" uid="uid://c2tryhyhlyb1u" path="res://assets/fonts/Supercell-Magic Regular.ttf" id="14_vwf6o"]
+[ext_resource type="Texture2D" uid="uid://kflvrkha1jwy" path="res://assets/graphics/gui/mainmenu/chat_enter.png" id="15_iwi7x"]
+[ext_resource type="Texture2D" uid="uid://q8vw41qd00lx" path="res://assets/graphics/gui/mainmenu/button_room.png" id="17_wjff0"]
+[ext_resource type="Texture2D" uid="uid://bcgu0jku4ntcw" path="res://assets/graphics/gui/mainmenu/button_room_interact.png" id="18_0jb4q"]
+[ext_resource type="Texture2D" uid="uid://dllwxub5n4361" path="res://assets/graphics/gui/mainmenu/button_play.png" id="18_h1rib"]
+[ext_resource type="Texture2D" uid="uid://l03huy5c0vvy" path="res://assets/graphics/gui/lobby/profile.png" id="18_u7tfn"]
+[ext_resource type="Texture2D" uid="uid://jted80o4uarv" path="res://assets/graphics/gui/lobby/leaderboards.png" id="19_2630d"]
+[ext_resource type="Texture2D" uid="uid://bvugtpcgc2qkx" path="res://assets/graphics/gui/lobby/shop.png" id="20_835bk"]
+[ext_resource type="Texture2D" uid="uid://c6ahbdxx23e3b" path="res://assets/graphics/gui/mainmenu/button_play_interact.png" id="20_vwf6o"]
+[ext_resource type="Texture2D" uid="uid://6agwwbc1l4g3" path="res://assets/graphics/gui/play/selection_play0.png" id="21_h1rib"]
+[ext_resource type="Texture2D" uid="uid://bmmajc7h7o4dg" path="res://assets/graphics/gui/lobby/dailylogin.png" id="21_ucbax"]
+[ext_resource type="Texture2D" uid="uid://dv782w5t0xlcc" path="res://assets/graphics/gui/lobby/friends.png" id="22_1x1aw"]
+[ext_resource type="Texture2D" uid="uid://cpy5lppf3ro02" path="res://assets/graphics/gui/play/selection_play1.png" id="22_kn4i6"]
+[ext_resource type="Texture2D" uid="uid://b0ovmvcm8rt2n" path="res://assets/graphics/gui/play/selection_room0.png" id="23_3jc85"]
+[ext_resource type="Texture2D" uid="uid://bqcxrfu2jlplr" path="res://assets/graphics/gui/lobby/settings.png" id="23_twy5w"]
+[ext_resource type="Texture2D" uid="uid://3p0sabd1og31" path="res://assets/graphics/gui/play/selection_room1.png" id="24_jhtcy"]
+[ext_resource type="Texture2D" uid="uid://bpco6lch7homj" path="res://assets/graphics/gui/play/bg.png" id="25_iwv4c"]
+[ext_resource type="Texture2D" uid="uid://chkt6c6tt7gdb" path="res://assets/graphics/gui/play/story.png" id="26_wpcbs"]
+[ext_resource type="Texture2D" uid="uid://6oeuovfdxahu" path="res://assets/graphics/gui/play/story_dimmed.png" id="27_8tmsf"]
+[ext_resource type="Texture2D" uid="uid://3kcp8qjd1vfm" path="res://assets/graphics/gui/play/stopngo.png" id="27_ierb3"]
+[ext_resource type="Texture2D" uid="uid://4nejhkohp70d" path="res://assets/graphics/gui/play/freemode.png" id="28_78rk6"]
+[ext_resource type="Texture2D" uid="uid://b8dgaw0bk3x6f" path="res://assets/graphics/gui/play/Rank.png" id="29_6mek4"]
+[ext_resource type="Texture2D" uid="uid://23tvis1trvfr" path="res://assets/graphics/gui/play/x.png" id="29_417c5"]
+[ext_resource type="Texture2D" uid="uid://3tsnxh8xbxr5" path="res://assets/graphics/gui/play/stopngo_dimmed.png" id="29_gxh4y"]
+[ext_resource type="Texture2D" uid="uid://blh0vhxpbiqip" path="res://assets/graphics/gui/play/stopngo_vertical.png" id="30_8ht5e"]
+[ext_resource type="Texture2D" uid="uid://1lilep4qo3tc" path="res://assets/graphics/gui/play/freemode-dimmed.png" id="31_30fw8"]
+[ext_resource type="Texture2D" uid="uid://6lopq2j3kmai" path="res://assets/graphics/gui/play/freemode_vertical.png" id="31_tuh25"]
+[ext_resource type="Texture2D" uid="uid://dxngyrdx5riab" path="res://assets/graphics/gui/play/room_list.png" id="32_8tmsf"]
+[ext_resource type="Texture2D" uid="uid://dimb6edbhvbrm" path="res://assets/graphics/gui/play/refresh.png" id="33_gxh4y"]
+[ext_resource type="Texture2D" uid="uid://cniyw4aa1kc4n" path="res://assets/graphics/gui/play/stopngo_vertical_dimmed.png" id="34_7rn74"]
+[ext_resource type="Texture2D" uid="uid://bupl61vxuub71" path="res://assets/graphics/gui/play/join.png" id="34_30fw8"]
+[ext_resource type="Texture2D" uid="uid://bbuxwuypygk38" path="res://assets/graphics/gui/play/freemode_vertical_dimmed.png" id="36_30el1"]
+[ext_resource type="Texture2D" uid="uid://bwu5ms5nsyy43" path="res://assets/graphics/gui/play/referesh_dimmed.png" id="39_s3vw1"]
+[ext_resource type="Texture2D" uid="uid://cb454spy2usoa" path="res://assets/graphics/gui/play/x_dimmed.png" id="41_7rn74"]
+[ext_resource type="Texture2D" uid="uid://d4mt1q2fxkjy" path="res://assets/graphics/gui/play/join_dimmed.png" id="41_iwv5h"]
[sub_resource type="Environment" id="Env_preview"]
background_mode = 1
@@ -19,6 +60,124 @@ ambient_light_source = 2
ambient_light_color = Color(1, 1, 1, 1)
ambient_light_energy = 0.5
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_busoe"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8mpuv"]
+bg_color = Color(0.2784314, 0.8745098, 1, 1)
+border_width_left = 3
+border_width_top = 3
+border_width_right = 3
+border_width_bottom = 3
+border_color = Color(1, 1, 1, 1)
+corner_radius_top_left = 15
+corner_radius_top_right = 15
+corner_radius_bottom_right = 15
+corner_radius_bottom_left = 15
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gd4oi"]
+bg_color = Color(0, 0, 0, 0.48235294)
+border_color = Color(0.92941177, 0.91764706, 0.8862745, 1)
+corner_radius_top_left = 3
+corner_radius_top_right = 3
+corner_radius_bottom_right = 3
+corner_radius_bottom_left = 3
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kn4i6"]
+bg_color = Color(0, 0, 0, 0.48235294)
+border_width_left = 5
+border_width_top = 5
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color(1, 1, 1, 1)
+corner_radius_top_left = 10
+corner_radius_top_right = 10
+corner_radius_bottom_right = 10
+corner_radius_bottom_left = 10
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3jc85"]
+bg_color = Color(0, 0, 0, 0.48235294)
+border_width_left = 5
+border_width_top = 5
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color(1, 1, 1, 1)
+corner_radius_top_left = 10
+corner_radius_top_right = 10
+corner_radius_bottom_right = 10
+corner_radius_bottom_left = 10
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jhtcy"]
+bg_color = Color(0.6, 0.6, 0.6, 0)
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_iulku"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_dfnwm"]
+
+[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_50md7"]
+texture = ExtResource("25_iwv4c")
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6mek4"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7rn74"]
+border_width_left = 8
+border_width_top = 8
+border_width_right = 8
+border_width_bottom = 8
+border_color = Color(1, 1, 1, 1)
+corner_radius_top_left = 15
+corner_radius_top_right = 15
+corner_radius_bottom_right = 15
+corner_radius_bottom_left = 15
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_30el1"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_s3vw1"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_iwv5h"]
+bg_color = Color(0.14117648, 0.16862746, 0.19215687, 1)
+border_width_left = 4
+border_width_top = 4
+border_width_right = 4
+border_width_bottom = 4
+border_color = Color(0.19607843, 0.27450982, 0.3372549, 1)
+corner_radius_top_left = 10
+corner_radius_top_right = 10
+corner_radius_bottom_right = 10
+corner_radius_bottom_left = 10
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6mek4"]
+content_margin_left = 25.0
+bg_color = Color(0.14117648, 0.16862746, 0.19215687, 1)
+border_width_left = 4
+border_width_top = 4
+border_width_right = 4
+border_width_bottom = 4
+border_color = Color(0.19607843, 0.27450982, 0.3372549, 1)
+corner_radius_top_left = 10
+corner_radius_top_right = 10
+corner_radius_bottom_right = 10
+corner_radius_bottom_left = 10
+
+[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_gufxi"]
+texture = ExtResource("32_8tmsf")
+
+[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_arjad"]
+texture = ExtResource("32_8tmsf")
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8ht5e"]
+bg_color = Color(0.9372549, 0.3764706, 0.30588236, 1)
+corner_radius_top_left = 6
+corner_radius_top_right = 6
+corner_radius_bottom_right = 6
+corner_radius_bottom_left = 6
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tuh25"]
+bg_color = Color(0.3372549, 0.5254902, 0.28235295, 1)
+corner_radius_top_left = 6
+corner_radius_top_right = 6
+corner_radius_bottom_right = 6
+corner_radius_bottom_left = 6
+
[node name="Lobby" type="Control" unique_id=1490767889]
layout_mode = 3
anchors_preset = 15
@@ -30,6 +189,7 @@ theme = ExtResource("2_theme")
script = ExtResource("1_lp6xi")
[node name="Background3" type="ColorRect" parent="." unique_id=245238082]
+visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -39,15 +199,14 @@ grow_vertical = 2
color = Color(0.0627451, 0.0745098, 0.101961, 1)
[node name="Background" type="TextureRect" parent="." unique_id=767675801]
-modulate = Color(1, 1, 1, 0.28235295)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-texture = ExtResource("3_q60fs")
-expand_mode = 2
+texture = ExtResource("3_iulku")
+expand_mode = 1
[node name="Background2" type="TextureRect" parent="." unique_id=783164473]
visible = false
@@ -86,7 +245,7 @@ unique_name_in_owner = true
own_world_3d = true
transparent_bg = true
handle_input_locally = false
-size = Vector2i(1366, 720)
+size = Vector2i(1366, 768)
render_target_update_mode = 4
[node name="WorldEnvironment" type="WorldEnvironment" parent="MainMenuPanel/ViewportWrapper/SubViewportContainer/PreviewViewport" unique_id=253593246]
@@ -159,13 +318,18 @@ clip_contents = true
custom_minimum_size = Vector2(0, 130)
layout_mode = 2
size_flags_horizontal = 3
-theme = ExtResource("2_theme")
+theme_override_styles/panel = SubResource("StyleBoxEmpty_busoe")
-[node name="HBox" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard" unique_id=58934509]
+[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard" unique_id=1195708144]
+layout_mode = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_right = 20
+
+[node name="HBox" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer" unique_id=58934509]
layout_mode = 2
theme_override_constants/separation = 12
-[node name="MainProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/HBox" unique_id=89234859]
+[node name="MainProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox" unique_id=89234859]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 100)
layout_mode = 2
@@ -173,7 +337,16 @@ size_flags_vertical = 4
flat = true
expand_icon = true
-[node name="AvatarDisplay" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/HBox/MainProfileBtn" unique_id=593485890]
+[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/MainProfileBtn" unique_id=2112174468]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_8mpuv")
+
+[node name="AvatarDisplay" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/MainProfileBtn" unique_id=593485890]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
@@ -185,30 +358,121 @@ texture = ExtResource("10_dyhay")
expand_mode = 1
stretch_mode = 5
-[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/HBox" unique_id=598345789]
+[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox" unique_id=598345789]
layout_mode = 2
size_flags_horizontal = 3
alignment = 1
-[node name="Username" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/HBox/VBoxContainer" unique_id=50934858]
+[node name="Username" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer" unique_id=50934858]
unique_name_in_owner = true
layout_mode = 2
theme = ExtResource("2_theme")
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
theme_override_fonts/font = ExtResource("5_pc087")
-theme_override_font_sizes/font_size = 18
+theme_override_font_sizes/font_size = 24
text = "USERNAME"
-[node name="Subtitle" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/HBox/VBoxContainer" unique_id=5948395]
+[node name="Subtitle" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer" unique_id=5948395]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.7, 0.6, 0.2, 1)
+theme_override_colors/font_color = Color(0.53, 0.53, 0.53, 1)
theme_override_fonts/font = ExtResource("5_pc087")
theme_override_font_sizes/font_size = 14
text = "EU SERVER"
+[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer" unique_id=331071595]
+layout_mode = 2
+theme_override_constants/separation = 6
+
+[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer" unique_id=113826609]
+custom_minimum_size = Vector2(80, 30)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_styles/panel = SubResource("StyleBoxFlat_gd4oi")
+
+[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel" unique_id=2062391446]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 3
+theme_override_constants/margin_top = 3
+theme_override_constants/margin_right = 6
+theme_override_constants/margin_bottom = 3
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer" unique_id=1826509078]
+layout_mode = 2
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=1462222702]
+layout_mode = 2
+size_flags_horizontal = 0
+size_flags_vertical = 4
+texture = ExtResource("12_gufxi")
+
+[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=312597909]
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+text = "0000000"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="GoldLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=94850]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 18
+text = "0"
+horizontal_alignment = 2
+
+[node name="Panel2" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer" unique_id=1514999060]
+custom_minimum_size = Vector2(80, 30)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_styles/panel = SubResource("StyleBoxFlat_gd4oi")
+
+[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2" unique_id=2040127486]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 3
+theme_override_constants/margin_top = 3
+theme_override_constants/margin_right = 6
+theme_override_constants/margin_bottom = 3
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer" unique_id=108285540]
+layout_mode = 2
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=1770079891]
+layout_mode = 2
+size_flags_horizontal = 0
+size_flags_vertical = 4
+texture = ExtResource("13_arjad")
+
+[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=1184388330]
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+text = "0000000"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="StarLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=948509]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 18
+text = "0"
+horizontal_alignment = 2
+
[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2" unique_id=177944371]
-custom_minimum_size = Vector2(80, 0)
+custom_minimum_size = Vector2(50, 0)
layout_direction = 3
layout_mode = 2
@@ -217,6 +481,7 @@ custom_minimum_size = Vector2(0, 8)
layout_mode = 2
[node name="CurrencyRow" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=59384589]
+visible = false
layout_mode = 2
theme_override_constants/separation = 8
@@ -246,16 +511,6 @@ theme_override_colors/font_color = Color(0.9, 0.7, 0.3, 1)
theme_override_font_sizes/font_size = 18
text = "✦"
-[node name="StarLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer/StarPanel/Margin/HBoxContainer" unique_id=948509]
-unique_name_in_owner = true
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
-theme_override_fonts/font = ExtResource("5_pc087")
-theme_override_font_sizes/font_size = 18
-text = "0"
-horizontal_alignment = 2
-
[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer" unique_id=255421565]
custom_minimum_size = Vector2(180, 0)
layout_direction = 3
@@ -287,16 +542,6 @@ theme_override_colors/font_color = Color(0.8, 0.6, 0.2, 1)
theme_override_font_sizes/font_size = 18
text = "▤"
-[node name="GoldLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2/GoldPanel/Margin/HBoxContainer" unique_id=94850]
-unique_name_in_owner = true
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
-theme_override_fonts/font = ExtResource("5_pc087")
-theme_override_font_sizes/font_size = 18
-text = "0"
-horizontal_alignment = 2
-
[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/CurrencyRow/HBoxContainer2" unique_id=320833893]
custom_minimum_size = Vector2(180, 0)
layout_direction = 3
@@ -307,51 +552,129 @@ layout_mode = 2
size_flags_vertical = 3
[node name="ChatPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=948590]
-custom_minimum_size = Vector2(360, 160)
+custom_minimum_size = Vector2(520, 260)
layout_mode = 2
-theme = ExtResource("2_theme")
+size_flags_vertical = 8
+theme = ExtResource("14_2630d")
+theme_override_styles/panel = SubResource("StyleBoxFlat_kn4i6")
-[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel" unique_id=945890]
+[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel" unique_id=459039]
layout_mode = 2
-theme_override_constants/margin_left = 8
-theme_override_constants/margin_top = 8
-theme_override_constants/margin_right = 8
-theme_override_constants/margin_bottom = 8
-[node name="RichTextLabel" type="RichTextLabel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/MarginContainer" unique_id=1730680016]
+[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer" unique_id=1189440913]
+layout_mode = 2
+theme_override_constants/margin_left = 7
+theme_override_constants/margin_top = 7
+theme_override_constants/margin_right = 7
+
+[node name="ChatTabsContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer" unique_id=459040]
unique_name_in_owner = true
layout_mode = 2
-theme = ExtResource("2_theme")
-theme_override_colors/default_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
-bbcode_enabled = true
-scroll_following = true
-[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=459038]
-layout_mode = 2
-theme_override_constants/separation = 8
-
-[node name="QuitBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=1853395708]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(40, 40)
-layout_mode = 2
-theme = ExtResource("2_theme")
-text = "←"
-
-[node name="ChatInput" type="LineEdit" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=1346390421]
+[node name="GlobalChatTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer" unique_id=439566196]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
-theme = ExtResource("2_theme")
-theme_override_fonts/font = ExtResource("5_pc087")
-theme_override_font_sizes/font_size = 20
-placeholder_text = " type to chat"
+text = "Global"
-[node name="SendBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=1491048704]
+[node name="DMTabTemplate" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer" unique_id=123456789]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="DMTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer/DMTabTemplate" unique_id=123456780]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "FriendName"
+
+[node name="DMTabCloseBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer/DMTabTemplate" unique_id=123456781]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.8, 0.2, 0.2, 1)
+text = " X "
+
+[node name="GlobalChat" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer" unique_id=945890]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 6
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+
+[node name="RichTextLabel" type="RichTextLabel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/GlobalChat" unique_id=1730680016]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_colors/default_color = Color(1, 1, 1, 1)
+bbcode_enabled = true
+scroll_following = true
+
+[node name="FriendSuggestPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel" unique_id=987654321]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+
+[node name="FriendSuggestList" type="ItemList" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/FriendSuggestPanel" unique_id=987654320]
+unique_name_in_owner = true
+layout_mode = 2
+allow_reselect = true
+auto_height = true
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=459038]
+clip_contents = true
+layout_mode = 2
+size_flags_vertical = 8
+theme_override_constants/separation = 8
+
+[node name="QuitBtn2" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=1520754242]
unique_name_in_owner = true
custom_minimum_size = Vector2(40, 40)
layout_mode = 2
theme = ExtResource("2_theme")
-text = ">"
+texture_normal = ExtResource("12_dfnwm")
+
+[node name="Control" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=59880168]
+custom_minimum_size = Vector2(0, 70)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_styles/panel = SubResource("StyleBoxFlat_3jc85")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control" unique_id=1328089782]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+
+[node name="QuitBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer" unique_id=738138485]
+unique_name_in_owner = true
+layout_mode = 2
+texture_normal = ExtResource("13_0jb4q")
+
+[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer" unique_id=628941879]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/margin_left = 5
+
+[node name="ChatInput" type="LineEdit" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer/MarginContainer" unique_id=1346390421]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("14_vwf6o")
+theme_override_font_sizes/font_size = 16
+theme_override_styles/normal = SubResource("StyleBoxFlat_jhtcy")
+theme_override_styles/read_only = SubResource("StyleBoxEmpty_iulku")
+theme_override_styles/focus = SubResource("StyleBoxEmpty_dfnwm")
+placeholder_text = " type to chat"
+
+[node name="SendBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer" unique_id=1491048704]
+unique_name_in_owner = true
+layout_mode = 2
+theme = ExtResource("2_theme")
+icon = ExtResource("15_iwi7x")
+flat = true
[node name="CenterCol" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox" unique_id=7006870]
clip_contents = true
@@ -371,45 +694,111 @@ alignment = 2
[node name="ProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=752873406]
unique_name_in_owner = true
-custom_minimum_size = Vector2(44, 44)
+custom_minimum_size = Vector2(61, 61)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
-text = "PROFILE"
+flat = true
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/ProfileBtn" unique_id=1690437163]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("18_u7tfn")
+expand_mode = 2
[node name="LeaderboardBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=312524216]
unique_name_in_owner = true
-custom_minimum_size = Vector2(44, 44)
+custom_minimum_size = Vector2(61, 61)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
-text = "LEADERBOARD"
+flat = true
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/LeaderboardBtn" unique_id=1226601226]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("19_2630d")
+expand_mode = 2
[node name="CartBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=456149005]
unique_name_in_owner = true
-custom_minimum_size = Vector2(44, 44)
+custom_minimum_size = Vector2(61, 61)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
-text = "SHOP"
+flat = true
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/CartBtn" unique_id=1719165221]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("20_835bk")
+expand_mode = 2
[node name="TicketBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=64042310]
unique_name_in_owner = true
-custom_minimum_size = Vector2(44, 44)
+custom_minimum_size = Vector2(61, 61)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
-text = "BATTLE PASS"
+flat = true
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/TicketBtn" unique_id=109558990]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("21_ucbax")
+expand_mode = 2
[node name="SocialBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=82719328]
unique_name_in_owner = true
-custom_minimum_size = Vector2(44, 44)
+custom_minimum_size = Vector2(61, 61)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
-text = "SOCIAL"
+flat = true
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/SocialBtn" unique_id=134959792]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("22_1x1aw")
+expand_mode = 2
[node name="SettingsBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=90]
unique_name_in_owner = true
-custom_minimum_size = Vector2(44, 44)
+custom_minimum_size = Vector2(61, 61)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
-text = "SETTINGS"
+flat = true
+
+[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/SettingsBtn" unique_id=629469797]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("23_twy5w")
+expand_mode = 2
[node name="Spacer1" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=9023]
layout_mode = 2
@@ -489,10 +878,12 @@ size_flags_vertical = 3
[node name="BottomRightPanel" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=987]
layout_mode = 2
-theme_override_constants/separation = 12
+theme_override_constants/separation = 0
+alignment = 1
[node name="TutorialBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=951866518]
unique_name_in_owner = true
+visible = false
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
size_flags_horizontal = 3
@@ -501,25 +892,26 @@ theme_override_fonts/font = ExtResource("5_pc087")
theme_override_font_sizes/font_size = 18
text = "TUTORIAL"
-[node name="CreateRoomBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=8]
+[node name="BrowseRoomsBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=1204550484]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
-size_flags_horizontal = 3
+size_flags_horizontal = 10
+size_flags_vertical = 8
theme = ExtResource("2_theme")
-theme_override_fonts/font = ExtResource("5_pc087")
-theme_override_font_sizes/font_size = 18
-text = "HOST"
+texture_normal = ExtResource("17_wjff0")
+texture_pressed = ExtResource("18_0jb4q")
+texture_hover = ExtResource("18_0jb4q")
-[node name="BrowseRoomsBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=4595]
+[node name="CreateRoomBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=1662316269]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
size_flags_horizontal = 3
theme = ExtResource("2_theme")
-theme_override_fonts/font = ExtResource("5_pc087")
-theme_override_font_sizes/font_size = 18
-text = "BROWSE"
+texture_normal = ExtResource("18_h1rib")
+texture_pressed = ExtResource("20_vwf6o")
+texture_hover = ExtResource("20_vwf6o")
[node name="HiddenLogic" type="Control" parent="MainMenuPanel" unique_id=345]
visible = false
@@ -550,7 +942,8 @@ unique_name_in_owner = true
layout_mode = 0
text = "127.0.0.1"
-[node name="RoomListPanel" type="PanelContainer" parent="." unique_id=1782359692]
+[node name="RoomListPanel" type="HBoxContainer" parent="." unique_id=1782359692]
+unique_name_in_owner = true
visible = false
layout_mode = 1
anchors_preset = 8
@@ -558,74 +951,484 @@ anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-offset_left = -300.0
+offset_left = -464.0
offset_top = -260.0
-offset_right = 300.0
+offset_right = 466.0
offset_bottom = 260.0
grow_horizontal = 2
grow_vertical = 2
+theme_override_constants/separation = -4
-[node name="VBoxContainer" type="VBoxContainer" parent="RoomListPanel" unique_id=159201826]
+[node name="SideTabs" type="VBoxContainer" parent="RoomListPanel" unique_id=457723868]
layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="Spacer" type="Control" parent="RoomListPanel/SideTabs" unique_id=1305112156]
+custom_minimum_size = Vector2(0, 40)
+layout_mode = 2
+
+[node name="PlayTabSideBtn" type="TextureButton" parent="RoomListPanel/SideTabs" unique_id=262385443]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(100, 80)
+layout_mode = 2
+toggle_mode = true
+button_pressed = true
+texture_normal = ExtResource("21_h1rib")
+texture_pressed = ExtResource("22_kn4i6")
+texture_hover = ExtResource("22_kn4i6")
+texture_disabled = ExtResource("21_h1rib")
+texture_focused = ExtResource("22_kn4i6")
+
+[node name="RoomTabSideBtn" type="TextureButton" parent="RoomListPanel/SideTabs" unique_id=792287358]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(100, 80)
+layout_mode = 2
+toggle_mode = true
+texture_normal = ExtResource("23_3jc85")
+texture_pressed = ExtResource("24_jhtcy")
+texture_hover = ExtResource("24_jhtcy")
+texture_disabled = ExtResource("23_3jc85")
+texture_focused = ExtResource("24_jhtcy")
+
+[node name="ContentPanel" type="Panel" parent="RoomListPanel" unique_id=903537973]
+custom_minimum_size = Vector2(789, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_styles/panel = SubResource("StyleBoxTexture_50md7")
+
+[node name="ContentMargin" type="MarginContainer" parent="RoomListPanel/ContentPanel" unique_id=1254933221]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.006
+anchor_top = 0.004
+anchor_right = 0.99600005
+anchor_bottom = 0.99200004
+offset_left = 0.2540002
+offset_top = -0.08000016
+offset_right = 0.16394043
+offset_bottom = -3.8400269
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 20
+theme_override_constants/margin_right = 20
+theme_override_constants/margin_bottom = 25
+
+[node name="RoomListTabs" type="TabContainer" parent="RoomListPanel/ContentPanel/ContentMargin" unique_id=1694573690]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxEmpty_6mek4")
+current_tab = 1
+tabs_visible = false
+
+[node name="PlayTab" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs" unique_id=70158569]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+metadata/_tab_index = 0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab" unique_id=345253745]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="StoryModeBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer" unique_id=741966081]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+disabled = true
+texture_normal = ExtResource("26_wpcbs")
+texture_pressed = ExtResource("27_8tmsf")
+texture_hover = ExtResource("27_8tmsf")
+texture_disabled = ExtResource("27_8tmsf")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer" unique_id=814090298]
+layout_mode = 2
+size_flags_horizontal = 3
theme_override_constants/separation = 14
+alignment = 1
-[node name="Header" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=911540555]
+[node name="StopNGoContainer" type="VBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer/VBoxContainer" unique_id=948822540]
layout_mode = 2
-theme_override_colors/font_color = Color(0.52156866, 0.52156866, 0.52156866, 1)
+size_flags_vertical = 3
+alignment = 1
+
+[node name="StopNGoBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer/VBoxContainer/StopNGoContainer" unique_id=31593966]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 3
+texture_normal = ExtResource("27_ierb3")
+texture_pressed = ExtResource("29_gxh4y")
+texture_hover = ExtResource("29_gxh4y")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer/VBoxContainer/StopNGoContainer" unique_id=1937788582]
+layout_mode = 2
+
+[node name="StopNGoHostBtn" type="Button" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer/VBoxContainer/StopNGoContainer/HBoxContainer" unique_id=640606818]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+text = "HOST"
+
+[node name="StopNGoJoinBtn" type="Button" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer/VBoxContainer/StopNGoContainer/HBoxContainer" unique_id=1558771495]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+text = "JOIN"
+
+[node name="FreeModeBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/PlayTab/HBoxContainer/VBoxContainer" unique_id=1261113013]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 3
+texture_normal = ExtResource("28_78rk6")
+texture_pressed = ExtResource("31_30fw8")
+texture_hover = ExtResource("31_30fw8")
+
+[node name="RoomTab" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs" unique_id=822716633]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/separation = 16
+metadata/_tab_index = 1
+
+[node name="LeftCol" type="VBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab" unique_id=1431939029]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/separation = 15
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol" unique_id=1249733451]
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/separation = 10
+
+[node name="Avatar" type="Panel" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2" unique_id=125703250]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(120, 120)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_7rn74")
+
+[node name="MarginContainer" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2" unique_id=406695678]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/margin_top = 5
+
+[node name="ProfileCard" type="PanelContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer" unique_id=1500763973]
+custom_minimum_size = Vector2(0, 80)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_styles/panel = SubResource("StyleBoxEmpty_30el1")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard" unique_id=952839168]
+layout_mode = 2
+
+[node name="PlayerUsername" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer" unique_id=383429369]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 6
+theme_override_fonts/font = ExtResource("5_pc087")
theme_override_font_sizes/font_size = 28
-text = "SERVER BROWSER"
-horizontal_alignment = 1
+text = "Username"
-[node name="HSeparator" type="HSeparator" parent="RoomListPanel/VBoxContainer" unique_id=1359536044]
+[node name="HSeparator" type="HSeparator" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer" unique_id=1027857617]
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_styles/separator = SubResource("StyleBoxEmpty_s3vw1")
+
+[node name="Panel" type="Panel" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer" unique_id=948041471]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+size_flags_vertical = 8
+theme_override_styles/panel = SubResource("StyleBoxFlat_iwv5h")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel" unique_id=1743546351]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="MarginContainer" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel/HBoxContainer" unique_id=2071748858]
+layout_mode = 2
+theme_override_constants/margin_left = 11
+theme_override_constants/margin_top = 11
+theme_override_constants/margin_bottom = 11
+
+[node name="TextureRect" type="TextureRect" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel/HBoxContainer/MarginContainer" unique_id=642831453]
+layout_mode = 2
+texture = ExtResource("29_6mek4")
+
+[node name="PlayerScore" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel/HBoxContainer" unique_id=1539780270]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 6
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 20
+text = "000000"
+
+[node name="Label" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel/HBoxContainer" unique_id=1498448394]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 6
+theme_override_colors/font_color = Color(0.19607843, 0.27450982, 0.3372549, 1)
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 15
+text = "Rank#"
+horizontal_alignment = 2
+
+[node name="MarginContainer2" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel/HBoxContainer" unique_id=911063848]
+layout_mode = 2
+theme_override_constants/margin_top = 11
+theme_override_constants/margin_right = 11
+theme_override_constants/margin_bottom = 11
+
+[node name="Rank" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer/Panel/HBoxContainer/MarginContainer2" unique_id=963495505]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 6
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 15
+text = "00"
+horizontal_alignment = 2
+
+[node name="RoomListProfileBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer2/MarginContainer/ProfileCard/VBoxContainer" unique_id=414148016]
+unique_name_in_owner = true
+visible = false
layout_mode = 2
-[node name="MatchIdLabel" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=1208643238]
+[node name="HBoxContainer" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol" unique_id=863196955]
layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
-theme_override_font_sizes/font_size = 12
-text = "DIRECT CONNECT (MATCH ID)"
+size_flags_vertical = 3
+alignment = 1
-[node name="MatchIdInput" type="LineEdit" parent="RoomListPanel/VBoxContainer" unique_id=425559636]
+[node name="RoomFreeModeBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer" unique_id=84621540]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 8
+toggle_mode = true
+texture_normal = ExtResource("30_8ht5e")
+texture_pressed = ExtResource("34_7rn74")
+texture_hover = ExtResource("34_7rn74")
+
+[node name="RoomStopNGoBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol/HBoxContainer" unique_id=1289388514]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 8
+toggle_mode = true
+texture_normal = ExtResource("31_tuh25")
+texture_pressed = ExtResource("36_30el1")
+texture_hover = ExtResource("36_30el1")
+
+[node name="MatchIdInput" type="LineEdit" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/LeftCol" unique_id=1340245956]
+unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
-placeholder_text = "Paste match ID here..."
+size_flags_horizontal = 3
+theme_override_colors/font_color = Color(1, 1, 1, 1)
+theme_override_colors/font_placeholder_color = Color(1, 1, 1, 0.54901963)
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_styles/normal = SubResource("StyleBoxFlat_6mek4")
+placeholder_text = "Quick Join, RoomID "
-[node name="RoomListLabel" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=1579554712]
+[node name="RightCol" type="VBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab" unique_id=57917118]
+custom_minimum_size = Vector2(380, 0)
layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
-theme_override_font_sizes/font_size = 12
-text = "AVAILABLE SERVERS"
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 1.5
+theme_override_constants/separation = 14
-[node name="RoomList" type="ItemList" parent="RoomListPanel/VBoxContainer" unique_id=1747575999]
-custom_minimum_size = Vector2(0, 200)
+[node name="RoomList" type="ItemList" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol" unique_id=2112541159]
+unique_name_in_owner = true
layout_mode = 2
+size_flags_vertical = 3
+theme_override_styles/panel = SubResource("StyleBoxTexture_gufxi")
+theme_override_styles/focus = SubResource("StyleBoxTexture_arjad")
allow_reselect = true
-[node name="ButtonContainer" type="HBoxContainer" parent="RoomListPanel/VBoxContainer" unique_id=181847289]
+[node name="Head" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList" unique_id=1183610877]
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_bottom = 32.0
+grow_horizontal = 2
+theme_override_constants/margin_left = 10
+theme_override_constants/margin_top = 10
+theme_override_constants/margin_right = 10
+theme_override_constants/margin_bottom = 10
+
+[node name="PanelContainer" type="PanelContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head" unique_id=595994661]
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_8ht5e")
+
+[node name="MarginContainer" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head/PanelContainer" unique_id=1642394338]
+layout_mode = 2
+theme_override_constants/margin_left = 4
+theme_override_constants/margin_right = 4
+
+[node name="HBoxContainer" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head/PanelContainer/MarginContainer" unique_id=1581258669]
+layout_mode = 2
+
+[node name="No_" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head/PanelContainer/MarginContainer/HBoxContainer" unique_id=1681773695]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 18
+text = "No."
+
+[node name="Host_" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head/PanelContainer/MarginContainer/HBoxContainer" unique_id=888585232]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 18
+text = "Host"
+horizontal_alignment = 1
+
+[node name="Mode_" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head/PanelContainer/MarginContainer/HBoxContainer" unique_id=1130252609]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 18
+text = "Mode"
+horizontal_alignment = 1
+
+[node name="Cap_" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/Head/PanelContainer/MarginContainer/HBoxContainer" unique_id=448943238]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 18
+text = "Cap."
+horizontal_alignment = 2
+
+[node name="ItemTemplate" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList" unique_id=1884269351]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(10, 50)
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_left = 1.0
+offset_top = 46.0
+offset_right = 1.0
+offset_bottom = 96.0
+grow_horizontal = 2
+theme_override_constants/margin_left = 10
+theme_override_constants/margin_right = 10
+theme_override_constants/margin_bottom = 10
+
+[node name="PanelContainer" type="PanelContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate" unique_id=1266955143]
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_tuh25")
+
+[node name="MarginContainer" type="MarginContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate/PanelContainer" unique_id=1789920940]
+layout_mode = 2
+theme_override_constants/margin_left = 4
+theme_override_constants/margin_right = 4
+
+[node name="HBoxContainer" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate/PanelContainer/MarginContainer" unique_id=1831109864]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="ListRoomID" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate/PanelContainer/MarginContainer/HBoxContainer" unique_id=1408660710]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 14
+text = "00000030203"
+vertical_alignment = 1
+text_overrun_behavior = 5
+uppercase = true
+
+[node name="ListHost" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate/PanelContainer/MarginContainer/HBoxContainer" unique_id=461956395]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 14
+text = "Username"
+vertical_alignment = 1
+text_overrun_behavior = 5
+uppercase = true
+
+[node name="ListMode" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate/PanelContainer/MarginContainer/HBoxContainer" unique_id=370500984]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 14
+text = "FMD"
+horizontal_alignment = 1
+vertical_alignment = 1
+text_overrun_behavior = 5
+uppercase = true
+
+[node name="ListCap" type="Label" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/RoomList/ItemTemplate/PanelContainer/MarginContainer/HBoxContainer" unique_id=1233323274]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_fonts/font = ExtResource("5_pc087")
+theme_override_font_sizes/font_size = 14
+text = "1/8"
+horizontal_alignment = 2
+vertical_alignment = 1
+text_overrun_behavior = 5
+uppercase = true
+
+[node name="BottomRow" type="HBoxContainer" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol" unique_id=1132155666]
layout_mode = 2
theme_override_constants/separation = 14
alignment = 1
-[node name="RefreshBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=586598199]
-custom_minimum_size = Vector2(110, 44)
+[node name="RefreshBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/BottomRow" unique_id=1709721255]
+unique_name_in_owner = true
layout_mode = 2
-text = "REFRESH"
+texture_normal = ExtResource("33_gxh4y")
+texture_pressed = ExtResource("39_s3vw1")
+texture_hover = ExtResource("39_s3vw1")
-[node name="JoinBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1079497597]
-custom_minimum_size = Vector2(130, 44)
+[node name="JoinBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/BottomRow" unique_id=615778547]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(80, 44)
layout_mode = 2
-text = "JOIN SERVER"
+texture_normal = ExtResource("34_30fw8")
+texture_pressed = ExtResource("41_iwv5h")
+texture_hover = ExtResource("41_iwv5h")
-[node name="BackBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1786784033]
-custom_minimum_size = Vector2(110, 44)
-layout_mode = 2
-text = "BACK"
-
-[node name="ProfileBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1473526002]
+[node name="HostBtn" type="Button" parent="RoomListPanel/ContentPanel/ContentMargin/RoomListTabs/RoomTab/RightCol/BottomRow" unique_id=1475733954]
+unique_name_in_owner = true
visible = false
custom_minimum_size = Vector2(80, 44)
layout_mode = 2
-text = "PROFILE"
+theme_override_colors/font_color = Color(0, 1, 0, 1)
+text = "HOST"
+
+[node name="TopRightAnchor" type="Control" parent="RoomListPanel/ContentPanel" unique_id=898923170]
+z_index = 1
+anchors_preset = 0
+offset_left = 12.0
+offset_top = 8.0
+offset_right = 784.0
+offset_bottom = 507.0
+mouse_filter = 2
+
+[node name="RoomListCloseBtn" type="TextureButton" parent="RoomListPanel/ContentPanel/TopRightAnchor" unique_id=1732423618]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.99200004
+anchor_right = 0.99200004
+anchor_bottom = 0.010000001
+offset_left = -30.824097
+offset_top = -27.0
+offset_right = 33.175903
+offset_bottom = 32.01
+grow_horizontal = 2
+grow_vertical = 2
+texture_normal = ExtResource("29_417c5")
+texture_pressed = ExtResource("41_7rn74")
+texture_hover = ExtResource("41_7rn74")
[node name="LobbyPanel" type="Control" parent="." unique_id=1745714811]
visible = false
@@ -697,7 +1500,7 @@ theme_override_fonts/font = ExtResource("5_pc087")
theme_override_font_sizes/font_size = 11
text = "Logout"
-[node name="LobbySettingsBtn" type="Button" parent="LobbyPanel/TopBar/ProfileSection" unique_id=987654321]
+[node name="LobbySettingsBtn" type="Button" parent="LobbyPanel/TopBar/ProfileSection" unique_id=1778209609]
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
theme_override_fonts/font = ExtResource("5_pc087")
diff --git a/scenes/ui/admin_panel.tscn b/scenes/ui/admin_panel.tscn
index d2ffb8f..bf70925 100644
--- a/scenes/ui/admin_panel.tscn
+++ b/scenes/ui/admin_panel.tscn
@@ -1,6 +1,7 @@
[gd_scene load_steps=2 format=3 uid="uid://biio8efqysivs"]
[ext_resource type="Script" uid="uid://ic8fg0o0p0i4" path="res://scripts/ui/admin_panel.gd" id="1"]
+[ext_resource type="PackedScene" uid="uid://dp12345678" path="res://scenes/ui/date_picker.tscn" id="2_dp"]
[node name="AdminPanel" type="Panel"]
anchors_preset = 15
@@ -262,6 +263,119 @@ custom_minimum_size = Vector2(160, 36)
layout_mode = 2
text = "Save Config"
+[node name="Announcements" type="VBoxContainer" parent="Margin/VBox/Tabs"]
+visible = false
+layout_mode = 2
+theme_override_constants/separation = 12
+metadata/_tab_index = 3
+
+[node name="TargetHBox" type="HBoxContainer" parent="Margin/VBox/Tabs/Announcements"]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="Label" type="Label" parent="Margin/VBox/Tabs/Announcements/TargetHBox"]
+layout_mode = 2
+text = "Target User ID:"
+
+[node name="TargetUserEdit" type="LineEdit" parent="Margin/VBox/Tabs/Announcements/TargetHBox"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+placeholder_text = "Leave empty to send to ALL users (Global)"
+
+[node name="TitleEdit" type="LineEdit" parent="Margin/VBox/Tabs/Announcements"]
+unique_name_in_owner = true
+layout_mode = 2
+placeholder_text = "Message Title"
+
+[node name="ContentEdit" type="TextEdit" parent="Margin/VBox/Tabs/Announcements"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 150)
+layout_mode = 2
+placeholder_text = "Message Content"
+
+[node name="ScheduleHBox" type="HBoxContainer" parent="Margin/VBox/Tabs/Announcements"]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="LabelStart" type="Label" parent="Margin/VBox/Tabs/Announcements/ScheduleHBox"]
+layout_mode = 2
+text = "Start:"
+
+[node name="StartDatePicker" parent="Margin/VBox/Tabs/Announcements/ScheduleHBox" instance=ExtResource("2_dp")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="LabelEnd" type="Label" parent="Margin/VBox/Tabs/Announcements/ScheduleHBox"]
+layout_mode = 2
+text = "End:"
+
+[node name="EndDatePicker" parent="Margin/VBox/Tabs/Announcements/ScheduleHBox" instance=ExtResource("2_dp")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="RewardsHeader" type="HBoxContainer" parent="Margin/VBox/Tabs/Announcements"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="Margin/VBox/Tabs/Announcements/RewardsHeader"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Attached Rewards"
+
+[node name="AddRewardBtn" type="Button" parent="Margin/VBox/Tabs/Announcements/RewardsHeader"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(100, 30)
+layout_mode = 2
+text = "+ ADD"
+
+[node name="RewardsList" type="VBoxContainer" parent="Margin/VBox/Tabs/Announcements"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="RewardRowTemplate" type="HBoxContainer" parent="Margin/VBox/Tabs/Announcements"]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="TypeOption" type="OptionButton" parent="Margin/VBox/Tabs/Announcements/RewardRowTemplate"]
+custom_minimum_size = Vector2(100, 0)
+layout_mode = 2
+item_count = 4
+selected = 0
+popup/item_0/text = "star"
+popup/item_0/id = 0
+popup/item_1/text = "gold"
+popup/item_1/id = 1
+popup/item_2/text = "item"
+popup/item_2/id = 2
+popup/item_3/text = "skin"
+popup/item_3/id = 3
+
+[node name="IdEdit" type="LineEdit" parent="Margin/VBox/Tabs/Announcements/RewardRowTemplate"]
+layout_mode = 2
+size_flags_horizontal = 3
+placeholder_text = "Item/Skin ID (Leave empty for Star/Gold)"
+
+[node name="AmountSpin" type="SpinBox" parent="Margin/VBox/Tabs/Announcements/RewardRowTemplate"]
+layout_mode = 2
+max_value = 100000.0
+value = 1.0
+
+[node name="RemoveBtn" type="Button" parent="Margin/VBox/Tabs/Announcements/RewardRowTemplate"]
+layout_mode = 2
+text = "X"
+theme_override_colors/font_color = Color(1, 0.3, 0.3, 1)
+
+[node name="SendMailBtn" type="Button" parent="Margin/VBox/Tabs/Announcements"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 40)
+layout_mode = 2
+text = "SEND ANNOUNCEMENT"
+
[node name="StatusLabel" type="Label" parent="Margin/VBox"]
unique_name_in_owner = true
layout_mode = 2
diff --git a/scenes/ui/boot_screen.tscn b/scenes/ui/boot_screen.tscn
index 3bce672..05be6a0 100644
--- a/scenes/ui/boot_screen.tscn
+++ b/scenes/ui/boot_screen.tscn
@@ -3,13 +3,38 @@
[ext_resource type="Script" uid="uid://vgyrq5y5p7jw" path="res://scripts/ui/boot_screen.gd" id="1_boot"]
[ext_resource type="Texture2D" uid="uid://2d1ks5pmblc7" path="res://assets/graphics/main_menu/bg_back.png" id="2_17ab1"]
[ext_resource type="FontFile" uid="uid://dsqg0x5lnosou" path="res://assets/fonts/TektonDash2.ttf" id="2_bwjrh"]
-[ext_resource type="FontFile" uid="uid://c2tryhyhlyb1u" path="res://assets/fonts/Supercell-Magic Regular.ttf" id="3_f4w4t"]
+[ext_resource type="Texture2D" uid="uid://jqvv6s55mlsk" path="res://assets/graphics/gui/BG.png" id="3_1xu5j"]
[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="3_jayi6"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="4_17ab1"]
+[ext_resource type="Texture2D" uid="uid://bpco6lch7homj" path="res://assets/graphics/gui/play/bg.png" id="6_yicr8"]
+[ext_resource type="FontFile" uid="uid://dckhhpt5emxq0" path="res://assets/fonts/Asap-VariableFont_wdth,wght.ttf" id="7_yicr8"]
+[ext_resource type="Texture2D" uid="uid://1yi5lwgle4g0" path="res://assets/graphics/gui/play/btn_green_small.png" id="8_5mhvm"]
+[ext_resource type="Texture2D" uid="uid://cuw72qcwxxbjg" path="res://assets/graphics/gui/play/btn_green_small_darken.png" id="9_6t5dt"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1xu5j"]
bg_color = Color(0.08, 0.09, 0.12, 1)
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wusgu"]
+bg_color = Color(0.14117648, 0.16862746, 0.19215687, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 2
+border_color = Color(0.19607843, 0.27450982, 0.3372549, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2h0ma"]
+bg_color = Color(0.54509807, 0.7882353, 0.101960786, 1)
+border_width_left = 2
+border_width_top = 2
+border_width_right = 2
+border_width_bottom = 10
+border_color = Color(0.7254902, 0.84313726, 0.38039216, 1)
+border_blend = true
+
[node name="BootScreen" type="Control" unique_id=469561880]
layout_mode = 3
anchors_preset = 15
@@ -20,6 +45,7 @@ grow_vertical = 2
script = ExtResource("1_boot")
[node name="Background" type="ColorRect" parent="." unique_id=698091452]
+visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -29,6 +55,7 @@ grow_vertical = 2
color = Color(0.0823529, 0.0823529, 0.109804, 1)
[node name="Background2" type="Panel" parent="." unique_id=1171074799]
+visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -38,6 +65,7 @@ grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_1xu5j")
[node name="Background3" type="TextureRect" parent="." unique_id=99232146]
+visible = false
modulate = Color(1, 1, 1, 0.28235295)
layout_mode = 1
anchors_preset = 15
@@ -48,6 +76,16 @@ grow_vertical = 2
texture = ExtResource("2_17ab1")
expand_mode = 2
+[node name="Background4" type="TextureRect" parent="." unique_id=629882829]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("3_1xu5j")
+expand_mode = 1
+
[node name="CenterContainer" type="CenterContainer" parent="." unique_id=1851252006]
layout_mode = 1
anchors_preset = 15
@@ -64,23 +102,29 @@ theme_override_constants/separation = 20
[node name="Title" type="Label" parent="CenterContainer/MainVBox" unique_id=576295308]
layout_mode = 2
-theme_override_colors/font_color = Color(0.6901961, 0.5294118, 0.35686275, 1)
theme_override_fonts/font = ExtResource("2_bwjrh")
theme_override_font_sizes/font_size = 32
text = "Tekton Dash : Update Checker"
horizontal_alignment = 1
-[node name="ChangelogPanel" type="PanelContainer" parent="CenterContainer/MainVBox" unique_id=675458612]
+[node name="ChangelogPanel" type="TextureRect" parent="CenterContainer/MainVBox" unique_id=136011719]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 300)
layout_mode = 2
+texture = ExtResource("6_yicr8")
+expand_mode = 5
[node name="Margin" type="MarginContainer" parent="CenterContainer/MainVBox/ChangelogPanel" unique_id=577528369]
-layout_mode = 2
-theme_override_constants/margin_left = 15
-theme_override_constants/margin_top = 15
-theme_override_constants/margin_right = 15
-theme_override_constants/margin_bottom = 15
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 25
+theme_override_constants/margin_top = 25
+theme_override_constants/margin_right = 25
+theme_override_constants/margin_bottom = 25
[node name="VBox" type="VBoxContainer" parent="CenterContainer/MainVBox/ChangelogPanel/Margin" unique_id=983868454]
layout_mode = 2
@@ -89,48 +133,92 @@ layout_mode = 2
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
-theme_override_colors/default_color = Color(0.6901961, 0.5294118, 0.35686275, 1)
-theme_override_fonts/normal_font = ExtResource("3_f4w4t")
+theme_override_colors/default_color = Color(1, 1, 1, 1)
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.2509804)
+theme_override_constants/shadow_outline_size = 0
+theme_override_constants/shadow_offset_x = -2
+theme_override_constants/shadow_offset_y = 2
+theme_override_fonts/normal_font = ExtResource("7_yicr8")
bbcode_enabled = true
text = "Loading changelog..."
+tab_size = 2
[node name="HBox" type="HBoxContainer" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox" unique_id=1374120193]
layout_mode = 2
+size_flags_vertical = 8
alignment = 1
-[node name="PrevButton" type="Button" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox" unique_id=1862079005]
+[node name="PrevButton" type="TextureButton" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox" unique_id=779268670]
unique_name_in_owner = true
layout_mode = 2
+size_flags_vertical = 4
+texture_normal = ExtResource("8_5mhvm")
+texture_pressed = ExtResource("9_6t5dt")
+texture_hover = ExtResource("9_6t5dt")
+
+[node name="Label" type="Label" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox/PrevButton" unique_id=106117176]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.48235294)
+theme_override_constants/shadow_offset_x = -1
+theme_override_constants/shadow_offset_y = 1
+theme_override_constants/shadow_outline_size = 0
theme_override_fonts/font = ExtResource("4_17ab1")
-text = " < Previous "
+theme_override_font_sizes/font_size = 16
+text = "PREV"
+horizontal_alignment = 1
+vertical_alignment = 1
[node name="PageLabel" type="Label" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox" unique_id=934971208]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
-theme_override_colors/font_color = Color(0.6901961, 0.5294118, 0.35686275, 1)
theme_override_fonts/font = ExtResource("4_17ab1")
text = "1 / 1"
horizontal_alignment = 1
-[node name="NextButton" type="Button" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox" unique_id=1366632731]
+[node name="NextButton" type="TextureButton" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox" unique_id=1512015952]
unique_name_in_owner = true
layout_mode = 2
+texture_normal = ExtResource("8_5mhvm")
+texture_pressed = ExtResource("9_6t5dt")
+texture_hover = ExtResource("9_6t5dt")
+
+[node name="Label" type="Label" parent="CenterContainer/MainVBox/ChangelogPanel/Margin/VBox/HBox/NextButton" unique_id=2060058712]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.48235294)
+theme_override_constants/shadow_offset_x = -1
+theme_override_constants/shadow_offset_y = 1
+theme_override_constants/shadow_outline_size = 0
theme_override_fonts/font = ExtResource("4_17ab1")
-text = " Next > "
+theme_override_font_sizes/font_size = 16
+text = "NEXT"
+horizontal_alignment = 1
+vertical_alignment = 1
[node name="StatusLabel" type="Label" parent="CenterContainer/MainVBox" unique_id=955710692]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.6901961, 0.5294118, 0.35686275, 1)
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.48235294)
theme_override_fonts/font = ExtResource("4_17ab1")
text = "Checking for updates..."
horizontal_alignment = 1
[node name="ProgressBar" type="ProgressBar" parent="CenterContainer/MainVBox" unique_id=2132835750]
unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 20)
layout_mode = 2
-show_percentage = false
+theme_override_styles/background = SubResource("StyleBoxFlat_wusgu")
+theme_override_styles/fill = SubResource("StyleBoxFlat_2h0ma")
[node name="ProgressLabel" type="Label" parent="CenterContainer/MainVBox/ProgressBar" unique_id=1293848486]
unique_name_in_owner = true
@@ -140,8 +228,11 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.48235294)
theme_override_fonts/font = ExtResource("4_17ab1")
+theme_override_font_sizes/font_size = 14
horizontal_alignment = 1
+vertical_alignment = 1
[node name="ButtonContainer" type="HBoxContainer" parent="CenterContainer/MainVBox" unique_id=2021809892]
unique_name_in_owner = true
@@ -149,14 +240,51 @@ layout_mode = 2
theme_override_constants/separation = 20
alignment = 1
-[node name="SkipButton" type="Button" parent="CenterContainer/MainVBox/ButtonContainer" unique_id=1945691494]
+[node name="SkipButton" type="TextureButton" parent="CenterContainer/MainVBox/ButtonContainer" unique_id=450583456]
unique_name_in_owner = true
layout_mode = 2
-theme_override_fonts/font = ExtResource("4_17ab1")
-text = "Skip"
+texture_normal = ExtResource("8_5mhvm")
+texture_pressed = ExtResource("9_6t5dt")
+texture_hover = ExtResource("9_6t5dt")
-[node name="UpdateButton" type="Button" parent="CenterContainer/MainVBox/ButtonContainer" unique_id=200811932]
+[node name="Label" type="Label" parent="CenterContainer/MainVBox/ButtonContainer/SkipButton" unique_id=773031370]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.48235294)
+theme_override_constants/shadow_offset_x = -1
+theme_override_constants/shadow_offset_y = 1
+theme_override_constants/shadow_outline_size = 0
+theme_override_fonts/font = ExtResource("4_17ab1")
+theme_override_font_sizes/font_size = 16
+text = "Skip"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="UpdateButton" type="TextureButton" parent="CenterContainer/MainVBox/ButtonContainer" unique_id=1083550702]
unique_name_in_owner = true
layout_mode = 2
+texture_normal = ExtResource("8_5mhvm")
+texture_pressed = ExtResource("9_6t5dt")
+texture_hover = ExtResource("9_6t5dt")
+stretch_mode = 0
+
+[node name="Label" type="Label" parent="CenterContainer/MainVBox/ButtonContainer/UpdateButton" unique_id=692036465]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.48235294)
+theme_override_constants/shadow_offset_x = -1
+theme_override_constants/shadow_offset_y = 1
+theme_override_constants/shadow_outline_size = 0
theme_override_fonts/font = ExtResource("4_17ab1")
-text = "Download Update"
+theme_override_font_sizes/font_size = 16
+text = "Update"
+horizontal_alignment = 1
+vertical_alignment = 1
diff --git a/scenes/ui/date_picker.tscn b/scenes/ui/date_picker.tscn
new file mode 100644
index 0000000..8cd66c7
--- /dev/null
+++ b/scenes/ui/date_picker.tscn
@@ -0,0 +1,95 @@
+[gd_scene format=3 uid="uid://dp12345678"]
+
+[ext_resource type="Script" path="res://scripts/ui/date_picker.gd" id="1_dp"]
+
+[node name="DatePicker" type="Button"]
+custom_minimum_size = Vector2(120, 36)
+text = "Select Date..."
+script = ExtResource("1_dp")
+
+[node name="PopupPanel" type="PopupPanel" parent="."]
+size = Vector2i(260, 280)
+
+[node name="VBox" type="VBoxContainer" parent="PopupPanel"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = -4.0
+theme_override_constants/separation = 8
+
+[node name="Header" type="HBoxContainer" parent="PopupPanel/VBox"]
+layout_mode = 2
+
+[node name="PrevBtn" type="Button" parent="PopupPanel/VBox/Header"]
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+text = "<"
+
+[node name="MonthYearLbl" type="Label" parent="PopupPanel/VBox/Header"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Month Year"
+horizontal_alignment = 1
+
+[node name="NextBtn" type="Button" parent="PopupPanel/VBox/Header"]
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+text = ">"
+
+[node name="Weekdays" type="GridContainer" parent="PopupPanel/VBox"]
+layout_mode = 2
+columns = 7
+
+[node name="Sun" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "Su"
+horizontal_alignment = 1
+
+[node name="Mon" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "Mo"
+horizontal_alignment = 1
+
+[node name="Tue" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "Tu"
+horizontal_alignment = 1
+
+[node name="Wed" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "We"
+horizontal_alignment = 1
+
+[node name="Thu" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "Th"
+horizontal_alignment = 1
+
+[node name="Fri" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "Fr"
+horizontal_alignment = 1
+
+[node name="Sat" type="Label" parent="PopupPanel/VBox/Weekdays"]
+custom_minimum_size = Vector2(32, 0)
+layout_mode = 2
+text = "Sa"
+horizontal_alignment = 1
+
+[node name="DaysGrid" type="GridContainer" parent="PopupPanel/VBox"]
+layout_mode = 2
+size_flags_vertical = 3
+columns = 7
+
+[node name="ClearBtn" type="Button" parent="PopupPanel/VBox"]
+layout_mode = 2
+text = "Clear Date"
diff --git a/scenes/ui/friend_row.tscn b/scenes/ui/friend_row.tscn
index 7b433f7..3416704 100644
--- a/scenes/ui/friend_row.tscn
+++ b/scenes/ui/friend_row.tscn
@@ -1,40 +1,118 @@
[gd_scene format=3 uid="uid://dqfriend001"]
[ext_resource type="Script" path="res://scripts/ui/friend_row.gd" id="1_frow"]
+[ext_resource type="Texture2D" path="res://assets/graphics/gui/friendlist/mc_copper.png" id="2_avatar"]
+[ext_resource type="Texture2D" path="res://assets/graphics/gui/friendlist/friend_add0.png" id="3_add"]
+[ext_resource type="Texture2D" path="res://assets/graphics/gui/friendlist/friend_chat.png" id="4_chat"]
+[ext_resource type="Texture2D" path="res://assets/graphics/gui/friendlist/friend_block0.png.png" id="5_block"]
+[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="6_font"]
-[node name="FriendRow" type="HBoxContainer"]
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bg"]
+bg_color = Color(0, 0, 0, 0.48)
+border_width_left = 3
+border_width_top = 3
+border_width_right = 3
+border_width_bottom = 3
+border_color = Color(0, 0, 0, 1)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_avatar_bg"]
+bg_color = Color(1, 1, 1, 1)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
+
+[node name="FriendRow" type="PanelContainer"]
+custom_minimum_size = Vector2(0, 80)
+size_flags_horizontal = 3
+theme_override_styles/panel = SubResource("StyleBoxFlat_bg")
script = ExtResource("1_frow")
-[node name="NameLabel" type="Label" parent="."]
-unique_name_in_owner = true
+[node name="Margin" type="MarginContainer" parent="."]
+layout_mode = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+
+[node name="HBox" type="HBoxContainer" parent="Margin"]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="AvatarPanel" type="PanelContainer" parent="Margin/HBox"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 2
+size_flags_vertical = 4
+theme_override_styles/panel = SubResource("StyleBoxFlat_avatar_bg")
+
+[node name="Margin" type="MarginContainer" parent="Margin/HBox/AvatarPanel"]
+layout_mode = 2
+theme_override_constants/margin_left = 2
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 2
+theme_override_constants/margin_bottom = 2
+
+[node name="Avatar" type="TextureRect" parent="Margin/HBox/AvatarPanel/Margin"]
+layout_mode = 2
+texture = ExtResource("2_avatar")
+expand_mode = 1
+
+[node name="VBox" type="VBoxContainer" parent="Margin/HBox"]
layout_mode = 2
size_flags_horizontal = 3
+alignment = 1
-[node name="StateLabel" type="Label" parent="."]
+[node name="NameLabel" type="Label" parent="Margin/HBox/VBox"]
unique_name_in_owner = true
layout_mode = 2
-visible = false
+theme_override_fonts/font = ExtResource("6_font")
+theme_override_font_sizes/font_size = 20
+text = "USERNAME"
-[node name="DMBtn" type="Button" parent="."]
+[node name="StateLabel" type="Label" parent="Margin/HBox/VBox"]
unique_name_in_owner = true
layout_mode = 2
-text = "Chat"
-visible = false
+theme_override_fonts/font = ExtResource("6_font")
+theme_override_colors/font_color = Color(0.7, 0.7, 0.7, 1)
+theme_override_font_sizes/font_size = 12
+text = "LAST ONLINE: 30 mins ago."
-[node name="AcceptBtn" type="Button" parent="."]
-unique_name_in_owner = true
+[node name="HBoxButtons" type="HBoxContainer" parent="Margin/HBox/VBox"]
layout_mode = 2
-text = "Accept"
-visible = false
+theme_override_constants/separation = 8
-[node name="DeclineBtn" type="Button" parent="."]
+[node name="AcceptBtn" type="TextureButton" parent="Margin/HBox/VBox/HBoxButtons"]
unique_name_in_owner = true
+custom_minimum_size = Vector2(16, 16)
layout_mode = 2
-text = "Decline"
-visible = false
+texture_normal = ExtResource("3_add")
+ignore_texture_size = true
+stretch_mode = 5
-[node name="RemoveBtn" type="Button" parent="."]
+[node name="DMBtn" type="TextureButton" parent="Margin/HBox/VBox/HBoxButtons"]
unique_name_in_owner = true
+custom_minimum_size = Vector2(16, 16)
layout_mode = 2
-text = "Remove"
-visible = false
+texture_normal = ExtResource("4_chat")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="DeclineBtn" type="TextureButton" parent="Margin/HBox/VBox/HBoxButtons"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(16, 16)
+layout_mode = 2
+texture_normal = ExtResource("5_block")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="RemoveBtn" type="TextureButton" parent="Margin/HBox/VBox/HBoxButtons"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(16, 16)
+layout_mode = 2
+texture_normal = ExtResource("5_block")
+ignore_texture_size = true
+stretch_mode = 5
diff --git a/scenes/ui/leaderboard_panel.tscn b/scenes/ui/leaderboard_panel.tscn
index ad47080..b322e3b 100644
--- a/scenes/ui/leaderboard_panel.tscn
+++ b/scenes/ui/leaderboard_panel.tscn
@@ -1,7 +1,8 @@
[gd_scene format=3 uid="uid://c3q4w3j6e7y8u"]
[ext_resource type="Script" uid="uid://qe1nth1bnep8" path="res://scripts/ui/leaderboard_panel.gd" id="1"]
-[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2"]
+[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="1_q8r81"]
+[ext_resource type="Texture2D" uid="uid://jqvv6s55mlsk" path="res://assets/graphics/gui/BG.png" id="3_amgyn"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="3_font"]
[ext_resource type="PackedScene" uid="uid://ejeamn0pyey4" path="res://assets/characters/Bob.glb" id="4_bob"]
[ext_resource type="PackedScene" uid="uid://d4cul3w3wem5w" path="res://assets/characters/Gatot.glb" id="4_gatot"]
@@ -9,6 +10,10 @@
[ext_resource type="PackedScene" uid="uid://bmln7v6v5kvxg" path="res://assets/characters/Oldpop.glb" id="4_oldpop"]
[ext_resource type="AnimationLibrary" uid="uid://c3pyopnwibckj" path="res://assets/characters/animations/animation-pack.res" id="5_animlib"]
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_amgyn"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_q8r81"]
+
[sub_resource type="Environment" id="Environment_lb"]
background_mode = 1
background_color = Color(0.06, 0.07, 0.1, 1)
@@ -23,47 +28,56 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-theme = ExtResource("2")
+theme = ExtResource("1_q8r81")
script = ExtResource("1")
-[node name="Background" type="ColorRect" parent="." unique_id=1326531657]
+[node name="Background" type="TextureRect" parent="." unique_id=1166091442]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-color = Color(0.05, 0.06, 0.09, 0.97)
+texture = ExtResource("3_amgyn")
+expand_mode = 1
-[node name="MainLayout" type="HBoxContainer" parent="." unique_id=53100533]
+[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1028567223]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
+theme_override_constants/margin_left = 30
+theme_override_constants/margin_top = 30
+theme_override_constants/margin_right = 30
+theme_override_constants/margin_bottom = 30
+
+[node name="MainLayout" type="HBoxContainer" parent="MarginContainer" unique_id=53100533]
+layout_mode = 2
theme_override_constants/separation = 0
-[node name="LeftPanel" type="PanelContainer" parent="MainLayout" unique_id=125724276]
+[node name="LeftPanel" type="PanelContainer" parent="MarginContainer/MainLayout" unique_id=125724276]
custom_minimum_size = Vector2(500, 0)
layout_mode = 2
size_flags_horizontal = 3
+theme_override_styles/panel = SubResource("StyleBoxEmpty_amgyn")
-[node name="LeftVBox" type="VBoxContainer" parent="MainLayout/LeftPanel" unique_id=1333726314]
+[node name="LeftVBox" type="VBoxContainer" parent="MarginContainer/MainLayout/LeftPanel" unique_id=1333726314]
layout_mode = 2
theme_override_constants/separation = 12
-[node name="Header" type="HBoxContainer" parent="MainLayout/LeftPanel/LeftVBox" unique_id=2015043023]
+[node name="Header" type="HBoxContainer" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox" unique_id=2015043023]
layout_mode = 2
-[node name="BackBtn" type="Button" parent="MainLayout/LeftPanel/LeftVBox/Header" unique_id=1330539196]
+[node name="BackBtn" type="Button" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/Header" unique_id=1330539196]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 44)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
text = "← BACK"
-[node name="RefreshBtn" type="Button" parent="MainLayout/LeftPanel/LeftVBox/Header" unique_id=993543919]
+[node name="RefreshBtn" type="Button" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/Header" unique_id=993543919]
unique_name_in_owner = true
visible = false
custom_minimum_size = Vector2(44, 44)
@@ -71,7 +85,7 @@ layout_mode = 2
tooltip_text = "Refresh Data"
text = "⟳"
-[node name="SyncBtn" type="Button" parent="MainLayout/LeftPanel/LeftVBox/Header" unique_id=1452457095]
+[node name="SyncBtn" type="Button" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/Header" unique_id=1452457095]
unique_name_in_owner = true
custom_minimum_size = Vector2(160, 44)
layout_mode = 2
@@ -79,143 +93,142 @@ tooltip_text = "Sync your score to the global leaderboard"
text = "⟳ Refresh
"
-[node name="Title" type="Label" parent="MainLayout/LeftPanel/LeftVBox/Header" unique_id=1037998429]
+[node name="Title" type="Label" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/Header" unique_id=1037998429]
layout_mode = 2
size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
+theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 26
text = "LEADERBOARD"
horizontal_alignment = 1
-[node name="SortTabs" type="HBoxContainer" parent="MainLayout/LeftPanel/LeftVBox" unique_id=718289870]
+[node name="SortTabs" type="HBoxContainer" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox" unique_id=718289870]
layout_mode = 2
theme_override_constants/separation = 8
alignment = 1
-[node name="SortScoreBtn" type="Button" parent="MainLayout/LeftPanel/LeftVBox/SortTabs" unique_id=130573026]
+[node name="SortScoreBtn" type="Button" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/SortTabs" unique_id=130573026]
unique_name_in_owner = true
custom_minimum_size = Vector2(120, 36)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
text = "High Score"
-[node name="SortWinRateBtn" type="Button" parent="MainLayout/LeftPanel/LeftVBox/SortTabs" unique_id=1440940092]
+[node name="SortWinRateBtn" type="Button" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/SortTabs" unique_id=1440940092]
unique_name_in_owner = true
custom_minimum_size = Vector2(120, 36)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
text = "Win Rate"
-[node name="SortGamesBtn" type="Button" parent="MainLayout/LeftPanel/LeftVBox/SortTabs" unique_id=1859306138]
+[node name="SortGamesBtn" type="Button" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/SortTabs" unique_id=1859306138]
unique_name_in_owner = true
custom_minimum_size = Vector2(120, 36)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
text = "Games Played"
-[node name="HSeparator" type="HSeparator" parent="MainLayout/LeftPanel/LeftVBox" unique_id=1424980566]
+[node name="HSeparator" type="HSeparator" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox" unique_id=1424980566]
layout_mode = 2
+theme_override_styles/separator = SubResource("StyleBoxEmpty_q8r81")
-[node name="ScrollContainer" type="ScrollContainer" parent="MainLayout/LeftPanel/LeftVBox" unique_id=1067011185]
+[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox" unique_id=1067011185]
layout_mode = 2
size_flags_vertical = 3
-[node name="LeaderboardList" type="VBoxContainer" parent="MainLayout/LeftPanel/LeftVBox/ScrollContainer" unique_id=1303389084]
+[node name="LeaderboardList" type="VBoxContainer" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox/ScrollContainer" unique_id=1303389084]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 8
-[node name="StatusLabel" type="Label" parent="MainLayout/LeftPanel/LeftVBox" unique_id=218097909]
+[node name="StatusLabel" type="Label" parent="MarginContainer/MainLayout/LeftPanel/LeftVBox" unique_id=218097909]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_fonts/font = ExtResource("3_font")
text = "Loading data..."
horizontal_alignment = 1
-[node name="RightPanel" type="SubViewportContainer" parent="MainLayout" unique_id=733341277]
+[node name="RightPanel" type="SubViewportContainer" parent="MarginContainer/MainLayout" unique_id=733341277]
custom_minimum_size = Vector2(340, 0)
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 0.8
stretch = true
-[node name="PreviewViewport" type="SubViewport" parent="MainLayout/RightPanel" unique_id=434116765]
+[node name="PreviewViewport" type="SubViewport" parent="MarginContainer/MainLayout/RightPanel" unique_id=434116765]
unique_name_in_owner = true
own_world_3d = true
transparent_bg = true
handle_input_locally = false
-size = Vector2i(608, 720)
+size = Vector2i(581, 708)
render_target_update_mode = 4
-[node name="WorldEnvironment" type="WorldEnvironment" parent="MainLayout/RightPanel/PreviewViewport" unique_id=176076489]
+[node name="WorldEnvironment" type="WorldEnvironment" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport" unique_id=176076489]
environment = SubResource("Environment_lb")
-[node name="DirectionalLight3D" type="DirectionalLight3D" parent="MainLayout/RightPanel/PreviewViewport" unique_id=1487133814]
+[node name="DirectionalLight3D" type="DirectionalLight3D" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport" unique_id=1487133814]
transform = Transform3D(0.866025, -0.25, 0.433013, 0, 0.866025, 0.5, -0.5, -0.433013, 0.75, 0, 4, 0)
light_energy = 1.4
-[node name="FillLight" type="OmniLight3D" parent="MainLayout/RightPanel/PreviewViewport" unique_id=1492921006]
+[node name="FillLight" type="OmniLight3D" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport" unique_id=1492921006]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 2, 2)
light_color = Color(0.4, 0.5, 1, 1)
light_energy = 0.5
omni_range = 8.0
-[node name="Camera3D" type="Camera3D" parent="MainLayout/RightPanel/PreviewViewport" unique_id=28500697]
+[node name="Camera3D" type="Camera3D" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport" unique_id=28500697]
transform = Transform3D(1, 0, 0, 0, 0.9659259, 0.25881898, 0, -0.25881898, 0.9659259, 0, 0.8380414, 3.2)
current = true
fov = 40.0
-[node name="CharacterRoot" type="Node3D" parent="MainLayout/RightPanel/PreviewViewport" unique_id=1908332248]
+[node name="CharacterRoot" type="Node3D" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport" unique_id=1908332248]
unique_name_in_owner = true
-[node name="Masbro" parent="MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=1123428413 instance=ExtResource("4_masbro")]
+[node name="Masbro" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=1123428413 instance=ExtResource("4_masbro")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
visible = false
-[node name="Bob" parent="MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=1443851131 instance=ExtResource("4_bob")]
+[node name="Bob" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=1443851131 instance=ExtResource("4_bob")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.484627, 0)
visible = false
-[node name="Gatot" parent="MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=1688463565 instance=ExtResource("4_gatot")]
+[node name="Gatot" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=1688463565 instance=ExtResource("4_gatot")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
visible = false
-[node name="Oldpop" parent="MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=2101387155 instance=ExtResource("4_oldpop")]
+[node name="Oldpop" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=2101387155 instance=ExtResource("4_oldpop")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
-[node name="AnimationPlayer" type="AnimationPlayer" parent="MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=264395095]
+[node name="AnimationPlayer" type="AnimationPlayer" parent="MarginContainer/MainLayout/RightPanel/PreviewViewport/CharacterRoot" unique_id=264395095]
root_node = NodePath("../Oldpop")
libraries/animation-pack = ExtResource("5_animlib")
autoplay = &"animation-pack/idle"
-[node name="SelectedPlayerInfo" type="PanelContainer" parent="MainLayout/RightPanel" unique_id=1592883771]
+[node name="SelectedPlayerInfo" type="PanelContainer" parent="MarginContainer/MainLayout/RightPanel" unique_id=1592883771]
layout_mode = 2
size_flags_vertical = 8
-[node name="InfoMargin" type="MarginContainer" parent="MainLayout/RightPanel/SelectedPlayerInfo" unique_id=882298034]
+[node name="InfoMargin" type="MarginContainer" parent="MarginContainer/MainLayout/RightPanel/SelectedPlayerInfo" unique_id=882298034]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 15
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 15
-[node name="InfoVBox" type="VBoxContainer" parent="MainLayout/RightPanel/SelectedPlayerInfo/InfoMargin" unique_id=567154378]
+[node name="InfoVBox" type="VBoxContainer" parent="MarginContainer/MainLayout/RightPanel/SelectedPlayerInfo/InfoMargin" unique_id=567154378]
layout_mode = 2
theme_override_constants/separation = 4
-[node name="SelectedNameLabel" type="Label" parent="MainLayout/RightPanel/SelectedPlayerInfo/InfoMargin/InfoVBox" unique_id=1940372038]
+[node name="SelectedNameLabel" type="Label" parent="MarginContainer/MainLayout/RightPanel/SelectedPlayerInfo/InfoMargin/InfoVBox" unique_id=1940372038]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.69803923, 0.5411765, 0.3647059, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 24
text = "PLAYER NAME"
horizontal_alignment = 1
-[node name="SelectedRankLabel" type="Label" parent="MainLayout/RightPanel/SelectedPlayerInfo/InfoMargin/InfoVBox" unique_id=994755781]
+[node name="SelectedRankLabel" type="Label" parent="MarginContainer/MainLayout/RightPanel/SelectedPlayerInfo/InfoMargin/InfoVBox" unique_id=994755781]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
diff --git a/scenes/ui/login_screen.tscn b/scenes/ui/login_screen.tscn
index b18518c..c35043b 100644
--- a/scenes/ui/login_screen.tscn
+++ b/scenes/ui/login_screen.tscn
@@ -1,7 +1,50 @@
[gd_scene format=3 uid="uid://b00eef4tqt2ri"]
[ext_resource type="Script" uid="uid://b1lcy1ikdkknq" path="res://scripts/ui/login_screen.gd" id="1"]
-[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2"]
+[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="1_25ghd"]
+[ext_resource type="Texture2D" uid="uid://jqvv6s55mlsk" path="res://assets/graphics/gui/BG.png" id="3_atvl1"]
+[ext_resource type="Texture2D" uid="uid://dvp0as6yyudco" path="res://assets/graphics/main_menu/bg_illust.png" id="4_53sdr"]
+[ext_resource type="Texture2D" uid="uid://bvy60hfe7hr4j" path="res://assets/graphics/login_panel/sign_in.png" id="5_dfu6y"]
+[ext_resource type="Texture2D" uid="uid://36uhj6e6piai" path="res://assets/graphics/login_panel/sign_in_dimmed.png" id="6_eint3"]
+[ext_resource type="Texture2D" uid="uid://dkjiv40yjf2w7" path="res://assets/graphics/login_panel/sign_up.png" id="7_duruf"]
+[ext_resource type="Texture2D" uid="uid://3c2hwrbatvsh" path="res://assets/graphics/login_panel/sign_up_dimmed.png" id="8_0gtqq"]
+[ext_resource type="Texture2D" uid="uid://cwhe3g5dai0pv" path="res://assets/graphics/gui/login_panel/steam.png" id="9_eint3"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_panel"]
+content_margin_left = 4.0
+content_margin_top = 4.0
+content_margin_right = 4.0
+content_margin_bottom = 4.0
+bg_color = Color(0.14117648, 0.16862746, 0.19215687, 1)
+corner_radius_top_left = 12
+corner_radius_top_right = 12
+corner_radius_bottom_right = 12
+corner_radius_bottom_left = 12
+shadow_color = Color(0, 0, 0, 0.3529412)
+shadow_size = 4
+shadow_offset = Vector2(-2, 2)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_inactive"]
+content_margin_left = 16.0
+content_margin_top = 14.0
+content_margin_right = 16.0
+content_margin_bottom = 14.0
+bg_color = Color(0.33, 0.62, 0.78, 1)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_active"]
+content_margin_left = 16.0
+content_margin_top = 14.0
+content_margin_right = 16.0
+content_margin_bottom = 14.0
+bg_color = Color(0.1, 0.19, 0.27, 1)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
[node name="LoginScreen" type="Control" unique_id=1394670984]
layout_mode = 3
@@ -10,60 +53,301 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-theme = ExtResource("2")
+theme = ExtResource("1_25ghd")
script = ExtResource("1")
-[node name="Background" type="ColorRect" parent="." unique_id=1913867293]
+[node name="Background2" type="TextureRect" parent="." unique_id=353261948]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-color = Color(0.12, 0.1, 0.08, 1)
+texture = ExtResource("3_atvl1")
+expand_mode = 1
-[node name="CenterContainer" type="CenterContainer" parent="." unique_id=706535114]
+[node name="Background" type="TextureRect" parent="." unique_id=1187975207]
+modulate = Color(1, 1, 1, 0.48235294)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
+texture = ExtResource("4_53sdr")
+expand_mode = 1
+flip_h = true
-[node name="LayoutVBox" type="VBoxContainer" parent="CenterContainer" unique_id=1110313476]
+[node name="RootHBox" type="HBoxContainer" parent="." unique_id=862490259]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 0
+
+[node name="LeftColumn" type="VBoxContainer" parent="RootHBox" unique_id=1587806516]
+custom_minimum_size = Vector2(200, 0)
+layout_mode = 2
+size_flags_horizontal = 10
+theme_override_constants/separation = 12
+alignment = 2
+
+[node name="LeftSpacer" type="Control" parent="RootHBox/LeftColumn" unique_id=1209422692]
+custom_minimum_size = Vector2(0, 200)
+layout_mode = 2
+
+[node name="SignInTabBtn" type="TextureButton" parent="RootHBox/LeftColumn" unique_id=2029771907]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 8
+toggle_mode = true
+texture_normal = ExtResource("6_eint3")
+texture_pressed = ExtResource("5_dfu6y")
+texture_hover = ExtResource("5_dfu6y")
+
+[node name="SignUpTabBtn" type="TextureButton" parent="RootHBox/LeftColumn" unique_id=1409705912]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 8
+toggle_mode = true
+texture_normal = ExtResource("8_0gtqq")
+texture_pressed = ExtResource("7_duruf")
+texture_hover = ExtResource("7_duruf")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="RootHBox/LeftColumn" unique_id=1577376480]
+layout_mode = 2
+theme_override_constants/separation = 20
+
+[node name="BottomLeftSpacer" type="Control" parent="RootHBox/LeftColumn" unique_id=459259390]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="CenterColumn" type="CenterContainer" parent="RootHBox" unique_id=1801474360]
+layout_mode = 2
+
+[node name="PanelBG" type="PanelContainer" parent="RootHBox/CenterColumn" unique_id=320946805]
+custom_minimum_size = Vector2(420, 0)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_panel")
+
+[node name="TabContainer" type="TabContainer" parent="RootHBox/CenterColumn/PanelBG" unique_id=2135112748]
+unique_name_in_owner = true
+layout_mode = 2
+current_tab = 0
+tabs_visible = false
+
+[node name="Login" type="MarginContainer" parent="RootHBox/CenterColumn/PanelBG/TabContainer" unique_id=1294712927]
+layout_mode = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+metadata/_tab_index = 0
+
+[node name="VBox" type="VBoxContainer" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login" unique_id=1063599539]
layout_mode = 2
theme_override_constants/separation = 12
-[node name="HeaderVBox" type="VBoxContainer" parent="CenterContainer/LayoutVBox" unique_id=851120967]
+[node name="GuestButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=2037993426]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 48)
+layout_mode = 2
+theme_override_font_sizes/font_size = 16
+text = "Play as Guest"
+
+[node name="OrLabel" type="Label" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=1387412213]
+layout_mode = 2
+text = "─────── or sign in ───────"
+horizontal_alignment = 1
+
+[node name="EmailInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=323436289]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 44)
+layout_mode = 2
+placeholder_text = "Email"
+
+[node name="PasswordInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=1098627484]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 44)
+layout_mode = 2
+placeholder_text = "Password"
+secret = true
+
+[node name="RememberMe" type="CheckBox" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=1013722117]
+unique_name_in_owner = true
+layout_mode = 2
+theme = ExtResource("1_25ghd")
+theme_override_colors/font_color = Color(0.88, 0.9, 0.93, 1)
+theme_override_colors/font_pressed_color = Color(0.83, 0.83, 0.83, 1)
+theme_override_colors/font_hover_color = Color(0.45, 0.73, 0.91, 1)
+button_pressed = true
+text = "Remember Me"
+
+[node name="LoginButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=945681236]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 48)
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 1, 1, 1)
+theme_override_font_sizes/font_size = 18
+theme_override_styles/normal = SubResource("StyleBoxFlat_tab_inactive")
+theme_override_styles/pressed = SubResource("StyleBoxFlat_tab_active")
+theme_override_styles/hover = SubResource("StyleBoxFlat_tab_inactive")
+text = "SIGN IN"
+
+[node name="SocialLabel" type="Label" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=840440943]
+layout_mode = 2
+text = "─────── or continue with ───────"
+horizontal_alignment = 1
+
+[node name="SocialButtons" type="HBoxContainer" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=1899762021]
+layout_mode = 2
+theme_override_constants/separation = 12
+alignment = 1
+
+[node name="GoogleButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox/SocialButtons" unique_id=196743645]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(100, 44)
+layout_mode = 2
+text = "Google"
+
+[node name="AppleButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox/SocialButtons" unique_id=1174582184]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(100, 44)
+layout_mode = 2
+text = "Apple"
+
+[node name="FacebookButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox/SocialButtons" unique_id=1252096120]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(100, 44)
+layout_mode = 2
+text = "Facebook"
+
+[node name="SteamButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox/SocialButtons" unique_id=1024459784]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(140, 44)
+layout_mode = 2
+text = " STEAM"
+icon = ExtResource("9_eint3")
+
+[node name="StatusLabel" type="Label" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=1679807364]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 0.4, 0.4, 1)
+horizontal_alignment = 1
+autowrap_mode = 2
+
+[node name="LoadingSpinner" type="TextureProgressBar" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Login/VBox" unique_id=1985748047]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+size_flags_horizontal = 4
+
+[node name="Register" type="MarginContainer" parent="RootHBox/CenterColumn/PanelBG/TabContainer" unique_id=1373074681]
visible = false
layout_mode = 2
-theme_override_constants/separation = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+metadata/_tab_index = 1
-[node name="LogoLabel" type="Label" parent="CenterContainer/LayoutVBox/HeaderVBox" unique_id=73067558]
+[node name="VBox" type="VBoxContainer" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register" unique_id=839364109]
layout_mode = 2
-theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
-theme_override_font_sizes/font_size = 42
-text = "TEKTON"
+theme_override_constants/separation = 12
+
+[node name="RegEmailInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=1906331672]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 44)
+layout_mode = 2
+placeholder_text = "Email"
+
+[node name="RegUsernameInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=853099369]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 44)
+layout_mode = 2
+placeholder_text = "Username"
+
+[node name="RegPasswordInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=1603528515]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 44)
+layout_mode = 2
+placeholder_text = "Password"
+secret = true
+
+[node name="RegConfirmPasswordInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=830465730]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 44)
+layout_mode = 2
+placeholder_text = "Confirm Password"
+secret = true
+
+[node name="PasswordStrength" type="ProgressBar" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=2023454025]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 12)
+layout_mode = 2
+max_value = 4.0
+show_percentage = false
+
+[node name="PasswordHint" type="Label" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=1402181329]
+unique_name_in_owner = true
+layout_mode = 2
+text = "Min 8 characters, include number and symbol"
horizontal_alignment = 1
-[node name="SubtitleLabel" type="Label" parent="CenterContainer/LayoutVBox/HeaderVBox" unique_id=240064697]
+[node name="RegCaptchaContainer" type="HBoxContainer" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=1697820195]
+layout_mode = 2
+theme_override_constants/separation = 25
+
+[node name="RegCaptchaQuestion" type="Label" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox/RegCaptchaContainer" unique_id=1792478300]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Security Check: 5 + 7 = ?"
+
+[node name="RegCaptchaInput" type="LineEdit" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox/RegCaptchaContainer" unique_id=1405718888]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(100, 44)
+layout_mode = 2
+placeholder_text = "Answer"
+alignment = 1
+
+[node name="RegisterButton" type="Button" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=2040733064]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 48)
+layout_mode = 2
+theme_override_font_sizes/font_size = 18
+text = "REGISTER"
+
+[node name="RegStatusLabel" type="Label" parent="RootHBox/CenterColumn/PanelBG/TabContainer/Register/VBox" unique_id=1096594976]
+unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
-theme_override_font_sizes/font_size = 14
-text = "Armageddon"
horizontal_alignment = 1
+autowrap_mode = 2
-[node name="ServerSelectionSection" type="VBoxContainer" parent="CenterContainer/LayoutVBox" unique_id=580109643]
+[node name="RightColumn" type="Control" parent="RootHBox" unique_id=115281348]
+custom_minimum_size = Vector2(200, 0)
layout_mode = 2
-theme_override_constants/separation = 8
+size_flags_horizontal = 3
-[node name="ConnectionModeLabel" type="Label" parent="CenterContainer/LayoutVBox/ServerSelectionSection" unique_id=2002206900]
-layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
-theme_override_font_sizes/font_size = 12
-text = "CONNECTION MODE"
+[node name="ServerSelectionSection" type="VBoxContainer" parent="." unique_id=580109643]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_left = 16.0
+offset_top = -60.0
+offset_right = 320.0
+offset_bottom = -16.0
+grow_horizontal = 2
+grow_vertical = 0
-[node name="ServerOption" type="OptionButton" parent="CenterContainer/LayoutVBox/ServerSelectionSection" unique_id=975117024]
+[node name="ServerOption" type="OptionButton" parent="ServerSelectionSection" unique_id=975117024]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
@@ -78,7 +362,7 @@ popup/item_2/id = 2
popup/item_3/text = "Nakama - Tekton Dash EU"
popup/item_3/id = 3
-[node name="ServerIPInput" type="LineEdit" parent="CenterContainer/LayoutVBox/ServerSelectionSection" unique_id=1444265129]
+[node name="ServerIPInput" type="LineEdit" parent="ServerSelectionSection" unique_id=1444265129]
unique_name_in_owner = true
visible = false
custom_minimum_size = Vector2(0, 44)
@@ -86,13 +370,13 @@ layout_mode = 2
text = "127.0.0.1"
placeholder_text = "Enter Nakama Server IP..."
-[node name="LANSection" type="VBoxContainer" parent="CenterContainer/LayoutVBox/ServerSelectionSection" unique_id=1917634402]
+[node name="LANSection" type="VBoxContainer" parent="ServerSelectionSection" unique_id=1917634402]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 8
-[node name="LanInfo" type="Label" parent="CenterContainer/LayoutVBox/ServerSelectionSection/LANSection" unique_id=75077084]
+[node name="LanInfo" type="Label" parent="ServerSelectionSection/LANSection" unique_id=130839558]
layout_mode = 2
theme_override_colors/font_color = Color(0.7, 0.7, 0.7, 1)
theme_override_font_sizes/font_size = 12
@@ -100,229 +384,33 @@ text = "Play over LAN without any server.
Firewall may need to allow port 7777."
autowrap_mode = 3
-[node name="LANHostBtn" type="Button" parent="CenterContainer/LayoutVBox/ServerSelectionSection/LANSection" unique_id=751026831]
+[node name="LANHostBtn" type="Button" parent="ServerSelectionSection/LANSection" unique_id=751026831]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
text = "HOST LAN GAME"
-[node name="LanSeparator" type="Label" parent="CenterContainer/LayoutVBox/ServerSelectionSection/LANSection" unique_id=2088668724]
+[node name="LanSeparator" type="Label" parent="ServerSelectionSection/LANSection" unique_id=29744637]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 0.5, 0.5, 1)
theme_override_font_sizes/font_size = 11
text = "─────── or join a friend ───────"
horizontal_alignment = 1
-[node name="LANIPInput" type="LineEdit" parent="CenterContainer/LayoutVBox/ServerSelectionSection/LANSection" unique_id=1859021984]
+[node name="LANIPInput" type="LineEdit" parent="ServerSelectionSection/LANSection" unique_id=1859021984]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
text = "127.0.0.1"
placeholder_text = "Host IP (e.g. 192.168.1.10)"
-[node name="LANJoinBtn" type="Button" parent="CenterContainer/LayoutVBox/ServerSelectionSection/LANSection" unique_id=2009389522]
+[node name="LANJoinBtn" type="Button" parent="ServerSelectionSection/LANSection" unique_id=2009389522]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
text = "JOIN LAN GAME"
-[node name="HSeparator" type="HSeparator" parent="CenterContainer/LayoutVBox" unique_id=1424264812]
-layout_mode = 2
-
-[node name="TabContainer" type="TabContainer" parent="CenterContainer/LayoutVBox" unique_id=2135112748]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(420, 0)
-layout_mode = 2
-current_tab = 0
-
-[node name="Login" type="MarginContainer" parent="CenterContainer/LayoutVBox/TabContainer" unique_id=1294712927]
-layout_mode = 2
-theme_override_constants/margin_left = 16
-theme_override_constants/margin_top = 16
-theme_override_constants/margin_right = 16
-theme_override_constants/margin_bottom = 16
-metadata/_tab_index = 0
-
-[node name="VBox" type="VBoxContainer" parent="CenterContainer/LayoutVBox/TabContainer/Login" unique_id=1063599539]
-layout_mode = 2
-theme_override_constants/separation = 12
-
-[node name="GuestButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=2037993426]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 48)
-layout_mode = 2
-theme_override_font_sizes/font_size = 16
-text = "▶ PLAY AS GUEST"
-
-[node name="OrLabel" type="Label" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=1387412213]
-layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
-text = "─────── or sign in ───────"
-horizontal_alignment = 1
-
-[node name="EmailInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=323436289]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Email"
-
-[node name="PasswordInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=1098627484]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Password"
-secret = true
-
-[node name="RememberMe" type="CheckBox" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=1013722117]
-unique_name_in_owner = true
-layout_mode = 2
-button_pressed = true
-text = "Remember me"
-
-[node name="LoginButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=945681236]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 48)
-layout_mode = 2
-text = "Sign In"
-
-[node name="SocialLabel" type="Label" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=840440943]
-layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
-text = "─────── or continue with ───────"
-horizontal_alignment = 1
-
-[node name="SocialButtons" type="HBoxContainer" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=1899762021]
-layout_mode = 2
-theme_override_constants/separation = 12
-alignment = 1
-
-[node name="GoogleButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox/SocialButtons" unique_id=196743645]
-unique_name_in_owner = true
-visible = false
-custom_minimum_size = Vector2(100, 44)
-layout_mode = 2
-text = "Google"
-
-[node name="AppleButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox/SocialButtons" unique_id=1174582184]
-unique_name_in_owner = true
-visible = false
-custom_minimum_size = Vector2(100, 44)
-layout_mode = 2
-text = "Apple"
-
-[node name="FacebookButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox/SocialButtons" unique_id=1252096120]
-unique_name_in_owner = true
-visible = false
-custom_minimum_size = Vector2(100, 44)
-layout_mode = 2
-text = "Facebook"
-
-[node name="SteamButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox/SocialButtons" unique_id=1024459784]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(100, 44)
-layout_mode = 2
-text = "Steam"
-
-[node name="StatusLabel" type="Label" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=1679807364]
-unique_name_in_owner = true
-layout_mode = 2
-theme_override_colors/font_color = Color(1, 0.4, 0.4, 1)
-horizontal_alignment = 1
-autowrap_mode = 2
-
-[node name="LoadingSpinner" type="TextureProgressBar" parent="CenterContainer/LayoutVBox/TabContainer/Login/VBox" unique_id=1985748047]
-unique_name_in_owner = true
-visible = false
-custom_minimum_size = Vector2(40, 40)
-layout_mode = 2
-size_flags_horizontal = 4
-
-[node name="Register" type="MarginContainer" parent="CenterContainer/LayoutVBox/TabContainer" unique_id=1373074681]
-visible = false
-layout_mode = 2
-theme_override_constants/margin_left = 16
-theme_override_constants/margin_top = 16
-theme_override_constants/margin_right = 16
-theme_override_constants/margin_bottom = 16
-metadata/_tab_index = 1
-
-[node name="VBox" type="VBoxContainer" parent="CenterContainer/LayoutVBox/TabContainer/Register" unique_id=839364109]
-layout_mode = 2
-theme_override_constants/separation = 12
-
-[node name="RegEmailInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=1906331672]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Email"
-
-[node name="RegUsernameInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=853099369]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Username"
-
-[node name="RegPasswordInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=1603528515]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Password"
-secret = true
-
-[node name="RegConfirmPasswordInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=830465730]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Confirm Password"
-secret = true
-
-[node name="PasswordStrength" type="ProgressBar" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=2023454025]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 12)
-layout_mode = 2
-max_value = 4.0
-show_percentage = false
-
-[node name="PasswordHint" type="Label" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=1402181329]
-unique_name_in_owner = true
-layout_mode = 2
-theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
-theme_override_font_sizes/font_size = 11
-text = "Min 8 characters, include number and symbol"
-horizontal_alignment = 1
-
-[node name="RegCaptchaContainer" type="VBoxContainer" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=583603175]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="RegCaptchaQuestion" type="Label" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox/RegCaptchaContainer" unique_id=1792478300]
-unique_name_in_owner = true
-layout_mode = 2
-theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
-text = "Security Check: 5 + 7 = ?"
-horizontal_alignment = 1
-
-[node name="RegCaptchaInput" type="LineEdit" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox/RegCaptchaContainer" unique_id=1405718888]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 44)
-layout_mode = 2
-placeholder_text = "Answer"
-alignment = 1
-
-[node name="RegisterButton" type="Button" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=2040733064]
-unique_name_in_owner = true
-custom_minimum_size = Vector2(0, 48)
-layout_mode = 2
-text = "Create Account"
-
-[node name="RegStatusLabel" type="Label" parent="CenterContainer/LayoutVBox/TabContainer/Register/VBox" unique_id=1096594976]
-unique_name_in_owner = true
-layout_mode = 2
-theme_override_colors/font_color = Color(1, 0.4, 0.4, 1)
-horizontal_alignment = 1
-autowrap_mode = 2
-
-[node name="VersionLabel" type="Label" parent="." unique_id=481275614]
+[node name="VersionLabel" type="Label" parent="." unique_id=256596221]
visible = false
layout_mode = 1
anchors_preset = 3
diff --git a/scenes/ui/mailbox_panel.tscn b/scenes/ui/mailbox_panel.tscn
new file mode 100644
index 0000000..32f856f
--- /dev/null
+++ b/scenes/ui/mailbox_panel.tscn
@@ -0,0 +1,174 @@
+[gd_scene format=3 uid="uid://cb5cbbxyxx"]
+
+[ext_resource type="Script" uid="uid://df7xxyyzz" path="res://scripts/ui/mailbox_panel.gd" id="1_a"]
+
+[node name="MailboxPanel" type="Panel"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_a")
+
+[node name="BG" type="ColorRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.08, 0.15, 0.22, 1)
+
+[node name="Margin" type="MarginContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 24
+theme_override_constants/margin_top = 24
+theme_override_constants/margin_right = 24
+theme_override_constants/margin_bottom = 24
+
+[node name="HBox" type="HBoxContainer" parent="Margin"]
+layout_mode = 2
+theme_override_constants/separation = 24
+
+[node name="LeftCol" type="VBoxContainer" parent="Margin/HBox"]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="HeaderHBox" type="HBoxContainer" parent="Margin/HBox/LeftCol"]
+layout_mode = 2
+
+[node name="Icon" type="TextureRect" parent="Margin/HBox/LeftCol/HeaderHBox"]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+expand_mode = 1
+stretch_mode = 5
+
+[node name="Label" type="Label" parent="Margin/HBox/LeftCol/HeaderHBox"]
+layout_mode = 2
+text = "MAILBOX"
+theme_override_font_sizes/font_size = 24
+
+[node name="Scroll" type="ScrollContainer" parent="Margin/HBox/LeftCol"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="MailListVBox" type="VBoxContainer" parent="Margin/HBox/LeftCol/Scroll"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/separation = 8
+
+[node name="EmptyStateLbl" type="Label" parent="Margin/HBox/LeftCol/Scroll"]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 6
+text = "No mails found."
+horizontal_alignment = 1
+
+[node name="CloseBtn" type="Button" parent="Margin/HBox/LeftCol"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(100, 40)
+layout_mode = 2
+size_flags_horizontal = 0
+text = "BACK"
+
+[node name="MailBtnTemplate" type="Button" parent="Margin/HBox/LeftCol"]
+unique_name_in_owner = true
+visible = false
+custom_minimum_size = Vector2(0, 80)
+layout_mode = 2
+toggle_mode = true
+
+[node name="VBox" type="VBoxContainer" parent="Margin/HBox/LeftCol/MailBtnTemplate"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_right = 8
+
+[node name="Title" type="Label" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox"]
+layout_mode = 2
+theme_override_font_sizes/font_size = 18
+text = "No Title"
+
+[node name="HBox" type="HBoxContainer" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox"]
+layout_mode = 2
+
+[node name="DateLbl" type="Label" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox/HBox"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.745098, 0.745098, 0.745098, 1)
+theme_override_font_sizes/font_size = 12
+
+[node name="Spacer" type="Control" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox/HBox"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="StatusLbl" type="Label" parent="Margin/HBox/LeftCol/MailBtnTemplate/VBox/HBox"]
+layout_mode = 2
+theme_override_font_sizes/font_size = 12
+
+[node name="RightCol" type="VBoxContainer" parent="Margin/HBox"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="MailTitleLbl" type="Label" parent="Margin/HBox/RightCol"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_font_sizes/font_size = 28
+text = "WELCOME TO TEKTONIA"
+
+[node name="Sep" type="HSeparator" parent="Margin/HBox/RightCol"]
+layout_mode = 2
+
+[node name="MailContentText" type="RichTextLabel" parent="Margin/HBox/RightCol"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_font_sizes/normal_font_size = 18
+text = "Lorem ipsum..."
+
+[node name="FooterHBox" type="HBoxContainer" parent="Margin/HBox/RightCol"]
+layout_mode = 2
+
+[node name="SenderLbl" type="Label" parent="Margin/HBox/RightCol/FooterHBox"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+text = "SENDER:
+TEKTON DEV TEAM"
+
+[node name="DynamicRewardsContainer" type="HBoxContainer" parent="Margin/HBox/RightCol/FooterHBox"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="RewardHBoxTemplate" type="HBoxContainer" parent="Margin/HBox/RightCol/FooterHBox"]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+
+[node name="Icon" type="TextureRect" parent="Margin/HBox/RightCol/FooterHBox/RewardHBoxTemplate"]
+custom_minimum_size = Vector2(32, 32)
+layout_mode = 2
+
+[node name="AmountLbl" type="Label" parent="Margin/HBox/RightCol/FooterHBox/RewardHBoxTemplate"]
+layout_mode = 2
+text = "100"
+
+[node name="ActionBtn" type="Button" parent="Margin/HBox/RightCol/FooterHBox"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(120, 48)
+layout_mode = 2
+theme_override_colors/font_color = Color(1, 0.2, 0.2, 1)
+text = "DELETE"
diff --git a/scenes/ui/profile_panel.tscn b/scenes/ui/profile_panel.tscn
index 4a83735..7223f70 100644
--- a/scenes/ui/profile_panel.tscn
+++ b/scenes/ui/profile_panel.tscn
@@ -1,8 +1,8 @@
[gd_scene format=3 uid="uid://dyx0upokhsh2e"]
[ext_resource type="Script" uid="uid://y6wswtalyiho" path="res://scripts/ui/profile_panel.gd" id="1"]
-[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2"]
-[ext_resource type="Texture2D" uid="uid://2d1ks5pmblc7" path="res://assets/graphics/main_menu/bg_back.png" id="3_0vpw4"]
+[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="1_pti1t"]
+[ext_resource type="Texture2D" uid="uid://jqvv6s55mlsk" path="res://assets/graphics/gui/BG.png" id="3_3vyn0"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="3_font"]
[ext_resource type="PackedScene" uid="uid://ejeamn0pyey4" path="res://assets/characters/Bob.glb" id="4_bob"]
[ext_resource type="PackedScene" uid="uid://d4cul3w3wem5w" path="res://assets/characters/Gatot.glb" id="4_gatot"]
@@ -25,10 +25,11 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-theme = ExtResource("2")
+theme = ExtResource("1_pti1t")
script = ExtResource("1")
[node name="Background" type="ColorRect" parent="." unique_id=1526402211]
+visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -38,14 +39,13 @@ grow_vertical = 2
color = Color(0.0627451, 0.0745098, 0.101961, 1)
[node name="Background2" type="TextureRect" parent="." unique_id=1984021675]
-modulate = Color(1, 1, 1, 0.28235295)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-texture = ExtResource("3_0vpw4")
+texture = ExtResource("3_3vyn0")
expand_mode = 2
[node name="MainMargin" type="MarginContainer" parent="." unique_id=949618423]
@@ -144,7 +144,6 @@ text = "✦"
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 18
text = "0"
@@ -172,7 +171,6 @@ text = "▤"
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 18
text = "0"
@@ -195,7 +193,6 @@ theme_override_constants/separation = 4
[node name="AccountType" type="Label" parent="MainMargin/MainHBox/LeftCol/StatsPanel/Margin/VBox" unique_id=1583438808]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.7, 0.5, 0.3, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 13
text = "Account : Email"
@@ -210,7 +207,6 @@ text = "Link Email"
[node name="GamesPlayed" type="Label" parent="MainMargin/MainHBox/LeftCol/StatsPanel/Margin/VBox" unique_id=279949601]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.8, 0.65, 0.45, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 13
text = "Games Played: 8"
@@ -218,7 +214,6 @@ text = "Games Played: 8"
[node name="WinRate" type="Label" parent="MainMargin/MainHBox/LeftCol/StatsPanel/Margin/VBox" unique_id=1698973042]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.8, 0.65, 0.45, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 13
text = "Win Rate: 62.5%"
@@ -226,7 +221,6 @@ text = "Win Rate: 62.5%"
[node name="HighScore" type="Label" parent="MainMargin/MainHBox/LeftCol/StatsPanel/Margin/VBox" unique_id=1418839301]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.8, 0.65, 0.45, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 13
text = "High Score: 14050"
@@ -343,7 +337,7 @@ unique_name_in_owner = true
own_world_3d = true
transparent_bg = true
handle_input_locally = false
-size = Vector2i(627, 487)
+size = Vector2i(627, 541)
render_target_update_mode = 4
[node name="WorldEnvironment" type="WorldEnvironment" parent="MainMargin/MainHBox/CenterCol/ViewportWrapper/ViewportContainer/PreviewViewport" unique_id=1660814495]
@@ -494,7 +488,6 @@ theme_override_constants/separation = 6
[node name="ItemNameLabel" type="Label" parent="MainMargin/MainHBox/RightCol/ItemInfoCard/Margin/HBox/VBox" unique_id=1127187232]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 16
text = "Cute Hat"
@@ -520,7 +513,6 @@ text = "✦"
[node name="ItemPriceLabel" type="Label" parent="MainMargin/MainHBox/RightCol/ItemInfoCard/Margin/HBox/VBox/RarityPriceRow" unique_id=1837607820]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.5686275, 0.36862746, 0.12941177, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 12
text = "1500"
@@ -649,7 +641,6 @@ text = "◀"
unique_name_in_owner = true
custom_minimum_size = Vector2(80, 32)
layout_mode = 2
-theme_override_colors/font_color = Color(0.9, 0.7, 0.3, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 18
text = "1"
@@ -709,10 +700,10 @@ anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
-offset_left = 4.0
-offset_top = 4.0
-offset_right = 316.0
-offset_bottom = 216.0
+offset_left = -156.0
+offset_top = -106.0
+offset_right = 156.0
+offset_bottom = 106.0
grow_horizontal = 2
grow_vertical = 2
columns = 3
diff --git a/scenes/ui/social_panel.tscn b/scenes/ui/social_panel.tscn
index 844a7ea..efffea9 100644
--- a/scenes/ui/social_panel.tscn
+++ b/scenes/ui/social_panel.tscn
@@ -1,6 +1,26 @@
[gd_scene format=3 uid="uid://dqsocial001"]
+[ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="1_mo5tx"]
[ext_resource type="Script" uid="uid://dyr5tlvds11ib" path="res://scripts/ui/social_panel.gd" id="1_social"]
+[ext_resource type="Texture2D" uid="uid://jqvv6s55mlsk" path="res://assets/graphics/gui/BG.png" id="3_36pib"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rvn4p"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5360p"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_active"]
+bg_color = Color(0, 0, 0, 1)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_inactive"]
+bg_color = Color(0, 0, 0, 0.48)
+corner_radius_top_left = 8
+corner_radius_top_right = 8
+corner_radius_bottom_right = 8
+corner_radius_bottom_left = 8
[node name="SocialPanel" type="Control" unique_id=1931784939]
layout_mode = 3
@@ -9,225 +29,196 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
+mouse_filter = 2
+theme = ExtResource("1_mo5tx")
script = ExtResource("1_social")
-[node name="BgOverlay" type="ColorRect" parent="." unique_id=680051647]
+[node name="BgOverlay" type="TextureRect" parent="." unique_id=2114349387]
+visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-color = Color(0, 0, 0, 0.6)
+mouse_filter = 2
+texture = ExtResource("3_36pib")
+expand_mode = 1
[node name="Panel" type="PanelContainer" parent="." unique_id=49835309]
layout_mode = 1
-anchors_preset = 8
-anchor_left = 0.5
-anchor_top = 0.5
-anchor_right = 0.5
-anchor_bottom = 0.5
-offset_left = -250.0
-offset_top = -310.0
-offset_right = 250.0
-offset_bottom = 310.0
-grow_horizontal = 2
+anchor_left = 0.42
+anchor_top = 0.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 0.0
+offset_top = 80.0
+offset_right = -10.0
+offset_bottom = -10.0
+grow_horizontal = 0
grow_vertical = 2
+mouse_filter = 2
+theme_override_styles/panel = SubResource("StyleBoxEmpty_5360p")
-[node name="VBox" type="VBoxContainer" parent="Panel" unique_id=1778361359]
+[node name="Margin" type="MarginContainer" parent="Panel"]
+layout_mode = 2
+mouse_filter = 2
+theme_override_constants/margin_left = 30
+theme_override_constants/margin_top = 30
+theme_override_constants/margin_right = 30
+theme_override_constants/margin_bottom = 30
+
+[node name="VBox" type="VBoxContainer" parent="Panel/Margin" unique_id=1778361359]
+layout_mode = 2
+mouse_filter = 2
+
+[node name="Header" type="HBoxContainer" parent="Panel/Margin/VBox" unique_id=760715334]
layout_mode = 2
-[node name="Header" type="HBoxContainer" parent="Panel/VBox" unique_id=760715334]
-layout_mode = 2
-
-[node name="TitleLabel" type="Label" parent="Panel/VBox/Header" unique_id=207941011]
+[node name="TitleLabel" type="Label" parent="Panel/Margin/VBox/Header" unique_id=207941011]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Social"
+text = ""
-[node name="CloseBtn" type="Button" parent="Panel/VBox/Header" unique_id=1052436789]
+[node name="CloseBtn" type="Button" parent="Panel/Margin/VBox/Header" unique_id=1052436789]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
text = "X"
-[node name="HSep0" type="HSeparator" parent="Panel/VBox" unique_id=2043117827]
+[node name="HSep0" type="HSeparator" parent="Panel/Margin/VBox" unique_id=2043117827]
layout_mode = 2
+theme_override_styles/separator = SubResource("StyleBoxEmpty_rvn4p")
-[node name="TabBar" type="HBoxContainer" parent="Panel/VBox" unique_id=687086642]
+
+
+[node name="TabBar" type="HBoxContainer" parent="Panel/Margin/VBox" unique_id=687086642]
layout_mode = 2
+theme_override_constants/separation = 12
-[node name="SearchTabBtn" type="Button" parent="Panel/VBox/TabBar" unique_id=827932127]
+[node name="SearchTabBtn" type="Button" parent="Panel/Margin/VBox/TabBar" unique_id=827932127]
unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 40)
layout_mode = 2
size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Search"
+theme_override_styles/normal = SubResource("StyleBoxFlat_tab_inactive")
+theme_override_styles/hover = SubResource("StyleBoxFlat_tab_inactive")
+theme_override_styles/pressed = SubResource("StyleBoxFlat_tab_active")
+text = "FIND FRIEND"
-[node name="RequestsTabBtn" type="Button" parent="Panel/VBox/TabBar" unique_id=243883852]
+[node name="FriendsTabBtn" type="Button" parent="Panel/Margin/VBox/TabBar" unique_id=1723617099]
unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 40)
layout_mode = 2
size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Requests"
+theme_override_styles/normal = SubResource("StyleBoxFlat_tab_active")
+theme_override_styles/hover = SubResource("StyleBoxFlat_tab_inactive")
+theme_override_styles/pressed = SubResource("StyleBoxFlat_tab_active")
+text = "FRIENDS"
-[node name="FriendsTabBtn" type="Button" parent="Panel/VBox/TabBar" unique_id=1723617099]
-unique_name_in_owner = true
+[node name="HSep1" type="HSeparator" parent="Panel/Margin/VBox" unique_id=549111536]
layout_mode = 2
-size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Friends"
+theme_override_styles/separator = SubResource("StyleBoxEmpty_5360p")
-[node name="DMTabBtn" type="Button" parent="Panel/VBox/TabBar" unique_id=439566194]
-unique_name_in_owner = true
-visible = false
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "DM"
-
-[node name="HSep1" type="HSeparator" parent="Panel/VBox" unique_id=549111536]
-layout_mode = 2
-
-[node name="SearchView" type="VBoxContainer" parent="Panel/VBox" unique_id=1208859643]
+[node name="SearchView" type="VBoxContainer" parent="Panel/Margin/VBox" unique_id=1208859643]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
-[node name="SearchRow" type="HBoxContainer" parent="Panel/VBox/SearchView" unique_id=773262308]
+
+[node name="SearchRow" type="HBoxContainer" parent="Panel/Margin/VBox/SearchView" unique_id=773262308]
layout_mode = 2
-[node name="SearchInput" type="LineEdit" parent="Panel/VBox/SearchView/SearchRow" unique_id=1000924330]
+[node name="SearchInput" type="LineEdit" parent="Panel/Margin/VBox/SearchView/SearchRow" unique_id=1000924330]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "Search by username..."
-[node name="SearchBtn" type="Button" parent="Panel/VBox/SearchView/SearchRow" unique_id=93688269]
+[node name="SearchBtn" type="Button" parent="Panel/Margin/VBox/SearchView/SearchRow" unique_id=93688269]
unique_name_in_owner = true
layout_mode = 2
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
text = "Search"
-[node name="NoSearchResultsLabel" type="Label" parent="Panel/VBox/SearchView" unique_id=788091908]
+[node name="NoSearchResultsLabel" type="Label" parent="Panel/Margin/VBox/SearchView" unique_id=788091908]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
text = "No users found."
-[node name="SearchScroll" type="ScrollContainer" parent="Panel/VBox/SearchView" unique_id=209134848]
+[node name="SearchScroll" type="ScrollContainer" parent="Panel/Margin/VBox/SearchView" unique_id=209134848]
layout_mode = 2
size_flags_vertical = 3
-[node name="SearchResultsList" type="VBoxContainer" parent="Panel/VBox/SearchView/SearchScroll" unique_id=339880904]
+[node name="SearchResultsList" type="GridContainer" parent="Panel/Margin/VBox/SearchView/SearchScroll" unique_id=339880904]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
+theme_override_constants/h_separation = 16
+theme_override_constants/v_separation = 16
+columns = 2
-[node name="SearchResultTemplate" type="HBoxContainer" parent="Panel/VBox/SearchView" unique_id=1331976559]
-unique_name_in_owner = true
-visible = false
-layout_mode = 2
-[node name="SRNameLabel" type="Label" parent="Panel/VBox/SearchView/SearchResultTemplate" unique_id=1704878305]
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-[node name="SRAddBtn" type="Button" parent="Panel/VBox/SearchView/SearchResultTemplate" unique_id=1934694377]
-layout_mode = 2
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Add Friend"
-[node name="RequestsView" type="VBoxContainer" parent="Panel/VBox" unique_id=1296365230]
+
+[node name="FriendsView" type="VBoxContainer" parent="Panel/Margin/VBox" unique_id=696809922]
unique_name_in_owner = true
visible = false
layout_mode = 2
size_flags_vertical = 3
-[node name="NoRequestsLabel" type="Label" parent="Panel/VBox/RequestsView" unique_id=1128340712]
-unique_name_in_owner = true
-visible = false
-layout_mode = 2
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "No incoming friend requests."
-
-[node name="RequestsScroll" type="ScrollContainer" parent="Panel/VBox/RequestsView" unique_id=964968029]
-layout_mode = 2
-size_flags_vertical = 3
-
-[node name="RequestsList" type="VBoxContainer" parent="Panel/VBox/RequestsView/RequestsScroll" unique_id=1332648515]
-unique_name_in_owner = true
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="RequestRowTemplate" type="HBoxContainer" parent="Panel/VBox/RequestsView" unique_id=619262910]
-unique_name_in_owner = true
-visible = false
-layout_mode = 2
-
-[node name="RRNameLabel" type="Label" parent="Panel/VBox/RequestsView/RequestRowTemplate" unique_id=1650836202]
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-
-[node name="RRAcceptBtn" type="Button" parent="Panel/VBox/RequestsView/RequestRowTemplate" unique_id=1452984145]
-layout_mode = 2
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Accept"
-
-[node name="RRDeclineBtn" type="Button" parent="Panel/VBox/RequestsView/RequestRowTemplate" unique_id=942241768]
-layout_mode = 2
-theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-text = "Decline"
-
-[node name="FriendsView" type="VBoxContainer" parent="Panel/VBox" unique_id=696809922]
-unique_name_in_owner = true
-visible = false
-layout_mode = 2
-size_flags_vertical = 3
-
-[node name="NoFriendsLabel" type="Label" parent="Panel/VBox/FriendsView" unique_id=1420717854]
+[node name="NoFriendsLabel" type="Label" parent="Panel/Margin/VBox/FriendsView" unique_id=1420717854]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
text = "No friends yet!"
-[node name="FriendScroll" type="ScrollContainer" parent="Panel/VBox/FriendsView" unique_id=1428917844]
+[node name="FriendScroll" type="ScrollContainer" parent="Panel/Margin/VBox/FriendsView" unique_id=1428917844]
layout_mode = 2
size_flags_vertical = 3
-[node name="FriendList" type="VBoxContainer" parent="Panel/VBox/FriendsView/FriendScroll" unique_id=1152435338]
+[node name="FriendList" type="GridContainer" parent="Panel/Margin/VBox/FriendsView/FriendScroll" unique_id=1152435338]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
+theme_override_constants/h_separation = 16
+theme_override_constants/v_separation = 16
+columns = 2
-[node name="DMView" type="VBoxContainer" parent="Panel/VBox" unique_id=828807744]
+[node name="DMView" type="PanelContainer" parent="." unique_id=828807744]
unique_name_in_owner = true
visible = false
-layout_mode = 2
-size_flags_vertical = 3
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_tab_inactive")
-[node name="DMHeader" type="HBoxContainer" parent="Panel/VBox/DMView" unique_id=1689887837]
+
+[node name="VBox" type="VBoxContainer" parent="DMView"]
layout_mode = 2
-[node name="DMBackBtn" type="Button" parent="Panel/VBox/DMView/DMHeader" unique_id=1721956547]
+[node name="DMHeader" type="HBoxContainer" parent="DMView/VBox" unique_id=1689887837]
+layout_mode = 2
+
+[node name="DMBackBtn" type="Button" parent="DMView/VBox/DMHeader" unique_id=1721956547]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
text = "<- Back"
-[node name="DMUsernameLabel" type="Label" parent="Panel/VBox/DMView/DMHeader" unique_id=632301252]
+[node name="DMUsernameLabel" type="Label" parent="DMView/VBox/DMHeader" unique_id=632301252]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
-[node name="DMLog" type="RichTextLabel" parent="Panel/VBox/DMView" unique_id=1090451527]
+[node name="DMLog" type="RichTextLabel" parent="DMView/VBox" unique_id=1090451527]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
@@ -235,17 +226,19 @@ theme_override_colors/default_color = Color(0.3, 0.18, 0.1, 1)
bbcode_enabled = true
scroll_following = true
-[node name="DMInputRow" type="HBoxContainer" parent="Panel/VBox/DMView" unique_id=433115787]
+[node name="DMInputRow" type="HBoxContainer" parent="DMView/VBox" unique_id=433115787]
layout_mode = 2
-[node name="DMInput" type="LineEdit" parent="Panel/VBox/DMView/DMInputRow" unique_id=533043662]
+[node name="DMInput" type="LineEdit" parent="DMView/VBox/DMInputRow" unique_id=533043662]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "Type a message..."
-[node name="DMSendBtn" type="Button" parent="Panel/VBox/DMView/DMInputRow" unique_id=695010640]
+[node name="DMSendBtn" type="Button" parent="DMView/VBox/DMInputRow" unique_id=695010640]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.3, 0.18, 0.1, 1)
text = "Send"
+
+
diff --git a/scripts/managers/friend_manager.gd b/scripts/managers/friend_manager.gd
index b494ba6..afe0fe9 100644
--- a/scripts/managers/friend_manager.gd
+++ b/scripts/managers/friend_manager.gd
@@ -213,7 +213,7 @@ func get_dm_history(user_id: String, limit: int = 50) -> Array:
var channel = await open_dm(user_id)
if not channel:
return []
- var result = await NakamaManager.client.list_channel_messages_async(NakamaManager.session, channel.id, limit, true)
+ var result = await NakamaManager.client.list_channel_messages_async(NakamaManager.session, channel.id, limit, false)
if result.is_exception():
push_warning("[FriendManager] Failed to fetch DM history: " + result.get_exception().message)
return []
@@ -226,9 +226,9 @@ func get_dm_history(user_id: String, limit: int = 50) -> Array:
text = parsed.get("msg", msg.content)
else:
text = msg.content
- history.append({"from": msg.sender_id, "msg": text, "username": msg.username})
+ history.append({"from": msg.sender_id, "msg": text, "username": msg.username, "create_time": msg.create_time})
- history.reverse() # Oldest to newest
+ history.reverse() # API returns newest-first; flip to oldest-first so display is top=old, bottom=new
return history
func send_dm(user_id: String, message: String) -> bool:
@@ -249,6 +249,10 @@ func _on_channel_message(message) -> void:
# Ignore global chat
if "social_global" in message.channel_id:
return
+
+ # Ignore messages sent by ourselves (we already add them locally instantly)
+ if NakamaManager.session and message.sender_id == NakamaManager.session.user_id:
+ return
var text: String = ""
var parsed = JSON.parse_string(message.content)
diff --git a/scripts/managers/lobby_manager.gd b/scripts/managers/lobby_manager.gd
index d7d1a51..3fe50af 100644
--- a/scripts/managers/lobby_manager.gd
+++ b/scripts/managers/lobby_manager.gd
@@ -157,7 +157,8 @@ func create_room(room_name: String) -> void:
current_room = {
"room_name": room_name,
"host_name": local_player_name,
- "max_players": GameStateManager.max_players
+ "max_players": GameStateManager.max_players,
+ "game_mode": game_mode
}
# Connect to Nakama and create match
@@ -166,7 +167,11 @@ func create_room(room_name: String) -> void:
push_error("Failed to connect to Nakama")
return
- NakamaManager.host_game()
+ NakamaManager.host_game({
+ "host_name": local_player_name,
+ "game_mode": game_mode,
+ "max_players": GameStateManager.max_players
+ })
func join_room(match_id: String) -> void:
"""Client joins an existing room by match ID (Nakama)."""
@@ -201,7 +206,8 @@ func create_room_lan(room_name: String = "LAN Game") -> bool:
"room_name": room_name,
"host_name": local_player_name,
"max_players": GameStateManager.max_players,
- "match_id": "LAN"
+ "match_id": "LAN",
+ "game_mode": game_mode
}
# Add host to player list
@@ -239,7 +245,8 @@ func _broadcast_lan_room(room_name: String):
"host_name": local_player_name,
"player_count": players_in_room.size(),
"max_players": GameStateManager.max_players,
- "match_id": "LAN"
+ "match_id": "LAN",
+ "game_mode": game_mode
}
var msg = "TEKTON_HOST:" + JSON.stringify(room_data)
_udp_peer.set_dest_address("255.255.255.255", LAN_DISCOVERY_PORT)
diff --git a/scripts/managers/mail_manager.gd b/scripts/managers/mail_manager.gd
new file mode 100644
index 0000000..6dc1739
--- /dev/null
+++ b/scripts/managers/mail_manager.gd
@@ -0,0 +1,96 @@
+extends Node
+
+signal mail_updated
+signal unread_count_changed(count: int)
+
+var mails: Array = []
+var claimed_ids: Array = []
+var read_ids: Array = []
+
+var _is_fetching: bool = false
+
+func _ready() -> void:
+ if UserProfileManager:
+ UserProfileManager.profile_loaded.connect(_on_profile_loaded)
+
+func _on_profile_loaded(_profile: Dictionary) -> void:
+ fetch_mails()
+
+func fetch_mails() -> void:
+ if _is_fetching or not NakamaManager.session: return
+ _is_fetching = true
+
+ var r = await NakamaManager.client.rpc_async(NakamaManager.session, "get_mail", "{}")
+ _is_fetching = false
+
+ if r.is_exception():
+ push_error("[MailManager] Failed to fetch mails: " + r.get_exception().message)
+ return
+
+ var payload = JSON.parse_string(r.payload)
+ if payload and payload is Dictionary:
+ mails = payload.get("mails", [])
+ var state = payload.get("state", {})
+ claimed_ids = state.get("claimed_ids", [])
+ read_ids = state.get("read_ids", [])
+
+ # Sort by date descending
+ mails.sort_custom(func(a, b):
+ return a.get("date", "") > b.get("date", "")
+ )
+
+ mail_updated.emit()
+ _update_unread_count()
+
+func _update_unread_count() -> void:
+ var count = 0
+ for m in mails:
+ if m.id not in read_ids:
+ count += 1
+ unread_count_changed.emit(count)
+
+func claim_reward(mail_id: String) -> bool:
+ var r = await NakamaManager.client.rpc_async(NakamaManager.session, "claim_mail_reward", JSON.stringify({"mail_id": mail_id}))
+ if r.is_exception():
+ push_error("[MailManager] Claim failed: " + r.get_exception().message)
+ return false
+
+ var payload = JSON.parse_string(r.payload)
+ if payload and payload.get("success"):
+ claimed_ids = payload.get("claimed_ids", claimed_ids)
+ if mail_id not in read_ids:
+ read_ids.append(mail_id)
+ mail_updated.emit()
+ _update_unread_count()
+
+ # Refresh wallet
+ UserProfileManager.load_profile()
+ return true
+ return false
+
+func delete_mail(mail_id: String) -> bool:
+ var r = await NakamaManager.client.rpc_async(NakamaManager.session, "delete_mail", JSON.stringify({"mail_id": mail_id}))
+ if r.is_exception():
+ push_error("[MailManager] Delete failed: " + r.get_exception().message)
+ return false
+
+ var payload = JSON.parse_string(r.payload)
+ if payload and payload.get("success"):
+ var deleted_ids = payload.get("deleted_ids", [])
+ # Remove from local array
+ for i in range(mails.size() - 1, -1, -1):
+ if mails[i].id in deleted_ids:
+ mails.remove_at(i)
+ if mail_id not in read_ids:
+ read_ids.append(mail_id)
+ mail_updated.emit()
+ _update_unread_count()
+ return true
+ return false
+
+func mark_as_read(mail_id: String) -> void:
+ if mail_id in read_ids: return
+ # Since there's no specific RPC for just marking as read, we can just do a claim with 0 rewards if needed,
+ # or add an RPC for it. For now we just let claim or delete handle the server-side state.
+ # Let's add an empty claim or just handle it purely local until claimed/deleted if it has no rewards.
+ pass
diff --git a/scripts/managers/mail_manager.gd.uid b/scripts/managers/mail_manager.gd.uid
new file mode 100644
index 0000000..c6c2425
--- /dev/null
+++ b/scripts/managers/mail_manager.gd.uid
@@ -0,0 +1 @@
+uid://dx0lbsmcid72r
diff --git a/scripts/nakama_manager.gd b/scripts/nakama_manager.gd
index f06d679..4b2e958 100644
--- a/scripts/nakama_manager.gd
+++ b/scripts/nakama_manager.gd
@@ -116,7 +116,12 @@ func connect_to_nakama_async(email: String = "", password: String = "") -> bool:
socket = Nakama.create_socket_from(client)
var socket_result = await socket.connect_async(session)
- if socket_result.is_exception():
+ if typeof(socket_result) == TYPE_INT:
+ if socket_result != OK:
+ printerr("[NakamaManager] Socket Error (Code: %s)" % socket_result)
+ emit_signal("connection_failed", "Socket connect failed with code " + str(socket_result))
+ return false
+ elif socket_result.is_exception():
var err = socket_result.get_exception()
printerr("[NakamaManager] Socket Error: %s (Code: %s)" % [err.message, err.status_code])
emit_signal("connection_failed", err.message)
@@ -154,6 +159,12 @@ func cleanup():
socket.close()
socket = null
+ # Delete match metadata from storage (best-effort, don't block cleanup)
+ if session and client and not current_match_id.is_empty():
+ client.delete_storage_objects_async(session, [
+ NakamaStorageObjectId.new("match_meta", current_match_id, session.user_id)
+ ])
+
current_match_id = ""
# Reset Godot's multiplayer peer
@@ -164,7 +175,7 @@ func cleanup():
# --- Match Management ---
-func host_game():
+func host_game(room_meta: Dictionary = {}):
if not bridge:
printerr("Cannot host: Bridge not initialized")
return
@@ -172,6 +183,19 @@ func host_game():
var result = await bridge.create_match()
if result and result.is_exception():
emit_signal("match_join_error", result.get_exception().message)
+ return
+ # Store room metadata in Nakama storage so other players can see it in listings
+ if session and current_match_id and room_meta.size() > 0:
+ var meta_json = JSON.stringify(room_meta)
+ var write_obj = NakamaWriteStorageObject.new(
+ "match_meta", current_match_id,
+ 2, 1, meta_json, ""
+ )
+ var wr = await client.write_storage_objects_async(session, [write_obj])
+ if wr.is_exception():
+ push_warning("[NakamaManager] Failed to write match metadata: ", wr.get_exception().message)
+ else:
+ print("[NakamaManager] Match metadata stored for: ", current_match_id)
func join_game(match_id: String):
if not bridge:
@@ -206,8 +230,10 @@ func is_connected_to_nakama() -> bool:
# --- Match Listing ---
-func list_matches_async() -> Array:
- """Query available matches from Nakama server."""
+func list_matches_async(mode_filter: String = "") -> Array:
+ """Query available matches from Nakama server.
+ mode_filter: optional game mode string — used as label query for authoritative matches.
+ For relayed matches this has no server-side effect; filtering is client-side."""
if not client:
push_error("Cannot list matches: Client not initialized")
return []
@@ -216,9 +242,10 @@ func list_matches_async() -> Array:
push_error("Cannot list matches: No valid session")
return []
- print("Querying matches from Nakama server...")
+ print("Querying matches from Nakama server... (filter: '%s')" % mode_filter)
- # Query matches - min 0, max 8 players, limit 20, authoritative=false for relayed matches
+ # Query matches — label filter works for authoritative matches only.
+ # For relayed matches all rooms are returned; game_mode is parsed from label field if present.
var result = await client.list_matches_async(session, 0, 8, 20, false, "", "")
if result.is_exception():
@@ -228,16 +255,53 @@ func list_matches_async() -> Array:
var rooms: Array = []
if result.matches:
print("Found %d matches" % result.matches.size())
+ # Build storage read requests for all matches
+ var read_ids: Array = []
+ for match_data in result.matches:
+ # Try to read metadata stored by each host
+ read_ids.append(match_data.match_id)
+
+ # Batch-read room metadata from Nakama storage
+ var meta_map: Dictionary = {} # match_id -> {host_name, game_mode, ...}
+ if read_ids.size() > 0:
+ var storage_reads: Array = []
+ for mid in read_ids:
+ # We don't know the owner_id, so list objects by collection+key
+ # Use list_storage_objects per match or batch read
+ pass
+ # Read all match metas from our own storage (other users' objects are public read)
+ for mid in read_ids:
+ var list_result = await client.list_storage_objects_async(session, "match_meta", "", 100)
+ if not list_result.is_exception() and list_result.objects:
+ for obj in list_result.objects:
+ var parsed = JSON.parse_string(obj.value)
+ if parsed is Dictionary:
+ meta_map[obj.key] = parsed
+ break # Only need one call — lists all match_meta objects
+
for match_data in result.matches:
print(" Match: ", match_data.match_id, " - Size: ", match_data.size)
- # Use first 8 chars of match ID as room identifier since Nakama doesn't store custom names
var short_id = match_data.match_id.substr(0, 8) if match_data.match_id.length() > 8 else match_data.match_id
+
+ # Get metadata from storage (host_name, game_mode)
+ var meta = meta_map.get(match_data.match_id, {})
+ var host_name = meta.get("host_name", "Unknown")
+ var game_mode = meta.get("game_mode", "")
+ var max_players = int(meta.get("max_players", 8))
+
+ # Fallback: parse game_mode from label if available
+ if game_mode.is_empty():
+ var label: String = match_data.label if match_data.label != null else ""
+ if label.begins_with("[") and "]" in label:
+ game_mode = label.substr(1, label.find("]") - 1)
+
rooms.append({
"match_id": match_data.match_id,
"room_name": short_id,
- "host_name": "Host",
+ "host_name": host_name,
"player_count": match_data.size if match_data.size else 1,
- "max_players": 4
+ "max_players": max_players,
+ "game_mode": game_mode
})
else:
print("No matches found")
diff --git a/scripts/ui/admin_panel.gd b/scripts/ui/admin_panel.gd
index 70d5b45..ebd2ce0 100644
--- a/scripts/ui/admin_panel.gd
+++ b/scripts/ui/admin_panel.gd
@@ -36,6 +36,17 @@ signal closed
var _daily_reward_config_data: Dictionary = {}
var _current_dr_month: String = ""
+# Tab: Announcements
+@onready var target_user_edit := %TargetUserEdit as LineEdit
+@onready var title_edit := %TitleEdit as LineEdit
+@onready var content_edit := %ContentEdit as TextEdit
+@onready var start_date_edit := %StartDatePicker as Button
+@onready var end_date_edit := %EndDatePicker as Button
+@onready var add_reward_btn := %AddRewardBtn as Button
+@onready var rewards_list := %RewardsList as VBoxContainer
+@onready var reward_row_template := %RewardRowTemplate as HBoxContainer
+@onready var send_mail_btn := %SendMailBtn as Button
+
const MONTH_NAMES = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
# -- Data --
@@ -151,6 +162,10 @@ func _connect_signals() -> void:
load_dr_btn.pressed.connect(_load_daily_rewards_config)
save_dr_btn.pressed.connect(_save_daily_rewards_config)
month_option_btn.item_selected.connect(_on_dr_month_selected)
+
+ # Announcement actions
+ send_mail_btn.pressed.connect(_on_send_mail)
+ add_reward_btn.pressed.connect(_on_add_reward_pressed)
# =============================================================================
# Core Panel Logic
@@ -623,3 +638,67 @@ func _save_daily_rewards_config() -> void:
_set_status("Save failed: " + res.get("error"), CLR_STATUS_ERR)
else:
_set_status("Config saved successfully!", CLR_STATUS_OK)
+
+# =============================================================================
+# TAB 4: ANNOUNCEMENTS
+# =============================================================================
+func _on_add_reward_pressed() -> void:
+ var row = reward_row_template.duplicate()
+ row.visible = true
+ rewards_list.add_child(row)
+ var remove_btn = row.get_node("RemoveBtn") as Button
+ remove_btn.pressed.connect(func(): row.queue_free())
+
+func _on_send_mail() -> void:
+ var target = target_user_edit.text.strip_edges()
+ var title = title_edit.text.strip_edges()
+ var content = content_edit.text.strip_edges()
+ var start_date = start_date_edit.get_date_iso()
+ var end_date = end_date_edit.get_date_iso()
+
+ if title.is_empty() or content.is_empty():
+ _set_status("Title and content cannot be empty", CLR_STATUS_ERR)
+ return
+
+ var rewards_arr = []
+ for child in rewards_list.get_children():
+ if not child.visible: continue # skip template
+ var type_opt = child.get_node("TypeOption") as OptionButton
+ var id_edit = child.get_node("IdEdit") as LineEdit
+ var amount_spin = child.get_node("AmountSpin") as SpinBox
+
+ var type_str = type_opt.get_item_text(type_opt.selected)
+ var r_id = id_edit.text.strip_edges()
+ rewards_arr.append({
+ "type": type_str,
+ "id": r_id,
+ "amount": int(amount_spin.value)
+ })
+
+ send_mail_btn.disabled = true
+ _set_status("Sending mail...")
+
+ var payload = {
+ "target_user_id": target,
+ "title": title,
+ "content": content,
+ "start_date": start_date,
+ "end_date": end_date,
+ "rewards": rewards_arr
+ }
+
+ var res = await _rpc("admin_send_mail", payload)
+ send_mail_btn.disabled = false
+
+ if res.has("error"):
+ _set_status("Failed to send mail: " + res.get("error", "Unknown"), CLR_STATUS_ERR)
+ else:
+ _set_status("Mail sent successfully!", CLR_STATUS_OK)
+ title_edit.text = ""
+ content_edit.text = ""
+ if start_date_edit.has_method("clear_date"):
+ start_date_edit.clear_date()
+ if end_date_edit.has_method("clear_date"):
+ end_date_edit.clear_date()
+ for child in rewards_list.get_children():
+ if child.visible: child.queue_free()
diff --git a/scripts/ui/boot_screen.gd b/scripts/ui/boot_screen.gd
index b80488b..9f4f591 100644
--- a/scripts/ui/boot_screen.gd
+++ b/scripts/ui/boot_screen.gd
@@ -6,13 +6,15 @@ extends Control
@onready var progress_bar := %ProgressBar as ProgressBar
@onready var progress_label := %ProgressLabel as Label
@onready var button_container := %ButtonContainer as HBoxContainer
-@onready var update_button := %UpdateButton as Button
-@onready var skip_button := %SkipButton as Button
+@onready var update_button := %UpdateButton as BaseButton
+@onready var update_button_label := %UpdateButton.get_node("Label") as Label
+@onready var skip_button := %SkipButton as BaseButton
+@onready var skip_button_label := %SkipButton.get_node("Label") as Label
@onready var changelog_panel := %ChangelogPanel
@onready var changelog_richtext := %ChangelogRichText as RichTextLabel
-@onready var prev_button := %PrevButton as Button
-@onready var next_button := %NextButton as Button
+@onready var prev_button := %PrevButton as BaseButton
+@onready var next_button := %NextButton as BaseButton
@onready var page_label := %PageLabel as Label
var update_manager: Node
@@ -73,20 +75,20 @@ func _on_update_check_completed(has_update: bool, info: Dictionary) -> void:
button_container.visible = true
update_button.visible = true
skip_button.visible = true
- skip_button.text = "Play without updating"
+ skip_button_label.text = "Play without updating"
else:
status_label.text = "Game up to date."
button_container.visible = true
update_button.visible = false
skip_button.visible = true
- skip_button.text = "Play Game"
+ skip_button_label.text = "Play"
func _on_update_check_failed(_error: String) -> void:
status_label.text = "Could not check for updates"
button_container.visible = true
update_button.visible = false
skip_button.visible = true
- skip_button.text = "Play Offline"
+ skip_button_label.text = "Play"
func _on_update_pressed() -> void:
button_container.visible = false
@@ -114,7 +116,7 @@ func _on_download_failed(error: String) -> void:
progress_bar.visible = false
progress_label.visible = false
button_container.visible = true
- update_button.text = "Retry"
+ update_button_label.text = "Retry"
func _begin_resource_load() -> void:
button_container.visible = false
@@ -156,8 +158,10 @@ func _update_pagination_ui():
var txt: String = "[font_size=20][b]Version " + str(entry.get("version", "Unknown")) + "[/b][/font_size]\n[color=gray]" + str(entry.get("date", "")) + "[/color]\n\n"
var changes: Array = entry.get("changelog", [])
+ txt += "[table=2]"
for change in changes:
- txt += "• " + change + "\n"
+ txt += "[cell]• [/cell][cell]" + change + "[/cell]"
+ txt += "[/table]"
changelog_richtext.text = txt
diff --git a/scripts/ui/date_picker.gd b/scripts/ui/date_picker.gd
new file mode 100644
index 0000000..0fad0bf
--- /dev/null
+++ b/scripts/ui/date_picker.gd
@@ -0,0 +1,97 @@
+extends Button
+
+signal date_selected(date_str: String)
+
+@onready var popup = $PopupPanel
+@onready var month_year_lbl = $PopupPanel/VBox/Header/MonthYearLbl
+@onready var days_grid = $PopupPanel/VBox/DaysGrid
+@onready var prev_btn = $PopupPanel/VBox/Header/PrevBtn
+@onready var next_btn = $PopupPanel/VBox/Header/NextBtn
+@onready var clear_btn = $PopupPanel/VBox/ClearBtn
+
+var current_date: Dictionary
+var view_date: Dictionary
+
+const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+
+func _ready() -> void:
+ var now = Time.get_datetime_dict_from_system()
+ view_date = {"year": now.year, "month": now.month, "day": now.day}
+
+ pressed.connect(_on_button_pressed)
+ prev_btn.pressed.connect(_on_prev_month)
+ next_btn.pressed.connect(_on_next_month)
+ clear_btn.pressed.connect(_on_clear_pressed)
+
+ _update_calendar()
+
+func _on_button_pressed() -> void:
+ _update_calendar()
+ popup.popup_centered()
+
+func _on_prev_month() -> void:
+ view_date.month -= 1
+ if view_date.month < 1:
+ view_date.month = 12
+ view_date.year -= 1
+ _update_calendar()
+
+func _on_next_month() -> void:
+ view_date.month += 1
+ if view_date.month > 12:
+ view_date.month = 1
+ view_date.year += 1
+ _update_calendar()
+
+func _on_clear_pressed() -> void:
+ clear_date()
+
+func clear_date() -> void:
+ current_date = {}
+ text = "Select Date..."
+ emit_signal("date_selected", "")
+ popup.hide()
+
+func _update_calendar() -> void:
+ month_year_lbl.text = str(MONTHS[view_date.month - 1]) + " " + str(view_date.year)
+
+ for child in days_grid.get_children():
+ child.queue_free()
+
+ var first_day_dict = {"year": view_date.year, "month": view_date.month, "day": 1}
+ var first_day_unix = Time.get_unix_time_from_datetime_dict(first_day_dict)
+ var first_day_weekday = Time.get_datetime_dict_from_unix_time(first_day_unix).weekday
+
+ # Godot weekday: 0 = Sunday, 1 = Monday...
+ for i in range(first_day_weekday):
+ var empty = Control.new()
+ days_grid.add_child(empty)
+
+ var days_in_month = _get_days_in_month(view_date.month, view_date.year)
+
+ for d in range(1, days_in_month + 1):
+ var btn = Button.new()
+ btn.text = str(d)
+ btn.custom_minimum_size = Vector2(32, 32)
+ if not current_date.is_empty() and current_date.year == view_date.year and current_date.month == view_date.month and current_date.day == d:
+ btn.add_theme_color_override("font_color", Color.YELLOW)
+ btn.pressed.connect(_on_day_clicked.bind(d))
+ days_grid.add_child(btn)
+
+func _on_day_clicked(day: int) -> void:
+ current_date = {"year": view_date.year, "month": view_date.month, "day": day}
+ var date_str = "%04d-%02d-%02dT00:00:00Z" % [current_date.year, current_date.month, current_date.day]
+ text = "%04d-%02d-%02d" % [current_date.year, current_date.month, current_date.day]
+ emit_signal("date_selected", date_str)
+ popup.hide()
+
+func get_date_iso() -> String:
+ if current_date.is_empty():
+ return ""
+ return "%04d-%02d-%02dT00:00:00Z" % [current_date.year, current_date.month, current_date.day]
+
+func _get_days_in_month(month: int, year: int) -> int:
+ if month in [1, 3, 5, 7, 8, 10, 12]: return 31
+ if month in [4, 6, 9, 11]: return 30
+ if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0): return 29
+ return 28
diff --git a/scripts/ui/date_picker.gd.uid b/scripts/ui/date_picker.gd.uid
new file mode 100644
index 0000000..39ca853
--- /dev/null
+++ b/scripts/ui/date_picker.gd.uid
@@ -0,0 +1 @@
+uid://0rwrfgvuqgrb
diff --git a/scripts/ui/friend_row.gd b/scripts/ui/friend_row.gd
index 87c8945..8ae9206 100644
--- a/scripts/ui/friend_row.gd
+++ b/scripts/ui/friend_row.gd
@@ -1,12 +1,12 @@
-extends HBoxContainer
+extends PanelContainer
## FriendRow — Single row in the friends list inside SocialPanel.
@onready var _name_label: Label = %NameLabel
@onready var _state_label: Label = %StateLabel
-@onready var _dm_btn: Button = %DMBtn
-@onready var _accept_btn: Button = %AcceptBtn
-@onready var _decline_btn: Button = %DeclineBtn
-@onready var _remove_btn: Button = %RemoveBtn
+@onready var _dm_btn: TextureButton = %DMBtn
+@onready var _accept_btn: TextureButton = %AcceptBtn
+@onready var _decline_btn: TextureButton = %DeclineBtn
+@onready var _remove_btn: TextureButton = %RemoveBtn
var _user_id: String
var _username: String
@@ -19,17 +19,49 @@ func setup(uid: String, uname: String, state: int, panel: Control) -> void:
_name_label.text = uname
+ _dm_btn.visible = false
+ _accept_btn.visible = false
+ _decline_btn.visible = false
+ _remove_btn.visible = false
+ _state_label.visible = false
+
match state:
+ -1: # Search result (Not friend)
+ _accept_btn.visible = true
+ if not _accept_btn.pressed.is_connected(_on_accept):
+ _accept_btn.pressed.connect(_on_accept)
FriendManager.STATE_FRIEND:
- _dm_btn.visible = true
+ _state_label.visible = true
+ _dm_btn.visible = true
_remove_btn.visible = true
- _dm_btn.pressed.connect(func(): panel.call("open_dm", uid, uname))
- _remove_btn.pressed.connect(func(): FriendManager.remove_friend(uid))
+ if not _dm_btn.pressed.is_connected(_on_dm):
+ _dm_btn.pressed.connect(_on_dm)
+ if not _remove_btn.pressed.is_connected(_on_remove):
+ _remove_btn.pressed.connect(_on_remove)
FriendManager.STATE_INVITE_OUT:
_state_label.text = "(invite sent)"
_state_label.visible = true
FriendManager.STATE_INVITE_IN:
+ _state_label.text = "Incoming Request"
+ _state_label.visible = true
_accept_btn.visible = true
_decline_btn.visible = true
- _accept_btn.pressed.connect(func(): FriendManager.add_friend_by_id(uid))
- _decline_btn.pressed.connect(func(): FriendManager.remove_friend(uid))
+ if not _accept_btn.pressed.is_connected(_on_accept):
+ _accept_btn.pressed.connect(_on_accept)
+ if not _decline_btn.pressed.is_connected(_on_remove):
+ _decline_btn.pressed.connect(_on_remove)
+
+func _on_dm():
+ _panel.call("open_dm", _user_id, _username)
+
+func _on_remove():
+ FriendManager.remove_friend(_user_id)
+ queue_free()
+
+func _on_accept():
+ FriendManager.add_friend_by_id(_user_id)
+ _accept_btn.visible = false
+ _decline_btn.visible = false
+ _dm_btn.visible = true
+ _remove_btn.visible = true
+ _state_label.text = "LAST ONLINE: Just now"
diff --git a/scripts/ui/login_screen.gd b/scripts/ui/login_screen.gd
index a3130fe..32eead5 100644
--- a/scripts/ui/login_screen.gd
+++ b/scripts/ui/login_screen.gd
@@ -27,6 +27,10 @@ extends Control
@onready var register_button := %RegisterButton as Button
@onready var reg_status_label := %RegStatusLabel as Label
+# Tab navigation buttons (left column)
+@onready var sign_in_tab_btn := %SignInTabBtn as TextureButton
+@onready var sign_up_tab_btn := %SignUpTabBtn as TextureButton
+
var current_captcha_answer: int = 0
var is_loading: bool = false
@@ -87,6 +91,10 @@ func _connect_signals() -> void:
lan_host_btn.pressed.connect(_on_lan_host_pressed)
lan_join_btn.pressed.connect(func(): _on_lan_join_pressed(lan_ip.text))
+ # Tab navigation buttons
+ sign_in_tab_btn.pressed.connect(func(): _switch_tab(0))
+ sign_up_tab_btn.pressed.connect(func(): _switch_tab(1))
+
# Enter key to submit
password_input.text_submitted.connect(func(_t): _on_login_pressed())
reg_confirm_password_input.text_submitted.connect(func(_t): _on_register_pressed())
@@ -95,7 +103,7 @@ func _setup_ui() -> void:
status_label.text = ""
reg_status_label.text = ""
loading_spinner.visible = false
- tab_container.current_tab = 0
+ _switch_tab(0)
# Hide social buttons on platforms where they're not supported
_configure_social_buttons()
@@ -118,6 +126,15 @@ func _configure_social_buttons() -> void:
# Panel Switching
# =============================================================================
+func _switch_tab(tab: int) -> void:
+ tab_container.current_tab = tab
+ _update_tab_visuals(tab)
+ _on_tab_changed(tab)
+
+func _update_tab_visuals(tab: int) -> void:
+ sign_in_tab_btn.button_pressed = (tab == 0)
+ sign_up_tab_btn.button_pressed = (tab == 1)
+
func _on_tab_changed(tab: int) -> void:
if tab == 0:
status_label.text = ""
diff --git a/scripts/ui/mailbox_panel.gd b/scripts/ui/mailbox_panel.gd
new file mode 100644
index 0000000..60369a5
--- /dev/null
+++ b/scripts/ui/mailbox_panel.gd
@@ -0,0 +1,180 @@
+extends Panel
+
+signal closed
+
+@onready var close_btn := %CloseBtn as Button
+@onready var mail_list_vbox := %MailListVBox as VBoxContainer
+@onready var mail_title_lbl := %MailTitleLbl as Label
+@onready var mail_content_text := %MailContentText as RichTextLabel
+@onready var sender_lbl := %SenderLbl as Label
+@onready var dynamic_rewards_container := %DynamicRewardsContainer as HBoxContainer
+@onready var reward_hbox_template := %RewardHBoxTemplate as HBoxContainer
+@onready var action_btn := %ActionBtn as Button
+@onready var empty_state_lbl := %EmptyStateLbl as Label
+
+var _current_mail: Dictionary = {}
+
+func _ready() -> void:
+ visible = false
+ close_btn.pressed.connect(hide_panel)
+ action_btn.pressed.connect(_on_action_pressed)
+ if MailManager:
+ MailManager.mail_updated.connect(_refresh_ui)
+
+func show_panel() -> void:
+ visible = true
+ _clear_details()
+ if MailManager:
+ MailManager.fetch_mails()
+ _refresh_ui()
+
+func hide_panel() -> void:
+ visible = false
+ emit_signal("closed")
+
+func _refresh_ui() -> void:
+ if not visible or not MailManager: return
+
+ for child in mail_list_vbox.get_children():
+ child.queue_free()
+
+ var mails = MailManager.mails
+ if mails.is_empty():
+ empty_state_lbl.visible = true
+ else:
+ empty_state_lbl.visible = false
+ for i in range(mails.size()):
+ var mail = mails[i]
+ var btn = _create_mail_button(mail)
+ mail_list_vbox.add_child(btn)
+ btn.pressed.connect(_on_mail_selected.bind(mail))
+
+ if not _current_mail.is_empty() and _current_mail.get("id") == mail.get("id"):
+ _current_mail = mail
+ _update_details(mail)
+ btn.button_pressed = true
+
+ if _current_mail.is_empty() and mails.size() > 0:
+ _on_mail_selected(mails[0])
+
+@onready var mail_btn_template := %MailBtnTemplate as Button
+
+func _create_mail_button(mail: Dictionary) -> Button:
+ var btn = mail_btn_template.duplicate()
+ btn.visible = true
+
+ var title = btn.get_node("VBox/Title") as Label
+ title.text = mail.get("title", "No Title")
+
+ var date_lbl = btn.get_node("VBox/HBox/DateLbl") as Label
+ var date_str = mail.get("date", "")
+ var expiry_str = mail.get("expiry_date", "")
+
+ var label_text = date_str.substr(0, 10) if date_str.length() >= 10 else date_str
+
+ if not expiry_str.is_empty():
+ var now = Time.get_unix_time_from_system()
+ var expiry_unix = Time.get_unix_time_from_datetime_string(expiry_str)
+ var diff = expiry_unix - now
+ if diff > 0:
+ var days = int(diff / 86400)
+ if days > 0:
+ label_text += " (Exp: %dd)" % days
+ else:
+ label_text += " (Exp: <1d)"
+ else:
+ label_text += " (Expired)"
+
+ date_lbl.text = label_text
+
+ var status_lbl = btn.get_node("VBox/HBox/StatusLbl") as Label
+ var mail_id = mail.get("id", "")
+ if mail_id in MailManager.claimed_ids:
+ status_lbl.text = "CLAIMED"
+ status_lbl.add_theme_color_override("font_color", Color.GREEN)
+ elif mail_id in MailManager.read_ids:
+ status_lbl.text = "READ"
+ status_lbl.add_theme_color_override("font_color", Color.GRAY)
+ else:
+ status_lbl.text = "NEW"
+ status_lbl.add_theme_color_override("font_color", Color.YELLOW)
+
+ return btn
+
+func _on_mail_selected(mail: Dictionary) -> void:
+ for child in mail_list_vbox.get_children():
+ if child is Button:
+ child.button_pressed = false
+
+ _current_mail = mail
+ _update_details(mail)
+ MailManager.mark_as_read(mail.get("id", ""))
+
+func _clear_details() -> void:
+ mail_title_lbl.text = ""
+ mail_content_text.text = ""
+ sender_lbl.text = ""
+ for child in dynamic_rewards_container.get_children():
+ if child.visible: child.queue_free()
+ action_btn.hide()
+
+func _update_details(mail: Dictionary) -> void:
+ mail_title_lbl.text = mail.get("title", "No Title")
+ mail_content_text.text = mail.get("content", "")
+ sender_lbl.text = "SENDER:\n" + mail.get("sender", "SYSTEM")
+
+ for child in dynamic_rewards_container.get_children():
+ if child.visible: child.queue_free()
+
+ var rewards = mail.get("rewards", [])
+ var has_rewards = false
+
+ # Legacy dictionary support
+ if typeof(rewards) == TYPE_DICTIONARY:
+ var arr = []
+ if rewards.get("star", 0) > 0: arr.append({"type": "star", "amount": rewards.star})
+ if rewards.get("gold", 0) > 0: arr.append({"type": "gold", "amount": rewards.gold})
+ rewards = arr
+
+ for r in rewards:
+ has_rewards = true
+ var row = reward_hbox_template.duplicate()
+ row.visible = true
+ dynamic_rewards_container.add_child(row)
+ var amt_lbl = row.get_node("AmountLbl") as Label
+
+ var t = r.get("type", "star")
+ var amt = r.get("amount", 0)
+ var id = r.get("id", "")
+
+ if t == "star" or t == "gold":
+ amt_lbl.text = str(amt) + " " + t.to_upper()
+ else:
+ amt_lbl.text = str(amt) + " " + id
+
+ action_btn.show()
+ var mail_id = mail.get("id", "")
+ if has_rewards and mail_id not in MailManager.claimed_ids:
+ action_btn.text = "CLAIM"
+ action_btn.add_theme_color_override("font_color", Color.WHITE)
+ else:
+ action_btn.text = "DELETE"
+ action_btn.add_theme_color_override("font_color", Color.RED)
+
+func _on_action_pressed() -> void:
+ if _current_mail.is_empty(): return
+ var mail_id = _current_mail.get("id", "")
+
+ if action_btn.text == "CLAIM":
+ action_btn.disabled = true
+ var ok = await MailManager.claim_reward(mail_id)
+ action_btn.disabled = false
+ if ok:
+ _update_details(_current_mail)
+ else:
+ action_btn.disabled = true
+ var ok = await MailManager.delete_mail(mail_id)
+ action_btn.disabled = false
+ if ok:
+ _current_mail = {}
+ _clear_details()
diff --git a/scripts/ui/mailbox_panel.gd.uid b/scripts/ui/mailbox_panel.gd.uid
new file mode 100644
index 0000000..e63a855
--- /dev/null
+++ b/scripts/ui/mailbox_panel.gd.uid
@@ -0,0 +1 @@
+uid://b5fema68m6b2s
diff --git a/scripts/ui/social_panel.gd b/scripts/ui/social_panel.gd
index ac19d8c..19c789a 100644
--- a/scripts/ui/social_panel.gd
+++ b/scripts/ui/social_panel.gd
@@ -9,31 +9,28 @@ signal closed
# Tab buttons
@onready var _search_tab_btn: Button = %SearchTabBtn
-@onready var _requests_tab_btn: Button = %RequestsTabBtn
@onready var _friends_tab_btn: Button = %FriendsTabBtn
-@onready var _dm_tab_btn: Button = %DMTabBtn
+@onready var _dm_tab_btn: Button = get_node_or_null("%DMTabBtn")
+
# Views
@onready var _search_view: VBoxContainer = %SearchView
-@onready var _requests_view: VBoxContainer = %RequestsView
@onready var _friends_view: VBoxContainer = %FriendsView
-@onready var _dm_view: VBoxContainer = %DMView
+@onready var _dm_view: PanelContainer = %DMView
+
# Search tab nodes
@onready var _search_input: LineEdit = %SearchInput
@onready var _search_btn: Button = %SearchBtn
@onready var _no_search_results: Label = %NoSearchResultsLabel
-@onready var _search_results_list: VBoxContainer = %SearchResultsList
-@onready var _search_result_tmpl: HBoxContainer = %SearchResultTemplate
+@onready var _search_results_list: GridContainer = %SearchResultsList
+
+
-# Requests tab nodes
-@onready var _no_requests_label: Label = %NoRequestsLabel
-@onready var _requests_list: VBoxContainer = %RequestsList
-@onready var _request_row_tmpl: HBoxContainer = %RequestRowTemplate
# Friends tab nodes
@onready var _no_friends_label: Label = %NoFriendsLabel
-@onready var _friend_list: VBoxContainer = %FriendList
+@onready var _friend_list: GridContainer = %FriendList
# DM tab nodes
@onready var _dm_back_btn: Button = %DMBackBtn
@@ -53,10 +50,12 @@ func _ready() -> void:
# Tab buttons
_search_tab_btn.pressed.connect(func(): _show_tab("search"))
- _requests_tab_btn.pressed.connect(func(): _show_tab("requests"))
_friends_tab_btn.pressed.connect(func(): _show_tab("friends"))
+ if _dm_tab_btn:
+ _dm_tab_btn.pressed.connect(func(): _show_tab("dm"))
_dm_back_btn.pressed.connect(func(): _show_tab("friends"))
+
# Search
_search_btn.pressed.connect(_on_search_pressed)
_search_input.text_submitted.connect(func(_t): _on_search_pressed())
@@ -81,7 +80,6 @@ func _ready() -> void:
func _show_tab(tab: String) -> void:
_current_tab = tab
_search_view.visible = tab == "search"
- _requests_view.visible = tab == "requests"
_friends_view.visible = tab == "friends"
_dm_view.visible = tab == "dm"
@@ -121,60 +119,26 @@ func _populate_search_results(users: Array) -> void:
_no_search_results.visible = users.is_empty()
var my_id = NakamaManager.session.user_id if NakamaManager.session else ""
+ var friend_row_scene := preload("res://scenes/ui/friend_row.tscn")
for u in users:
if u.user_id == my_id:
continue # skip self
- var row: HBoxContainer = _search_result_tmpl.duplicate()
- row.show()
- row.get_node("SRNameLabel").text = u.display_name + " (@" + u.username + ")"
- var add_btn: Button = row.get_node("SRAddBtn")
- add_btn.pressed.connect(func():
- FriendManager.add_friend_by_id(u.user_id)
- add_btn.text = "Sent ✓"
- add_btn.disabled = true
- )
+ var row: Control = friend_row_scene.instantiate()
_search_results_list.add_child(row)
+ row.setup(u.user_id, u.username, -1, self)
-# ─── Requests Tab ────────────────────────────────────────────────────────────
-func _populate_requests(incoming: Array) -> void:
- for ch in _requests_list.get_children():
- ch.queue_free()
- _no_requests_label.visible = incoming.is_empty()
-
- for f in incoming:
- var row: HBoxContainer = _request_row_tmpl.duplicate()
- row.show()
- row.get_node("RRNameLabel").text = f.username
- var accept_btn: Button = row.get_node("RRAcceptBtn")
- var decline_btn: Button = row.get_node("RRDeclineBtn")
- var uid: String = f.user_id
- accept_btn.pressed.connect(func():
- FriendManager.add_friend_by_id(uid)
- row.queue_free()
- )
- decline_btn.pressed.connect(func():
- FriendManager.remove_friend(uid)
- row.queue_free()
- )
- _requests_list.add_child(row)
-
- # Badge on tab button
- if incoming.is_empty():
- _requests_tab_btn.text = "Requests"
- else:
- _requests_tab_btn.text = "Requests (%d)" % incoming.size()
# ─── Friends Tab ─────────────────────────────────────────────────────────────
-func _populate_friends(mutual: Array) -> void:
+func _populate_friends(friends_array: Array) -> void:
for ch in _friend_list.get_children():
ch.queue_free()
- _no_friends_label.visible = mutual.is_empty()
+ _no_friends_label.visible = friends_array.is_empty()
var friend_row_scene := preload("res://scenes/ui/friend_row.tscn")
- for f in mutual:
+ for f in friends_array:
var row: Control = friend_row_scene.instantiate()
_friend_list.add_child(row)
row.setup(f.user_id, f.username, f.state, self)
@@ -182,35 +146,24 @@ func _populate_friends(mutual: Array) -> void:
# ─── FriendManager Callbacks ─────────────────────────────────────────────────
func _on_friends_updated(friends: Array) -> void:
print("[SocialPanel] _on_friends_updated: total=%d" % friends.size())
- var incoming := friends.filter(func(f): return f.state == FriendManager.STATE_INVITE_IN)
- var mutual := friends.filter(func(f): return f.state == FriendManager.STATE_FRIEND)
- print("[SocialPanel] incoming=%d mutual=%d" % [incoming.size(), mutual.size()])
- _populate_requests(incoming)
- _populate_friends(mutual)
+
+ # Pass both incoming and mutual friends to the friends list
+ var display_list := friends.filter(func(f): return f.state == FriendManager.STATE_INVITE_IN or f.state == FriendManager.STATE_FRIEND)
+
+ # Also update the badge on the Friends tab if there are incoming requests
+ var incoming_count = friends.filter(func(f): return f.state == FriendManager.STATE_INVITE_IN).size()
+ if incoming_count > 0:
+ _friends_tab_btn.text = "FRIENDS (%d)" % incoming_count
+ else:
+ _friends_tab_btn.text = "FRIENDS"
+
+ _populate_friends(display_list)
+
+signal dm_requested(user_id: String, username: String)
# ─── DM ──────────────────────────────────────────────────────────────────────
func open_dm(user_id: String, username: String) -> void:
- _active_dm_user_id = user_id
- _dm_username_label.text = "DM: %s" % username
- _dm_tab_btn.visible = true
- _dm_log.clear()
- _show_tab("dm")
-
- _dm_log.append_text("[i]Loading history...[/i]\n")
- var history = await FriendManager.get_dm_history(user_id)
-
- _dm_log.clear()
- _dm_history[user_id] = []
-
- var my_id = NakamaManager.session.user_id if NakamaManager.session else ""
-
- for entry in history:
- var is_self = entry.get("from") == my_id
- var sender_name = "You" if is_self else username
- _dm_history[user_id].append({"from": "me" if is_self else entry.get("from"), "msg": entry.get("msg")})
- _dm_log.append_text("[b]%s:[/b] %s\n" % [sender_name, entry.get("msg", "")])
-
- FriendManager.open_dm(user_id)
+ emit_signal("dm_requested", user_id, username)
func _send_dm() -> void:
var text = _dm_input.text.strip_edges()
diff --git a/server/nakama/tekton_admin.js b/server/nakama/tekton_admin.js
index 61e399b..cc67b2a 100644
--- a/server/nakama/tekton_admin.js
+++ b/server/nakama/tekton_admin.js
@@ -19,6 +19,7 @@ function InitModule(ctx, logger, nk, initializer) {
initializer.registerRpc("admin_list_users", rpcAdminListUsers);
initializer.registerRpc("admin_delete_users", rpcAdminDeleteUsers);
initializer.registerRpc("admin_topup_gold", rpcAdminTopupGold);
+ initializer.registerRpc("admin_clear_global_chat", rpcAdminClearGlobalChat);
// User management RPCs
initializer.registerRpc("get_user_profile", rpcGetUserProfile);
@@ -49,6 +50,12 @@ function InitModule(ctx, logger, nk, initializer) {
initializer.registerRpc("set_daily_reward_config", rpcSetDailyRewardConfig);
initializer.registerRpc("get_daily_reward_config_admin", rpcGetDailyRewardConfigAdmin);
+ // Inbox System RPCs
+ initializer.registerRpc("admin_send_mail", rpcAdminSendMail);
+ initializer.registerRpc("get_mail", rpcGetMail);
+ initializer.registerRpc("claim_mail_reward", rpcClaimMailReward);
+ initializer.registerRpc("delete_mail", rpcDeleteMail);
+
// Steam auth hooks
initializer.registerAfterAuthenticateSteam(afterAuthenticateSteam);
@@ -531,6 +538,53 @@ function rpcAdminTopupGold(ctx, logger, nk, payload) {
}
}
+// =============================================================================
+// Admin Clear Global Chat RPC
+// =============================================================================
+
+function rpcAdminClearGlobalChat(ctx, logger, nk, payload) {
+ requireAdmin(ctx, nk);
+
+ // Nakama's channel message list uses the channel ID, not the room name.
+ // We need to find the channel ID for "social_global" Room type.
+ // Room channel IDs are deterministic: we can list messages by cursor.
+ var req = JSON.parse(payload || "{}");
+ var channelId = req.channel_id || "";
+
+ if (!channelId) {
+ throw new Error("channel_id is required. Pass the channel ID from the client.");
+ }
+
+ var deleted = 0;
+ var cursor = "";
+
+ try {
+ // Paginate through all messages and remove each one
+ do {
+ var result = nk.channelMessagesList(channelId, 100, false, cursor);
+ var messages = result.messages || [];
+
+ for (var i = 0; i < messages.length; i++) {
+ try {
+ nk.channelMessageRemove(channelId, messages[i].messageId);
+ deleted++;
+ } catch (e2) {
+ logger.warn("Failed to remove message " + messages[i].messageId + ": " + e2);
+ }
+ }
+
+ cursor = result.nextCursor || "";
+ } while (cursor !== "");
+
+ logger.info("[AdminClearGlobalChat] Deleted " + deleted + " messages by " + ctx.userId);
+ return JSON.stringify({ success: true, deleted: deleted });
+ } catch (e) {
+ logger.error("admin_clear_global_chat failed: " + e);
+ throw new Error("Failed to clear global chat: " + e);
+ }
+}
+
+
function rpcBuyCurrency(ctx, logger, nk, payload) {
if (!ctx.userId) throw new Error("Not authenticated");
@@ -1384,3 +1438,277 @@ function rpcSendLobbyInvite(ctx, logger, nk, payload) {
logger.info("Lobby invite sent from " + ctx.userId + " to " + toUserId + " for match " + matchId);
return JSON.stringify({ success: true });
}
+
+// =============================================================================
+// Inbox System RPCs
+// =============================================================================
+
+function rpcAdminSendMail(ctx, logger, nk, payload) {
+ requireAdmin(ctx, nk);
+ var request = JSON.parse(payload || "{}");
+
+ var nowStr = new Date().toISOString();
+ var startDate = request.start_date || nowStr;
+ var endDate = request.end_date || "";
+
+ // Auto-delete / expire after 30 days from start
+ var startObj = new Date(startDate);
+ startObj.setDate(startObj.getDate() + 30);
+ var expiryDate = startObj.toISOString();
+
+ var mailObj = {
+ id: nk.uuidv4(),
+ title: request.title || "Announcement",
+ content: request.content || "",
+ sender: "TEKTON DEV TEAM",
+ date: startDate,
+ start_date: startDate,
+ end_date: endDate,
+ expiry_date: expiryDate,
+ rewards: request.rewards || []
+ };
+
+ if (request.target_user_id) {
+ mailObj.type = "personal";
+ var invObjs = nk.storageRead([{ collection: "inbox", key: "personal", userId: request.target_user_id }]);
+ var personalMails = [];
+ if (invObjs && invObjs.length > 0) {
+ personalMails = invObjs[0].value.mails || [];
+ }
+ personalMails.push(mailObj);
+ nk.storageWrite([{
+ collection: "inbox",
+ key: "personal",
+ userId: request.target_user_id,
+ value: { mails: personalMails },
+ permissionRead: 1,
+ permissionWrite: 0
+ }]);
+ logger.info("Personal mail sent to " + request.target_user_id);
+ } else {
+ mailObj.type = "global";
+ var globalObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]);
+ var globalMails = [];
+ if (globalObjs && globalObjs.length > 0) {
+ globalMails = globalObjs[0].value.mails || [];
+ }
+ globalMails.push(mailObj);
+ nk.storageWrite([{
+ collection: "config",
+ key: "global_mail",
+ userId: "00000000-0000-0000-0000-000000000000",
+ value: { mails: globalMails },
+ permissionRead: 2,
+ permissionWrite: 0
+ }]);
+ logger.info("Global mail sent");
+ }
+
+ return JSON.stringify({ success: true, mail: mailObj });
+}
+
+function rpcGetMail(ctx, logger, nk, payload) {
+ if (!ctx.userId) throw new Error("Not authenticated");
+
+ var personalObjs = nk.storageRead([{ collection: "inbox", key: "personal", userId: ctx.userId }]);
+ var globalObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]);
+ var stateObjs = nk.storageRead([{ collection: "inbox", key: "state", userId: ctx.userId }]);
+
+ var personalMails = (personalObjs && personalObjs.length > 0) ? (personalObjs[0].value.mails || []) : [];
+ var globalMails = (globalObjs && globalObjs.length > 0) ? (globalObjs[0].value.mails || []) : [];
+
+ var state = { claimed_ids: [], deleted_ids: [], read_ids: [] };
+ if (stateObjs && stateObjs.length > 0) {
+ var val = stateObjs[0].value;
+ state.claimed_ids = val.claimed_ids || [];
+ state.deleted_ids = val.deleted_ids || [];
+ state.read_ids = val.read_ids || [];
+ }
+
+ var allMails = personalMails.concat(globalMails);
+ var filteredMails = [];
+ var nowStr = new Date().toISOString();
+
+ for (var i = 0; i < allMails.length; i++) {
+ var mail = allMails[i];
+ if (state.deleted_ids.indexOf(mail.id) !== -1) continue;
+
+ // Expiry check
+ if (mail.expiry_date && nowStr > mail.expiry_date) {
+ continue;
+ }
+
+ // Scheduled start
+ if (mail.start_date && nowStr < mail.start_date) {
+ continue;
+ }
+
+ // Scheduled end
+ if (mail.type === "global" && mail.end_date && nowStr > mail.end_date) {
+ continue;
+ }
+
+ filteredMails.push(mail);
+ }
+
+ return JSON.stringify({ mails: filteredMails, state: state });
+}
+
+function rpcClaimMailReward(ctx, logger, nk, payload) {
+ if (!ctx.userId) throw new Error("Not authenticated");
+ var request = JSON.parse(payload || "{}");
+ var mailId = request.mail_id;
+ if (!mailId) throw new Error("mail_id required");
+
+ // fetch all mails to find it
+ var personalObjs = nk.storageRead([{ collection: "inbox", key: "personal", userId: ctx.userId }]);
+ var globalObjs = nk.storageRead([{ collection: "config", key: "global_mail", userId: "00000000-0000-0000-0000-000000000000" }]);
+ var stateObjs = nk.storageRead([{ collection: "inbox", key: "state", userId: ctx.userId }]);
+
+ var state = { claimed_ids: [], deleted_ids: [], read_ids: [] };
+ if (stateObjs && stateObjs.length > 0) {
+ var val = stateObjs[0].value;
+ state.claimed_ids = val.claimed_ids || [];
+ state.deleted_ids = val.deleted_ids || [];
+ state.read_ids = val.read_ids || [];
+ }
+
+ if (state.claimed_ids.indexOf(mailId) !== -1) {
+ throw new Error("Reward already claimed");
+ }
+
+ var personalMails = (personalObjs && personalObjs.length > 0) ? (personalObjs[0].value.mails || []) : [];
+ var globalMails = (globalObjs && globalObjs.length > 0) ? (globalObjs[0].value.mails || []) : [];
+ var allMails = personalMails.concat(globalMails);
+
+ var targetMail = null;
+ for (var i = 0; i < allMails.length; i++) {
+ if (allMails[i].id === mailId) {
+ targetMail = allMails[i];
+ break;
+ }
+ }
+
+ if (!targetMail) throw new Error("Mail not found");
+
+ var rewards = targetMail.rewards || [];
+ var starTotal = 0;
+ var goldTotal = 0;
+
+ // Support legacy dictionary if it exists
+ if (!Array.isArray(rewards)) {
+ starTotal = rewards.star || 0;
+ goldTotal = rewards.gold || 0;
+ rewards = []; // prevent array loop
+ }
+
+ var fragsToUpdate = {};
+ var skinsToAdd = [];
+
+ for (var j = 0; j < rewards.length; j++) {
+ var r = rewards[j];
+ var type = r.type || "star";
+ var amount = r.amount || 0;
+
+ if (type === "star") starTotal += amount;
+ else if (type === "gold") goldTotal += amount;
+ else if (type.startsWith("frag_") || type === "item") {
+ var fragId = r.id || type;
+ fragsToUpdate[fragId] = (fragsToUpdate[fragId] || 0) + amount;
+ }
+ else if (type === "skin") {
+ if (r.id) skinsToAdd.push(r.id);
+ }
+ }
+
+ if (starTotal > 0 || goldTotal > 0) {
+ var changes = {};
+ if (starTotal > 0) changes["star"] = starTotal;
+ if (goldTotal > 0) changes["gold"] = goldTotal;
+ nk.walletUpdate(ctx.userId, changes, {}, true);
+ }
+
+ if (Object.keys(fragsToUpdate).length > 0) {
+ var invObjs = nk.storageRead([{ collection: "inventory", key: "fragments", userId: ctx.userId }]);
+ var frags = {};
+ if (invObjs && invObjs.length > 0) {
+ frags = invObjs[0].value;
+ }
+ for (var fId in fragsToUpdate) {
+ frags[fId] = (frags[fId] || 0) + fragsToUpdate[fId];
+ }
+ nk.storageWrite([{
+ collection: "inventory",
+ key: "fragments",
+ userId: ctx.userId,
+ value: frags,
+ permissionRead: 1,
+ permissionWrite: 0
+ }]);
+ }
+
+ if (skinsToAdd.length > 0) {
+ var skinWrites = [];
+ for (var s = 0; s < skinsToAdd.length; s++) {
+ skinWrites.push({
+ collection: "inventory",
+ key: skinsToAdd[s],
+ userId: ctx.userId,
+ value: { acquired_via: "mail", purchased_at: new Date().toISOString() },
+ permissionRead: 1,
+ permissionWrite: 0
+ });
+ }
+ nk.storageWrite(skinWrites);
+ }
+
+ state.claimed_ids.push(mailId);
+ if (state.read_ids.indexOf(mailId) === -1) {
+ state.read_ids.push(mailId);
+ }
+
+ nk.storageWrite([{
+ collection: "inbox",
+ key: "state",
+ userId: ctx.userId,
+ value: state,
+ permissionRead: 1,
+ permissionWrite: 0
+ }]);
+
+ return JSON.stringify({ success: true, claimed_ids: state.claimed_ids });
+}
+
+function rpcDeleteMail(ctx, logger, nk, payload) {
+ if (!ctx.userId) throw new Error("Not authenticated");
+ var request = JSON.parse(payload || "{}");
+ var mailId = request.mail_id;
+ if (!mailId) throw new Error("mail_id required");
+
+ var stateObjs = nk.storageRead([{ collection: "inbox", key: "state", userId: ctx.userId }]);
+ var state = { claimed_ids: [], deleted_ids: [], read_ids: [] };
+ if (stateObjs && stateObjs.length > 0) {
+ var val = stateObjs[0].value;
+ state.claimed_ids = val.claimed_ids || [];
+ state.deleted_ids = val.deleted_ids || [];
+ state.read_ids = val.read_ids || [];
+ }
+
+ if (state.deleted_ids.indexOf(mailId) === -1) {
+ state.deleted_ids.push(mailId);
+ }
+ if (state.read_ids.indexOf(mailId) === -1) {
+ state.read_ids.push(mailId);
+ }
+
+ nk.storageWrite([{
+ collection: "inbox",
+ key: "state",
+ userId: ctx.userId,
+ value: state,
+ permissionRead: 1,
+ permissionWrite: 0
+ }]);
+
+ return JSON.stringify({ success: true, deleted_ids: state.deleted_ids });
+}