From db0718354763e7e6f1235e7b027bafa6dd616b74 Mon Sep 17 00:00:00 2001 From: Ramsay Date: Fri, 24 Oct 2025 15:34:54 +0100 Subject: [PATCH 1/2] feat: basic modals --- LICENSE | 57 ++++++++++++ README.md | 10 +- game/models/player/eform_0.png.import | 5 +- game/models/player/eform_1.png.import | 5 +- game/project.godot | 2 +- .../connecting_menu.tscn | 15 ++- .../scenes/connecting_menu/content_theme.tres | 7 ++ game/scenes/modal/basic_text_modal.gd | 4 + game/scenes/modal/basic_text_modal.gd.uid | 1 + game/scenes/modal/basic_text_modal.tscn | 91 +++++++++++++++++++ game/scenes/modal/header_theme.tres | 7 ++ .../specialised/couldnt_connect_modal.tscn | 13 +++ .../AuthoritativeServerConnection.cs | 9 ++ game/scripts/menus/mainmenu.gd | 2 +- 14 files changed, 216 insertions(+), 12 deletions(-) create mode 100644 LICENSE rename game/scenes/{ => connecting_menu}/connecting_menu.tscn (53%) create mode 100644 game/scenes/connecting_menu/content_theme.tres create mode 100644 game/scenes/modal/basic_text_modal.gd create mode 100644 game/scenes/modal/basic_text_modal.gd.uid create mode 100644 game/scenes/modal/basic_text_modal.tscn create mode 100644 game/scenes/modal/header_theme.tres create mode 100644 game/scenes/modal/specialised/couldnt_connect_modal.tscn diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..68ac67e --- /dev/null +++ b/LICENSE @@ -0,0 +1,57 @@ +Echoform Source License +======================= + +Copyright (c) 2025 Floffah +All rights reserved. + +This repository is made publicly accessible for the purposes of transparency, personal portfolio, +technical discussion, and internal or collaborative documentation. + +This is **not an open source license**. No license is granted to use, copy, +modify, publish, distribute, sublicense, or sell any part of the source code, +assets, documentation, or other files in this repository. + +You may: + +- View the contents of this repository for personal reference +- Discuss the contents publicly, so long as no code is reused, copied, or redistributed in any form + +You may **not**: + +- Reuse, incorporate, or adapt this code or any part of it in your own project +- Copy, redistribute, or mirror any portion of the codebase or its assets +- Fork or clone this repository +- Publish this code under another name or license +- Use the code or assets in any commercial, open source, or public-facing project +- Use the code or assets in educational settings, except as explicitly defined below + +All content in this repository is the intellectual property of the author(s) and +is protected under applicable copyright and intellectual property laws. + +The author(s) retain full rights to: + +- Remove or privatize this repository at any time +- Release parts or all of the project under a different license in the future +- Commercialize the project, including selling it on platforms such as Steam + +Violation of these terms may result in legal action under applicable intellectual property law. + +For licensing inquiries, collaboration requests, or permission to use any part of +this project, please contact: [enquiries@floffah.dev](mailto:enquiries@floffah.dev) / https://www.floffah.dev + +--- + +## Amendments + +### Educational Use Exception + +You are permitted to use this code in **non-commercial educational settings** for the purposes of learning, classroom instruction, or academic exploration, provided that: + +- You do not publish, upload, or otherwise distribute modified or unmodified versions of the code, in whole or in part +- You do not use the code or any derived version in **any commercial or monetized context**, including but not limited to: + - YouTube tutorials + - Educational blog posts or articles + - Paid courses (online or in-person) + - Online or public repositories containing this code +- Proper attribution is given to the original author when used in academic presentations or internal materials +- No part of the code or project is used in software that is publicly accessible, even if non-commercial, without expl diff --git a/README.md b/README.md index 2cef827..e51fe24 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,12 @@ -tMy attempt at making an MMO game using Godot and Bun. +# 📜 License Notice +This repository is provided for transparency, personal portfolio, and documentation purposes.
+It is not open source. All rights reserved by the author. + +See [`LICENSE`](./LICENSE) for full terms. + +# Echoform + +My attempt at making an MMO game using Godot and Bun. Packages: diff --git a/game/models/player/eform_0.png.import b/game/models/player/eform_0.png.import index 204e3b5..06799e1 100644 --- a/game/models/player/eform_0.png.import +++ b/game/models/player/eform_0.png.import @@ -4,9 +4,8 @@ importer="texture" type="CompressedTexture2D" uid="uid://bpljr3pobuha2" path.s3tc="res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.s3tc.ctex" -path.etc2="res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc", "etc2_astc"], +"imported_formats": ["s3tc_bptc"], "vram_texture": true } generator_parameters={ @@ -16,7 +15,7 @@ generator_parameters={ [deps] source_file="res://models/player/eform_0.png" -dest_files=["res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.s3tc.ctex", "res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.etc2.ctex"] +dest_files=["res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.s3tc.ctex"] [params] diff --git a/game/models/player/eform_1.png.import b/game/models/player/eform_1.png.import index cb3086a..6949c35 100644 --- a/game/models/player/eform_1.png.import +++ b/game/models/player/eform_1.png.import @@ -4,9 +4,8 @@ importer="texture" type="CompressedTexture2D" uid="uid://gpuh5qi3nyau" path.s3tc="res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.s3tc.ctex" -path.etc2="res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc", "etc2_astc"], +"imported_formats": ["s3tc_bptc"], "vram_texture": true } generator_parameters={ @@ -16,7 +15,7 @@ generator_parameters={ [deps] source_file="res://models/player/eform_1.png" -dest_files=["res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.s3tc.ctex", "res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.etc2.ctex"] +dest_files=["res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.s3tc.ctex"] [params] diff --git a/game/project.godot b/game/project.godot index a679698..0e17de7 100644 --- a/game/project.godot +++ b/game/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="EchoformMMOGame" -run/main_scene="res://scenes/connecting_menu.tscn" +run/main_scene="res://scenes/connecting_menu/connecting_menu.tscn" config/features=PackedStringArray("4.5", "C#", "Forward Plus") config/icon="res://icon.svg" diff --git a/game/scenes/connecting_menu.tscn b/game/scenes/connecting_menu/connecting_menu.tscn similarity index 53% rename from game/scenes/connecting_menu.tscn rename to game/scenes/connecting_menu/connecting_menu.tscn index 02878a5..68d1276 100644 --- a/game/scenes/connecting_menu.tscn +++ b/game/scenes/connecting_menu/connecting_menu.tscn @@ -1,11 +1,20 @@ [gd_scene load_steps=2 format=3 uid="uid://b5fc11a4rltt1"] -[ext_resource type="Script" uid="uid://ogabnaxf3i7u" path="res://scripts/menus/mainmenu.gd" id="1_84nss"] +[ext_resource type="Script" uid="uid://ogabnaxf3i7u" path="res://scripts/menus/mainmenu.gd" id="1_jxs3d"] -[node name="ConnectingMenu" type="Node2D"] -script = ExtResource("1_84nss") +[node name="ConnectingMenu" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1_jxs3d") [node name="Button" type="Button" parent="."] +layout_mode = 0 offset_left = 259.0 offset_top = 126.0 offset_right = 300.0 diff --git a/game/scenes/connecting_menu/content_theme.tres b/game/scenes/connecting_menu/content_theme.tres new file mode 100644 index 0000000..5dc5bf3 --- /dev/null +++ b/game/scenes/connecting_menu/content_theme.tres @@ -0,0 +1,7 @@ +[gd_resource type="Theme" load_steps=2 format=3 uid="uid://cpub04oardilt"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4cf6d"] +bg_color = Color(0.29219002, 0.29219005, 0.29218993, 1) + +[resource] +PanelContainer/styles/panel = SubResource("StyleBoxFlat_4cf6d") diff --git a/game/scenes/modal/basic_text_modal.gd b/game/scenes/modal/basic_text_modal.gd new file mode 100644 index 0000000..e80c9bc --- /dev/null +++ b/game/scenes/modal/basic_text_modal.gd @@ -0,0 +1,4 @@ +extends CenterContainer + +func _on_dismiss_button_pressed() -> void: + get_tree().queue_delete(self) diff --git a/game/scenes/modal/basic_text_modal.gd.uid b/game/scenes/modal/basic_text_modal.gd.uid new file mode 100644 index 0000000..6318ead --- /dev/null +++ b/game/scenes/modal/basic_text_modal.gd.uid @@ -0,0 +1 @@ +uid://bnyr4aeean5tf diff --git a/game/scenes/modal/basic_text_modal.tscn b/game/scenes/modal/basic_text_modal.tscn new file mode 100644 index 0000000..af562fc --- /dev/null +++ b/game/scenes/modal/basic_text_modal.tscn @@ -0,0 +1,91 @@ +[gd_scene load_steps=7 format=3 uid="uid://bpo5ihu8h4jji"] + +[ext_resource type="Script" uid="uid://bnyr4aeean5tf" path="res://scenes/modal/basic_text_modal.gd" id="1_37te1"] +[ext_resource type="Theme" uid="uid://cfw15mand7swi" path="res://scenes/modal/header_theme.tres" id="1_bfvhs"] +[ext_resource type="Theme" uid="uid://cpub04oardilt" path="res://scenes/connecting_menu/content_theme.tres" id="2_37te1"] + +[sub_resource type="LabelSettings" id="LabelSettings_84nss"] +font_size = 21 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_os3fi"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.6) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 +expand_margin_left = 7.0 +expand_margin_right = 7.0 + +[sub_resource type="Theme" id="Theme_yr8gy"] +Button/font_sizes/font_size = 12 +Button/styles/normal = SubResource("StyleBoxFlat_os3fi") + +[node name="CenterContainer" type="CenterContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_37te1") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="Header" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 +theme = ExtResource("1_bfvhs") + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/Header"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 5 + +[node name="Title" type="Label" parent="VBoxContainer/Header/MarginContainer"] +layout_mode = 2 +text = "Title" +label_settings = SubResource("LabelSettings_84nss") + +[node name="Content" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 +theme = ExtResource("2_37te1") + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/Content"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 5 + +[node name="Label" type="Label" parent="VBoxContainer/Content/MarginContainer"] +layout_mode = 2 +text = "Some content" + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 +theme = ExtResource("2_37te1") + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 12 +theme_override_constants/margin_bottom = 5 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer/MarginContainer"] +layout_direction = 3 +layout_mode = 2 + +[node name="DismissButton" type="Button" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +theme = SubResource("Theme_yr8gy") +text = "OK" + +[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/DismissButton" to="." method="_on_dismiss_button_pressed"] diff --git a/game/scenes/modal/header_theme.tres b/game/scenes/modal/header_theme.tres new file mode 100644 index 0000000..fc13481 --- /dev/null +++ b/game/scenes/modal/header_theme.tres @@ -0,0 +1,7 @@ +[gd_resource type="Theme" load_steps=2 format=3 uid="uid://cfw15mand7swi"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_84nss"] +bg_color = Color(0.08485205, 0.14823782, 0.08485826, 1) + +[resource] +PanelContainer/styles/panel = SubResource("StyleBoxFlat_84nss") diff --git a/game/scenes/modal/specialised/couldnt_connect_modal.tscn b/game/scenes/modal/specialised/couldnt_connect_modal.tscn new file mode 100644 index 0000000..ae4c756 --- /dev/null +++ b/game/scenes/modal/specialised/couldnt_connect_modal.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=2 format=3 uid="uid://bdry5nvuem1jo"] + +[ext_resource type="PackedScene" uid="uid://bpo5ihu8h4jji" path="res://scenes/modal/basic_text_modal.tscn" id="1_ralu3"] + +[node name="CenterContainer" instance=ExtResource("1_ralu3")] + +[node name="Title" parent="VBoxContainer/Header/MarginContainer" index="0"] +text = "Could not connect" + +[node name="Label" parent="VBoxContainer/Content/MarginContainer" index="0"] +text = "An error occurred while trying to connect +to the server. Please contact the +developers for more information." diff --git a/game/scripts/authoritative/AuthoritativeServerConnection.cs b/game/scripts/authoritative/AuthoritativeServerConnection.cs index a31dc27..727646d 100644 --- a/game/scripts/authoritative/AuthoritativeServerConnection.cs +++ b/game/scripts/authoritative/AuthoritativeServerConnection.cs @@ -13,6 +13,9 @@ public partial class AuthoritativeServerConnection : Node { private string _accessToken; private string _refreshToken; + private readonly PackedScene couldntConnectModalScene = + ResourceLoader.Load("res://scenes/modal/specialised/couldnt_connect_modal.tscn"); + public override void _Ready() { if (Instance != null) { GD.PrintErr("AuthoritativeServerConnection instance already exists. Destroying duplicate."); @@ -49,6 +52,12 @@ private void OnRequestCompleted(long result, long responseCode, string[] headers } else { GD.PrintErr("Authentication failed. Response code: ", responseCode, ", Body: ", Encoding.UTF8.GetString(body)); + + var couldntConnectModal = couldntConnectModalScene.Instantiate(); + couldntConnectModal.SetAnchorsPreset(Control.LayoutPreset.FullRect); + GetTree().Root.AddChild(couldntConnectModal); + + Reset(); } } diff --git a/game/scripts/menus/mainmenu.gd b/game/scripts/menus/mainmenu.gd index 41f4f84..32e94a7 100644 --- a/game/scripts/menus/mainmenu.gd +++ b/game/scripts/menus/mainmenu.gd @@ -1,4 +1,4 @@ -extends Node2D +extends Control func _on_play_pressed(): AuthoritativeServerConnection.SendReady() From f641a05d956958e76c31389d477a40f35a6efaab Mon Sep 17 00:00:00 2001 From: Ramsay Date: Fri, 24 Oct 2025 16:48:17 +0100 Subject: [PATCH 2/2] fix: feedback fixes --- LICENSE | 2 +- game/models/player/eform_0.png.import | 5 +++-- game/models/player/eform_1.png.import | 5 +++-- game/scenes/modal/basic_text_modal.gd | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/LICENSE b/LICENSE index 68ac67e..110fedb 100644 --- a/LICENSE +++ b/LICENSE @@ -54,4 +54,4 @@ You are permitted to use this code in **non-commercial educational settings** fo - Paid courses (online or in-person) - Online or public repositories containing this code - Proper attribution is given to the original author when used in academic presentations or internal materials -- No part of the code or project is used in software that is publicly accessible, even if non-commercial, without expl +- No part of the code or project is used in software that is publicly accessible, even if non-commercial, without explicit written permission from the author(s) diff --git a/game/models/player/eform_0.png.import b/game/models/player/eform_0.png.import index 06799e1..204e3b5 100644 --- a/game/models/player/eform_0.png.import +++ b/game/models/player/eform_0.png.import @@ -4,8 +4,9 @@ importer="texture" type="CompressedTexture2D" uid="uid://bpljr3pobuha2" path.s3tc="res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.s3tc.ctex" +path.etc2="res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } generator_parameters={ @@ -15,7 +16,7 @@ generator_parameters={ [deps] source_file="res://models/player/eform_0.png" -dest_files=["res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.s3tc.ctex"] +dest_files=["res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.s3tc.ctex", "res://.godot/imported/eform_0.png-62339b67d77db12100e3b10d3ab9513a.etc2.ctex"] [params] diff --git a/game/models/player/eform_1.png.import b/game/models/player/eform_1.png.import index 6949c35..cb3086a 100644 --- a/game/models/player/eform_1.png.import +++ b/game/models/player/eform_1.png.import @@ -4,8 +4,9 @@ importer="texture" type="CompressedTexture2D" uid="uid://gpuh5qi3nyau" path.s3tc="res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.s3tc.ctex" +path.etc2="res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } generator_parameters={ @@ -15,7 +16,7 @@ generator_parameters={ [deps] source_file="res://models/player/eform_1.png" -dest_files=["res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.s3tc.ctex"] +dest_files=["res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.s3tc.ctex", "res://.godot/imported/eform_1.png-8e154e3d8c809c7b97ff8eba05c64a7c.etc2.ctex"] [params] diff --git a/game/scenes/modal/basic_text_modal.gd b/game/scenes/modal/basic_text_modal.gd index e80c9bc..5546ef0 100644 --- a/game/scenes/modal/basic_text_modal.gd +++ b/game/scenes/modal/basic_text_modal.gd @@ -1,4 +1,4 @@ extends CenterContainer func _on_dismiss_button_pressed() -> void: - get_tree().queue_delete(self) + queue_free()