diff --git a/game/assets/audio/First Breathing.mp3 b/game/assets/audio/First Breathing.mp3 new file mode 100644 index 0000000..43cd944 Binary files /dev/null and b/game/assets/audio/First Breathing.mp3 differ diff --git a/game/assets/audio/First Breathing.mp3.import b/game/assets/audio/First Breathing.mp3.import new file mode 100644 index 0000000..69d42b3 --- /dev/null +++ b/game/assets/audio/First Breathing.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://ny0wgebnn3jt" +path="res://.godot/imported/First Breathing.mp3-daaf3ad5f9ef7f70edb7c8344a0777ee.mp3str" + +[deps] + +source_file="res://assets/audio/First Breathing.mp3" +dest_files=["res://.godot/imported/First Breathing.mp3-daaf3ad5f9ef7f70edb7c8344a0777ee.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/game/assets/images/splash_v1.1.png b/game/assets/images/splash_v1.1.png new file mode 100644 index 0000000..deb3010 Binary files /dev/null and b/game/assets/images/splash_v1.1.png differ diff --git a/game/assets/images/splash_v1.1.png.import b/game/assets/images/splash_v1.1.png.import new file mode 100644 index 0000000..6003e99 --- /dev/null +++ b/game/assets/images/splash_v1.1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4gno0l43h5im" +path="res://.godot/imported/splash_v1.1.png-9a3fd2855a8dd2ec13e583b11e994a2f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/images/splash_v1.1.png" +dest_files=["res://.godot/imported/splash_v1.1.png-9a3fd2855a8dd2ec13e583b11e994a2f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/game/assets/images/splash_v1.png b/game/assets/images/splash_v1.png new file mode 100644 index 0000000..8b99310 Binary files /dev/null and b/game/assets/images/splash_v1.png differ diff --git a/game/assets/images/splash_v1.png.import b/game/assets/images/splash_v1.png.import new file mode 100644 index 0000000..8a5c8ff --- /dev/null +++ b/game/assets/images/splash_v1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4f5gpv8e6p0n" +path="res://.godot/imported/splash_v1.png-6affb26f4f6487a1ecf34e78a43b9ceb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/images/splash_v1.png" +dest_files=["res://.godot/imported/splash_v1.png-6affb26f4f6487a1ecf34e78a43b9ceb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/game/assets/images/title_v1.png b/game/assets/images/title_v1.png new file mode 100644 index 0000000..93423b7 Binary files /dev/null and b/game/assets/images/title_v1.png differ diff --git a/game/assets/images/title_v1.png.import b/game/assets/images/title_v1.png.import new file mode 100644 index 0000000..f144f59 --- /dev/null +++ b/game/assets/images/title_v1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dmgk5ikupf2e3" +path="res://.godot/imported/title_v1.png-ff2aa7c90c01dfe577aa9520a07c8995.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/images/title_v1.png" +dest_files=["res://.godot/imported/title_v1.png-ff2aa7c90c01dfe577aa9520a07c8995.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/game/models/title_oak_tree/title_oak_tree.glb b/game/models/title_oak_tree/title_oak_tree.glb new file mode 100644 index 0000000..735cbe6 Binary files /dev/null and b/game/models/title_oak_tree/title_oak_tree.glb differ diff --git a/game/models/title_oak_tree/title_oak_tree.glb.import b/game/models/title_oak_tree/title_oak_tree.glb.import new file mode 100644 index 0000000..0b1d8b3 --- /dev/null +++ b/game/models/title_oak_tree/title_oak_tree.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ci22f51llsxei" +path="res://.godot/imported/title_oak_tree.glb-f534152b6b17696eab76710f577514c4.scn" + +[deps] + +source_file="res://models/title_oak_tree/title_oak_tree.glb" +dest_files=["res://.godot/imported/title_oak_tree.glb-f534152b6b17696eab76710f577514c4.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/game/models/title_oak_tree/title_oak_tree_0.jpg b/game/models/title_oak_tree/title_oak_tree_0.jpg new file mode 100644 index 0000000..2be8228 Binary files /dev/null and b/game/models/title_oak_tree/title_oak_tree_0.jpg differ diff --git a/game/models/title_oak_tree/title_oak_tree_0.jpg.import b/game/models/title_oak_tree/title_oak_tree_0.jpg.import new file mode 100644 index 0000000..7235359 --- /dev/null +++ b/game/models/title_oak_tree/title_oak_tree_0.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bfqlyuib7m7df" +path.s3tc="res://.godot/imported/title_oak_tree_0.jpg-c8f3377caca1926ee68d871141328dca.s3tc.ctex" +path.etc2="res://.godot/imported/title_oak_tree_0.jpg-c8f3377caca1926ee68d871141328dca.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "d8e1f18d1a0d023926f85a27574a8a22" +} + +[deps] + +source_file="res://models/title_oak_tree/title_oak_tree_0.jpg" +dest_files=["res://.godot/imported/title_oak_tree_0.jpg-c8f3377caca1926ee68d871141328dca.s3tc.ctex", "res://.godot/imported/title_oak_tree_0.jpg-c8f3377caca1926ee68d871141328dca.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/title_oak_tree/title_oak_tree_1.jpg b/game/models/title_oak_tree/title_oak_tree_1.jpg new file mode 100644 index 0000000..06e3f18 Binary files /dev/null and b/game/models/title_oak_tree/title_oak_tree_1.jpg differ diff --git a/game/models/title_oak_tree/title_oak_tree_1.jpg.import b/game/models/title_oak_tree/title_oak_tree_1.jpg.import new file mode 100644 index 0000000..1ec272d --- /dev/null +++ b/game/models/title_oak_tree/title_oak_tree_1.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://clwovkl6ma58h" +path.s3tc="res://.godot/imported/title_oak_tree_1.jpg-5a2bc9d65c83bd2b44e10428780f4a2b.s3tc.ctex" +path.etc2="res://.godot/imported/title_oak_tree_1.jpg-5a2bc9d65c83bd2b44e10428780f4a2b.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "d6363ed557eac2d3c6bc9efa64c35029" +} + +[deps] + +source_file="res://models/title_oak_tree/title_oak_tree_1.jpg" +dest_files=["res://.godot/imported/title_oak_tree_1.jpg-5a2bc9d65c83bd2b44e10428780f4a2b.s3tc.ctex", "res://.godot/imported/title_oak_tree_1.jpg-5a2bc9d65c83bd2b44e10428780f4a2b.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/title_oak_tree/title_oak_tree_2.jpg b/game/models/title_oak_tree/title_oak_tree_2.jpg new file mode 100644 index 0000000..525cc0c Binary files /dev/null and b/game/models/title_oak_tree/title_oak_tree_2.jpg differ diff --git a/game/models/title_oak_tree/title_oak_tree_2.jpg.import b/game/models/title_oak_tree/title_oak_tree_2.jpg.import new file mode 100644 index 0000000..c9e4f20 --- /dev/null +++ b/game/models/title_oak_tree/title_oak_tree_2.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tb58yb2qoaux" +path.s3tc="res://.godot/imported/title_oak_tree_2.jpg-7fc23a9502249aa4fba2eb142bf77e0e.s3tc.ctex" +path.etc2="res://.godot/imported/title_oak_tree_2.jpg-7fc23a9502249aa4fba2eb142bf77e0e.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "ebc6c2aad14b0d48fe10d1c721160b3a" +} + +[deps] + +source_file="res://models/title_oak_tree/title_oak_tree_2.jpg" +dest_files=["res://.godot/imported/title_oak_tree_2.jpg-7fc23a9502249aa4fba2eb142bf77e0e.s3tc.ctex", "res://.godot/imported/title_oak_tree_2.jpg-7fc23a9502249aa4fba2eb142bf77e0e.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://models/title_oak_tree/title_oak_tree_2.jpg" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture.glb b/game/models/tree/Low_poly_artistic_mod_1029220550_texture.glb new file mode 100644 index 0000000..b08857b Binary files /dev/null and b/game/models/tree/Low_poly_artistic_mod_1029220550_texture.glb differ diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture.glb.import b/game/models/tree/Low_poly_artistic_mod_1029220550_texture.glb.import new file mode 100644 index 0000000..bb10111 --- /dev/null +++ b/game/models/tree/Low_poly_artistic_mod_1029220550_texture.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b8jyb3ev3wfdq" +path="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture.glb-a1c282ad35a2962e27f5f3049570afee.scn" + +[deps] + +source_file="res://models/tree/Low_poly_artistic_mod_1029220550_texture.glb" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029220550_texture.glb-a1c282ad35a2962e27f5f3049570afee.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg new file mode 100644 index 0000000..0494a8f Binary files /dev/null and b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg differ diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg.import b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg.import new file mode 100644 index 0000000..0540fcb --- /dev/null +++ b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcd2m7nbmdnai" +path.s3tc="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_0.jpg-7c978723c069e57c9aa19b3cb50e2c70.s3tc.ctex" +path.etc2="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_0.jpg-7c978723c069e57c9aa19b3cb50e2c70.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "d9382b0326ae037dc06f38e2490e4fee" +} + +[deps] + +source_file="res://models/tree/Low_poly_artistic_mod_1029220550_texture_0.jpg" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_0.jpg-7c978723c069e57c9aa19b3cb50e2c70.s3tc.ctex", "res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_0.jpg-7c978723c069e57c9aa19b3cb50e2c70.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg new file mode 100644 index 0000000..511cd0a Binary files /dev/null and b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg differ diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg.import b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg.import new file mode 100644 index 0000000..8af2b9e --- /dev/null +++ b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://waprkbo7d7nc" +path.s3tc="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_1.jpg-dd9b60480af9db8ffc30b445d69424e2.s3tc.ctex" +path.etc2="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_1.jpg-dd9b60480af9db8ffc30b445d69424e2.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "b325c3132aea9a01c883748f0cc39d2e" +} + +[deps] + +source_file="res://models/tree/Low_poly_artistic_mod_1029220550_texture_1.jpg" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_1.jpg-dd9b60480af9db8ffc30b445d69424e2.s3tc.ctex", "res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_1.jpg-dd9b60480af9db8ffc30b445d69424e2.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg new file mode 100644 index 0000000..d5a0d4a Binary files /dev/null and b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg differ diff --git a/game/models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg.import b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg.import new file mode 100644 index 0000000..e75da5a --- /dev/null +++ b/game/models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jakniq08o2yp" +path.s3tc="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_2.jpg-d585b2387b253625ea753e283850940a.s3tc.ctex" +path.etc2="res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_2.jpg-d585b2387b253625ea753e283850940a.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "ebf86117f0928d614941dfec79cf762e" +} + +[deps] + +source_file="res://models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_2.jpg-d585b2387b253625ea753e283850940a.s3tc.ctex", "res://.godot/imported/Low_poly_artistic_mod_1029220550_texture_2.jpg-d585b2387b253625ea753e283850940a.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://models/tree/Low_poly_artistic_mod_1029220550_texture_2.jpg" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb new file mode 100644 index 0000000..40c3782 Binary files /dev/null and b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb differ diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb.import b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb.import new file mode 100644 index 0000000..b3219e4 --- /dev/null +++ b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb.import @@ -0,0 +1,54 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bamcn6gjlk32t" +path="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture.glb-952d4d3ee653a32f2a1d5b555baf2841.scn" + +[deps] + +source_file="res://models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029212559_texture.glb-952d4d3ee653a32f2a1d5b555baf2841.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={ +"meshes": { +"Low_poly_artistic_mod_1029212559_texture_mesh": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 20.0, +"save_to_file/enabled": true, +"save_to_file/fallback_path": "res://models/tree_stump/tree_stump_mesh.res", +"save_to_file/path": "uid://c8po2m3860dkt" +} +} +} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg new file mode 100644 index 0000000..2daadb1 Binary files /dev/null and b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg differ diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg.import b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg.import new file mode 100644 index 0000000..89f172b --- /dev/null +++ b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcm6wwb1ctuas" +path.s3tc="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_0.jpg-c2d9bbcc1dfb64e8919acced35ca1375.s3tc.ctex" +path.etc2="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_0.jpg-c2d9bbcc1dfb64e8919acced35ca1375.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "5fdd13068bf81c9a00d220d9e50a87d1" +} + +[deps] + +source_file="res://models/tree_stump/Low_poly_artistic_mod_1029212559_texture_0.jpg" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_0.jpg-c2d9bbcc1dfb64e8919acced35ca1375.s3tc.ctex", "res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_0.jpg-c2d9bbcc1dfb64e8919acced35ca1375.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg new file mode 100644 index 0000000..4fe9c9f Binary files /dev/null and b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg differ diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg.import b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg.import new file mode 100644 index 0000000..0a55cb0 --- /dev/null +++ b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8u3jnh3lncxe" +path.s3tc="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_1.jpg-b60719fca554ce2b3b641a1dd122dbb8.s3tc.ctex" +path.etc2="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_1.jpg-b60719fca554ce2b3b641a1dd122dbb8.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "49f56f16e709a2dcc6bf7afd6ebf1147" +} + +[deps] + +source_file="res://models/tree_stump/Low_poly_artistic_mod_1029212559_texture_1.jpg" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_1.jpg-b60719fca554ce2b3b641a1dd122dbb8.s3tc.ctex", "res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_1.jpg-b60719fca554ce2b3b641a1dd122dbb8.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg new file mode 100644 index 0000000..32b9b62 Binary files /dev/null and b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg differ diff --git a/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg.import b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg.import new file mode 100644 index 0000000..a1a2890 --- /dev/null +++ b/game/models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg.import @@ -0,0 +1,45 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c8lsnrxt13h87" +path.s3tc="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_2.jpg-2255f33492025c4422dbdd84ba31e8b4.s3tc.ctex" +path.etc2="res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_2.jpg-2255f33492025c4422dbdd84ba31e8b4.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "b7928fe9e9509b73f5565b0ffa29e1a3" +} + +[deps] + +source_file="res://models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg" +dest_files=["res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_2.jpg-2255f33492025c4422dbdd84ba31e8b4.s3tc.ctex", "res://.godot/imported/Low_poly_artistic_mod_1029212559_texture_2.jpg-2255f33492025c4422dbdd84ba31e8b4.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=1 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="res://models/tree_stump/Low_poly_artistic_mod_1029212559_texture_2.jpg" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/game/models/tree_stump/tree_stump_mesh.res b/game/models/tree_stump/tree_stump_mesh.res new file mode 100644 index 0000000..12c5be9 Binary files /dev/null and b/game/models/tree_stump/tree_stump_mesh.res differ diff --git a/game/project.godot b/game/project.godot index 0e17de7..086bb28 100644 --- a/game/project.godot +++ b/game/project.godot @@ -11,14 +11,19 @@ config_version=5 [application] config/name="EchoformMMOGame" -run/main_scene="res://scenes/connecting_menu/connecting_menu.tscn" +run/main_scene="uid://1q85kxr022wx" +run/enable_alt_space_menu=true config/features=PackedStringArray("4.5", "C#", "Forward Plus") +boot_splash/bg_color=Color(0, 0, 0, 1) +boot_splash/fullsize=false +boot_splash/image="uid://d4gno0l43h5im" config/icon="res://icon.svg" [autoload] AuthoritativeServerConnection="*res://scripts/authoritative/AuthoritativeServerConnection.cs" GlobalLoading="*res://scripts/globals/global_loading.gd" +EchoformLogger="*res://scripts/util/EchoformLogger.cs" [debug] @@ -81,3 +86,4 @@ zoom_out={ [rendering] textures/vram_compression/import_etc2_astc=true +anti_aliasing/quality/use_taa=true diff --git a/game/scenes/connecting_menu/connecting_menu.tscn b/game/scenes/connecting_menu/connecting_menu.tscn deleted file mode 100644 index 68d1276..0000000 --- a/game/scenes/connecting_menu/connecting_menu.tscn +++ /dev/null @@ -1,24 +0,0 @@ -[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_jxs3d"] - -[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 -offset_bottom = 157.0 -text = "Play" - -[connection signal="pressed" from="Button" to="." method="_on_play_pressed"] diff --git a/game/scenes/intro.tscn b/game/scenes/intro.tscn index 24121d2..234e176 100644 --- a/game/scenes/intro.tscn +++ b/game/scenes/intro.tscn @@ -1,25 +1,559 @@ -[gd_scene load_steps=6 format=3 uid="uid://bu0me8s1g5osd"] +[gd_scene load_steps=15 format=3 uid="uid://bu0me8s1g5osd"] +[ext_resource type="Environment" uid="uid://biwg4jb5vug7u" path="res://scenes/intro_environment.tres" id="1_4bx60"] [ext_resource type="PackedScene" path="res://scenes/objects/player/Player.tscn" id="1_ioskq"] -[ext_resource type="Script" uid="uid://r1j1br652ged" path="res://scripts/entity/player/PlayerOrbitCamera.cs" id="2_yjqpq"] +[ext_resource type="PackedScene" uid="uid://b8jyb3ev3wfdq" path="res://models/tree/Low_poly_artistic_mod_1029220550_texture.glb" id="2_es01l"] +[ext_resource type="Script" uid="uid://hg57iy0s2wf4" path="res://scripts/entity/player/CinematicPlayerCamera.cs" id="3_i2l1n"] +[ext_resource type="AudioStream" uid="uid://ny0wgebnn3jt" path="res://assets/audio/First Breathing.mp3" id="4_i2l1n"] +[ext_resource type="PackedScene" uid="uid://bamcn6gjlk32t" path="res://models/tree_stump/Low_poly_artistic_mod_1029212559_texture.glb" id="5_wfs7u"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sjfbp"] albedo_color = Color(0.26657522, 0.2665752, 0.26657525, 1) -metallic = 0.55 +metallic = 0.86 roughness = 0.0 -emission_enabled = true emission = Color(0.10747983, 0.107479684, 0.10747974, 1) emission_energy_multiplier = 0.69 +clearcoat = 0.0 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yjqpq"] transparency = 1 albedo_color = Color(1, 1, 1, 0) -[sub_resource type="Environment" id="Environment_sjfbp"] -background_mode = 2 -ambient_light_color = Color(0.17641911, 0.17641908, 0.17641908, 1) -ssr_enabled = true -ssao_enabled = true +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_wfs7u"] +emission_shape_scale = Vector3(0.8, 1.1, 0.8) +emission_shape = 3 +emission_box_extents = Vector3(1, 1, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wfs7u"] +transparency = 1 +albedo_color = Color(0.6313726, 0, 0.6313726, 0.40784314) + +[sub_resource type="QuadMesh" id="QuadMesh_es01l"] +material = SubResource("StandardMaterial3D_wfs7u") +size = Vector2(0.1, 0.1) + +[sub_resource type="Animation" id="Animation_i2l1n"] +resource_name = "Intro" +length = 200.0 +tracks/0/type = "position_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CameraRig") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, 0.95222855, 0.63206935, 0, 4, 1, 0.95222855, 0.63206935, 0, 5.0506716, 1, 0.95222855, 0.63206935, 0, 15.484545, 1, 0.95222855, 0.63206935, 0, 23.333334, 1, 0.35, 0.632, 0, 25.309826, 1, 0.35, 0.632, 0, 33.433334, 1, 0.47369516, 1.339221, 0, 41.366665, 1, 1.1234865, 1.1183342, 0, 53.1, 1, 1.5997086, 0.6379874, 0, 58.566666, 1, 1.5997086, 0.6379874, 0, 58.6, 1, -0.48157293, 0.6379874, 2.590305) +tracks/1/type = "rotation_3d" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CameraRig") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = PackedFloat32Array(0, 1, 0.19407232, 0.6616169, -0.20386651, 0.69500893, 4, 1, 0.003622347, 0.6894838, -0.0038048394, 0.72428215, 5.0506716, 1, 0.003622347, 0.6894838, -0.0038048394, 0.72428215, 15.484545, 1, 0.003622347, 0.6894838, -0.0038048394, 0.72428215, 23.33975, 1, 0.003622347, 0.6894838, -0.0038048394, 0.72428215, 25.316242, 1, 0.003622347, 0.6894838, -0.0038048394, 0.72428215, 33.433334, 1, -0.0074908677, 0.6894526, 0.007869196, 0.7242494, 58.566666, 1, -0.006887784, 0.6912339, 0.007274345, 0.7225617, 58.6, 1, -0.010536044, 0.19599476, 0.0026512523, 0.9805448) +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("AudioStreamPlayer") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_i2l1n") +}], +"times": PackedFloat32Array(5.0333333) +} +tracks/2/use_blend = true +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CameraRig/SpringArm3D:spring_length") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 109.86667, 113.7), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 3.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Level/OmniLight3D:light_energy") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 5, 6.6666665, 8.066667, 10.266666, 11.933332, 13.333333, 15.453174, 16.966667, 18.066668, 19.266666, 20.2, 21.2, 22.133333, 23, 23.833334, 25.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Level/Tree/Trunk:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(25.3, 33.433334), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(0, -0.14372563, 0), Vector3(0, 0.78359985, 0)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Level/Tree/Branch1:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(30, 33.433334), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(0.04013467, 1.4272636, -0.035950065), Vector3(0.15590811, 1.9239156, -0.1869477)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Level/Tree/Branch1:scale") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(30, 33.433334), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(0.5732901, 0.29179195, 0.08233057), Vector3(1, 0.9999998, 0.99999976)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Level/Tree/Branch1:visible") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(29.866667, 30), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Level/Tree/Branch2:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(29.866667, 30), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Level/Tree/Branch2:position") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(29.966667, 33.43864), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(0.0056066513, 1.479984, 0.006046951), Vector3(0.09720588, 1.9239156, 0.22822082)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Level/Tree/Branch2:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(30, 33.43864), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(0.74571604, 0.22438565, 0.18734315), Vector3(1, 0.9999997, 0.99999976)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Level/Tree/Branch3:visible") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(29.866667, 30), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Level/Tree/Branch3:position") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(30, 33.433334), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(-0.035557985, 1.4629136, -0.041612625), Vector3(-0.20781112, 1.9239156, -0.10005897)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Level/Tree/Branch3:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(30, 33.433334), +"transitions": PackedFloat32Array(-2, 1), +"update": 0, +"values": [Vector3(0.5763863, 0.11628345, 0.35512882), Vector3(1, 0.99999964, 0.9999997)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Player:visible") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(36.633335, 37), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Player:scale") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(37.033333, 42.000004, 45.93334), +"transitions": PackedFloat32Array(-2, 1, 1), +"update": 0, +"values": [Vector3(0.09466685, 1, 0.2661013), Vector3(1, 1, 1), Vector3(1, 1, 1)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Player:position") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(37.033333, 42, 46), +"transitions": PackedFloat32Array(-2, 1, 1), +"update": 0, +"values": [Vector3(-2.7, -0.2, -0.05), Vector3(-2, -0.2, -0.05), Vector3(-1.675718, -0.33616662, 0)] +} +tracks/18/type = "method" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("CameraRig") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(113.666664), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"ReturnToPlayer" +}] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Lighting/SpotLight3D:light_energy") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(37.1, 38.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 1.464] +} +tracks/20/type = "scale_3d" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Level/Low_poly_artistic_mod_1029212559_texture") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = PackedFloat32Array(25.433332, 1, 0.5, 0.5, 0.5, 31.166666, 1, 0.2, 2.5, 0.2, 34.633335, 1, 0, 2.5, 0) +tracks/21/type = "scale_3d" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Level/Low_poly_artistic_mod_1029220550_texture") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = PackedFloat32Array(31.2, 1, 0, 1, 0, 34.7, 1, 1, 1, 1) +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Level/Low_poly_artistic_mod_1029220550_texture:visible") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(30.766666, 31.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Level/Low_poly_artistic_mod_1029212559_texture:visible") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(34.5, 34.933334), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_wfs7u"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CameraRig/SpringArm3D:spring_length") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [3.0] +} +tracks/1/type = "position_3d" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CameraRig") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = PackedFloat32Array(0, 1, 0.95222855, 0.63206935, 0) +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Level/OmniLight3D:light_energy") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Level/Tree/Trunk:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, -0.14372563, 0)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Level/Tree/Branch1:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0.15590811, 1.9239156, -0.1869477)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Level/Tree/Branch1:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 0.9999998, 0.99999976)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Level/Tree/Branch1:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Level/Tree/Branch2:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Level/Tree/Branch2:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0.09720588, 1.9239156, 0.22822082)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Level/Tree/Branch2:scale") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 0.9999997, 0.99999976)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Level/Tree/Branch3:visible") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Level/Tree/Branch3:position") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(-0.077960014, 1.9239156, -0.10005897)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Level/Tree/Branch3:scale") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 0.99999964, 0.9999997)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Player:visible") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Player:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Player:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(-2.6143656, 0.5592638, 0)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Lighting/SpotLight3D:light_energy") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.464] +} +tracks/17/type = "scale_3d" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Level/Low_poly_artistic_mod_1029212559_texture") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = PackedFloat32Array(0, 1, 1, 1, 1) +tracks/18/type = "scale_3d" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Level/Low_poly_artistic_mod_1029220550_texture") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = PackedFloat32Array(0, 1, 1, 1, 1) +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Level/Low_poly_artistic_mod_1029220550_texture:visible") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Level/Low_poly_artistic_mod_1029212559_texture:visible") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_wfs7u"] +_data = { +&"Intro": SubResource("Animation_i2l1n"), +&"RESET": SubResource("Animation_wfs7u") +} [node name="Intro" type="Node3D"] @@ -31,9 +565,6 @@ use_collision = true size = Vector3(90.028824, 0.16748047, 119.189926) material = SubResource("StandardMaterial3D_sjfbp") -[node name="testbox" type="CSGBox3D" parent="Level"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2.3956532) - [node name="WorldBorder" type="CSGBox3D" parent="Level"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.2704773, 1.6923218, -1.1884766) use_collision = true @@ -41,31 +572,110 @@ flip_faces = true size = Vector3(16.16278, 4.1883545, 11.068359) material = SubResource("StandardMaterial3D_yjqpq") +[node name="Tree" type="Node3D" parent="Level"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.6128125, 0, 0) +visible = false + +[node name="Trunk" type="CSGBox3D" parent="Level/Tree"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.14372563, 0) +size = Vector3(0.21350098, 2.3308105, 0.19812012) + +[node name="Branch1" type="CSGBox3D" parent="Level/Tree"] +transform = Transform3D(0.5035717, 0.28644052, 0.81508714, -0.49442735, 0.86921877, 4.5080903e-08, -0.70848936, -0.40300143, 0.579338, 0.15590811, 1.9239156, -0.1869477) +visible = false +size = Vector3(0.09484863, 1, 0.09069824) + +[node name="Branch2" type="CSGBox3D" parent="Level/Tree"] +transform = Transform3D(0.32065773, 0.1823958, -0.92946756, -0.49442732, 0.86921877, 5.9402527e-09, 0.8079111, 0.45955414, 0.3689032, 0.09720588, 1.9239156, 0.22822082) +visible = false +size = Vector3(0.09484863, 1, 0.09069824) + +[node name="Branch3" type="CSGBox3D" parent="Level/Tree"] +transform = Transform3D(-0.8235712, -0.4684618, 0.31980273, -0.49442726, 0.8692187, 9.0412655e-09, -0.2779787, -0.15811917, -0.94748384, -0.077960014, 1.9239156, -0.10005897) +visible = false +size = Vector3(0.09484863, 1, 0.09069824) + +[node name="Leaves?!" type="CSGBox3D" parent="Level/Tree"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5392773, 0) +visible = false + +[node name="Low_poly_artistic_mod_1029212559_texture" parent="Level" instance=ExtResource("5_wfs7u")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.6868296, -0.07174271, -0.06276941) + +[node name="OmniLight3D" type="OmniLight3D" parent="Level"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3597004, 0.46656948, 0) +light_color = Color(1, 0.050980393, 1, 1) +light_energy = 0.0 + +[node name="GPUParticles3D" type="GPUParticles3D" parent="Level"] +transform = Transform3D(-0.03800422, 0, 0.99927783, 0, 1, 0, -0.99927783, 0, -0.03800422, -2.8208206, 0.3403339, 0) +visible = false +amount = 10000 +process_material = SubResource("ParticleProcessMaterial_wfs7u") +draw_pass_1 = SubResource("QuadMesh_es01l") + +[node name="Low_poly_artistic_mod_1029220550_texture" parent="Level" instance=ExtResource("2_es01l")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.6259542, 0.59568787, -0.09897578) +visible = false + [node name="Lighting" type="Node3D" parent="."] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="Lighting"] transform = Transform3D(1, 0, 0, 0, 0.83890814, 0.544273, 0, -0.544273, 0.83890814, 0, 2.4886956, 0) +light_energy = 0.785 [node name="SpotLight3D" type="SpotLight3D" parent="Lighting"] -transform = Transform3D(1, 0, 0, 0, 0.66676664, 0.74526656, 0, -0.74526656, 0.66676664, 0, 1.4840733, 0) +transform = Transform3D(0.23140298, -0.529179, 0.8163469, 0.14431599, 0.8485102, 0.5091201, -0.96209437, 0, 0.2727168, 1.0406365, 2.6058145, 0) +light_energy = 1.464 +shadow_enabled = true [node name="Environment" type="Node3D" parent="."] +[node name="WorldEnvironment" type="WorldEnvironment" parent="Environment"] +environment = ExtResource("1_4bx60") + [node name="LightmapGI" type="LightmapGI" parent="Environment"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9580787, 0) - -[node name="WorldEnvironment" type="WorldEnvironment" parent="Environment"] -environment = SubResource("Environment_sjfbp") +supersampling = true [node name="Player" parent="." node_paths=PackedStringArray("CameraRig") instance=ExtResource("1_ioskq")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5592638, 0) +transform = Transform3D(-0.025496505, 0, 0.9996749, 0, 1, 0, -0.9996749, 0, -0.025496505, -2.6143656, 0.5592638, 0) +visible = false CameraRig = NodePath("../CameraRig") -[node name="CameraRig" type="Marker3D" parent="."] -script = ExtResource("2_yjqpq") +[node name="CameraRig" type="Marker3D" parent="." node_paths=PackedStringArray("PlayerRef")] +transform = Transform3D(0.04640358, -0.02076625, 0.99870694, 0.001023366, 0.99978447, 0.020741103, -0.9989222, 5.9581253e-05, 0.04641483, 0.95222855, 0.63206935, 0) +script = ExtResource("3_i2l1n") +DefaultAnchored = false +PlayerRef = NodePath("../Player") [node name="SpringArm3D" type="SpringArm3D" parent="CameraRig"] spring_length = 3.0 [node name="Camera3D" type="Camera3D" parent="CameraRig/SpringArm3D"] +transform = Transform3D(0.9999998, -2.3226221e-10, -3.7252903e-09, 2.120828e-10, 0.9999998, -4.2818478e-09, 0, 1.3165096e-09, 0.99999994, 0, 0, 0) +environment = ExtResource("1_4bx60") current = true + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_wfs7u") +} +autoplay = "Intro" + +[node name="UI" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="Label" type="Label" parent="UI"] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 23.0 +text = "ALPHA - this scene is a placeholder proof of concept. +The vision is between the lines" + +[editable path="Level/Low_poly_artistic_mod_1029212559_texture"] diff --git a/game/scenes/intro_environment.tres b/game/scenes/intro_environment.tres new file mode 100644 index 0000000..380edde --- /dev/null +++ b/game/scenes/intro_environment.tres @@ -0,0 +1,12 @@ +[gd_resource type="Environment" format=3 uid="uid://biwg4jb5vug7u"] + +[resource] +background_mode = 2 +ambient_light_color = Color(0.17641911, 0.17641908, 0.17641908, 1) +ssr_enabled = true +ssr_max_steps = 150 +ssao_enabled = true +ssil_enabled = true +glow_enabled = true +glow_normalized = true +adjustment_brightness = 0.84 diff --git a/game/scenes/modal/basic_text_modal.tscn b/game/scenes/modal/basic_text_modal.tscn index af562fc..e5eee9e 100644 --- a/game/scenes/modal/basic_text_modal.tscn +++ b/game/scenes/modal/basic_text_modal.tscn @@ -2,7 +2,7 @@ [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"] +[ext_resource type="Theme" uid="uid://cpub04oardilt" path="res://scenes/modal/content_theme.tres" id="2_37te1"] [sub_resource type="LabelSettings" id="LabelSettings_84nss"] font_size = 21 diff --git a/game/scenes/connecting_menu/content_theme.tres b/game/scenes/modal/content_theme.tres similarity index 100% rename from game/scenes/connecting_menu/content_theme.tres rename to game/scenes/modal/content_theme.tres diff --git a/game/scenes/title_screen/button_theme.tres b/game/scenes/title_screen/button_theme.tres new file mode 100644 index 0000000..36b046f --- /dev/null +++ b/game/scenes/title_screen/button_theme.tres @@ -0,0 +1,91 @@ +[gd_resource type="Theme" load_steps=6 format=3 uid="uid://bfrtp26pjsiky"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2xpt8"] +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.3) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fhk5g"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 1, 1, 0.75) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.532688, 0.61489356, 0.5467921, 1) +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 = 2.0 +expand_margin_top = 2.0 +expand_margin_right = 2.0 +expand_margin_bottom = 2.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qarh0"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.25366646, 0.3997396, 0.28587192, 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 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_n5nfb"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.2017354, 0.36580423, 0.2857492, 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 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tjbfd"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.12769759, 0.19134408, 0.1398423, 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 + +[resource] +Button/colors/font_color = Color(0.875, 0.875, 0.875, 1) +Button/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5) +Button/colors/font_focus_color = Color(0.95, 0.95, 0.95, 1) +Button/colors/font_hover_color = Color(0.95, 0.95, 0.95, 1) +Button/colors/font_hover_pressed_color = Color(1, 1, 1, 1) +Button/colors/font_outline_color = Color(0, 0, 0, 1) +Button/colors/font_pressed_color = Color(1, 1, 1, 1) +Button/colors/icon_disabled_color = Color(1, 1, 1, 0.4) +Button/colors/icon_focus_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_color = Color(1, 1, 1, 1) +Button/colors/icon_hover_pressed_color = Color(1, 1, 1, 1) +Button/colors/icon_normal_color = Color(1, 1, 1, 1) +Button/colors/icon_pressed_color = Color(1, 1, 1, 1) +Button/styles/disabled = SubResource("StyleBoxFlat_2xpt8") +Button/styles/focus = SubResource("StyleBoxFlat_fhk5g") +Button/styles/hover = SubResource("StyleBoxFlat_qarh0") +Button/styles/normal = SubResource("StyleBoxFlat_n5nfb") +Button/styles/pressed = SubResource("StyleBoxFlat_tjbfd") diff --git a/game/scenes/title_screen/main_menu.tscn b/game/scenes/title_screen/main_menu.tscn new file mode 100644 index 0000000..b0cad17 --- /dev/null +++ b/game/scenes/title_screen/main_menu.tscn @@ -0,0 +1,78 @@ +[gd_scene load_steps=5 format=3 uid="uid://1q85kxr022wx"] + +[ext_resource type="Script" uid="uid://ogabnaxf3i7u" path="res://scripts/menus/mainmenu.gd" id="1_823sm"] +[ext_resource type="Texture2D" uid="uid://dmgk5ikupf2e3" path="res://assets/images/title_v1.png" id="1_culcy"] +[ext_resource type="Theme" uid="uid://bfrtp26pjsiky" path="res://scenes/title_screen/button_theme.tres" id="2_3tcxi"] + +[sub_resource type="LabelSettings" id="LabelSettings_3tcxi"] +font_size = 30 +font_color = Color(0.79305786, 0.89570165, 0.8269901, 1) +shadow_size = 0 +shadow_color = Color(0, 0, 0, 0.25882354) +shadow_offset = Vector2(2, 2) + +[node name="MainMenu" 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_823sm") + +[node name="Background" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_culcy") +expand_mode = 4 +stretch_mode = 5 + +[node name="ButtonsContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +grow_vertical = 2 +alignment = 1 + +[node name="MarginContainer" type="MarginContainer" parent="ButtonsContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 150 + +[node name="VBoxContainer" type="VBoxContainer" parent="ButtonsContainer/MarginContainer"] +layout_mode = 2 + +[node name="Label2" type="Label" parent="ButtonsContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Echoform" +label_settings = SubResource("LabelSettings_3tcxi") + +[node name="ConnectingLabel" type="Label" parent="ButtonsContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Connecting..." + +[node name="ActionButtonsVBox" type="VBoxContainer" parent="ButtonsContainer/MarginContainer/VBoxContainer"] +visible = false +layout_mode = 2 + +[node name="ContinueButton" type="Button" parent="ButtonsContainer/MarginContainer/VBoxContainer/ActionButtonsVBox"] +layout_mode = 2 +theme = ExtResource("2_3tcxi") +text = "Continue Journey" + +[node name="SettingsButton" type="Button" parent="ButtonsContainer/MarginContainer/VBoxContainer/ActionButtonsVBox"] +layout_mode = 2 +theme = ExtResource("2_3tcxi") +text = "Settings" +alignment = 0 + +[node name="ExitButton" type="Button" parent="ButtonsContainer/MarginContainer/VBoxContainer/ActionButtonsVBox"] +layout_mode = 2 +theme = ExtResource("2_3tcxi") +text = "Exit" +alignment = 0 + +[connection signal="pressed" from="ButtonsContainer/MarginContainer/VBoxContainer/ActionButtonsVBox/ContinueButton" to="." method="_on_continue_button_pressed"] diff --git a/game/scripts/authoritative/AuthoritativeServerConnection.cs b/game/scripts/authoritative/AuthoritativeServerConnection.cs index 4eb9c58..a7d298a 100644 --- a/game/scripts/authoritative/AuthoritativeServerConnection.cs +++ b/game/scripts/authoritative/AuthoritativeServerConnection.cs @@ -8,6 +8,9 @@ public partial class AuthoritativeServerConnection : Node { public static AuthoritativeServerConnection Instance { get; private set; } + [Signal] + public delegate void ConnectedEventHandler(); + public Godot.Collections.Dictionary EnforcedState { get; private set; } = new(); private string origin; @@ -22,7 +25,7 @@ public partial class AuthoritativeServerConnection : Node { public override void _Ready() { if (Instance != null) { - GD.PrintErr("AuthoritativeServerConnection instance already exists. Destroying duplicate."); + EchoformLogger.Default.Error("AuthoritativeServerConnection instance already exists. Destroying duplicate."); QueueFree(); return; } @@ -37,22 +40,27 @@ public override void _Ready() { return; } - GD.Print("Discovered Zeroconf host: ", host.DisplayName, " at ", host.IPAddress); + EchoformLogger.Default.Debug("Discovered Zeroconf host: ", host.DisplayName, " at ", host.IPAddress); host.Services.TryGetValue("echoform._http._tcp.local.", out var service); if (service != null) { origin = $"{host.IPAddress}:{service.Port}"; connectReady = true; - GD.Print("Using EchoformMMO service at: ", origin); + EchoformLogger.Default.Info("Using EchoformMMO service at: ", origin); } else { - GD.PrintErr("No EchoformMMO service found on host: ", host.DisplayName); + EchoformLogger.Default.Debug("No EchoformMMO service found on host: ", host.DisplayName); } }, error => { - GD.PrintErr("Error during Zeroconf service discovery: ", error); + EchoformLogger.Default.Error("Error during Zeroconf service discovery: ", error); origin = "localhost:3000"; Authenticate(); }, () => { - GD.Print("Zeroconf service discovery completed."); + EchoformLogger.Default.Debug("Zeroconf service discovery completed."); + if (origin == null) { + EchoformLogger.Default.Debug("No Zeroconf service found. Falling back to localhost:3000"); + origin = "localhost:3000"; + Authenticate(); + } }); } @@ -78,19 +86,16 @@ private void OnRequestCompleted(long result, long responseCode, string[] headers var json = Json.ParseString(Encoding.UTF8.GetString(body)).AsGodotDictionary(); if (responseCode == 200) { - GD.Print("Authentication successful. Response: ", json); + EchoformLogger.Default.Info("Authentication succeeded."); + EchoformLogger.Default.Debug("Auth Response: ", json); _accessToken = json["accessToken"].AsString(); _refreshToken = json["refreshToken"].AsString(); Connect(); } else { - GD.PrintErr("Authentication failed. Response code: ", responseCode, ", Body: ", + EchoformLogger.Default.Error("Authentication failed. Response code: ", responseCode, ", Body: ", Encoding.UTF8.GetString(body)); - - var couldntConnectModal = couldntConnectModalScene.Instantiate(); - couldntConnectModal.SetAnchorsPreset(Control.LayoutPreset.FullRect); - GetTree().Root.AddChild(couldntConnectModal); - + ShowCouldntConnectModal(); Reset(); } } @@ -108,7 +113,7 @@ private void Reset() { } private void Connect() { - GD.Print("Starting authoritative server connection..."); + EchoformLogger.Default.Debug("Starting authoritative server connection..."); _socket = new WebSocketPeer(); _socket.SetHeartbeatInterval(5); @@ -121,7 +126,8 @@ private void Connect() { if (error != Error.Ok) { Reset(); - GD.PrintErr("Failed to connect to authoritative server: ", error); + EchoformLogger.Default.Error("Failed to connect to authoritative server: ", error); + ShowCouldntConnectModal(); return; } else { SetProcess(true); @@ -146,34 +152,38 @@ public override void _Process(double delta) { var packet = _socket.GetPacket(); if (packet is byte[] data) { var message = System.Text.Encoding.UTF8.GetString(data); - GD.Print("Received message: ", message); + EchoformLogger.Default.Debug("Received message: ", message); var parsedPacket = PacketTranslator.GetFromString(message); if (parsedPacket is ClientboundPacket clientboundPacket) { clientboundPacket.Handle(); - GD.Print("Handled packet: ", clientboundPacket.Id); + EchoformLogger.Default.Debug("Handled packet: ", clientboundPacket.Id); } else { - GD.PrintErr("Received unknown packet type: ", parsedPacket?.GetType()); + EchoformLogger.Default.Debug("Received unknown packet type: ", parsedPacket?.GetType()); } } else { - GD.PrintErr("Received non-byte packet: ", packet); + EchoformLogger.Default.Debug("Received non-byte packet: ", packet); } } } else if (state == WebSocketPeer.State.Closing) { - GD.Print("WebSocket is closing."); + EchoformLogger.Default.Debug("WebSocket is closing."); } else if (state == WebSocketPeer.State.Closed) { - GD.Print("WebSocket is closed.", _socket.GetPacketError()); + EchoformLogger.Default.Debug("WebSocket is closed.", _socket.GetPacketError()); Reset(); } else { - GD.Print("WebSocket state: ", state); + EchoformLogger.Default.Debug("WebSocket state: ", state); } } + public void EmitConnected() { + EmitSignal(SignalName.Connected); + } + public void SendPacket(ServerboundPacket packet) { if (_socket == null || _socket.GetReadyState() != WebSocketPeer.State.Open) { - GD.PrintErr("Cannot send packet, WebSocket is not open."); + EchoformLogger.Default.Error("Cannot send packet, WebSocket is not open."); return; } @@ -186,10 +196,16 @@ public void SendPacket(ServerboundPacket packet) { var jsonString = Json.Stringify(serializedPacket); _socket.SendText(jsonString); - GD.Print("Sent packet: ", jsonString); + EchoformLogger.Default.Debug("Sent packet: ", jsonString); } public void SendReady() { SendPacket(new ClientReadyPacket()); } + + private void ShowCouldntConnectModal() { + var couldntConnectModal = couldntConnectModalScene.Instantiate(); + couldntConnectModal.SetAnchorsPreset(Control.LayoutPreset.FullRect); + GetTree().Root.AddChild(couldntConnectModal); + } } diff --git a/game/scripts/authoritative/protocol/ClientboundPacket.cs b/game/scripts/authoritative/protocol/ClientboundPacket.cs index 045c7d5..4ec2ea2 100644 --- a/game/scripts/authoritative/protocol/ClientboundPacket.cs +++ b/game/scripts/authoritative/protocol/ClientboundPacket.cs @@ -6,6 +6,6 @@ public virtual void Deserialize(Dictionary dictionary) { } public virtual void Handle() { - GD.Print("No handler implemented for packet: ", Id); + EchoformLogger.Default.Debug("No handler implemented for packet: ", Id); } } \ No newline at end of file diff --git a/game/scripts/authoritative/protocol/PacketTranslator.cs b/game/scripts/authoritative/protocol/PacketTranslator.cs index 1e796dc..0bb04c1 100644 --- a/game/scripts/authoritative/protocol/PacketTranslator.cs +++ b/game/scripts/authoritative/protocol/PacketTranslator.cs @@ -5,14 +5,14 @@ public static Packet GetFromString(string packetString) { var dictionary = Json.ParseString(packetString).AsGodotDictionary(); if (!dictionary.ContainsKey("id")) { - GD.PrintErr("Packet does not contain 'id' key: ", packetString); + EchoformLogger.Default.Error("Packet does not contain 'id' key: ", packetString); return null; } var packetId = dictionary["id"].AsStringName(); var data = dictionary.ContainsKey("data") ? dictionary["data"] : default; - GD.Print("Found packet of id: ", packetId); + EchoformLogger.Default.Debug("Found packet of id: ", packetId); ClientboundPacket packet; @@ -27,7 +27,7 @@ public static Packet GetFromString(string packetString) { packet = new ForceScenePacket(); break; default: - GD.PrintErr("Unknown packet id: ", packetId); + EchoformLogger.Default.Debug("Unknown packet id: ", packetId); return null; } diff --git a/game/scripts/authoritative/protocol/clientbound/ForceScenePacket.cs b/game/scripts/authoritative/protocol/clientbound/ForceScenePacket.cs index 5a4413d..0266a5c 100644 --- a/game/scripts/authoritative/protocol/clientbound/ForceScenePacket.cs +++ b/game/scripts/authoritative/protocol/clientbound/ForceScenePacket.cs @@ -13,11 +13,11 @@ public override void Deserialize(Dictionary dictionary) { } public override void Handle() { - GD.Print($"Forcing scene change to: {SceneName}"); + EchoformLogger.Default.Debug($"Forcing scene change to: {SceneName}"); var loadingGlobal = AuthoritativeServerConnection.Instance.GetTree().Root.GetNode("/root/GlobalLoading"); if (!SceneNames.Map.TryGetValue(SceneName, out var scene_path)) { - GD.PrintErr($"Scene name '{SceneName}' not found in SceneNames.Map."); + EchoformLogger.Default.Error($"Forced scene name '{SceneName}' not found in SceneNames.Map."); return; } diff --git a/game/scripts/authoritative/protocol/clientbound/SetEnforcedStatePacket.cs b/game/scripts/authoritative/protocol/clientbound/SetEnforcedStatePacket.cs index aa7252e..7510fa6 100644 --- a/game/scripts/authoritative/protocol/clientbound/SetEnforcedStatePacket.cs +++ b/game/scripts/authoritative/protocol/clientbound/SetEnforcedStatePacket.cs @@ -17,6 +17,6 @@ public override void Deserialize(Dictionary dictionary) { public override void Handle() { AuthoritativeServerConnection.Instance.EnforcedState.Add(Key, Value); - GD.Print($"Enforced state updated: {Key} = {Value}"); + EchoformLogger.Default.Debug($"Enforced state updated: {Key} = {Value}"); } } \ No newline at end of file diff --git a/game/scripts/authoritative/protocol/clientbound/WelcomePacket.cs b/game/scripts/authoritative/protocol/clientbound/WelcomePacket.cs index c6abc42..cc6cfa5 100644 --- a/game/scripts/authoritative/protocol/clientbound/WelcomePacket.cs +++ b/game/scripts/authoritative/protocol/clientbound/WelcomePacket.cs @@ -13,5 +13,7 @@ public override void Deserialize(Dictionary dictionary) { ServerVersion = dictionary["serverVersion"].AsString(); Environment = dictionary["environment"].AsString(); FeatureFlags = dictionary["featureFlags"].AsStringArray(); + + AuthoritativeServerConnection.Instance.EmitConnected(); } } \ No newline at end of file diff --git a/game/scripts/entity/player/CinematicPlayerCamera.cs b/game/scripts/entity/player/CinematicPlayerCamera.cs new file mode 100644 index 0000000..30ad4ab --- /dev/null +++ b/game/scripts/entity/player/CinematicPlayerCamera.cs @@ -0,0 +1,61 @@ +using Godot; +using System; + +public partial class CinematicPlayerCamera : PlayerOrbitCamera { + [ExportSubgroup("Cinematic Settings")] [Export] + public bool DefaultAnchored = true; + + [Export] public Player PlayerRef; + + private bool _isAnchored; + + private Vector3 _cinematicTargetPosition; + private Quaternion _cinematicTargetRotation; + private readonly float _cinematicLerpSpeed = 3f; + + // Called when the node enters the scene tree for the first time. + public override void _Ready() { + base._Ready(); + _isAnchored = DefaultAnchored; + PlayerRef.ControlEnabled = _isAnchored; + } + + public override void _Input(InputEvent @event) { + if (_isAnchored) { + base._Input(@event); + } + } + + public void Detach() { + _isAnchored = false; + PlayerRef.ControlEnabled = false; + } + + public void DetachAndMoveTo(Vector3 targetPosition, Vector3 targetLookAt, float duration = 2.0f) { + Detach(); + + var tween = GetTree().CreateTween(); + + // Build target transform + var targetTransform = new Transform3D().LookingAt(targetLookAt, Vector3.Up); + targetTransform.Origin = targetPosition; + + // Tween global transform directly + tween.TweenProperty(this, "global_transform", targetTransform, duration) + .SetTrans(Tween.TransitionType.Cubic) + .SetEase(Tween.EaseType.Out); + + // Owptional callback after tween ends + tween.TweenCallback(Callable.From(() => { + EchoformLogger.Default.Debug("Cinematic camera move complete."); + // Optional: trigger next cutscene step + })); + } + + + public void ReturnToPlayer() { + _isAnchored = true; + PlayerRef.ControlEnabled = true; + // Optionally snap or lerp back to the player position manually + } +} \ No newline at end of file diff --git a/game/scripts/entity/player/CinematicPlayerCamera.cs.uid b/game/scripts/entity/player/CinematicPlayerCamera.cs.uid new file mode 100644 index 0000000..ec4a428 --- /dev/null +++ b/game/scripts/entity/player/CinematicPlayerCamera.cs.uid @@ -0,0 +1 @@ +uid://hg57iy0s2wf4 diff --git a/game/scripts/entity/player/Player.cs b/game/scripts/entity/player/Player.cs index f23d0d0..7a4a339 100644 --- a/game/scripts/entity/player/Player.cs +++ b/game/scripts/entity/player/Player.cs @@ -9,6 +9,8 @@ public partial class Player : CharacterBody3D { [Export] public PlayerOrbitCamera CameraRig; [Export] public float CameraDistanceY = 1f; + public bool ControlEnabled = true; + private AnimationPlayer characterAnimations; public override void _Ready() { @@ -16,6 +18,10 @@ public override void _Ready() { } public override void _PhysicsProcess(double delta) { + if (!ControlEnabled) { + return; + } + Vector3 velocity = Velocity; // Add the gravity. diff --git a/game/scripts/menus/mainmenu.gd b/game/scripts/menus/mainmenu.gd index 32e94a7..de2c53b 100644 --- a/game/scripts/menus/mainmenu.gd +++ b/game/scripts/menus/mainmenu.gd @@ -1,4 +1,11 @@ extends Control -func _on_play_pressed(): +func _ready() -> void: + AuthoritativeServerConnection.Connected.connect(_on_connected) + +func _on_connected() -> void: + $ButtonsContainer/MarginContainer/VBoxContainer/ConnectingLabel.visible = false + $ButtonsContainer/MarginContainer/VBoxContainer/ActionButtonsVBox.visible = true + +func _on_continue_button_pressed() -> void: AuthoritativeServerConnection.SendReady() diff --git a/game/scripts/util/EchoformLogger.cs b/game/scripts/util/EchoformLogger.cs new file mode 100644 index 0000000..8d7896b --- /dev/null +++ b/game/scripts/util/EchoformLogger.cs @@ -0,0 +1,68 @@ +using Godot; +using System; +using System.Diagnostics; +using System.Linq; + +public partial class EchoformLogger : Node { + public static EchoformLogger Default; + + public LogLevel Level = LogLevel.INFO; + + public EchoformLogger() { + if (Default == null) { + Default = this; + } + + if (OS.IsDebugBuild() || Engine.IsEditorHint()) { + Level = LogLevel.DEBUG; + } + } + + public void Debug(params object[] what) { + if (Level <= LogLevel.DEBUG) { + GD.PrintRich("[color=light blue]", Format(LogLevel.DEBUG, what) + "[/color]"); + } + } + + public void Info(params object[] what) { + if (Level <= LogLevel.INFO) { + GD.Print(Format(LogLevel.INFO, what)); + } + } + + public void Warn(params object[] what) { + if (Level <= LogLevel.WARN) { + GD.PrintRich("[color=yellow]", Format(LogLevel.WARN, what), "[/color]"); + } + } + + public void Error(params object[] what) { + if (Level <= LogLevel.ERROR) { + GD.PrintErr(Format(LogLevel.ERROR, what)); + } + } + + private string Format(LogLevel level, params object[] what) { + string template = DateTime.Now.ToString("HH:mm:ss") + $" | {level} @ Echoform "; + + var stackTrace = new StackTrace(); + var frame = stackTrace.GetFrame(2); // Get the caller frame + + if (frame != null) { + var fileName = frame.GetMethod()?.DeclaringType?.FullName; + var fileLine = frame.GetFileLineNumber(); + + if (fileName != null) { + template += "> " + fileName + " "; + + if (fileLine > 0) { + template += ":" + fileLine + " "; + } + } + } + + template += "| "; + + return template + string.Join(" ", what.Select(o => o?.ToString() ?? "null")); + } +} \ No newline at end of file diff --git a/game/scripts/util/EchoformLogger.cs.uid b/game/scripts/util/EchoformLogger.cs.uid new file mode 100644 index 0000000..d3565cb --- /dev/null +++ b/game/scripts/util/EchoformLogger.cs.uid @@ -0,0 +1 @@ +uid://b3ecuu5yjfop0 diff --git a/game/scripts/util/LogLevel.cs b/game/scripts/util/LogLevel.cs new file mode 100644 index 0000000..da62861 --- /dev/null +++ b/game/scripts/util/LogLevel.cs @@ -0,0 +1,6 @@ +public enum LogLevel { + DEBUG = 0, + INFO = 1, + WARN = 2, + ERROR = 3, +} \ No newline at end of file diff --git a/game/scripts/util/LogLevel.cs.uid b/game/scripts/util/LogLevel.cs.uid new file mode 100644 index 0000000..2e52d97 --- /dev/null +++ b/game/scripts/util/LogLevel.cs.uid @@ -0,0 +1 @@ +uid://k1f1ilo1t5lm