Consolidate project documentation and attribution

Add public-alias credits and a tested in-game credits page, centralize project guidance and asset provenance, import the complete authored fur channel maps, and keep starter-island collision synchronized with imported props.
This commit is contained in:
Alexander Sellite 2026-08-12 22:12:11 -04:00
parent 1940ae13e5
commit db6074ddfa
59 changed files with 1638 additions and 1032 deletions

View file

@ -16,6 +16,7 @@ const BubbleClusterType = preload(
const TitleConfirmationBubblePageType = preload(
"res://ui/title_confirmation_bubble_page.gd"
)
const TitleCreditsPageType = preload("res://ui/title_credits_page.gd")
const NetworkSessionType = preload("res://network/network_session.gd")
const SavedServerStoreType = preload("res://network/saved_server_store.gd")
const JoinGamePageType = preload("res://ui/network/join_game_page.gd")
@ -70,7 +71,7 @@ const LOGO_MAX_WIDTH: float = 662.0
const TITLE_HORIZONTAL_MARGIN: float = 48.0
const TITLE_DESKTOP_REFERENCE_SIZE: Vector2 = Vector2(1280.0, 720.0)
const TITLE_COMPACT_REFERENCE_SIZE: Vector2 = Vector2(640.0, 480.0)
const BUBBLE_FIELD_MAX_WIDTH: float = 396.0
const BUBBLE_FIELD_MAX_WIDTH: float = 440.0
const BUBBLE_FIELD_DESKTOP_HEIGHT: float = 318.0
const BUBBLE_FIELD_COMPACT_WIDTH: float = 294.0
const BUBBLE_FIELD_COMPACT_HEIGHT: float = 200.0
@ -99,6 +100,7 @@ enum ConfirmationAction {
@onready var _continue_button: BubbleButtonType = %ContinueButton
@onready var _new_game_button: BubbleButtonType = %NewGameButton
@onready var _settings_button: BubbleButtonType = %SettingsButton
@onready var _credits_button: BubbleButtonType = %CreditsButton
@onready var _delete_button: BubbleButtonType = %DeleteSaveButton
@onready var _quit_button: BubbleButtonType = %QuitButton
@onready var _join_game_button: BubbleButtonType = %JoinGameButton
@ -134,6 +136,7 @@ enum ConfirmationAction {
@onready var _start_prompt_center: CenterContainer = %StartPromptCenter
@onready var _start_prompt_label: Label = %StartPromptLabel
@onready var _join_game_page: JoinGamePageType = %JoinGamePage
@onready var _credits_page: TitleCreditsPageType = %CreditsPage
var _save_manager: SaveManagerType
var _settings_manager: SettingsManagerType
@ -200,6 +203,7 @@ func _ready() -> void:
_new_game_button.pressed.connect(_on_new_game_pressed)
_join_game_button.pressed.connect(_open_join_game)
_settings_button.pressed.connect(_open_settings)
_credits_button.pressed.connect(_open_credits)
_delete_button.pressed.connect(_on_delete_pressed)
%QuitButton.pressed.connect(_on_quit_pressed)
_confirmation_page.confirmed.connect(_on_confirmation_accepted)
@ -211,6 +215,7 @@ func _ready() -> void:
_settings_panel.navigation_transition_started.connect(
_emit_navigation_bubble_flurry
)
_credits_page.back_requested.connect(_close_credits)
_bubble_field.configure(_get_title_buttons())
_decorative_fish_timer.timeout.connect(_on_decorative_fish_timer_timeout)
_decorative_bubble_event_timer.timeout.connect(
@ -261,6 +266,7 @@ func reopen() -> void:
_reset_confirmation()
_settings_panel.hide()
_join_game_page.close_page()
_credits_page.close_page()
_refresh_save_inspection()
show()
_start_decorative_presentation()
@ -274,6 +280,7 @@ func open_join_game_page(endpoint: String = "") -> void:
_presentation_center.hide()
_settings_panel.hide()
_confirmation_page.hide_page()
_credits_page.close_page()
_join_game_page.open_page(endpoint)
@ -286,7 +293,11 @@ func report_network_error(message: String) -> void:
func _open_join_game() -> void:
if _action_in_progress or _is_confirmation_active():
if (
_action_in_progress
or _is_confirmation_active()
or _credits_page.visible
):
return
open_join_game_page()
@ -299,6 +310,39 @@ func _close_join_game() -> void:
_focus_initial_button()
func _open_credits() -> void:
if (
_action_in_progress
or _is_confirmation_active()
or _settings_panel.visible
or _join_game_page.visible
or _credits_page.visible
):
return
_hide_continue_stats_context()
var restore_navigation_focus: bool = _navigation_focus_active
_set_title_bubbles_interactive(false)
_release_primary_menu_focus()
_presentation_center.hide()
_start_prompt_center.hide()
_credits_page.open_page(restore_navigation_focus)
func _close_credits(restore_navigation_focus: bool) -> void:
_credits_page.close_page()
_presentation_center.show()
_button_center.show()
_start_prompt_center.hide()
_set_title_bubbles_interactive(true)
if restore_navigation_focus:
_navigation_focus_active = true
_credits_button.grab_focus()
else:
_navigation_focus_active = false
_release_title_focus()
_update_continue_stats_visibility()
func is_awaiting_start_input() -> bool:
return _awaiting_start_input
@ -403,6 +447,7 @@ func _get_title_buttons() -> Array[BubbleButton]:
_new_game_button,
_join_game_button,
_settings_button,
_credits_button,
_delete_button,
_quit_button,
]
@ -498,6 +543,10 @@ func _input(event: InputEvent) -> void:
and _settings_panel.is_controller_mapping_capturing()
):
return
if _credits_page.visible:
if _credits_page.handle_input(event):
get_viewport().set_input_as_handled()
return
if _join_game_page.visible:
if event.is_action_pressed("ui_cancel"):
_close_join_game()
@ -549,6 +598,7 @@ func _handle_primary_menu_focus_input(event: InputEvent) -> bool:
not _button_center.visible
or _is_confirmation_active()
or _settings_panel.visible
or _credits_page.visible
):
return false
if event is InputEventMouseMotion:
@ -1186,6 +1236,7 @@ func _open_settings() -> void:
_is_confirmation_active()
or _action_in_progress
or _settings_panel.visible
or _credits_page.visible
or _title_settings_transition_active
):
return
@ -1398,6 +1449,7 @@ func _focus_initial_button() -> void:
or not visible
or _awaiting_start_input
or not _button_center.visible
or _credits_page.visible
):
return
if not _continue_button.disabled:
@ -1413,6 +1465,7 @@ func _on_quit_pressed() -> void:
not _action_in_progress
and not _is_confirmation_active()
and not _settings_panel.visible
and not _credits_page.visible
):
_hide_continue_stats_context()
quit_requested.emit()
@ -1430,6 +1483,7 @@ func _on_title_visibility_changed() -> void:
_navigation_focus_active = false
_modal_restore_navigation_focus = false
_reset_confirmation()
_credits_page.close_page()
_stop_decorative_presentation()