diff --git a/manifest.json b/manifest.json
index e5440c2..d0ebbda 100644
--- a/manifest.json
+++ b/manifest.json
@@ -6,5 +6,55 @@
"description": "Game core",
"sources": [
"src/*.cs"
+ ],
+ "ui": [
+ {
+ "id": "map",
+ "kind": "panel",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/ui/map_widget.tscn",
+ "button": { "icon": "map", "locale": "ui/map/title", "index": 10 },
+ "priority": 10
+ },
+ {
+ "id": "inventory",
+ "kind": "panel",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/ui/inventory_panel.tscn",
+ "button": { "icon": "bag", "locale": "ui/inventory/title", "index": 20 },
+ "priority": 10
+ },
+ {
+ "id": "characters",
+ "kind": "panel",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/ui/character_panel/character_panel.tscn",
+ "button": { "icon": "cards", "locale": "ui/character_panel/title", "index": 30 },
+ "priority": 10
+ },
+ {
+ "id": "skills",
+ "kind": "panel",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/ui/skills_panel/skills_panel.tscn",
+ "button": { "icon": "skills", "locale": "ui/skills/title", "index": 40 },
+ "priority": 10
+ },
+ {
+ "id": "game_menu",
+ "kind": "panel",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/menu/game_menu.tscn",
+ "button": { "icon": "settings", "locale": "menu/settings", "index": 50 },
+ "priority": 10
+ },
+ {
+ "id": "journal",
+ "kind": "panel",
+ "slot": "ModBeforeUIPanel",
+ "scene_path": "scenes/ui/quest_journal.tscn",
+ "button": { "icon": "journal", "locale": "ui/journal/title", "index": 60 },
+ "priority": 10
+ }
]
}
diff --git a/scenes/menu/game_menu.tscn b/scenes/menu/game_menu.tscn
new file mode 100644
index 0000000..cb4ab7e
--- /dev/null
+++ b/scenes/menu/game_menu.tscn
@@ -0,0 +1,86 @@
+[gd_scene load_steps=2 format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Menu/GameMenu.cs" id="GameMenuScript"]
+
+[node name="GameMenu" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("GameMenuScript")
+
+[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, 0, 0, 0.65)
+
+[node name="Panel" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -200.0
+offset_top = -220.0
+offset_right = 200.0
+offset_bottom = 220.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Margin" type="MarginContainer" parent="Panel"]
+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 = 28
+theme_override_constants/margin_top = 20
+theme_override_constants/margin_right = 28
+theme_override_constants/margin_bottom = 20
+
+[node name="VBox" type="VBoxContainer" parent="Panel/Margin"]
+layout_mode = 2
+theme_override_constants/separation = 10
+
+[node name="Title" type="Label" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Меню"
+horizontal_alignment = 1
+theme_override_font_sizes/font_size = 22
+
+[node name="ReturnBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Вернуться"
+
+[node name="SaveBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Сохранить"
+
+[node name="LoadBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Загрузить"
+
+[node name="SettingsBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Настройки"
+
+[node name="Spacer" type="Control" parent="Panel/Margin/VBox"]
+layout_mode = 2
+custom_minimum_size = Vector2(0, 16)
+
+[node name="MainMenuBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Главное меню"
+
+[node name="ExitBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Выход"
diff --git a/scenes/menu/mods_menu.tscn b/scenes/menu/mods_menu.tscn
new file mode 100644
index 0000000..5f9a82a
--- /dev/null
+++ b/scenes/menu/mods_menu.tscn
@@ -0,0 +1,165 @@
+[gd_scene format=3 uid="uid://hl0j46kh1rmc"]
+
+[ext_resource type="Script" uid="uid://dq5snl02fmi16" path="res://Core/UI/Menu/ModsMenu.cs" id="ModsMenuScript"]
+
+[node name="ModsMenu" type="Control" unique_id=2105177378]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("ModsMenuScript")
+
+[node name="Bg" type="ColorRect" parent="." unique_id=950831612]
+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.98039216)
+
+[node name="Panel" type="Panel" parent="." unique_id=664458435]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.1
+anchor_top = 0.15
+anchor_right = 0.9
+anchor_bottom = 0.85
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Margin" type="MarginContainer" parent="Panel" unique_id=1196300517]
+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 = 28
+theme_override_constants/margin_top = 20
+theme_override_constants/margin_right = 28
+theme_override_constants/margin_bottom = 20
+
+[node name="VBox" type="VBoxContainer" parent="Panel/Margin" unique_id=937529024]
+layout_mode = 2
+theme_override_constants/separation = 14
+
+[node name="Title" type="Label" parent="Panel/Margin/VBox" unique_id=6175375]
+layout_mode = 2
+theme_override_font_sizes/font_size = 26
+text = "Mods"
+horizontal_alignment = 1
+
+[node name="HBox" type="HBoxContainer" parent="Panel/Margin/VBox" unique_id=1102798166]
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/separation = 0
+
+[node name="LeftPanel" type="VBoxContainer" parent="Panel/Margin/VBox/HBox" unique_id=581222858]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 2.0
+
+[node name="FilterDisabledCheck" type="CheckButton" parent="Panel/Margin/VBox/HBox/LeftPanel" unique_id=1745806104]
+layout_mode = 2
+button_pressed = true
+text = "Показать отключённые"
+
+[node name="ResetOrderBtn" type="Button" parent="Panel/Margin/VBox/HBox/LeftPanel" unique_id=1745806105]
+layout_mode = 2
+text = "Сбросить порядок"
+
+[node name="Scroll" type="ScrollContainer" parent="Panel/Margin/VBox/HBox/LeftPanel" unique_id=1745806103]
+layout_mode = 2
+size_flags_vertical = 3
+horizontal_scroll_mode = 0
+
+[node name="ModList" type="VBoxContainer" parent="Panel/Margin/VBox/HBox/LeftPanel/Scroll" unique_id=1970879274]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/separation = 2
+
+[node name="RightPanel" type="Control" parent="Panel/Margin/VBox/HBox" unique_id=1554774704]
+clip_contents = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 3.0
+
+[node name="Margin" type="MarginContainer" parent="Panel/Margin/VBox/HBox/RightPanel" unique_id=1241124709]
+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 = 16
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 0
+theme_override_constants/margin_bottom = 0
+
+[node name="DetailVBox" type="VBoxContainer" parent="Panel/Margin/VBox/HBox/RightPanel/Margin" unique_id=231694438]
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="Icon" type="TextureRect" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=1418987891]
+custom_minimum_size = Vector2(128, 128)
+layout_mode = 2
+expand_mode = 1
+stretch_mode = 5
+
+[node name="NameLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=567148075]
+custom_minimum_size = Vector2(1, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 18
+autowrap_mode = 3
+
+[node name="StatusLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=673006819]
+custom_minimum_size = Vector2(1, 0)
+layout_mode = 2
+autowrap_mode = 3
+
+[node name="VersionLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=2102288160]
+custom_minimum_size = Vector2(1, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 13
+autowrap_mode = 3
+
+[node name="AuthorLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=1135622511]
+custom_minimum_size = Vector2(1, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 13
+autowrap_mode = 3
+
+[node name="HSep" type="HSeparator" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=772722202]
+layout_mode = 2
+
+[node name="DescLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=270929917]
+custom_minimum_size = Vector2(120, 70)
+layout_mode = 2
+theme_override_font_sizes/font_size = 13
+autowrap_mode = 3
+
+[node name="DependsLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=1148832840]
+custom_minimum_size = Vector2(1, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 13
+autowrap_mode = 3
+
+[node name="UsedByLabel" type="Label" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=1295125493]
+custom_minimum_size = Vector2(1, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 13
+autowrap_mode = 3
+
+[node name="ToggleBtn" type="Button" parent="Panel/Margin/VBox/HBox/RightPanel/Margin/DetailVBox" unique_id=904879993]
+layout_mode = 2
+size_flags_horizontal = 8
+text = "Toggle"
+
+[node name="BackBtn" type="Button" parent="Panel/Margin/VBox" unique_id=1161869583]
+layout_mode = 2
+size_flags_horizontal = 8
+text = "Back"
diff --git a/scenes/menu/save_load_menu.tscn b/scenes/menu/save_load_menu.tscn
new file mode 100644
index 0000000..20cbf21
--- /dev/null
+++ b/scenes/menu/save_load_menu.tscn
@@ -0,0 +1,71 @@
+[gd_scene load_steps=3 format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Menu/SaveLoadMenu.cs" id="SaveLoadMenuScript"]
+[ext_resource type="Script" path="res://Core/UI/Menu/SaveSlotList.cs" id="SaveSlotListScript"]
+
+[node name="SaveLoadMenu" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("SaveLoadMenuScript")
+
+[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, 0, 0, 0.65)
+
+[node name="Panel" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -420.0
+offset_top = -280.0
+offset_right = 420.0
+offset_bottom = 280.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Margin" type="MarginContainer" parent="Panel"]
+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 = 28
+theme_override_constants/margin_top = 20
+theme_override_constants/margin_right = 28
+theme_override_constants/margin_bottom = 20
+
+[node name="VBox" type="VBoxContainer" parent="Panel/Margin"]
+layout_mode = 2
+theme_override_constants/separation = 14
+
+[node name="Title" type="Label" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Save/Load"
+horizontal_alignment = 1
+theme_override_font_sizes/font_size = 24
+
+[node name="SlotGrid" type="Control" parent="Panel/Margin/VBox"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+custom_minimum_size = Vector2(0, 380)
+script = ExtResource("SaveSlotListScript")
+
+[node name="BackBtn" type="Button" parent="Panel/Margin/VBox"]
+layout_mode = 2
+text = "Back"
+size_flags_horizontal = 8
diff --git a/scenes/menu/save_slot_item.tscn b/scenes/menu/save_slot_item.tscn
new file mode 100644
index 0000000..5bf950e
--- /dev/null
+++ b/scenes/menu/save_slot_item.tscn
@@ -0,0 +1,89 @@
+[gd_scene format=3 uid="uid://c6kll6en347h1"]
+
+[ext_resource type="Script" uid="uid://bkpfth5x606ge" path="res://Core/UI/Menu/SaveSlotItem.cs" id="SaveSlotItemScript"]
+
+[node name="SaveSlotItem" type="Control" unique_id=2135443384]
+custom_minimum_size = Vector2(120, 120)
+layout_mode = 3
+anchors_preset = 0
+script = ExtResource("SaveSlotItemScript")
+
+[node name="Background" type="ColorRect" parent="." unique_id=255218239]
+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.12, 0.12, 0.9)
+
+[node name="ScreenshotRect" type="TextureRect" parent="." unique_id=1290008068]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+anchor_bottom = 0.55
+grow_horizontal = 2
+grow_vertical = 2
+expand_mode = 1
+stretch_mode = 5
+
+[node name="DateLabel" type="Label" parent="." unique_id=408317888]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.02
+anchor_top = 0.57
+anchor_right = 0.98
+anchor_bottom = 0.68
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 12
+
+[node name="SceneLabel" type="Label" parent="." unique_id=1968956898]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.02
+anchor_top = 0.70
+anchor_right = 0.98
+anchor_bottom = 0.80
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 11
+
+[node name="TimeLabel" type="Label" parent="." unique_id=698436659]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.02
+anchor_top = 0.83
+anchor_right = 0.56
+anchor_bottom = 0.95
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 10
+
+[node name="StatsLabel" type="Label" parent="." unique_id=400000001]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.58
+anchor_top = 0.83
+anchor_right = 0.98
+anchor_bottom = 0.95
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 10
+horizontal_alignment = 2
+
+[node name="EmptyLabel" type="Label" parent="." unique_id=1262712091]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_font_sizes/font_size = 14
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="SlotButton" type="Button" parent="." unique_id=1877010914]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+flat = true
diff --git a/scenes/menu/save_slot_item.tscn.uid b/scenes/menu/save_slot_item.tscn.uid
new file mode 100644
index 0000000..2abf731
--- /dev/null
+++ b/scenes/menu/save_slot_item.tscn.uid
@@ -0,0 +1 @@
+uid://c6kll6en347h1
\ No newline at end of file
diff --git a/scenes/menu/settings_menu.tscn b/scenes/menu/settings_menu.tscn
new file mode 100644
index 0000000..2554e30
--- /dev/null
+++ b/scenes/menu/settings_menu.tscn
@@ -0,0 +1,370 @@
+[gd_scene format=3 uid="uid://gqdtni3liast"]
+
+[ext_resource type="Script" uid="uid://bjgxbheqsar5r" path="res://Core/UI/Menu/SettingsMenu.cs" id="SettingsMenuScript"]
+
+[node name="SettingsMenu" type="Control" unique_id=894644832]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("SettingsMenuScript")
+
+[node name="Bg" type="ColorRect" parent="." unique_id=21945756]
+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, 1)
+
+[node name="Panel" type="Panel" parent="." unique_id=1554260654]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.1
+anchor_top = 0.1
+anchor_right = 0.9
+anchor_bottom = 0.9
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Margin" type="MarginContainer" parent="Panel" unique_id=1929120286]
+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 = 28
+theme_override_constants/margin_top = 20
+theme_override_constants/margin_right = 28
+theme_override_constants/margin_bottom = 20
+
+[node name="VBox" type="VBoxContainer" parent="Panel/Margin" unique_id=150548585]
+layout_mode = 2
+theme_override_constants/separation = 14
+
+[node name="Title" type="Label" parent="Panel/Margin/VBox" unique_id=86160906]
+layout_mode = 2
+theme_override_font_sizes/font_size = 26
+text = "Settings"
+horizontal_alignment = 1
+
+[node name="Tabs" type="TabContainer" parent="Panel/Margin/VBox" unique_id=1524671125]
+layout_mode = 2
+size_flags_vertical = 3
+tab_alignment = 1
+current_tab = 0
+
+[node name="GeneralMargin" type="MarginContainer" parent="Panel/Margin/VBox/Tabs"]
+layout_mode = 2
+metadata/_tab_index = 0
+theme_override_constants/margin_left = 16
+theme_override_constants/margin_top = 12
+theme_override_constants/margin_right = 16
+theme_override_constants/margin_bottom = 12
+
+[node name="General" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/GeneralMargin" unique_id=2028800899]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="Spacer" type="Control" parent="Panel/Margin/VBox/Tabs/GeneralMargin/General" unique_id=1203872148]
+custom_minimum_size = Vector2(0, 12)
+layout_mode = 2
+
+[node name="LangBox" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/GeneralMargin/General" unique_id=684741721]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="LangLabel" type="Label" parent="Panel/Margin/VBox/Tabs/GeneralMargin/General/LangBox" unique_id=1707108944]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Language"
+
+[node name="LangSelect" type="OptionButton" parent="Panel/Margin/VBox/Tabs/GeneralMargin/General/LangBox" unique_id=2037857401]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="AudioMargin" type="MarginContainer" parent="Panel/Margin/VBox/Tabs"]
+layout_mode = 2
+visible = false
+metadata/_tab_index = 1
+theme_override_constants/margin_left = 16
+theme_override_constants/margin_top = 12
+theme_override_constants/margin_right = 16
+theme_override_constants/margin_bottom = 12
+
+[node name="Audio" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin" unique_id=564523157]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="SoundsBox" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio" unique_id=508426867]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="ToggleRow" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox" unique_id=274422939]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="SoundsLabel" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox/ToggleRow" unique_id=1483011032]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Sounds"
+
+[node name="SoundsToggle" type="CheckButton" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox/ToggleRow" unique_id=126270437]
+layout_mode = 2
+
+[node name="VolumeRow" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox" unique_id=585263148]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="SoundsVolumeLabel" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox/VolumeRow" unique_id=1327120426]
+layout_mode = 2
+text = "Volume"
+
+[node name="SoundsVolume" type="HSlider" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox/VolumeRow" unique_id=2061615116]
+layout_mode = 2
+size_flags_horizontal = 3
+value = 100.0
+
+[node name="SoundsVolumeValue" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/SoundsBox/VolumeRow" unique_id=1079108664]
+custom_minimum_size = Vector2(48, 0)
+layout_mode = 2
+text = "100%"
+horizontal_alignment = 2
+
+[node name="Sep" type="HSeparator" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio" unique_id=988886928]
+custom_minimum_size = Vector2(0, 8)
+layout_mode = 2
+
+[node name="MusicBox" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio" unique_id=1316259016]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="ToggleRow2" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox" unique_id=553618696]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="MusicLabel" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox/ToggleRow2" unique_id=1559600377]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Music"
+
+[node name="MusicToggle" type="CheckButton" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox/ToggleRow2" unique_id=901979875]
+layout_mode = 2
+
+[node name="VolumeRow2" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox" unique_id=1411284591]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="MusicVolumeLabel" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox/VolumeRow2" unique_id=1952498749]
+layout_mode = 2
+text = "Volume"
+
+[node name="MusicVolume" type="HSlider" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox/VolumeRow2" unique_id=504218348]
+layout_mode = 2
+size_flags_horizontal = 3
+value = 5.0
+
+[node name="MusicVolumeValue" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/MusicBox/VolumeRow2" unique_id=1866810087]
+custom_minimum_size = Vector2(48, 0)
+layout_mode = 2
+text = "5%"
+horizontal_alignment = 2
+
+[node name="Sep2" type="HSeparator" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio" unique_id=1486966851]
+custom_minimum_size = Vector2(0, 8)
+layout_mode = 2
+
+[node name="AmbientBox" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio" unique_id=127969403]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="ToggleRow3" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox" unique_id=338401886]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="AmbientLabel" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox/ToggleRow3" unique_id=872436692]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Ambient"
+
+[node name="AmbientToggle" type="CheckButton" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox/ToggleRow3" unique_id=1160929014]
+layout_mode = 2
+
+[node name="VolumeRow3" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox" unique_id=1139865718]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="AmbientVolumeLabel" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox/VolumeRow3" unique_id=1610793395]
+layout_mode = 2
+text = "Volume"
+
+[node name="AmbientVolume" type="HSlider" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox/VolumeRow3" unique_id=1343104331]
+layout_mode = 2
+size_flags_horizontal = 3
+value = 5.0
+
+[node name="AmbientVolumeValue" type="Label" parent="Panel/Margin/VBox/Tabs/AudioMargin/Audio/AmbientBox/VolumeRow3" unique_id=1909728919]
+custom_minimum_size = Vector2(48, 0)
+layout_mode = 2
+text = "5%"
+horizontal_alignment = 2
+
+[node name="DisplayMargin" type="MarginContainer" parent="Panel/Margin/VBox/Tabs"]
+layout_mode = 2
+visible = false
+metadata/_tab_index = 2
+theme_override_constants/margin_left = 16
+theme_override_constants/margin_top = 12
+theme_override_constants/margin_right = 16
+theme_override_constants/margin_bottom = 12
+
+[node name="Display" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/DisplayMargin" unique_id=1371435162]
+layout_mode = 2
+theme_override_constants/separation = 10
+
+[node name="Spacer2" type="Control" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display" unique_id=270871165]
+custom_minimum_size = Vector2(0, 12)
+layout_mode = 2
+
+[node name="ModeBox" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display" unique_id=455596205]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="ModeLabel" type="Label" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/ModeBox" unique_id=1346202262]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Window Mode"
+
+[node name="ModeSelect" type="OptionButton" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/ModeBox" unique_id=631713497]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="ResBox" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display" unique_id=603217917]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="ResLabel" type="Label" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/ResBox" unique_id=1714673968]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Resolution"
+
+[node name="ResSelect" type="OptionButton" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/ResBox" unique_id=651322592]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="MonitorBox" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display" unique_id=284981749]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="MonitorLabel" type="Label" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/MonitorBox" unique_id=1905911340]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Monitor"
+
+[node name="MonitorSelect" type="OptionButton" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/MonitorBox" unique_id=1334336966]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="ScaleBox" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display" unique_id=930383631]
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="ScaleLabel" type="Label" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/ScaleBox" unique_id=1924008447]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Scale"
+
+[node name="ScaleSelect" type="OptionButton" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/ScaleBox" unique_id=2096132155]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="VSyncRow" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display" unique_id=348516587]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="VSyncLabel" type="Label" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/VSyncRow" unique_id=1204827790]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "VSync"
+
+[node name="VSyncToggle" type="CheckButton" parent="Panel/Margin/VBox/Tabs/DisplayMargin/Display/VSyncRow" unique_id=1909935663]
+layout_mode = 2
+
+[node name="ModSettingsMargin" type="MarginContainer" parent="Panel/Margin/VBox/Tabs"]
+layout_mode = 2
+visible = false
+metadata/_tab_index = 3
+theme_override_constants/margin_left = 16
+theme_override_constants/margin_top = 12
+theme_override_constants/margin_right = 16
+theme_override_constants/margin_bottom = 12
+
+[node name="ModSettings" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin" unique_id=2038671463]
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/separation = 12
+
+[node name="LeftPanel" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings" unique_id=1856089080]
+custom_minimum_size = Vector2(240, 0)
+layout_mode = 2
+theme_override_constants/separation = 6
+
+[node name="ModsTitle" type="Label" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/LeftPanel" unique_id=1639725410]
+layout_mode = 2
+theme_override_font_sizes/font_size = 15
+text = "Mods"
+horizontal_alignment = 1
+
+[node name="ModScroll" type="ScrollContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/LeftPanel" unique_id=1412822434]
+layout_mode = 2
+size_flags_vertical = 3
+horizontal_scroll_mode = 0
+
+[node name="ModList" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/LeftPanel/ModScroll" unique_id=543902025]
+layout_mode = 2
+
+[node name="Sep" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings" unique_id=950619413]
+custom_minimum_size = Vector2(10, 0)
+layout_mode = 2
+
+[node name="RightPanel" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings" unique_id=272738827]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/separation = 8
+
+[node name="TopBar" type="HBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/RightPanel" unique_id=678746437]
+layout_mode = 2
+theme_override_constants/separation = 12
+
+[node name="SelectedModName" type="Label" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/RightPanel/TopBar" unique_id=393931159]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 16
+
+[node name="ResetBtn" type="Button" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/RightPanel/TopBar" unique_id=531057889]
+layout_mode = 2
+text = "Reset"
+
+[node name="SettingsScroll" type="ScrollContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/RightPanel" unique_id=674333894]
+layout_mode = 2
+size_flags_vertical = 3
+horizontal_scroll_mode = 0
+
+[node name="SettingsContainer" type="VBoxContainer" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/RightPanel/SettingsScroll" unique_id=1664189823]
+layout_mode = 2
+theme_override_constants/separation = 6
+
+[node name="Placeholder" type="Label" parent="Panel/Margin/VBox/Tabs/ModSettingsMargin/ModSettings/RightPanel/SettingsScroll/SettingsContainer" unique_id=1501445323]
+layout_mode = 2
+text = "No mod settings available"
+horizontal_alignment = 1
+
+[node name="BackBtn" type="Button" parent="Panel/Margin/VBox" unique_id=249196016]
+layout_mode = 2
+size_flags_horizontal = 8
+text = "Back"
diff --git a/scenes/ui/answer_box.tscn b/scenes/ui/answer_box.tscn
new file mode 100644
index 0000000..b233c82
--- /dev/null
+++ b/scenes/ui/answer_box.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=2 format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Dialog/AnswerBox.cs" id="1_answerbox"]
+[ext_resource type="PackedScene" path="res://scenes/ui/answer_item.tscn" id="2_answeritem"]
+
+[node name="AnswerBox" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_answerbox")
+itemScene = ExtResource("2_answeritem")
+content = NodePath("Content")
+
+[node name="Content" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchor_left = 0.6
+anchor_top = 0.35
+anchor_right = 0.95
+anchor_bottom = 0.65
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+alignment = 1
diff --git a/scenes/ui/answer_item.tscn b/scenes/ui/answer_item.tscn
new file mode 100644
index 0000000..5dcaf11
--- /dev/null
+++ b/scenes/ui/answer_item.tscn
@@ -0,0 +1,30 @@
+[gd_scene format=3 uid="uid://bv80qy227xxee"]
+
+[ext_resource type="Script" uid="uid://dbrnsck0vtfb3" path="res://Core/UI/Dialog/AnswerItem.cs" id="1_answeritem"]
+
+[node name="AnswerItem" type="Control" unique_id=1180917887]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 3
+anchors_preset = 0
+size_flags_horizontal = 3
+size_flags_vertical = 0
+script = ExtResource("1_answeritem")
+
+[node name="Button" type="Button" parent="." unique_id=2087954476]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="TextLabel" type="Label" parent="Button" unique_id=1302827224]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_font_sizes/font_size = 22
+horizontal_alignment = 1
+vertical_alignment = 1
diff --git a/scenes/ui/answer_item.tscn.uid b/scenes/ui/answer_item.tscn.uid
new file mode 100644
index 0000000..316f0d9
--- /dev/null
+++ b/scenes/ui/answer_item.tscn.uid
@@ -0,0 +1 @@
+uid://bv80qy227xxee
\ No newline at end of file
diff --git a/scenes/ui/character_panel/action_card.tscn b/scenes/ui/character_panel/action_card.tscn
new file mode 100644
index 0000000..185bd96
--- /dev/null
+++ b/scenes/ui/character_panel/action_card.tscn
@@ -0,0 +1,41 @@
+[gd_scene format=3 uid="uid://bb36m1yaqwt8k"]
+
+[ext_resource type="Script" uid="uid://de8plnw63lfno" path="res://Core/UI/CharacterPanel/ActionCardBehaviour.cs" id="1_script"]
+
+[node name="ActionCard" type="Control" unique_id=576160337]
+custom_minimum_size = Vector2(300, 100)
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
+
+[node name="Icon" type="TextureRect" parent="." unique_id=910618115]
+custom_minimum_size = Vector2(50, 100)
+layout_mode = 1
+anchors_preset = -1
+anchor_top = 0.5
+anchor_bottom = 0.5
+offset_left = 4.0
+offset_top = -14.0
+offset_right = 32.0
+offset_bottom = 14.0
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="NameLabel" type="Label" parent="." unique_id=1356044091]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 110.0
+offset_right = -4.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Action"
+vertical_alignment = 1
diff --git a/scenes/ui/character_panel/action_pool.tscn b/scenes/ui/character_panel/action_pool.tscn
new file mode 100644
index 0000000..72733b2
--- /dev/null
+++ b/scenes/ui/character_panel/action_pool.tscn
@@ -0,0 +1,18 @@
+[gd_scene format=3 uid="uid://cgjc22lv4w4s5"]
+
+[ext_resource type="Script" uid="uid://cwois2ld152sn" path="res://Core/UI/CharacterPanel/ActionPoolBehaviour.cs" id="1_script"]
+
+[node name="ActionPool" type="Control" unique_id=1854115493]
+layout_mode = 3
+anchors_preset = 0
+mouse_filter = 1
+script = ExtResource("1_script")
+
+[node name="Container" type="VBoxContainer" parent="." unique_id=1312152261]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 4
diff --git a/scenes/ui/character_panel/action_slot.tscn b/scenes/ui/character_panel/action_slot.tscn
new file mode 100644
index 0000000..a2d8a2d
--- /dev/null
+++ b/scenes/ui/character_panel/action_slot.tscn
@@ -0,0 +1,24 @@
+[gd_scene format=3 uid="uid://b00u0cgcip134"]
+
+[ext_resource type="Script" uid="uid://bfawx4g6dyrjo" path="res://Core/UI/CharacterPanel/ActionSlotBehaviour.cs" id="1_script"]
+
+[node name="ActionSlot" type="Control" unique_id=1066231859]
+custom_minimum_size = Vector2(300, 100)
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
+
+[node name="Bg" type="ColorRect" parent="." unique_id=1234999814]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(0.1, 0.1, 0.15, 0.5)
diff --git a/scenes/ui/character_panel/character_card.tscn b/scenes/ui/character_panel/character_card.tscn
new file mode 100644
index 0000000..bb59bf5
--- /dev/null
+++ b/scenes/ui/character_panel/character_card.tscn
@@ -0,0 +1,56 @@
+[gd_scene format=3 uid="uid://67q36mh0x454"]
+
+[ext_resource type="Script" uid="uid://dkioyb2bx5e10" path="res://Core/UI/CharacterPanel/CharacterCardBehaviour.cs" id="1_script"]
+[ext_resource type="PackedScene" uid="uid://b00u0cgcip134" path="res://scenes/ui/character_panel/action_slot.tscn" id="2_slot"]
+
+[node name="CharacterCard" type="Control" unique_id=161727493]
+custom_minimum_size = Vector2(250, 370)
+layout_mode = 3
+anchors_preset = 10
+anchor_right = 1.0
+grow_horizontal = 2
+mouse_filter = 1
+script = ExtResource("1_script")
+
+[node name="Margin" type="MarginContainer" parent="." unique_id=540453317]
+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_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+
+[node name="VBox" type="VBoxContainer" parent="Margin" unique_id=1477867509]
+layout_mode = 2
+theme_override_constants/separation = 6
+
+[node name="Header" type="HBoxContainer" parent="Margin/VBox" unique_id=410961700]
+layout_mode = 2
+
+[node name="Portrait" type="TextureRect" parent="Margin/VBox/Header" unique_id=427546847]
+custom_minimum_size = Vector2(60, 60)
+layout_mode = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="NameLabel" type="Label" parent="Margin/VBox/Header" unique_id=604539797]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Character Name"
+
+[node name="Slots" type="VBoxContainer" parent="Margin/VBox" unique_id=2066648023]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="Slot0" parent="Margin/VBox/Slots" unique_id=592809057 instance=ExtResource("2_slot")]
+layout_mode = 2
+
+[node name="Slot1" parent="Margin/VBox/Slots" unique_id=424670098 instance=ExtResource("2_slot")]
+layout_mode = 2
+
+[node name="Slot2" parent="Margin/VBox/Slots" unique_id=1790943736 instance=ExtResource("2_slot")]
+layout_mode = 2
diff --git a/scenes/ui/character_panel/character_panel.tscn b/scenes/ui/character_panel/character_panel.tscn
new file mode 100644
index 0000000..ecc861f
--- /dev/null
+++ b/scenes/ui/character_panel/character_panel.tscn
@@ -0,0 +1,120 @@
+[gd_scene format=3 uid="uid://boo65s3v3vn2c"]
+
+[ext_resource type="Script" uid="uid://b60voxni8jut4" path="res://Core/UI/CharacterPanel/CharacterPanelBehaviour.cs" id="1_script"]
+[ext_resource type="PackedScene" uid="uid://cgjc22lv4w4s5" path="res://scenes/ui/character_panel/action_pool.tscn" id="2_pool"]
+
+[node name="CharacterPanel" type="Control" unique_id=2003172289]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
+
+[node name="Bg" type="ColorRect" parent="." unique_id=538790315]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(0.05, 0.05, 0.1, 0.9)
+
+[node name="LeftPanel" type="Panel" parent="." unique_id=582936654]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 0.68700004
+anchor_bottom = 1.0
+offset_right = 0.95996094
+size_flags_horizontal = 3
+
+[node name="LeftVBox" type="VBoxContainer" parent="LeftPanel" unique_id=927965975]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Title" type="Label" parent="LeftPanel/LeftVBox" unique_id=1322979441]
+layout_mode = 2
+theme_override_font_sizes/font_size = 18
+text = "ui/character_panel/title"
+horizontal_alignment = 1
+
+[node name="ScrollContainer" type="ScrollContainer" parent="LeftPanel/LeftVBox" unique_id=649910277]
+layout_mode = 2
+size_flags_vertical = 3
+horizontal_scroll_mode = 0
+
+[node name="CharactersContainer" type="VBoxContainer" parent="LeftPanel/LeftVBox/ScrollContainer" unique_id=15539617]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/separation = 10
+
+[node name="RightPanel" type="Panel" parent="." unique_id=94541911]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.69500005
+anchor_right = 1.0
+anchor_bottom = 0.91800004
+offset_left = 0.5998535
+offset_bottom = -0.032043457
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+
+[node name="ActionPoolScroll" type="ScrollContainer" parent="RightPanel" unique_id=1837472944]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+horizontal_scroll_mode = 0
+
+[node name="ActionPool" parent="RightPanel/ActionPoolScroll" unique_id=2092045870 instance=ExtResource("2_pool")]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="CloseButton" type="Button" parent="." unique_id=140259217]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.697
+anchor_top = 0.94100004
+anchor_right = 0.85
+anchor_bottom = 0.9850001
+offset_left = -0.23999023
+offset_top = 0.4159546
+offset_bottom = 0.35992432
+grow_horizontal = 0
+grow_vertical = 0
+text = "ui/character_panel/close"
+
+[node name="ResetButton" type="Button" parent="." unique_id=73911922]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.855
+anchor_top = 0.94100004
+anchor_right = 0.99300003
+anchor_bottom = 0.9850001
+offset_left = 0.39990234
+offset_top = 0.4159546
+offset_right = 0.4399414
+offset_bottom = 0.35992432
+grow_horizontal = 0
+grow_vertical = 0
+text = "ui/character_panel/reset"
+
+[node name="DragLayer" type="Control" parent="." unique_id=1296303852]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
diff --git a/scenes/ui/dialog_box.tscn b/scenes/ui/dialog_box.tscn
new file mode 100644
index 0000000..f5778da
--- /dev/null
+++ b/scenes/ui/dialog_box.tscn
@@ -0,0 +1,107 @@
+[gd_scene format=3 uid="uid://b8vnxfoixyust"]
+
+[ext_resource type="Script" uid="uid://b41bti3wq4m88" path="res://Core/UI/Dialog/DialogBox.cs" id="1_dialogbox"]
+[ext_resource type="PackedScene" path="res://scenes/ui/answer_box.tscn" id="2_answerbox"]
+
+[node name="DialogBox" type="Control" unique_id=702809053 node_paths=PackedStringArray("textField", "titleField", "titleBody", "firstAvatar", "secondAvatar")]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_dialogbox")
+answerBoxScene = ExtResource("2_answerbox")
+textField = NodePath("DialogBody/TextField")
+titleField = NodePath("TitleBody/TitleField")
+titleBody = NodePath("TitleBody")
+firstAvatar = NodePath("FirstAvatar")
+secondAvatar = NodePath("SecondAvatar")
+
+[node name="DialogBody" type="ColorRect" parent="." unique_id=1510369637]
+layout_mode = 1
+anchors_preset = 12
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_top = -300.0
+grow_horizontal = 2
+grow_vertical = 0
+color = Color(0, 0, 0, 0.85)
+
+[node name="TextField" type="Label" parent="DialogBody" unique_id=2065569930]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 20.0
+offset_top = 10.0
+offset_right = -20.0
+offset_bottom = -10.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_font_sizes/font_size = 24
+vertical_alignment = 1
+autowrap_mode = 2
+
+[node name="FirstAvatar" type="TextureRect" parent="." unique_id=1696535122]
+visible = false
+texture_filter = 1
+layout_mode = 1
+anchors_preset = -1
+anchor_top = 0.6
+anchor_right = 0.13
+anchor_bottom = 1.0
+offset_left = 90.0
+offset_top = -300.0
+offset_right = 90.0
+offset_bottom = -300.0
+grow_horizontal = 0
+grow_vertical = 0
+expand_mode = 1
+stretch_mode = 4
+
+[node name="SecondAvatar" type="TextureRect" parent="." unique_id=1913233391]
+visible = false
+texture_filter = 1
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.87
+anchor_top = 0.6
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -90.0
+offset_top = -300.0
+offset_right = -90.0
+offset_bottom = -300.0
+grow_horizontal = 0
+grow_vertical = 0
+expand_mode = 1
+stretch_mode = 4
+
+[node name="TitleBody" type="Control" parent="." unique_id=1986161675]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -400.0
+offset_top = -60.0
+offset_right = 400.0
+offset_bottom = 60.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="TitleField" type="Label" parent="TitleBody" unique_id=2046072321]
+visible = false
+layout_mode = 1
+anchors_preset = -1
+anchor_left = -0.5
+anchor_right = 1.5
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_font_sizes/font_size = 28
+horizontal_alignment = 1
+vertical_alignment = 1
diff --git a/scenes/ui/dialog_box.tscn.uid b/scenes/ui/dialog_box.tscn.uid
new file mode 100644
index 0000000..1e43ecd
--- /dev/null
+++ b/scenes/ui/dialog_box.tscn.uid
@@ -0,0 +1 @@
+uid://b8vnxfoixyust
\ No newline at end of file
diff --git a/scenes/ui/inventory_item.tscn b/scenes/ui/inventory_item.tscn
new file mode 100644
index 0000000..ace76c5
--- /dev/null
+++ b/scenes/ui/inventory_item.tscn
@@ -0,0 +1,38 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Inventory/InventoryItemBehaviour.cs" id="1"]
+
+[node name="InventoryItem" type="Control" node_paths=PackedStringArray("imgIcon", "txtCount")]
+layout_mode = 3
+anchors_preset = 0
+size_flags_horizontal = 3
+size_flags_vertical = 3
+script = ExtResource("1")
+imgIcon = NodePath("imgIcon")
+txtCount = NodePath("txtCount")
+
+[node name="imgIcon" type="TextureRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+expand_mode = 1
+stretch_mode = 4
+mouse_filter = 2
+
+[node name="txtCount" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.6
+anchor_top = 0.7
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 0
+grow_vertical = 0
+theme_override_font_sizes/font_size = 14
+horizontal_alignment = 2
+vertical_alignment = 1
+mouse_filter = 2
+text = ""
diff --git a/scenes/ui/inventory_panel.tscn b/scenes/ui/inventory_panel.tscn
new file mode 100644
index 0000000..9a4e63a
--- /dev/null
+++ b/scenes/ui/inventory_panel.tscn
@@ -0,0 +1,13 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Inventory/InventoryPanelBehaviour.cs" id="1_script"]
+
+[node name="InventoryPanel" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
diff --git a/scenes/ui/map_widget.tscn b/scenes/ui/map_widget.tscn
new file mode 100644
index 0000000..a8e7819
--- /dev/null
+++ b/scenes/ui/map_widget.tscn
@@ -0,0 +1,13 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" uid="uid://djf3cf86eikq5" path="res://Core/UI/Tool/MapWidget.cs" id="1_script"]
+
+[node name="MapWidget" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
diff --git a/scenes/ui/message.tscn b/scenes/ui/message.tscn
new file mode 100644
index 0000000..d32331f
--- /dev/null
+++ b/scenes/ui/message.tscn
@@ -0,0 +1,17 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Messages/UiMessage.cs" id="1_msg"]
+
+[node name="Message" type="Control" node_paths=PackedStringArray("textField")]
+layout_mode = 3
+anchors_preset = 0
+script = ExtResource("1_msg")
+textField = NodePath("Label")
+
+[node name="Label" type="Label" parent="."]
+layout_mode = 0
+offset_left = 0.0
+offset_top = 0.0
+offset_right = 0.0
+offset_bottom = 0.0
+text = ""
diff --git a/scenes/ui/quest_journal.tscn b/scenes/ui/quest_journal.tscn
new file mode 100644
index 0000000..5e702f3
--- /dev/null
+++ b/scenes/ui/quest_journal.tscn
@@ -0,0 +1,13 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="res://Core/UI/Quests/QuestJournalBehaviour.cs" id="1_script"]
+
+[node name="QuestJournal" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
diff --git a/scenes/ui/skills_panel/skill_card.tscn b/scenes/ui/skills_panel/skill_card.tscn
new file mode 100644
index 0000000..15dd22f
--- /dev/null
+++ b/scenes/ui/skills_panel/skill_card.tscn
@@ -0,0 +1,69 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="res://Core/Skills/SkillCardBehaviour.cs" id="1_script"]
+[ext_resource type="Script" path="res://Core/Skills/SkillCardFrameBehaviour.cs" id="2_frame_script"]
+
+[node name="SkillCard" type="Control"]
+custom_minimum_size = Vector2(160, 210)
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
+frame = NodePath("Frame")
+txtName = NodePath("TxtName")
+imgCard = NodePath("ImgCard")
+
+[node name="Frame" type="Control" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("2_frame_script")
+img = NodePath("FrameImg")
+
+[node name="FrameImg" type="TextureRect" parent="Frame"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 3
+stretch_mode = 5
+
+[node name="ImgCard" type="TextureRect" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.08
+anchor_top = 0.05
+anchor_right = 0.92
+anchor_bottom = 0.75
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="TxtName" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.05
+anchor_top = 0.78
+anchor_right = 0.95
+anchor_bottom = 0.98
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+theme_override_font_sizes/font_size = 12
+text = ""
+horizontal_alignment = 1
+vertical_alignment = 1
+autowrap_mode = 1
diff --git a/scenes/ui/skills_panel/skills_panel.tscn b/scenes/ui/skills_panel/skills_panel.tscn
new file mode 100644
index 0000000..9756c85
--- /dev/null
+++ b/scenes/ui/skills_panel/skills_panel.tscn
@@ -0,0 +1,159 @@
+[gd_scene format=3]
+
+[ext_resource type="Script" path="res://Core/UI/SkillsPanel/SkillsPanelBehaviour.cs" id="1_script"]
+
+[node name="SkillsPanel" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+script = ExtResource("1_script")
+
+[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
+mouse_filter = 2
+color = Color(0.05, 0.05, 0.1, 0.9)
+
+[node name="Title" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+offset_left = 20.0
+offset_top = 10.0
+offset_right = -20.0
+offset_bottom = 40.0
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 22
+text = "Skills"
+horizontal_alignment = 1
+
+[node name="ScrollContainer" type="ScrollContainer" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 20.0
+offset_top = 50.0
+offset_right = -20.0
+offset_bottom = -60.0
+grow_horizontal = 2
+grow_vertical = 2
+horizontal_scroll_mode = 0
+
+[node name="GridContent" type="Control" parent="ScrollContainer"]
+layout_mode = 2
+mouse_filter = 2
+
+[node name="ClosePanel" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.85
+anchor_top = 0.94
+anchor_right = 0.99
+anchor_bottom = 0.99
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="CloseButton" type="Button" parent="ClosePanel"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Close"
+
+[node name="ExpandedOverlay" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+
+[node name="ExpandedBg" type="ColorRect" parent="ExpandedOverlay"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(0, 0, 0, 0.9)
+
+[node name="ExpandedFrameImg" type="TextureRect" parent="ExpandedOverlay"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.1
+anchor_top = 0.1
+anchor_right = 0.9
+anchor_bottom = 0.9
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 3
+stretch_mode = 5
+
+[node name="ExpandedImage" type="TextureRect" parent="ExpandedOverlay"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.15
+anchor_top = 0.15
+anchor_right = 0.85
+anchor_bottom = 0.85
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="ExpandedName" type="Label" parent="ExpandedOverlay"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.15
+anchor_bottom = 1.0
+offset_top = -40.0
+offset_right = -20.0
+offset_bottom = -14.0
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 20
+text = ""
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="DescriptionBg" type="ColorRect" parent="ExpandedOverlay"]
+layout_mode = 1
+anchors_preset = -1
+anchor_top = 0.75
+anchor_right = 0.35
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 1
+color = Color(0.05, 0.05, 0.1, 0.85)
+
+[node name="DescriptionLabel" type="RichTextLabel" parent="ExpandedOverlay/DescriptionBg"]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 12.0
+offset_top = 12.0
+offset_right = -12.0
+offset_bottom = -12.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+bbcode_enabled = true
+fit_content = true
+scroll_active = false
diff --git a/src/StarterPartyInitializer.cs b/src/StarterPartyInitializer.cs
index f891d67..c84ad08 100644
--- a/src/StarterPartyInitializer.cs
+++ b/src/StarterPartyInitializer.cs
@@ -1,3 +1,4 @@
+using Cthangover.Core.Events;
using Cthangover.Core.Mods;
using Cthangover.Core.Settings;
@@ -28,6 +29,8 @@ namespace Cthangover.Core.Characters
///
public class StarterPartyInitializer : IModInitializer
{
+ private static bool newGameHookInstalled;
+
///
/// No-op: cross-mod lifecycle notifications are not needed for
/// starter party setup. Each mod's OnModResourcesReady
@@ -40,9 +43,23 @@ namespace Cthangover.Core.Characters
/// to both Characters and BattleSet via
/// CharacterData.AddCharacterToParty. Called once, after
/// all mod file providers and JSON resources are guaranteed to
- /// be accessible.
+ /// be accessible. Also installs the one-time
+ /// hook so the starter party is
+ /// restored after ResetRuntime wipes it at the start of a
+ /// new game. Both operations are idempotent.
///
public void OnModResourcesReady()
+ {
+ SeedStarterParty();
+
+ if (newGameHookInstalled)
+ return;
+
+ newGameHookInstalled = true;
+ ModEventBus.Subscribe(_ => SeedStarterParty());
+ }
+
+ private static void SeedStarterParty()
{
GameData.Instance.Runtime.CharacterData.AddCharacterToParty("Marao");
GameData.Instance.Runtime.SkillData.AddSkill("slave_master");
diff --git a/wrappers/default.wrappertmpl b/wrappers/default.wrappertmpl
deleted file mode 100644
index 5528ed5..0000000
--- a/wrappers/default.wrappertmpl
+++ /dev/null
@@ -1,30 +0,0 @@
-using Godot;
-using System;
-using System.Linq;
-using System.Collections.Generic;
-
-public static class SceneBuilderScript
-{
- private static Node _root;
-
- public static T Get(string name) where T : Node
- {
- return _root.GetNode(name);
- }
-
- public static Node Get(string name)
- {
- return _root.GetNode(name);
- }
-
- public static T FindNode(string nodeName) where T : Node
- {
- return Cthangover.Core.Scenes.SceneContextNode.FindNode(nodeName);
- }
-
- public static void Run(Node root)
- {
- _root = root;
- {{USER_CODE}}
- }
-}