feat: expand progression and multiplayer systems

Add named save slots, progression import/export, and a unified play flow. Add live friend requests, presence, invitations, and relationship controls without durable discovery-server social storage. Advance the network protocol with isolated channels, movement reconciliation, late-join recovery, fishing replication, and animation synchronization. Preserve per-species catch totals, refine generated-world startup and water recovery, and complete the related input and interface improvements.
This commit is contained in:
Alexander Sellite 2026-08-23 20:48:38 -04:00
parent 1db1a5b754
commit 3b84bfe3a0
97 changed files with 7869 additions and 982 deletions

View file

@ -177,6 +177,17 @@ func get_active_bindings() -> Dictionary:
return _default_bindings.duplicate(true)
func get_binding(role: StringName) -> Dictionary:
var binding: Variant = get_active_bindings().get(str(role), {})
if typeof(binding) != TYPE_DICTIONARY:
return {}
return (binding as Dictionary).duplicate(true)
func get_binding_label(role: StringName) -> String:
return binding_label(get_binding(role))
func get_role_label(role: StringName) -> String:
return str(ROLE_LABELS.get(role, str(role).replace("_", " ")))

View file

@ -32,6 +32,7 @@ const UI_COMPACT_RENDER_HEIGHTS: Array[int] = [0, 408, 336, 264, 192]
@export_range(0.001, 0.012, 0.0005) var mouse_camera_sensitivity: float = 0.005
@export_range(0.5, 5.0, 0.1) var controller_camera_sensitivity: float = 2.5
@export var invert_camera_y: bool = false
@export var swap_hotbar_camera_scroll: bool = false
@export var on_screen_keyboard_enabled: bool = false
@export var chat_draft: String = ""
@export var chat_collapsed: bool = false
@ -79,6 +80,7 @@ func copy() -> PlayerSettings:
result.mouse_camera_sensitivity = mouse_camera_sensitivity
result.controller_camera_sensitivity = controller_camera_sensitivity
result.invert_camera_y = invert_camera_y
result.swap_hotbar_camera_scroll = swap_hotbar_camera_scroll
result.on_screen_keyboard_enabled = on_screen_keyboard_enabled
result.chat_draft = chat_draft
result.chat_collapsed = chat_collapsed

View file

@ -54,6 +54,10 @@ func load_settings() -> bool:
if (
typeof(accessibility.get("auto_click_enabled")) != TYPE_BOOL
or typeof(camera.get("invert_vertical")) != TYPE_BOOL
or (
camera.has("swap_hotbar_camera_scroll")
and typeof(camera["swap_hotbar_camera_scroll"]) != TYPE_BOOL
)
or (
accessibility.has("on_screen_keyboard_enabled")
and typeof(accessibility["on_screen_keyboard_enabled"]) != TYPE_BOOL
@ -109,6 +113,9 @@ func load_settings() -> bool:
-1.0
)
loaded.invert_camera_y = camera["invert_vertical"]
loaded.swap_hotbar_camera_scroll = bool(
camera.get("swap_hotbar_camera_scroll", false)
)
loaded.on_screen_keyboard_enabled = bool(
accessibility.get("on_screen_keyboard_enabled", false)
)
@ -237,6 +244,9 @@ func save_now() -> bool:
"mouse_sensitivity": current_settings.mouse_camera_sensitivity,
"controller_sensitivity": current_settings.controller_camera_sensitivity,
"invert_vertical": current_settings.invert_camera_y,
"swap_hotbar_camera_scroll": (
current_settings.swap_hotbar_camera_scroll
),
},
"audio": {
"master": current_settings.master_volume,