diff --git a/artifacts/debug_terrain_detail_0.png b/artifacts/debug_terrain_detail_0.png new file mode 100644 index 0000000..3d36e9b Binary files /dev/null and b/artifacts/debug_terrain_detail_0.png differ diff --git a/artifacts/debug_terrain_detail_0.png.import b/artifacts/debug_terrain_detail_0.png.import new file mode 100644 index 0000000..64cb097 --- /dev/null +++ b/artifacts/debug_terrain_detail_0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://q7duq3k25tnb" +path="res://.godot/imported/debug_terrain_detail_0.png-4a938efcb6cb752b2d235d55559d4ae2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/debug_terrain_detail_0.png" +dest_files=["res://.godot/imported/debug_terrain_detail_0.png-4a938efcb6cb752b2d235d55559d4ae2.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/artifacts/debug_terrain_detail_1.png b/artifacts/debug_terrain_detail_1.png new file mode 100644 index 0000000..7c5845e Binary files /dev/null and b/artifacts/debug_terrain_detail_1.png differ diff --git a/artifacts/debug_terrain_detail_1.png.import b/artifacts/debug_terrain_detail_1.png.import new file mode 100644 index 0000000..52bf9d5 --- /dev/null +++ b/artifacts/debug_terrain_detail_1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ciso4027v6l5" +path="res://.godot/imported/debug_terrain_detail_1.png-604e53ce1bea9c4c6b05fdcc96c3e6e9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/debug_terrain_detail_1.png" +dest_files=["res://.godot/imported/debug_terrain_detail_1.png-604e53ce1bea9c4c6b05fdcc96c3e6e9.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/artifacts/debug_terrain_detail_2.png b/artifacts/debug_terrain_detail_2.png new file mode 100644 index 0000000..1a55ad4 Binary files /dev/null and b/artifacts/debug_terrain_detail_2.png differ diff --git a/artifacts/debug_terrain_detail_2.png.import b/artifacts/debug_terrain_detail_2.png.import new file mode 100644 index 0000000..cbb0a76 --- /dev/null +++ b/artifacts/debug_terrain_detail_2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btd8v8uiwdi7m" +path="res://.godot/imported/debug_terrain_detail_2.png-0778f6520829dc32f8d902b34a7211ba.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/debug_terrain_detail_2.png" +dest_files=["res://.godot/imported/debug_terrain_detail_2.png-0778f6520829dc32f8d902b34a7211ba.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/artifacts/debug_terrain_detail_3.png b/artifacts/debug_terrain_detail_3.png new file mode 100644 index 0000000..d00c6b5 Binary files /dev/null and b/artifacts/debug_terrain_detail_3.png differ diff --git a/artifacts/debug_terrain_detail_3.png.import b/artifacts/debug_terrain_detail_3.png.import new file mode 100644 index 0000000..389354b --- /dev/null +++ b/artifacts/debug_terrain_detail_3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jtoidls2hd2o" +path="res://.godot/imported/debug_terrain_detail_3.png-b9afcbca7b931ac8eac76abbb6fb70c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/debug_terrain_detail_3.png" +dest_files=["res://.godot/imported/debug_terrain_detail_3.png-b9afcbca7b931ac8eac76abbb6fb70c7.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/artifacts/debug_terrain_detail_4.png b/artifacts/debug_terrain_detail_4.png new file mode 100644 index 0000000..2451764 Binary files /dev/null and b/artifacts/debug_terrain_detail_4.png differ diff --git a/artifacts/debug_terrain_detail_4.png.import b/artifacts/debug_terrain_detail_4.png.import new file mode 100644 index 0000000..b07040c --- /dev/null +++ b/artifacts/debug_terrain_detail_4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xm24oe1lp0fa" +path="res://.godot/imported/debug_terrain_detail_4.png-6f6577b6cbe2042b0a5ace84e45787dc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/debug_terrain_detail_4.png" +dest_files=["res://.godot/imported/debug_terrain_detail_4.png-6f6577b6cbe2042b0a5ace84e45787dc.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/artifacts/debug_terrain_detail_5.png b/artifacts/debug_terrain_detail_5.png new file mode 100644 index 0000000..3a0694a Binary files /dev/null and b/artifacts/debug_terrain_detail_5.png differ diff --git a/artifacts/debug_terrain_detail_5.png.import b/artifacts/debug_terrain_detail_5.png.import new file mode 100644 index 0000000..5b91e4a --- /dev/null +++ b/artifacts/debug_terrain_detail_5.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bo7fqn4eddo3x" +path="res://.godot/imported/debug_terrain_detail_5.png-46a8c44eb13e4c9e920e28451efe9f96.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/debug_terrain_detail_5.png" +dest_files=["res://.godot/imported/debug_terrain_detail_5.png-46a8c44eb13e4c9e920e28451efe9f96.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/artifacts/earthlike_review.png b/artifacts/earthlike_review.png new file mode 100644 index 0000000..cd497d6 Binary files /dev/null and b/artifacts/earthlike_review.png differ diff --git a/artifacts/earthlike_review.png.import b/artifacts/earthlike_review.png.import new file mode 100644 index 0000000..0f6fb30 --- /dev/null +++ b/artifacts/earthlike_review.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qlhsclep6yg2" +path="res://.godot/imported/earthlike_review.png-cc9d1bfb20dfcc0085ff58141b823d3d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/earthlike_review.png" +dest_files=["res://.godot/imported/earthlike_review.png-cc9d1bfb20dfcc0085ff58141b823d3d.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/artifacts/engineer_event_offer.png b/artifacts/engineer_event_offer.png new file mode 100644 index 0000000..2fbc129 Binary files /dev/null and b/artifacts/engineer_event_offer.png differ diff --git a/artifacts/engineer_event_offer.png.import b/artifacts/engineer_event_offer.png.import new file mode 100644 index 0000000..72a70a7 --- /dev/null +++ b/artifacts/engineer_event_offer.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yvdle07blh73" +path="res://.godot/imported/engineer_event_offer.png-27c0730be9c0229cdd8e4b7870ab8e01.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/engineer_event_offer.png" +dest_files=["res://.godot/imported/engineer_event_offer.png-27c0730be9c0229cdd8e4b7870ab8e01.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/artifacts/engineer_event_result.png b/artifacts/engineer_event_result.png new file mode 100644 index 0000000..e840ac7 Binary files /dev/null and b/artifacts/engineer_event_result.png differ diff --git a/artifacts/engineer_event_result.png.import b/artifacts/engineer_event_result.png.import new file mode 100644 index 0000000..087c006 --- /dev/null +++ b/artifacts/engineer_event_result.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6w3yd3cb5ym5" +path="res://.godot/imported/engineer_event_result.png-f0c7659bbd64b785733b7caf1a27df1b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/engineer_event_result.png" +dest_files=["res://.godot/imported/engineer_event_result.png-f0c7659bbd64b785733b7caf1a27df1b.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/artifacts/freighter_hangar.png b/artifacts/freighter_hangar.png new file mode 100644 index 0000000..264f96b Binary files /dev/null and b/artifacts/freighter_hangar.png differ diff --git a/artifacts/freighter_hangar.png.import b/artifacts/freighter_hangar.png.import new file mode 100644 index 0000000..828c7c4 --- /dev/null +++ b/artifacts/freighter_hangar.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://iebk8bsvgd1r" +path="res://.godot/imported/freighter_hangar.png-3e10dfd8000a95bed7d3e140694f2c51.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/freighter_hangar.png" +dest_files=["res://.godot/imported/freighter_hangar.png-3e10dfd8000a95bed7d3e140694f2c51.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/artifacts/freighter_prompt_fixed.png b/artifacts/freighter_prompt_fixed.png new file mode 100644 index 0000000..b90ba70 Binary files /dev/null and b/artifacts/freighter_prompt_fixed.png differ diff --git a/artifacts/freighter_prompt_fixed.png.import b/artifacts/freighter_prompt_fixed.png.import new file mode 100644 index 0000000..5793b8b --- /dev/null +++ b/artifacts/freighter_prompt_fixed.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8f78emahh0xf" +path="res://.godot/imported/freighter_prompt_fixed.png-7b70c1b2ebd96fad4965889e348ac0fd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/freighter_prompt_fixed.png" +dest_files=["res://.godot/imported/freighter_prompt_fixed.png-7b70c1b2ebd96fad4965889e348ac0fd.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/artifacts/freighter_workshop.png b/artifacts/freighter_workshop.png new file mode 100644 index 0000000..fb3519f Binary files /dev/null and b/artifacts/freighter_workshop.png differ diff --git a/artifacts/freighter_workshop.png.import b/artifacts/freighter_workshop.png.import new file mode 100644 index 0000000..453f504 --- /dev/null +++ b/artifacts/freighter_workshop.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://doit1olkcdbab" +path="res://.godot/imported/freighter_workshop.png-0ad55aee9bb33b03fd38a26ee6d1021b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/freighter_workshop.png" +dest_files=["res://.godot/imported/freighter_workshop.png-0ad55aee9bb33b03fd38a26ee6d1021b.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/artifacts/ground_material_import.log b/artifacts/ground_material_import.log new file mode 100644 index 0000000..bb81092 --- /dev/null +++ b/artifacts/ground_material_import.log @@ -0,0 +1,73 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[ 0% ] first_scan_filesystem | Started Project initialization (5 steps) +[ 0% ] first_scan_filesystem | Scanning file structure... +[ 16% ] first_scan_filesystem | Loading global class names... +[ 33% ] first_scan_filesystem | Verifying GDExtensions... +[ 50% ] first_scan_filesystem | Creating autoload scripts... +[ 66% ] first_scan_filesystem | Initializing plugins... +Godot MCP Toolkit v1.0.3 — by NPGameDev · npgamedev.com +[MCPExtensions] Hot-reload watcher active +[MCPServer] port: scanning 6550-6560 (default) +[MCPServer] session token written to user://addons/godot_mcp_toolkit/project_instance_32cc2271ac67/mcp_token +[MCPServer] listening on 127.0.0.1:6551 +[MCPRegistry] registered c:/users/tomek/documents/godot/randoloot on port 6551 +[ 83% ] first_scan_filesystem | Starting file scan... +[ DONE ] first_scan_filesystem + +[ 0% ] _update_scan_actions | Started Scanning actions... (11 steps) +[ 0% ] _update_scan_actions | landscape_0.png +[ 8% ] _update_scan_actions | landscape_2.png +[ 16% ] _update_scan_actions | landscape_3.png +[ 25% ] _update_scan_actions | landscape_4.png +[ 33% ] _update_scan_actions | landscape_5.png +[ 41% ] _update_scan_actions | landscape_variants.png +[ 50% ] _update_scan_actions | terrain_material_before.png +[ 58% ] _update_scan_actions | moss.png +[ 66% ] _update_scan_actions | rock.png +[ 75% ] _update_scan_actions | sand.png +[ 83% ] _update_scan_actions | soil.png +[ DONE ] _update_scan_actions + +[ 0% ] reimport | Started (Re)Importing Assets (11 steps) +[ 0% ] reimport | Preparing files to reimport... +[ 8% ] reimport | Preparing files to reimport... +[ 16% ] reimport | Preparing files to reimport... +[ 25% ] reimport | Preparing files to reimport... +[ 33% ] reimport | Preparing files to reimport... +[ 41% ] reimport | Preparing files to reimport... +[ 50% ] reimport | Preparing files to reimport... +[ 58% ] reimport | Preparing files to reimport... +[ 66% ] reimport | Preparing files to reimport... +[ 75% ] reimport | Preparing files to reimport... +[ 83% ] reimport | Preparing files to reimport... +[ 0% ] reimport | Executing pre-reimport operations... +[ 0% ] reimport | landscape_0.png +[ 8% ] reimport | landscape_2.png +[ 16% ] reimport | landscape_3.png +[ 25% ] reimport | landscape_4.png +[ 33% ] reimport | landscape_5.png +[ 41% ] reimport | landscape_variants.png +[ 50% ] reimport | terrain_material_before.png +[ 58% ] reimport | moss.png +[ 66% ] reimport | rock.png +[ 75% ] reimport | sand.png +[ 83% ] reimport | soil.png +[ 91% ] reimport | Finalizing Asset Import... +[ DONE ] reimport + +[ 0% ] reimport | Started (Re)Importing Assets (11 steps) +[ 0% ] reimport | Executing post-reimport operations... +[ DONE ] reimport + +[ 0% ] loading_editor_layout | Started Loading editor (5 steps) +[ 0% ] loading_editor_layout | Loading editor layout... +[ 16% ] loading_editor_layout | Loading docks... +[ 33% ] loading_editor_layout | Reopening scenes... +[ 50% ] loading_editor_layout | Loading central editor layout... +[ 66% ] loading_editor_layout | Loading plugin window layout... +[ 83% ] loading_editor_layout | Editor layout ready. +[ DONE ] loading_editor_layout + +[MCPServer] stopped +[MCPRegistry] deregistered c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/ground_material_reimport.log b/artifacts/ground_material_reimport.log new file mode 100644 index 0000000..518cd65 --- /dev/null +++ b/artifacts/ground_material_reimport.log @@ -0,0 +1,52 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[ 0% ] first_scan_filesystem | Started Project initialization (5 steps) +[ 0% ] first_scan_filesystem | Scanning file structure... +[ 16% ] first_scan_filesystem | Loading global class names... +[ 33% ] first_scan_filesystem | Verifying GDExtensions... +[ 50% ] first_scan_filesystem | Creating autoload scripts... +[ 66% ] first_scan_filesystem | Initializing plugins... +Godot MCP Toolkit v1.0.3 — by NPGameDev · npgamedev.com +[MCPExtensions] Hot-reload watcher active +[MCPServer] port: scanning 6550-6560 (default) +[MCPServer] session token written to user://addons/godot_mcp_toolkit/project_instance_32cc2271ac67/mcp_token +[MCPServer] listening on 127.0.0.1:6551 +[MCPRegistry] registered c:/users/tomek/documents/godot/randoloot on port 6551 +[ 83% ] first_scan_filesystem | Starting file scan... +[ DONE ] first_scan_filesystem + +[ 0% ] _update_scan_actions | Started Scanning actions... (4 steps) +[ 0% ] _update_scan_actions | moss.png +[ 20% ] _update_scan_actions | rock.png +[ 40% ] _update_scan_actions | sand.png +[ 60% ] _update_scan_actions | soil.png +[ DONE ] _update_scan_actions + +[ 0% ] reimport | Started (Re)Importing Assets (4 steps) +[ 0% ] reimport | Preparing files to reimport... +[ 20% ] reimport | Preparing files to reimport... +[ 40% ] reimport | Preparing files to reimport... +[ 60% ] reimport | Preparing files to reimport... +[ 0% ] reimport | Executing pre-reimport operations... +[ 0% ] reimport | moss.png +[ 20% ] reimport | rock.png +[ 40% ] reimport | sand.png +[ 60% ] reimport | soil.png +[ 80% ] reimport | Finalizing Asset Import... +[ DONE ] reimport + +[ 0% ] reimport | Started (Re)Importing Assets (4 steps) +[ 0% ] reimport | Executing post-reimport operations... +[ DONE ] reimport + +[ 0% ] loading_editor_layout | Started Loading editor (5 steps) +[ 0% ] loading_editor_layout | Loading editor layout... +[ 16% ] loading_editor_layout | Loading docks... +[ 33% ] loading_editor_layout | Reopening scenes... +[ 50% ] loading_editor_layout | Loading central editor layout... +[ 66% ] loading_editor_layout | Loading plugin window layout... +[ 83% ] loading_editor_layout | Editor layout ready. +[ DONE ] loading_editor_layout + +[MCPServer] stopped +[MCPRegistry] deregistered c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/lander_engine_test.log b/artifacts/lander_engine_test.log new file mode 100644 index 0000000..88dd2a5 --- /dev/null +++ b/artifacts/lander_engine_test.log @@ -0,0 +1,12 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/lander_flight_test.gd:29) +LANDER FLIGHT PASS: thrust, inertia, brake/reverse, rotation, local strafe, boost, shared parameters, F interaction, immediate scan +WARNING: 6 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/lander_engines_boost.png b/artifacts/lander_engines_boost.png new file mode 100644 index 0000000..db2ece9 Binary files /dev/null and b/artifacts/lander_engines_boost.png differ diff --git a/artifacts/lander_engines_boost.png.import b/artifacts/lander_engines_boost.png.import new file mode 100644 index 0000000..b3c8fd9 --- /dev/null +++ b/artifacts/lander_engines_boost.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bubnyh1kxfeo" +path="res://.godot/imported/lander_engines_boost.png-0e82bd5054cceca5ff7cf7924691d0ae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/lander_engines_boost.png" +dest_files=["res://.godot/imported/lander_engines_boost.png-0e82bd5054cceca5ff7cf7924691d0ae.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/artifacts/lander_engines_gui.log b/artifacts/lander_engines_gui.log new file mode 100644 index 0000000..ebb6a4a --- /dev/null +++ b/artifacts/lander_engines_gui.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER ENGINE PASS: ship MP3, twin nozzle positions, thrust, boost, POI silence, coast silence, shutdown cleanup diff --git a/artifacts/lander_engines_gui_errors.log b/artifacts/lander_engines_gui_errors.log new file mode 100644 index 0000000..89b76e9 --- /dev/null +++ b/artifacts/lander_engines_gui_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_engine_test.gd:5) diff --git a/artifacts/lander_engines_normal.png b/artifacts/lander_engines_normal.png new file mode 100644 index 0000000..9a28c7a Binary files /dev/null and b/artifacts/lander_engines_normal.png differ diff --git a/artifacts/lander_engines_normal.png.import b/artifacts/lander_engines_normal.png.import new file mode 100644 index 0000000..ae518f0 --- /dev/null +++ b/artifacts/lander_engines_normal.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0djxqqupnxxh" +path="res://.godot/imported/lander_engines_normal.png-b9d39594fc4c7665fb8de73b6fb7beb8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/lander_engines_normal.png" +dest_files=["res://.godot/imported/lander_engines_normal.png-b9d39594fc4c7665fb8de73b6fb7beb8.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/artifacts/lander_flight_test.log b/artifacts/lander_flight_test.log new file mode 100644 index 0000000..13ab7ec --- /dev/null +++ b/artifacts/lander_flight_test.log @@ -0,0 +1,10 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/lander_flight_test.gd:29) +LANDER FLIGHT PASS: thrust, inertia, brake/reverse, rotation, local strafe, boost, shared parameters, F interaction, immediate scan diff --git a/artifacts/lander_flight_test_quality.log b/artifacts/lander_flight_test_quality.log new file mode 100644 index 0000000..4003883 --- /dev/null +++ b/artifacts/lander_flight_test_quality.log @@ -0,0 +1,12 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/lander_flight_test.gd:29) +LANDER FLIGHT PASS: thrust, inertia, brake/reverse, rotation, local strafe, boost, shared parameters, F interaction, immediate scan +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/lander_flight_test_scenery.log b/artifacts/lander_flight_test_scenery.log new file mode 100644 index 0000000..4841f09 --- /dev/null +++ b/artifacts/lander_flight_test_scenery.log @@ -0,0 +1,10 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6571 +[MCPRegistry] runtime port 6571 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/lander_flight_test.gd:29) +LANDER FLIGHT PASS: thrust, inertia, brake/reverse, rotation, local strafe, boost, shared parameters, F interaction, immediate scan diff --git a/artifacts/lander_movement_test.log b/artifacts/lander_movement_test.log new file mode 100644 index 0000000..cb43fac --- /dev/null +++ b/artifacts/lander_movement_test.log @@ -0,0 +1,12 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_expeditions_test.gd:66) +PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/lander_render.log b/artifacts/lander_render.log new file mode 100644 index 0000000..fccf7c3 --- /dev/null +++ b/artifacts/lander_render.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER RENDER PASS: interpolated intermediate frames=149; median frame ms=8.334; p95 ms=8.502 diff --git a/artifacts/lander_render_errors.log b/artifacts/lander_render_errors.log new file mode 100644 index 0000000..9ee691e --- /dev/null +++ b/artifacts/lander_render_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_render_test.gd:5) diff --git a/artifacts/lander_sharp_preview.png b/artifacts/lander_sharp_preview.png new file mode 100644 index 0000000..5204cd7 Binary files /dev/null and b/artifacts/lander_sharp_preview.png differ diff --git a/artifacts/lander_sharp_preview.png.import b/artifacts/lander_sharp_preview.png.import new file mode 100644 index 0000000..eaa983d --- /dev/null +++ b/artifacts/lander_sharp_preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhjmg3k80m1rq" +path="res://.godot/imported/lander_sharp_preview.png-685f71a143b837cae260952e14b6f80f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/lander_sharp_preview.png" +dest_files=["res://.godot/imported/lander_sharp_preview.png-685f71a143b837cae260952e14b6f80f.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/artifacts/lander_ship_regression.log b/artifacts/lander_ship_regression.log new file mode 100644 index 0000000..9975a66 --- /dev/null +++ b/artifacts/lander_ship_regression.log @@ -0,0 +1,15 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/ships/flight_profile_test.gd:8) +SCRIPT ERROR: Assertion failed. + at: _ready (res://tests/ships/flight_profile_test.gd:11) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/ships/flight_profile_test.gd:11) +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/lander_smooth_regression.log b/artifacts/lander_smooth_regression.log new file mode 100644 index 0000000..13ab7ec --- /dev/null +++ b/artifacts/lander_smooth_regression.log @@ -0,0 +1,10 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/lander_flight_test.gd:29) +LANDER FLIGHT PASS: thrust, inertia, brake/reverse, rotation, local strafe, boost, shared parameters, F interaction, immediate scan diff --git a/artifacts/landscape_0.png b/artifacts/landscape_0.png new file mode 100644 index 0000000..0b91564 Binary files /dev/null and b/artifacts/landscape_0.png differ diff --git a/artifacts/landscape_0.png.import b/artifacts/landscape_0.png.import new file mode 100644 index 0000000..0dd6eb5 --- /dev/null +++ b/artifacts/landscape_0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://t8v3iw7qguv5" +path="res://.godot/imported/landscape_0.png-a1c3ccfab37ced6612e201c3a2f19d07.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_0.png" +dest_files=["res://.godot/imported/landscape_0.png-a1c3ccfab37ced6612e201c3a2f19d07.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/artifacts/landscape_1.png b/artifacts/landscape_1.png new file mode 100644 index 0000000..324b21f Binary files /dev/null and b/artifacts/landscape_1.png differ diff --git a/artifacts/landscape_1.png.import b/artifacts/landscape_1.png.import new file mode 100644 index 0000000..1b1be66 --- /dev/null +++ b/artifacts/landscape_1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://medbghear50i" +path="res://.godot/imported/landscape_1.png-3736241a5c1b69d6ad46cee83e41ec41.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_1.png" +dest_files=["res://.godot/imported/landscape_1.png-3736241a5c1b69d6ad46cee83e41ec41.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/artifacts/landscape_2.png b/artifacts/landscape_2.png new file mode 100644 index 0000000..38b4d0e Binary files /dev/null and b/artifacts/landscape_2.png differ diff --git a/artifacts/landscape_2.png.import b/artifacts/landscape_2.png.import new file mode 100644 index 0000000..3464efe --- /dev/null +++ b/artifacts/landscape_2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbco7u0swphj" +path="res://.godot/imported/landscape_2.png-5bf0028daf87ae9e3fba870fa600bf50.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_2.png" +dest_files=["res://.godot/imported/landscape_2.png-5bf0028daf87ae9e3fba870fa600bf50.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/artifacts/landscape_3.png b/artifacts/landscape_3.png new file mode 100644 index 0000000..441285b Binary files /dev/null and b/artifacts/landscape_3.png differ diff --git a/artifacts/landscape_3.png.import b/artifacts/landscape_3.png.import new file mode 100644 index 0000000..8e2bd8b --- /dev/null +++ b/artifacts/landscape_3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qbta86xgynj2" +path="res://.godot/imported/landscape_3.png-ed92b5e3c3efdca941c6aab2224b05d5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_3.png" +dest_files=["res://.godot/imported/landscape_3.png-ed92b5e3c3efdca941c6aab2224b05d5.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/artifacts/landscape_4.png b/artifacts/landscape_4.png new file mode 100644 index 0000000..820a3a3 Binary files /dev/null and b/artifacts/landscape_4.png differ diff --git a/artifacts/landscape_4.png.import b/artifacts/landscape_4.png.import new file mode 100644 index 0000000..1eb75b7 --- /dev/null +++ b/artifacts/landscape_4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://djdqju00srp0k" +path="res://.godot/imported/landscape_4.png-b4ae0dd2cb16ff48ccaa55b124a8dc19.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_4.png" +dest_files=["res://.godot/imported/landscape_4.png-b4ae0dd2cb16ff48ccaa55b124a8dc19.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/artifacts/landscape_5.png b/artifacts/landscape_5.png new file mode 100644 index 0000000..d0ef3a5 Binary files /dev/null and b/artifacts/landscape_5.png differ diff --git a/artifacts/landscape_5.png.import b/artifacts/landscape_5.png.import new file mode 100644 index 0000000..4696d12 --- /dev/null +++ b/artifacts/landscape_5.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cm2pvjdufrou3" +path="res://.godot/imported/landscape_5.png-809e53093e007326161a89f9ec534cbf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_5.png" +dest_files=["res://.godot/imported/landscape_5.png-809e53093e007326161a89f9ec534cbf.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/artifacts/landscape_generation_test.log b/artifacts/landscape_generation_test.log new file mode 100644 index 0000000..078c43e --- /dev/null +++ b/artifacts/landscape_generation_test.log @@ -0,0 +1,6 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE GENERATION PASS: six styles, deterministic layouts, smooth meanders, connected tributaries, resource maps and POIs diff --git a/artifacts/landscape_generation_test_quality.log b/artifacts/landscape_generation_test_quality.log new file mode 100644 index 0000000..7716e1d --- /dev/null +++ b/artifacts/landscape_generation_test_quality.log @@ -0,0 +1,6 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE GENERATION PASS: six styles, seven scenery types, deterministic layouts, no rivers, separated mountains and buildings diff --git a/artifacts/landscape_generation_test_scenery.log b/artifacts/landscape_generation_test_scenery.log new file mode 100644 index 0000000..7716e1d --- /dev/null +++ b/artifacts/landscape_generation_test_scenery.log @@ -0,0 +1,6 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE GENERATION PASS: six styles, seven scenery types, deterministic layouts, no rivers, separated mountains and buildings diff --git a/artifacts/landscape_performance.log b/artifacts/landscape_performance.log new file mode 100644 index 0000000..a309159 --- /dev/null +++ b/artifacts/landscape_performance.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER RENDER PASS: interpolated intermediate frames=148; median frame ms=8.331; p95 ms=8.665 diff --git a/artifacts/landscape_performance_errors.log b/artifacts/landscape_performance_errors.log new file mode 100644 index 0000000..9ee691e --- /dev/null +++ b/artifacts/landscape_performance_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_render_test.gd:5) diff --git a/artifacts/landscape_preview.log b/artifacts/landscape_preview.log new file mode 100644 index 0000000..2f51255 --- /dev/null +++ b/artifacts/landscape_preview.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE PREVIEW PASS: six distinct terrain styles, rivers and tributaries rendered diff --git a/artifacts/landscape_preview_errors.log b/artifacts/landscape_preview_errors.log new file mode 100644 index 0000000..e69de29 diff --git a/artifacts/landscape_variants.png b/artifacts/landscape_variants.png new file mode 100644 index 0000000..a119621 Binary files /dev/null and b/artifacts/landscape_variants.png differ diff --git a/artifacts/landscape_variants.png.import b/artifacts/landscape_variants.png.import new file mode 100644 index 0000000..570ea1d --- /dev/null +++ b/artifacts/landscape_variants.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1kvy8bfxed5v" +path="res://.godot/imported/landscape_variants.png-d35361403091ead83515cc94b437a1bb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/landscape_variants.png" +dest_files=["res://.godot/imported/landscape_variants.png-d35361403091ead83515cc94b437a1bb.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/artifacts/planet_asset_sheet.png b/artifacts/planet_asset_sheet.png new file mode 100644 index 0000000..4db9b72 Binary files /dev/null and b/artifacts/planet_asset_sheet.png differ diff --git a/artifacts/planet_asset_sheet.png.import b/artifacts/planet_asset_sheet.png.import new file mode 100644 index 0000000..ad5c93a --- /dev/null +++ b/artifacts/planet_asset_sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxejtfivdy2ck" +path="res://.godot/imported/planet_asset_sheet.png-5f972785eae4cb9fdb0864ef25f7778d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_asset_sheet.png" +dest_files=["res://.godot/imported/planet_asset_sheet.png-5f972785eae4cb9fdb0864ef25f7778d.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/artifacts/planet_expeditions_test_scenery.log b/artifacts/planet_expeditions_test_scenery.log new file mode 100644 index 0000000..a60db87 --- /dev/null +++ b/artifacts/planet_expeditions_test_scenery.log @@ -0,0 +1,12 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6572 +[MCPRegistry] runtime port 6572 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_expeditions_test.gd:66) +PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return +WARNING: 6 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/planet_game.log b/artifacts/planet_game.log new file mode 100644 index 0000000..b9e8c09 --- /dev/null +++ b/artifacts/planet_game.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/planet_hud.png b/artifacts/planet_hud.png new file mode 100644 index 0000000..e556a51 Binary files /dev/null and b/artifacts/planet_hud.png differ diff --git a/artifacts/planet_hud.png.import b/artifacts/planet_hud.png.import new file mode 100644 index 0000000..52e0854 --- /dev/null +++ b/artifacts/planet_hud.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://q44hrshd867u" +path="res://.godot/imported/planet_hud.png-7284d3047e8ae1c59f5e21261c73d8de.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_hud.png" +dest_files=["res://.godot/imported/planet_hud.png-7284d3047e8ae1c59f5e21261c73d8de.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/artifacts/planet_import.log b/artifacts/planet_import.log new file mode 100644 index 0000000..b30fefe --- /dev/null +++ b/artifacts/planet_import.log @@ -0,0 +1,82 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[ 0% ] first_scan_filesystem | Started Project initialization (5 steps) +[ 0% ] first_scan_filesystem | Scanning file structure... +[ 16% ] first_scan_filesystem | Loading global class names... +[ 33% ] first_scan_filesystem | Verifying GDExtensions... +[ 50% ] first_scan_filesystem | Creating autoload scripts... +[ 66% ] first_scan_filesystem | Initializing plugins... +Godot MCP Toolkit v1.0.3 — by NPGameDev · npgamedev.com +[MCPExtensions] Hot-reload watcher active +[MCPServer] port: scanning 6550-6560 (default) +[MCPServer] session token written to user://addons/godot_mcp_toolkit/project_instance_32cc2271ac67/mcp_token +[MCPServer] listening on 127.0.0.1:6551 +[MCPRegistry] registered c:/users/tomek/documents/godot/randoloot on port 6551 +[ 83% ] first_scan_filesystem | Starting file scan... +[ DONE ] first_scan_filesystem + +[ 0% ] update_scripts_classes | Started Registering global classes... (9 steps) +[ 0% ] update_scripts_classes |  +[ 10% ] update_scripts_classes |  +[ 20% ] update_scripts_classes |  +[ 30% ] update_scripts_classes |  +[ 40% ] update_scripts_classes |  +[ 50% ] update_scripts_classes |  +[ 60% ] update_scripts_classes |  +[ 70% ] update_scripts_classes |  +[ 80% ] update_scripts_classes |  +[ DONE ] update_scripts_classes + +[ 0% ] _update_scan_actions | Started Scanning actions... (10 steps) +[ 0% ] _update_scan_actions | breathing.png +[ 9% ] _update_scan_actions | freighter.png +[ 18% ] _update_scan_actions | grass.png +[ 27% ] _update_scan_actions | lander.png +[ 36% ] _update_scan_actions | mine.png +[ 45% ] _update_scan_actions | mountain.png +[ 54% ] _update_scan_actions | ruins.png +[ 63% ] _update_scan_actions | sidearm.png +[ 72% ] _update_scan_actions | suit.png +[ 81% ] _update_scan_actions | tree.png +[ DONE ] _update_scan_actions + +[ 0% ] reimport | Started (Re)Importing Assets (10 steps) +[ 0% ] reimport | Preparing files to reimport... +[ 9% ] reimport | Preparing files to reimport... +[ 18% ] reimport | Preparing files to reimport... +[ 27% ] reimport | Preparing files to reimport... +[ 36% ] reimport | Preparing files to reimport... +[ 45% ] reimport | Preparing files to reimport... +[ 54% ] reimport | Preparing files to reimport... +[ 63% ] reimport | Preparing files to reimport... +[ 72% ] reimport | Preparing files to reimport... +[ 81% ] reimport | Preparing files to reimport... +[ 0% ] reimport | Executing pre-reimport operations... +[ 0% ] reimport | breathing.png +[ 9% ] reimport | freighter.png +[ 18% ] reimport | grass.png +[ 27% ] reimport | lander.png +[ 36% ] reimport | mine.png +[ 45% ] reimport | mountain.png +[ 54% ] reimport | ruins.png +[ 63% ] reimport | sidearm.png +[ 72% ] reimport | suit.png +[ 81% ] reimport | tree.png +[ 90% ] reimport | Finalizing Asset Import... +[ DONE ] reimport + +[ 0% ] reimport | Started (Re)Importing Assets (10 steps) +[ 0% ] reimport | Executing post-reimport operations... +[ DONE ] reimport + +[ 0% ] loading_editor_layout | Started Loading editor (5 steps) +[ 0% ] loading_editor_layout | Loading editor layout... +[ 16% ] loading_editor_layout | Loading docks... +[ 33% ] loading_editor_layout | Reopening scenes... +[ 50% ] loading_editor_layout | Loading central editor layout... +[ 66% ] loading_editor_layout | Loading plugin window layout... +[ 83% ] loading_editor_layout | Editor layout ready. +[ DONE ] loading_editor_layout + +[MCPServer] stopped +[MCPRegistry] deregistered c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/planet_lander_destruction.png b/artifacts/planet_lander_destruction.png new file mode 100644 index 0000000..3cbbfdb Binary files /dev/null and b/artifacts/planet_lander_destruction.png differ diff --git a/artifacts/planet_lander_destruction.png.import b/artifacts/planet_lander_destruction.png.import new file mode 100644 index 0000000..c0591be --- /dev/null +++ b/artifacts/planet_lander_destruction.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8v3isb84vp7v" +path="res://.godot/imported/planet_lander_destruction.png-63ec9679a537824644c7b40650a23a79.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_lander_destruction.png" +dest_files=["res://.godot/imported/planet_lander_destruction.png-63ec9679a537824644c7b40650a23a79.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/artifacts/planet_menu.log b/artifacts/planet_menu.log new file mode 100644 index 0000000..efb9561 --- /dev/null +++ b/artifacts/planet_menu.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: 2 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/planet_parse.log b/artifacts/planet_parse.log new file mode 100644 index 0000000..f39e653 --- /dev/null +++ b/artifacts/planet_parse.log @@ -0,0 +1,5 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/planet_poi.png b/artifacts/planet_poi.png new file mode 100644 index 0000000..813dc20 Binary files /dev/null and b/artifacts/planet_poi.png differ diff --git a/artifacts/planet_poi.png.import b/artifacts/planet_poi.png.import new file mode 100644 index 0000000..1119b27 --- /dev/null +++ b/artifacts/planet_poi.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://73q2eeumbtub" +path="res://.godot/imported/planet_poi.png-134a766ffad98d80312d63c0dbde6ace.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_poi.png" +dest_files=["res://.godot/imported/planet_poi.png-134a766ffad98d80312d63c0dbde6ace.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/artifacts/planet_preview.log b/artifacts/planet_preview.log new file mode 100644 index 0000000..9f4d4b5 --- /dev/null +++ b/artifacts/planet_preview.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +PLANET PREVIEWS CAPTURED diff --git a/artifacts/planet_preview_errors.log b/artifacts/planet_preview_errors.log new file mode 100644 index 0000000..0c9f476 --- /dev/null +++ b/artifacts/planet_preview_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/planet_preview.gd:5) diff --git a/artifacts/planet_prompt_after.log b/artifacts/planet_prompt_after.log new file mode 100644 index 0000000..23e7bd1 --- /dev/null +++ b/artifacts/planet_prompt_after.log @@ -0,0 +1,13 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_prompt_test.gd:21) +PROMPT BENCH: 1000 hidden combat refreshes=3823 us; text chars=0 +PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/planet_prompt_before.log b/artifacts/planet_prompt_before.log new file mode 100644 index 0000000..5af3f14 --- /dev/null +++ b/artifacts/planet_prompt_before.log @@ -0,0 +1,11 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_prompt_test.gd:5) +PROMPT BENCH 1000 refreshes: 9005685 us; text chars=49000 +PROMPT AFTER APPROACH: (460.0, 21054.0) label=(420.0, 60.0) diff --git a/artifacts/planet_prompt_fixed.png b/artifacts/planet_prompt_fixed.png new file mode 100644 index 0000000..7d6830e Binary files /dev/null and b/artifacts/planet_prompt_fixed.png differ diff --git a/artifacts/planet_prompt_fixed.png.import b/artifacts/planet_prompt_fixed.png.import new file mode 100644 index 0000000..b04e091 --- /dev/null +++ b/artifacts/planet_prompt_fixed.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsonp2hmvc0l3" +path="res://.godot/imported/planet_prompt_fixed.png-3890a51167a73f17168ff5428d1a707b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_prompt_fixed.png" +dest_files=["res://.godot/imported/planet_prompt_fixed.png-3890a51167a73f17168ff5428d1a707b.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/artifacts/planet_prompt_gui.log b/artifacts/planet_prompt_gui.log new file mode 100644 index 0000000..b695b8f --- /dev/null +++ b/artifacts/planet_prompt_gui.log @@ -0,0 +1,8 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +PROMPT BENCH: 1000 hidden combat refreshes=2137 us; text chars=0 +PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content diff --git a/artifacts/planet_prompt_gui_errors.log b/artifacts/planet_prompt_gui_errors.log new file mode 100644 index 0000000..8101f46 --- /dev/null +++ b/artifacts/planet_prompt_gui_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_prompt_test.gd:21) diff --git a/artifacts/planet_prompt_hidden.log b/artifacts/planet_prompt_hidden.log new file mode 100644 index 0000000..e743b84 --- /dev/null +++ b/artifacts/planet_prompt_hidden.log @@ -0,0 +1,11 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_prompt_test.gd:21) +PROMPT BENCH: 1000 hidden combat refreshes=2113 us; text chars=0 +PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content diff --git a/artifacts/planet_prompt_test_scenery.log b/artifacts/planet_prompt_test_scenery.log new file mode 100644 index 0000000..06e8ee0 --- /dev/null +++ b/artifacts/planet_prompt_test_scenery.log @@ -0,0 +1,13 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_prompt_test.gd:21) +PROMPT BENCH: 1000 hidden combat refreshes=2050 us; text chars=0 +PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/planet_regression_0.log b/artifacts/planet_regression_0.log new file mode 100644 index 0000000..4e503db --- /dev/null +++ b/artifacts/planet_regression_0.log @@ -0,0 +1,10 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/ships/drag_cursor_test.gd:29) +DRAG_CURSOR_TEST: PASS centered overlay above windows, cancel/drop, UI/space cursor and cleanup diff --git a/artifacts/planet_regression_1.log b/artifacts/planet_regression_1.log new file mode 100644 index 0000000..dec7ce9 --- /dev/null +++ b/artifacts/planet_regression_1.log @@ -0,0 +1,6 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +ENEMY_TIERS_TEST: PASS (1000 levels, generated encounters, exactly two elites/one boss, tint and labels) diff --git a/artifacts/planet_reimport.log b/artifacts/planet_reimport.log new file mode 100644 index 0000000..8ccc8ff --- /dev/null +++ b/artifacts/planet_reimport.log @@ -0,0 +1,142 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[ 0% ] first_scan_filesystem | Started Project initialization (5 steps) +[ 0% ] first_scan_filesystem | Scanning file structure... +[ 16% ] first_scan_filesystem | Loading global class names... +[ 33% ] first_scan_filesystem | Verifying GDExtensions... +[ 50% ] first_scan_filesystem | Creating autoload scripts... +[ 66% ] first_scan_filesystem | Initializing plugins... +Godot MCP Toolkit v1.0.3 — by NPGameDev · npgamedev.com +[MCPExtensions] Hot-reload watcher active +[MCPServer] port: scanning 6550-6560 (default) +[MCPServer] session token written to user://addons/godot_mcp_toolkit/project_instance_32cc2271ac67/mcp_token +[MCPServer] listening on 127.0.0.1:6551 +[MCPRegistry] registered c:/users/tomek/documents/godot/randoloot on port 6551 +[ 83% ] first_scan_filesystem | Starting file scan... +[ DONE ] first_scan_filesystem + +[ 0% ] update_scripts_classes | Started Registering global classes... (12 steps) +[ 0% ] update_scripts_classes |  +[ 7% ] update_scripts_classes |  +[ 15% ] update_scripts_classes |  +[ 23% ] update_scripts_classes |  +[ 30% ] update_scripts_classes |  +[ 38% ] update_scripts_classes |  +[ 46% ] update_scripts_classes |  +[ 53% ] update_scripts_classes |  +[ 61% ] update_scripts_classes |  +[ 69% ] update_scripts_classes |  +[ 76% ] update_scripts_classes |  +[ 84% ] update_scripts_classes |  +[ DONE ] update_scripts_classes + +[ 0% ] _update_scan_actions | Started Scanning actions... (29 steps) +[ 0% ] _update_scan_actions | breathing.png +[ 3% ] _update_scan_actions | freighter.png +[ 6% ] _update_scan_actions | grass.png +[ 10% ] _update_scan_actions | lander.png +[ 13% ] _update_scan_actions | mine.png +[ 16% ] _update_scan_actions | moon.png +[ 20% ] _update_scan_actions | mountain.png +[ 23% ] _update_scan_actions | p1.png +[ 26% ] _update_scan_actions | p2.png +[ 30% ] _update_scan_actions | p3.png +[ 33% ] _update_scan_actions | p4.png +[ 36% ] _update_scan_actions | p5.png +[ 40% ] _update_scan_actions | p6.png +[ 43% ] _update_scan_actions | p7.png +[ 46% ] _update_scan_actions | p8.png +[ 50% ] _update_scan_actions | p9.png +[ 53% ] _update_scan_actions | p10.png +[ 56% ] _update_scan_actions | p11.png +[ 60% ] _update_scan_actions | p12.png +[ 63% ] _update_scan_actions | p13.png +[ 66% ] _update_scan_actions | p14.png +[ 70% ] _update_scan_actions | p15.png +[ 73% ] _update_scan_actions | p16.png +[ 76% ] _update_scan_actions | p17.png +[ 80% ] _update_scan_actions | p18.png +[ 83% ] _update_scan_actions | ruins.png +[ 86% ] _update_scan_actions | sidearm.png +[ 90% ] _update_scan_actions | suit.png +[ 93% ] _update_scan_actions | tree.png +[ DONE ] _update_scan_actions + +[ 0% ] reimport | Started (Re)Importing Assets (29 steps) +[ 0% ] reimport | Preparing files to reimport... +[ 3% ] reimport | Preparing files to reimport... +[ 6% ] reimport | Preparing files to reimport... +[ 10% ] reimport | Preparing files to reimport... +[ 13% ] reimport | Preparing files to reimport... +[ 16% ] reimport | Preparing files to reimport... +[ 20% ] reimport | Preparing files to reimport... +[ 23% ] reimport | Preparing files to reimport... +[ 26% ] reimport | Preparing files to reimport... +[ 30% ] reimport | Preparing files to reimport... +[ 33% ] reimport | Preparing files to reimport... +[ 36% ] reimport | Preparing files to reimport... +[ 40% ] reimport | Preparing files to reimport... +[ 43% ] reimport | Preparing files to reimport... +[ 46% ] reimport | Preparing files to reimport... +[ 50% ] reimport | Preparing files to reimport... +[ 53% ] reimport | Preparing files to reimport... +[ 56% ] reimport | Preparing files to reimport... +[ 60% ] reimport | Preparing files to reimport... +[ 63% ] reimport | Preparing files to reimport... +[ 66% ] reimport | Preparing files to reimport... +[ 70% ] reimport | Preparing files to reimport... +[ 73% ] reimport | Preparing files to reimport... +[ 76% ] reimport | Preparing files to reimport... +[ 80% ] reimport | Preparing files to reimport... +[ 83% ] reimport | Preparing files to reimport... +[ 86% ] reimport | Preparing files to reimport... +[ 90% ] reimport | Preparing files to reimport... +[ 93% ] reimport | Preparing files to reimport... +[ 0% ] reimport | Executing pre-reimport operations... +[ 0% ] reimport | tree.png +[ 3% ] reimport | suit.png +[ 6% ] reimport | sidearm.png +[ 10% ] reimport | ruins.png +[ 13% ] reimport | p18.png +[ 16% ] reimport | p17.png +[ 20% ] reimport | p16.png +[ 23% ] reimport | p15.png +[ 26% ] reimport | p14.png +[ 30% ] reimport | p13.png +[ 33% ] reimport | p12.png +[ 36% ] reimport | p11.png +[ 40% ] reimport | p10.png +[ 43% ] reimport | p9.png +[ 46% ] reimport | p8.png +[ 50% ] reimport | p7.png +[ 53% ] reimport | p6.png +[ 56% ] reimport | p5.png +[ 60% ] reimport | p4.png +[ 63% ] reimport | p3.png +[ 66% ] reimport | p2.png +[ 70% ] reimport | p1.png +[ 73% ] reimport | mountain.png +[ 76% ] reimport | moon.png +[ 80% ] reimport | mine.png +[ 83% ] reimport | lander.png +[ 86% ] reimport | grass.png +[ 90% ] reimport | freighter.png +[ 93% ] reimport | breathing.png +[ 96% ] reimport | Finalizing Asset Import... +[ DONE ] reimport + +[ 0% ] reimport | Started (Re)Importing Assets (29 steps) +[ 0% ] reimport | Executing post-reimport operations... +[ DONE ] reimport + +[ 0% ] loading_editor_layout | Started Loading editor (5 steps) +[ 0% ] loading_editor_layout | Loading editor layout... +[ 16% ] loading_editor_layout | Loading docks... +[ 33% ] loading_editor_layout | Reopening scenes... +[ 50% ] loading_editor_layout | Loading central editor layout... +[ 66% ] loading_editor_layout | Loading plugin window layout... +[ 83% ] loading_editor_layout | Editor layout ready. +[ DONE ] loading_editor_layout + +[MCPServer] stopped +[MCPRegistry] deregistered c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/planet_scan_gui.log b/artifacts/planet_scan_gui.log new file mode 100644 index 0000000..ea5f9b0 --- /dev/null +++ b/artifacts/planet_scan_gui.log @@ -0,0 +1,8 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +PROMPT BENCH: 1000 hidden combat refreshes=2155 us; text chars=0 +PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content diff --git a/artifacts/planet_scan_gui_errors.log b/artifacts/planet_scan_gui_errors.log new file mode 100644 index 0000000..8101f46 --- /dev/null +++ b/artifacts/planet_scan_gui_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_prompt_test.gd:21) diff --git a/artifacts/planet_scan_stats.png b/artifacts/planet_scan_stats.png new file mode 100644 index 0000000..2e05faa Binary files /dev/null and b/artifacts/planet_scan_stats.png differ diff --git a/artifacts/planet_scan_stats.png.import b/artifacts/planet_scan_stats.png.import new file mode 100644 index 0000000..a9ed787 --- /dev/null +++ b/artifacts/planet_scan_stats.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhq7n5jgbj36j" +path="res://.godot/imported/planet_scan_stats.png-5333370a1041aa8e9c0df45706df0712.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_scan_stats.png" +dest_files=["res://.godot/imported/planet_scan_stats.png-5333370a1041aa8e9c0df45706df0712.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/artifacts/planet_scenery_event_marker.png b/artifacts/planet_scenery_event_marker.png new file mode 100644 index 0000000..3af662a Binary files /dev/null and b/artifacts/planet_scenery_event_marker.png differ diff --git a/artifacts/planet_scenery_event_marker.png.import b/artifacts/planet_scenery_event_marker.png.import new file mode 100644 index 0000000..8b9dbdf --- /dev/null +++ b/artifacts/planet_scenery_event_marker.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3xt1jd1slqn3" +path="res://.godot/imported/planet_scenery_event_marker.png-874b49bd2b9ba95d636b9b0550819d7c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_scenery_event_marker.png" +dest_files=["res://.godot/imported/planet_scenery_event_marker.png-874b49bd2b9ba95d636b9b0550819d7c.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/artifacts/planet_surface.png b/artifacts/planet_surface.png new file mode 100644 index 0000000..6139993 Binary files /dev/null and b/artifacts/planet_surface.png differ diff --git a/artifacts/planet_surface.png.import b/artifacts/planet_surface.png.import new file mode 100644 index 0000000..6074ff6 --- /dev/null +++ b/artifacts/planet_surface.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://l04g2jijbt4e" +path="res://.godot/imported/planet_surface.png-a7a7cf051389c3a90e48e2e65a5ef29b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/planet_surface.png" +dest_files=["res://.godot/imported/planet_surface.png-a7a7cf051389c3a90e48e2e65a5ef29b.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/artifacts/planet_test.log b/artifacts/planet_test.log new file mode 100644 index 0000000..cb43fac --- /dev/null +++ b/artifacts/planet_test.log @@ -0,0 +1,12 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_expeditions_test.gd:66) +PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/artifacts/planet_validation.txt b/artifacts/planet_validation.txt new file mode 100644 index 0000000..d319598 --- /dev/null +++ b/artifacts/planet_validation.txt @@ -0,0 +1,37 @@ +Weryfikacja systemu planet i frachtowca — 17.10.2026 +Godot 4.7.2 stable, Windows, 1280×720; podglądy Vulkan / RTX 4070 SUPER. + +PASS: tests/levels/planet_expeditions_test.tscn +- 1000 profili: rozkład łatwych biomów, zakresy warunków i zużycia HP. +- 100 układów na poziomach 1–50: planeta tubylców zawsze earthlike. +- Oddzielny łup, pojedyncze rozliczenie powrotu i utrata łupu przy 0 HP. +- Wymagane 100 HP, koszt naprawy i nowe ziarno kolejnego lądowania. +- Startowe wyposażenie, receptura, podnoszenie poziomu i zgodność slotów. +- Powtarzalna generacja mapy z tego samego ziarna oraz różnice między wizytami. +- Blokada dokowania po walce i przy pobliskim wrogu. +- Pełna ładownia: moduły nie giną, późniejszy odbiór działa. +- Otwarcie hangaru, warsztatu, archiwum, skan, lądowanie, POI, powrót. +- Pauza kosmosu i jej przywrócenie po wizycie. + +PASS: tests/ships/drag_cursor_test.tscn +Istniejące przeciąganie modułów, anulowanie, położenie ikony i celownik. + +PASS: tests/levels/enemy_tiers_test.tscn +Generacja przeciwników dla 1000 poziomów i bossowie. + +PASS: tests/previews/planet_preview.tscn (Vulkan) +Podglądy HUD, hangaru, warsztatu, powierzchni, POI oraz eksplozji lądownika. +Sprawdzony automatyczny powrót po eksplozji i utrata bieżącego łupu. +Obejrzano kontaktowe zestawienie 10 nowych PNG oraz 15 grafik earthlike. + +Uruchomienie scen menu i gry bez błędów skryptów. +git diff --check: bez błędów białych znaków. + +Znane ograniczenia: +- Brak zapisu na dysku zgodnie z planem. Zamknięcie rozlicza wyprawę, + ale nie zachowuje rozgrywki między uruchomieniami. +- Laboratorium przechowuje skany i odzyskane archiwa. Badania i rozbudowa + frachtowca są dalszym etapem opisanym w planet_mechanic.txt. +- Testy headless przy szybkim zamykaniu mogą zgłaszać pozostające obiekty + odtwarzania MP3; podgląd kończący pełną eksplozję zamyka się bez tego ostrzeżenia. +- Istniejące ostrzeżenie Camera2D gracza o interpolacji fizyki pozostało. diff --git a/artifacts/planet_verbose.log b/artifacts/planet_verbose.log new file mode 100644 index 0000000..4fc446c --- /dev/null +++ b/artifacts/planet_verbose.log @@ -0,0 +1,930 @@ +WorkerThreadPool: 16 threads, 4 max low-priority. +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +Loading resource: res://resources/ui/game_theme.tres remapped: res://resources/ui/game_theme.tres +Loading resource: res://assets/fonts/font2.ttf remapped: res://assets/fonts/font2.ttf +Loading resource: res://.godot/imported/font2.ttf-59e4c6b4a5306e7f84a55bb565749f73.fontdata remapped: res://.godot/imported/font2.ttf-59e4c6b4a5306e7f84a55bb565749f73.fontdata +Completed load for: 'res://assets/fonts/font2.ttf' remapped 'res://assets/fonts/font2.ttf' at thread -1 +Completed load for: 'res://resources/ui/game_theme.tres' remapped 'res://resources/ui/game_theme.tres' at thread -1 +Loading resource: res://default_bus_layout.tres remapped: res://default_bus_layout.tres +Completed load for: 'res://default_bus_layout.tres' remapped 'res://default_bus_layout.tres' at thread -1 +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://scripts/game/game_state.gd remapped: res://scripts/game/game_state.gd +Loading resource: res://resources/items/recycler.tres remapped: res://resources/items/recycler.tres +Loading resource: res://scripts/items/item_definition.gd remapped: res://scripts/items/item_definition.gd +Completed load for: 'res://scripts/items/item_definition.gd' remapped 'res://scripts/items/item_definition.gd' at thread -1 +Loading resource: res://assets/icons/extensions/recycler_art.png remapped: res://assets/icons/extensions/recycler_art.png +Loading resource: res://.godot/imported/recycler_art.png-9bd765a370eabd761a8651a4e26ad2fa.ctex remapped: res://.godot/imported/recycler_art.png-9bd765a370eabd761a8651a4e26ad2fa.ctex +Completed load for: 'res://assets/icons/extensions/recycler_art.png' remapped 'res://assets/icons/extensions/recycler_art.png' at thread -1 +Completed load for: 'res://resources/items/recycler.tres' remapped 'res://resources/items/recycler.tres' at thread -1 +Loading resource: res://resources/items/virus.tres remapped: res://resources/items/virus.tres +Loading resource: res://assets/icons/extensions/virus_art.png remapped: res://assets/icons/extensions/virus_art.png +Loading resource: res://.godot/imported/virus_art.png-6fdadf0dc8dadfe12432e7a72485171e.ctex remapped: res://.godot/imported/virus_art.png-6fdadf0dc8dadfe12432e7a72485171e.ctex +Completed load for: 'res://assets/icons/extensions/virus_art.png' remapped 'res://assets/icons/extensions/virus_art.png' at thread -1 +Completed load for: 'res://resources/items/virus.tres' remapped 'res://resources/items/virus.tres' at thread -1 +Loading resource: res://resources/items/titanium_armor.tres remapped: res://resources/items/titanium_armor.tres +Loading resource: res://assets/icons/extensions/titanium_armor_art.png remapped: res://assets/icons/extensions/titanium_armor_art.png +Loading resource: res://.godot/imported/titanium_armor_art.png-77b741707d0dfb24fcae9ad6ad3219d4.ctex remapped: res://.godot/imported/titanium_armor_art.png-77b741707d0dfb24fcae9ad6ad3219d4.ctex +Completed load for: 'res://assets/icons/extensions/titanium_armor_art.png' remapped 'res://assets/icons/extensions/titanium_armor_art.png' at thread -1 +Completed load for: 'res://resources/items/titanium_armor.tres' remapped 'res://resources/items/titanium_armor.tres' at thread -1 +Loading resource: res://resources/items/combat_drones.tres remapped: res://resources/items/combat_drones.tres +Loading resource: res://scripts/abilities/tactical_extension_ability.gd remapped: res://scripts/abilities/tactical_extension_ability.gd +Completed load for: 'res://scripts/abilities/tactical_extension_ability.gd' remapped 'res://scripts/abilities/tactical_extension_ability.gd' at thread -1 +Loading resource: res://assets/icons/extensions/combat_drones_art.png remapped: res://assets/icons/extensions/combat_drones_art.png +Loading resource: res://.godot/imported/combat_drones_art.png-ce5df9b0b0abb663da961f963a875f37.ctex remapped: res://.godot/imported/combat_drones_art.png-ce5df9b0b0abb663da961f963a875f37.ctex +Completed load for: 'res://assets/icons/extensions/combat_drones_art.png' remapped 'res://assets/icons/extensions/combat_drones_art.png' at thread -1 +Completed load for: 'res://resources/items/combat_drones.tres' remapped 'res://resources/items/combat_drones.tres' at thread -1 +Loading resource: res://resources/items/teleport.tres remapped: res://resources/items/teleport.tres +Loading resource: res://assets/icons/extensions/teleport_art.png remapped: res://assets/icons/extensions/teleport_art.png +Loading resource: res://.godot/imported/teleport_art.png-96d2eb9efda7c053a9325458f6b883ae.ctex remapped: res://.godot/imported/teleport_art.png-96d2eb9efda7c053a9325458f6b883ae.ctex +Completed load for: 'res://assets/icons/extensions/teleport_art.png' remapped 'res://assets/icons/extensions/teleport_art.png' at thread -1 +Completed load for: 'res://resources/items/teleport.tres' remapped 'res://resources/items/teleport.tres' at thread -1 +Loading resource: res://resources/items/cloak.tres remapped: res://resources/items/cloak.tres +Loading resource: res://assets/icons/extensions/cloak_art.png remapped: res://assets/icons/extensions/cloak_art.png +Loading resource: res://.godot/imported/cloak_art.png-86e932fd023e9e2d1cf22befbd492f1b.ctex remapped: res://.godot/imported/cloak_art.png-86e932fd023e9e2d1cf22befbd492f1b.ctex +Completed load for: 'res://assets/icons/extensions/cloak_art.png' remapped 'res://assets/icons/extensions/cloak_art.png' at thread -1 +Completed load for: 'res://resources/items/cloak.tres' remapped 'res://resources/items/cloak.tres' at thread -1 +Loading resource: res://resources/items/mine_layer.tres remapped: res://resources/items/mine_layer.tres +Loading resource: res://assets/icons/extensions/mine_art.png remapped: res://assets/icons/extensions/mine_art.png +Loading resource: res://.godot/imported/mine_art.png-d9855ade10eaece77e81644f714c4fca.ctex remapped: res://.godot/imported/mine_art.png-d9855ade10eaece77e81644f714c4fca.ctex +Completed load for: 'res://assets/icons/extensions/mine_art.png' remapped 'res://assets/icons/extensions/mine_art.png' at thread -1 +Completed load for: 'res://resources/items/mine_layer.tres' remapped 'res://resources/items/mine_layer.tres' at thread -1 +Loading resource: res://resources/items/flares.tres remapped: res://resources/items/flares.tres +Loading resource: res://assets/icons/extensions/flares_art.png remapped: res://assets/icons/extensions/flares_art.png +Loading resource: res://.godot/imported/flares_art.png-8257018c1bf2262aa2bd54553a07d479.ctex remapped: res://.godot/imported/flares_art.png-8257018c1bf2262aa2bd54553a07d479.ctex +Completed load for: 'res://assets/icons/extensions/flares_art.png' remapped 'res://assets/icons/extensions/flares_art.png' at thread -1 +Completed load for: 'res://resources/items/flares.tres' remapped 'res://resources/items/flares.tres' at thread -1 +Loading resource: res://resources/items/solar_shield_charge.tres remapped: res://resources/items/solar_shield_charge.tres +Loading resource: res://assets/icons/extensions/solar_shield_charge_art.png remapped: res://assets/icons/extensions/solar_shield_charge_art.png +Loading resource: res://.godot/imported/solar_shield_charge_art.png-4a285d20cee948e9860ce0789735a22e.ctex remapped: res://.godot/imported/solar_shield_charge_art.png-4a285d20cee948e9860ce0789735a22e.ctex +Completed load for: 'res://assets/icons/extensions/solar_shield_charge_art.png' remapped 'res://assets/icons/extensions/solar_shield_charge_art.png' at thread -1 +Completed load for: 'res://resources/items/solar_shield_charge.tres' remapped 'res://resources/items/solar_shield_charge.tres' at thread -1 +Loading resource: res://resources/items/gamma_cannon.tres remapped: res://resources/items/gamma_cannon.tres +Loading resource: res://assets/icons/gamma.png remapped: res://assets/icons/gamma.png +Loading resource: res://.godot/imported/gamma.png-96d3080e05fe2aad0fc3e1de127f7d0d.ctex remapped: res://.godot/imported/gamma.png-96d3080e05fe2aad0fc3e1de127f7d0d.ctex +Completed load for: 'res://assets/icons/gamma.png' remapped 'res://assets/icons/gamma.png' at thread -1 +Completed load for: 'res://resources/items/gamma_cannon.tres' remapped 'res://resources/items/gamma_cannon.tres' at thread -1 +Loading resource: res://resources/items/plasma_cannon.tres remapped: res://resources/items/plasma_cannon.tres +Loading resource: res://assets/icons/plasma.png remapped: res://assets/icons/plasma.png +Loading resource: res://.godot/imported/plasma.png-010e12ed95db210261727cb258030992.ctex remapped: res://.godot/imported/plasma.png-010e12ed95db210261727cb258030992.ctex +Completed load for: 'res://assets/icons/plasma.png' remapped 'res://assets/icons/plasma.png' at thread -1 +Completed load for: 'res://resources/items/plasma_cannon.tres' remapped 'res://resources/items/plasma_cannon.tres' at thread -1 +Loading resource: res://resources/items/beam_laser.tres remapped: res://resources/items/beam_laser.tres +Loading resource: res://assets/icons/laser.png remapped: res://assets/icons/laser.png +Loading resource: res://.godot/imported/laser.png-78f84fc3b728b76788f1d7e6bb3d09a0.ctex remapped: res://.godot/imported/laser.png-78f84fc3b728b76788f1d7e6bb3d09a0.ctex +Completed load for: 'res://assets/icons/laser.png' remapped 'res://assets/icons/laser.png' at thread -1 +Completed load for: 'res://resources/items/beam_laser.tres' remapped 'res://resources/items/beam_laser.tres' at thread -1 +Loading resource: res://resources/items/machine_gun.tres remapped: res://resources/items/machine_gun.tres +Loading resource: res://assets/icons/machine_gun.png remapped: res://assets/icons/machine_gun.png +Loading resource: res://.godot/imported/machine_gun.png-82b5627260e455aa7509fcb24baf4ee1.ctex remapped: res://.godot/imported/machine_gun.png-82b5627260e455aa7509fcb24baf4ee1.ctex +Completed load for: 'res://assets/icons/machine_gun.png' remapped 'res://assets/icons/machine_gun.png' at thread -1 +Completed load for: 'res://resources/items/machine_gun.tres' remapped 'res://resources/items/machine_gun.tres' at thread -1 +Loading resource: res://resources/items/missile_launcher.tres remapped: res://resources/items/missile_launcher.tres +Loading resource: res://assets/icons/homing_missile.png remapped: res://assets/icons/homing_missile.png +Loading resource: res://.godot/imported/homing_missile.png-0ff3770387c0b8d591a6d726f544d23d.ctex remapped: res://.godot/imported/homing_missile.png-0ff3770387c0b8d591a6d726f544d23d.ctex +Completed load for: 'res://assets/icons/homing_missile.png' remapped 'res://assets/icons/homing_missile.png' at thread -1 +Completed load for: 'res://resources/items/missile_launcher.tres' remapped 'res://resources/items/missile_launcher.tres' at thread -1 +Loading resource: res://resources/items/unguided_missile.tres remapped: res://resources/items/unguided_missile.tres +Loading resource: res://assets/icons/unguided_missile.png remapped: res://assets/icons/unguided_missile.png +Loading resource: res://.godot/imported/unguided_missile.png-1dd7a9dcb8b847e813c29b7540ac1098.ctex remapped: res://.godot/imported/unguided_missile.png-1dd7a9dcb8b847e813c29b7540ac1098.ctex +Completed load for: 'res://assets/icons/unguided_missile.png' remapped 'res://assets/icons/unguided_missile.png' at thread -1 +Completed load for: 'res://resources/items/unguided_missile.tres' remapped 'res://resources/items/unguided_missile.tres' at thread -1 +Loading resource: res://resources/items/reinforced_shield.tres remapped: res://resources/items/reinforced_shield.tres +Loading resource: res://assets/icons/shield.png remapped: res://assets/icons/shield.png +Loading resource: res://.godot/imported/shield.png-dc46181106b01d9c5b9cf3dd1ba81451.ctex remapped: res://.godot/imported/shield.png-dc46181106b01d9c5b9cf3dd1ba81451.ctex +Completed load for: 'res://assets/icons/shield.png' remapped 'res://assets/icons/shield.png' at thread -1 +Completed load for: 'res://resources/items/reinforced_shield.tres' remapped 'res://resources/items/reinforced_shield.tres' at thread -1 +Loading resource: res://resources/items/hull_plating.tres remapped: res://resources/items/hull_plating.tres +Loading resource: res://assets/icons/armor.png remapped: res://assets/icons/armor.png +Loading resource: res://.godot/imported/armor.png-cd0de3e584bc414792dc7177f7f97118.ctex remapped: res://.godot/imported/armor.png-cd0de3e584bc414792dc7177f7f97118.ctex +Completed load for: 'res://assets/icons/armor.png' remapped 'res://assets/icons/armor.png' at thread -1 +Completed load for: 'res://resources/items/hull_plating.tres' remapped 'res://resources/items/hull_plating.tres' at thread -1 +Loading resource: res://resources/items/compact_generator.tres remapped: res://resources/items/compact_generator.tres +Loading resource: res://assets/icons/reactor.png remapped: res://assets/icons/reactor.png +Loading resource: res://.godot/imported/reactor.png-55fcc7bf0233d2989c491f5381ead349.ctex remapped: res://.godot/imported/reactor.png-55fcc7bf0233d2989c491f5381ead349.ctex +Completed load for: 'res://assets/icons/reactor.png' remapped 'res://assets/icons/reactor.png' at thread -1 +Completed load for: 'res://resources/items/compact_generator.tres' remapped 'res://resources/items/compact_generator.tres' at thread -1 +Loading resource: res://resources/items/engine_extension.tres remapped: res://resources/items/engine_extension.tres +Loading resource: res://assets/icons/engine.png remapped: res://assets/icons/engine.png +Loading resource: res://.godot/imported/engine.png-90c3579541e0f551c023fcf5f45c8938.ctex remapped: res://.godot/imported/engine.png-90c3579541e0f551c023fcf5f45c8938.ctex +Completed load for: 'res://assets/icons/engine.png' remapped 'res://assets/icons/engine.png' at thread -1 +Completed load for: 'res://resources/items/engine_extension.tres' remapped 'res://resources/items/engine_extension.tres' at thread -1 +Loading resource: res://resources/items/shield_recharger.tres remapped: res://resources/items/shield_recharger.tres +Completed load for: 'res://resources/items/shield_recharger.tres' remapped 'res://resources/items/shield_recharger.tres' at thread -1 +Loading resource: res://resources/items/afterburner.tres remapped: res://resources/items/afterburner.tres +Loading resource: res://scripts/abilities/afterburner_ability.gd remapped: res://scripts/abilities/afterburner_ability.gd +Completed load for: 'res://scripts/abilities/afterburner_ability.gd' remapped 'res://scripts/abilities/afterburner_ability.gd' at thread -1 +Loading resource: res://assets/icons/afterburner.png remapped: res://assets/icons/afterburner.png +Loading resource: res://.godot/imported/afterburner.png-95d9a1239ba9614a4ef2d001e06a4092.ctex remapped: res://.godot/imported/afterburner.png-95d9a1239ba9614a4ef2d001e06a4092.ctex +Completed load for: 'res://assets/icons/afterburner.png' remapped 'res://assets/icons/afterburner.png' at thread -1 +Completed load for: 'res://resources/items/afterburner.tres' remapped 'res://resources/items/afterburner.tres' at thread -1 +Loading resource: res://resources/items/shield_charge.tres remapped: res://resources/items/shield_charge.tres +Loading resource: res://scripts/abilities/shield_charge_ability.gd remapped: res://scripts/abilities/shield_charge_ability.gd +Completed load for: 'res://scripts/abilities/shield_charge_ability.gd' remapped 'res://scripts/abilities/shield_charge_ability.gd' at thread -1 +Loading resource: res://assets/icons/shield_charge.png remapped: res://assets/icons/shield_charge.png +Loading resource: res://.godot/imported/shield_charge.png-de5c7d31ad3e9bddb64f261edd5632cb.ctex remapped: res://.godot/imported/shield_charge.png-de5c7d31ad3e9bddb64f261edd5632cb.ctex +Completed load for: 'res://assets/icons/shield_charge.png' remapped 'res://assets/icons/shield_charge.png' at thread -1 +Completed load for: 'res://resources/items/shield_charge.tres' remapped 'res://resources/items/shield_charge.tres' at thread -1 +Loading resource: res://resources/items/repair_drones.tres remapped: res://resources/items/repair_drones.tres +Loading resource: res://scripts/abilities/repair_drones_ability.gd remapped: res://scripts/abilities/repair_drones_ability.gd +Completed load for: 'res://scripts/abilities/repair_drones_ability.gd' remapped 'res://scripts/abilities/repair_drones_ability.gd' at thread -1 +Loading resource: res://assets/icons/repair_drones.png remapped: res://assets/icons/repair_drones.png +Loading resource: res://.godot/imported/repair_drones.png-1c06bb8551ddc2b1cecc2eee29b821a1.ctex remapped: res://.godot/imported/repair_drones.png-1c06bb8551ddc2b1cecc2eee29b821a1.ctex +Completed load for: 'res://assets/icons/repair_drones.png' remapped 'res://assets/icons/repair_drones.png' at thread -1 +Completed load for: 'res://resources/items/repair_drones.tres' remapped 'res://resources/items/repair_drones.tres' at thread -1 +Loading resource: res://resources/items/ship_computer.tres remapped: res://resources/items/ship_computer.tres +Loading resource: res://assets/icons/computer.png remapped: res://assets/icons/computer.png +Loading resource: res://.godot/imported/computer.png-06f9e1e3ec9eb03dac33e53d3e226b18.ctex remapped: res://.godot/imported/computer.png-06f9e1e3ec9eb03dac33e53d3e226b18.ctex +Completed load for: 'res://assets/icons/computer.png' remapped 'res://assets/icons/computer.png' at thread -1 +Completed load for: 'res://resources/items/ship_computer.tres' remapped 'res://resources/items/ship_computer.tres' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_01-512x512.png remapped: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_01-512x512.png +Loading resource: res://.godot/imported/BlueGiant_01-512x512.png-aac776ba06f715137f9011950397f18e.ctex remapped: res://.godot/imported/BlueGiant_01-512x512.png-aac776ba06f715137f9011950397f18e.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_01-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_02-512x512.png remapped: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_02-512x512.png +Loading resource: res://.godot/imported/BlueGiant_02-512x512.png-495c44525cd39ac9045dede3a4b33f64.ctex remapped: res://.godot/imported/BlueGiant_02-512x512.png-495c44525cd39ac9045dede3a4b33f64.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_02-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_03-512x512.png remapped: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_03-512x512.png +Loading resource: res://.godot/imported/BlueGiant_03-512x512.png-9ca4dfb4e0ce929a6b1b2192a3b506b4.ctex remapped: res://.godot/imported/BlueGiant_03-512x512.png-9ca4dfb4e0ce929a6b1b2192a3b506b4.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_03-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_04-512x512.png remapped: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_04-512x512.png +Loading resource: res://.godot/imported/BlueGiant_04-512x512.png-e19382b9c911e2d7634cec5e7c80e52c.ctex remapped: res://.godot/imported/BlueGiant_04-512x512.png-e19382b9c911e2d7634cec5e7c80e52c.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_04-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_05-512x512.png remapped: res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_05-512x512.png +Loading resource: res://.godot/imported/BlueGiant_05-512x512.png-ae758d1664df4fc546fe3a844a3d135a.ctex remapped: res://.godot/imported/BlueGiant_05-512x512.png-ae758d1664df4fc546fe3a844a3d135a.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_05-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Blue Giant/BlueGiant_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_01-512x512.png remapped: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_01-512x512.png +Loading resource: res://.godot/imported/GreenGiant_01-512x512.png-42c570cd7c00be4bfe0f98a8c360fda9.ctex remapped: res://.godot/imported/GreenGiant_01-512x512.png-42c570cd7c00be4bfe0f98a8c360fda9.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_01-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_02-512x512.png remapped: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_02-512x512.png +Loading resource: res://.godot/imported/GreenGiant_02-512x512.png-36bc957d57b9a5433679fb2ff01d5909.ctex remapped: res://.godot/imported/GreenGiant_02-512x512.png-36bc957d57b9a5433679fb2ff01d5909.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_02-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_03-512x512.png remapped: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_03-512x512.png +Loading resource: res://.godot/imported/GreenGiant_03-512x512.png-8a9cb0eadcf30baa49e29d1b7e2bf399.ctex remapped: res://.godot/imported/GreenGiant_03-512x512.png-8a9cb0eadcf30baa49e29d1b7e2bf399.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_03-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_04-512x512.png remapped: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_04-512x512.png +Loading resource: res://.godot/imported/GreenGiant_04-512x512.png-a419e8aa83cf878cdde5502e42f5a139.ctex remapped: res://.godot/imported/GreenGiant_04-512x512.png-a419e8aa83cf878cdde5502e42f5a139.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_04-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_05-512x512.png remapped: res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_05-512x512.png +Loading resource: res://.godot/imported/GreenGiant_05-512x512.png-4db21c33d54bfd77dc407867e376d12e.ctex remapped: res://.godot/imported/GreenGiant_05-512x512.png-4db21c33d54bfd77dc407867e376d12e.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_05-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Green Giant/GreenGiant_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_01-512x512.png remapped: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_01-512x512.png +Loading resource: res://.godot/imported/OrgangeGiant_01-512x512.png-2af2fe590e03fbf443e12275d42a7ebf.ctex remapped: res://.godot/imported/OrgangeGiant_01-512x512.png-2af2fe590e03fbf443e12275d42a7ebf.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_01-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_02-512x512.png remapped: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_02-512x512.png +Loading resource: res://.godot/imported/OrgangeGiant_02-512x512.png-cff1fe9ef3239241468baf5da5ee4643.ctex remapped: res://.godot/imported/OrgangeGiant_02-512x512.png-cff1fe9ef3239241468baf5da5ee4643.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_02-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_03-512x512.png remapped: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_03-512x512.png +Loading resource: res://.godot/imported/OrgangeGiant_03-512x512.png-7f8f20fbe512b53fa4cdc67e05cb2496.ctex remapped: res://.godot/imported/OrgangeGiant_03-512x512.png-7f8f20fbe512b53fa4cdc67e05cb2496.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_03-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_04-512x512.png remapped: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_04-512x512.png +Loading resource: res://.godot/imported/OrgangeGiant_04-512x512.png-acd5e9f34c83cd1e0f1e42219775ab64.ctex remapped: res://.godot/imported/OrgangeGiant_04-512x512.png-acd5e9f34c83cd1e0f1e42219775ab64.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_04-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_05-512x512.png remapped: res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_05-512x512.png +Loading resource: res://.godot/imported/OrgangeGiant_05-512x512.png-34d192aca13d680998d0a454143be399.ctex remapped: res://.godot/imported/OrgangeGiant_05-512x512.png-34d192aca13d680998d0a454143be399.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_05-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Orange Giant/OrgangeGiant_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_01-512x512.png remapped: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_01-512x512.png +Loading resource: res://.godot/imported/RedGiant_01-512x512.png-f41dcd23c1b987ff37b01f48876d3389.ctex remapped: res://.godot/imported/RedGiant_01-512x512.png-f41dcd23c1b987ff37b01f48876d3389.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_01-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_02-512x512.png remapped: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_02-512x512.png +Loading resource: res://.godot/imported/RedGiant_02-512x512.png-4eba9c068845d9e5593142c855bf18af.ctex remapped: res://.godot/imported/RedGiant_02-512x512.png-4eba9c068845d9e5593142c855bf18af.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_02-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_03-512x512.png remapped: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_03-512x512.png +Loading resource: res://.godot/imported/RedGiant_03-512x512.png-2d5a1bfd29bcd26a920d87524eda32d1.ctex remapped: res://.godot/imported/RedGiant_03-512x512.png-2d5a1bfd29bcd26a920d87524eda32d1.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_03-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_04-512x512.png remapped: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_04-512x512.png +Loading resource: res://.godot/imported/RedGiant_04-512x512.png-05c5a9d94f198e84b2bb309b42fd25f2.ctex remapped: res://.godot/imported/RedGiant_04-512x512.png-05c5a9d94f198e84b2bb309b42fd25f2.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_04-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_05-512x512.png remapped: res://assets/planet_sun/Gaseous/Red Giant/RedGiant_05-512x512.png +Loading resource: res://.godot/imported/RedGiant_05-512x512.png-87becb505fe4458dabdd8bf3aafa8daf.ctex remapped: res://.godot/imported/RedGiant_05-512x512.png-87becb505fe4458dabdd8bf3aafa8daf.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_05-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Red Giant/RedGiant_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_01-512x512.png remapped: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_01-512x512.png +Loading resource: res://.godot/imported/YellowGiant_01-512x512.png-84dec4237028ff6cbc38b48662b5f9c0.ctex remapped: res://.godot/imported/YellowGiant_01-512x512.png-84dec4237028ff6cbc38b48662b5f9c0.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_01-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_02-512x512.png remapped: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_02-512x512.png +Loading resource: res://.godot/imported/YellowGiant_02-512x512.png-c0d42143ff343dbf32d400f4a811bd8c.ctex remapped: res://.godot/imported/YellowGiant_02-512x512.png-c0d42143ff343dbf32d400f4a811bd8c.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_02-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_03-512x512.png remapped: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_03-512x512.png +Loading resource: res://.godot/imported/YellowGiant_03-512x512.png-0bc97fc13479393a6d6d827e4408cccb.ctex remapped: res://.godot/imported/YellowGiant_03-512x512.png-0bc97fc13479393a6d6d827e4408cccb.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_03-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_04-512x512.png remapped: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_04-512x512.png +Loading resource: res://.godot/imported/YellowGiant_04-512x512.png-69273fa25c65e869f6781267f5f2020f.ctex remapped: res://.godot/imported/YellowGiant_04-512x512.png-69273fa25c65e869f6781267f5f2020f.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_04-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_05-512x512.png remapped: res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_05-512x512.png +Loading resource: res://.godot/imported/YellowGiant_05-512x512.png-12e5db56aced0d8115852a03c1fea45a.ctex remapped: res://.godot/imported/YellowGiant_05-512x512.png-12e5db56aced0d8115852a03c1fea45a.ctex +Completed load for: 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_05-512x512.png' remapped 'res://assets/planet_sun/Gaseous/Yellow Giant/YellowGiant_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Airless/Airless_01-512x512.png remapped: res://assets/planet_sun/Solid/Airless/Airless_01-512x512.png +Loading resource: res://.godot/imported/Airless_01-512x512.png-c8c707d5701c325ca8fa49d138ede465.ctex remapped: res://.godot/imported/Airless_01-512x512.png-c8c707d5701c325ca8fa49d138ede465.ctex +Completed load for: 'res://assets/planet_sun/Solid/Airless/Airless_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Airless/Airless_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Airless/Airless_02-512x512.png remapped: res://assets/planet_sun/Solid/Airless/Airless_02-512x512.png +Loading resource: res://.godot/imported/Airless_02-512x512.png-1470d72fd0a75f4b7766640626cf7843.ctex remapped: res://.godot/imported/Airless_02-512x512.png-1470d72fd0a75f4b7766640626cf7843.ctex +Completed load for: 'res://assets/planet_sun/Solid/Airless/Airless_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Airless/Airless_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Airless/Airless_03-512x512.png remapped: res://assets/planet_sun/Solid/Airless/Airless_03-512x512.png +Loading resource: res://.godot/imported/Airless_03-512x512.png-63c68227561f40deca62144de4533855.ctex remapped: res://.godot/imported/Airless_03-512x512.png-63c68227561f40deca62144de4533855.ctex +Completed load for: 'res://assets/planet_sun/Solid/Airless/Airless_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Airless/Airless_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Airless/Airless_04-512x512.png remapped: res://assets/planet_sun/Solid/Airless/Airless_04-512x512.png +Loading resource: res://.godot/imported/Airless_04-512x512.png-0b7e68fe5d68320faabc3a2a6c9b1f3a.ctex remapped: res://.godot/imported/Airless_04-512x512.png-0b7e68fe5d68320faabc3a2a6c9b1f3a.ctex +Completed load for: 'res://assets/planet_sun/Solid/Airless/Airless_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Airless/Airless_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Airless/Airless_05-512x512.png remapped: res://assets/planet_sun/Solid/Airless/Airless_05-512x512.png +Loading resource: res://.godot/imported/Airless_05-512x512.png-fdd868ee08a7d88e335d1089938e01b3.ctex remapped: res://.godot/imported/Airless_05-512x512.png-fdd868ee08a7d88e335d1089938e01b3.ctex +Completed load for: 'res://assets/planet_sun/Solid/Airless/Airless_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Airless/Airless_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_01-512x512.png remapped: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_01-512x512.png +Loading resource: res://.godot/imported/Aquamarine_01-512x512.png-0d0024bafd2d2e10ab2d11dbdc635bea.ctex remapped: res://.godot/imported/Aquamarine_01-512x512.png-0d0024bafd2d2e10ab2d11dbdc635bea.ctex +Completed load for: 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_02-512x512.png remapped: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_02-512x512.png +Loading resource: res://.godot/imported/Aquamarine_02-512x512.png-638829c8599022d5fe5f9e009b94e323.ctex remapped: res://.godot/imported/Aquamarine_02-512x512.png-638829c8599022d5fe5f9e009b94e323.ctex +Completed load for: 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_03-512x512.png remapped: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_03-512x512.png +Loading resource: res://.godot/imported/Aquamarine_03-512x512.png-1de8c56ba7cf0a1c3d47854524f13e7a.ctex remapped: res://.godot/imported/Aquamarine_03-512x512.png-1de8c56ba7cf0a1c3d47854524f13e7a.ctex +Completed load for: 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_04-512x512.png remapped: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_04-512x512.png +Loading resource: res://.godot/imported/Aquamarine_04-512x512.png-becdd14576413e2b5b7c39f1e8c2c365.ctex remapped: res://.godot/imported/Aquamarine_04-512x512.png-becdd14576413e2b5b7c39f1e8c2c365.ctex +Completed load for: 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_05-512x512.png remapped: res://assets/planet_sun/Solid/Aquamarine/Aquamarine_05-512x512.png +Loading resource: res://.godot/imported/Aquamarine_05-512x512.png-88abe7d52fe9445c68df10565022569e.ctex remapped: res://.godot/imported/Aquamarine_05-512x512.png-88abe7d52fe9445c68df10565022569e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Aquamarine/Aquamarine_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Arid/Arid_01-512x512.png remapped: res://assets/planet_sun/Solid/Arid/Arid_01-512x512.png +Loading resource: res://.godot/imported/Arid_01-512x512.png-fd660c05720c4b8a687c6da724d2738c.ctex remapped: res://.godot/imported/Arid_01-512x512.png-fd660c05720c4b8a687c6da724d2738c.ctex +Completed load for: 'res://assets/planet_sun/Solid/Arid/Arid_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Arid/Arid_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Arid/Arid_02-512x512.png remapped: res://assets/planet_sun/Solid/Arid/Arid_02-512x512.png +Loading resource: res://.godot/imported/Arid_02-512x512.png-7b96ff99b7621ab60bac84bab03f9b3d.ctex remapped: res://.godot/imported/Arid_02-512x512.png-7b96ff99b7621ab60bac84bab03f9b3d.ctex +Completed load for: 'res://assets/planet_sun/Solid/Arid/Arid_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Arid/Arid_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Arid/Arid_03-512x512.png remapped: res://assets/planet_sun/Solid/Arid/Arid_03-512x512.png +Loading resource: res://.godot/imported/Arid_03-512x512.png-ea7fd88f28e761a67df138dfc4319430.ctex remapped: res://.godot/imported/Arid_03-512x512.png-ea7fd88f28e761a67df138dfc4319430.ctex +Completed load for: 'res://assets/planet_sun/Solid/Arid/Arid_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Arid/Arid_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Arid/Arid_04-512x512.png remapped: res://assets/planet_sun/Solid/Arid/Arid_04-512x512.png +Loading resource: res://.godot/imported/Arid_04-512x512.png-e2d77a1d4887a8cbd3b5ce5d428a9c90.ctex remapped: res://.godot/imported/Arid_04-512x512.png-e2d77a1d4887a8cbd3b5ce5d428a9c90.ctex +Completed load for: 'res://assets/planet_sun/Solid/Arid/Arid_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Arid/Arid_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Arid/Arid_05-512x512.png remapped: res://assets/planet_sun/Solid/Arid/Arid_05-512x512.png +Loading resource: res://.godot/imported/Arid_05-512x512.png-96800ca48193d6e208fe70f93ae41517.ctex remapped: res://.godot/imported/Arid_05-512x512.png-96800ca48193d6e208fe70f93ae41517.ctex +Completed load for: 'res://assets/planet_sun/Solid/Arid/Arid_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Arid/Arid_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Barren/Barren_01-512x512.png remapped: res://assets/planet_sun/Solid/Barren/Barren_01-512x512.png +Loading resource: res://.godot/imported/Barren_01-512x512.png-db7ac8e4a43a8602891115414fa6c869.ctex remapped: res://.godot/imported/Barren_01-512x512.png-db7ac8e4a43a8602891115414fa6c869.ctex +Completed load for: 'res://assets/planet_sun/Solid/Barren/Barren_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Barren/Barren_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Barren/Barren_02-512x512.png remapped: res://assets/planet_sun/Solid/Barren/Barren_02-512x512.png +Loading resource: res://.godot/imported/Barren_02-512x512.png-181ed3d8473c2d3418b8ea418439b931.ctex remapped: res://.godot/imported/Barren_02-512x512.png-181ed3d8473c2d3418b8ea418439b931.ctex +Completed load for: 'res://assets/planet_sun/Solid/Barren/Barren_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Barren/Barren_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Barren/Barren_03-512x512.png remapped: res://assets/planet_sun/Solid/Barren/Barren_03-512x512.png +Loading resource: res://.godot/imported/Barren_03-512x512.png-bd40892fc87b466cc524ebda6562a946.ctex remapped: res://.godot/imported/Barren_03-512x512.png-bd40892fc87b466cc524ebda6562a946.ctex +Completed load for: 'res://assets/planet_sun/Solid/Barren/Barren_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Barren/Barren_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Barren/Barren_04-512x512.png remapped: res://assets/planet_sun/Solid/Barren/Barren_04-512x512.png +Loading resource: res://.godot/imported/Barren_04-512x512.png-7475a112866cc17a6891d8a1d3f1fa66.ctex remapped: res://.godot/imported/Barren_04-512x512.png-7475a112866cc17a6891d8a1d3f1fa66.ctex +Completed load for: 'res://assets/planet_sun/Solid/Barren/Barren_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Barren/Barren_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Barren/Barren_05-512x512.png remapped: res://assets/planet_sun/Solid/Barren/Barren_05-512x512.png +Loading resource: res://.godot/imported/Barren_05-512x512.png-fd3eb170ac8f4992adda148cc772b015.ctex remapped: res://.godot/imported/Barren_05-512x512.png-fd3eb170ac8f4992adda148cc772b015.ctex +Completed load for: 'res://assets/planet_sun/Solid/Barren/Barren_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Barren/Barren_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cloudy/Cloudy_01-512x512.png remapped: res://assets/planet_sun/Solid/Cloudy/Cloudy_01-512x512.png +Loading resource: res://.godot/imported/Cloudy_01-512x512.png-a4497851b4b68eeea4d000129e96586b.ctex remapped: res://.godot/imported/Cloudy_01-512x512.png-a4497851b4b68eeea4d000129e96586b.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cloudy/Cloudy_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Cloudy/Cloudy_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cloudy/Cloudy_02-512x512.png remapped: res://assets/planet_sun/Solid/Cloudy/Cloudy_02-512x512.png +Loading resource: res://.godot/imported/Cloudy_02-512x512.png-df9a1d40aa2bcd63e059572ce5c6642f.ctex remapped: res://.godot/imported/Cloudy_02-512x512.png-df9a1d40aa2bcd63e059572ce5c6642f.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cloudy/Cloudy_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Cloudy/Cloudy_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cloudy/Cloudy_03-512x512.png remapped: res://assets/planet_sun/Solid/Cloudy/Cloudy_03-512x512.png +Loading resource: res://.godot/imported/Cloudy_03-512x512.png-35ae3bf9e8bfd3f48505cf68f2c2252b.ctex remapped: res://.godot/imported/Cloudy_03-512x512.png-35ae3bf9e8bfd3f48505cf68f2c2252b.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cloudy/Cloudy_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Cloudy/Cloudy_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cloudy/Cloudy_04-512x512.png remapped: res://assets/planet_sun/Solid/Cloudy/Cloudy_04-512x512.png +Loading resource: res://.godot/imported/Cloudy_04-512x512.png-0b3887ed203ac327a22fb00c9c3c3efb.ctex remapped: res://.godot/imported/Cloudy_04-512x512.png-0b3887ed203ac327a22fb00c9c3c3efb.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cloudy/Cloudy_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Cloudy/Cloudy_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cloudy/Cloudy_05-512x512.png remapped: res://assets/planet_sun/Solid/Cloudy/Cloudy_05-512x512.png +Loading resource: res://.godot/imported/Cloudy_05-512x512.png-93d84e014d9afb7690efd23645d2ef84.ctex remapped: res://.godot/imported/Cloudy_05-512x512.png-93d84e014d9afb7690efd23645d2ef84.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cloudy/Cloudy_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Cloudy/Cloudy_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cratered/Cratered_01-512x512.png remapped: res://assets/planet_sun/Solid/Cratered/Cratered_01-512x512.png +Loading resource: res://.godot/imported/Cratered_01-512x512.png-50c995b893c581b6ef7dc1975e20012c.ctex remapped: res://.godot/imported/Cratered_01-512x512.png-50c995b893c581b6ef7dc1975e20012c.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cratered/Cratered_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Cratered/Cratered_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cratered/Cratered_02-512x512.png remapped: res://assets/planet_sun/Solid/Cratered/Cratered_02-512x512.png +Loading resource: res://.godot/imported/Cratered_02-512x512.png-204dce84c86e58d1e764d3ddb09594ae.ctex remapped: res://.godot/imported/Cratered_02-512x512.png-204dce84c86e58d1e764d3ddb09594ae.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cratered/Cratered_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Cratered/Cratered_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cratered/Cratered_03-512x512.png remapped: res://assets/planet_sun/Solid/Cratered/Cratered_03-512x512.png +Loading resource: res://.godot/imported/Cratered_03-512x512.png-f0e91cd083954e1bebc0216ee7d21467.ctex remapped: res://.godot/imported/Cratered_03-512x512.png-f0e91cd083954e1bebc0216ee7d21467.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cratered/Cratered_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Cratered/Cratered_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cratered/Cratered_04-512x512.png remapped: res://assets/planet_sun/Solid/Cratered/Cratered_04-512x512.png +Loading resource: res://.godot/imported/Cratered_04-512x512.png-7606756b162a51ff52203a1a7c8fbe81.ctex remapped: res://.godot/imported/Cratered_04-512x512.png-7606756b162a51ff52203a1a7c8fbe81.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cratered/Cratered_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Cratered/Cratered_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Cratered/Cratered_05-512x512.png remapped: res://assets/planet_sun/Solid/Cratered/Cratered_05-512x512.png +Loading resource: res://.godot/imported/Cratered_05-512x512.png-9cffe4d01e7ba8cb38f05d49c7fa777d.ctex remapped: res://.godot/imported/Cratered_05-512x512.png-9cffe4d01e7ba8cb38f05d49c7fa777d.ctex +Completed load for: 'res://assets/planet_sun/Solid/Cratered/Cratered_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Cratered/Cratered_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Dry/Dry_01-512x512.png remapped: res://assets/planet_sun/Solid/Dry/Dry_01-512x512.png +Loading resource: res://.godot/imported/Dry_01-512x512.png-035e0962a0e18753c5afe65e066acfe3.ctex remapped: res://.godot/imported/Dry_01-512x512.png-035e0962a0e18753c5afe65e066acfe3.ctex +Completed load for: 'res://assets/planet_sun/Solid/Dry/Dry_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Dry/Dry_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Dry/Dry_02-512x512.png remapped: res://assets/planet_sun/Solid/Dry/Dry_02-512x512.png +Loading resource: res://.godot/imported/Dry_02-512x512.png-392ce02a9b54deb2f78ffa4e320c89f3.ctex remapped: res://.godot/imported/Dry_02-512x512.png-392ce02a9b54deb2f78ffa4e320c89f3.ctex +Completed load for: 'res://assets/planet_sun/Solid/Dry/Dry_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Dry/Dry_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Dry/Dry_03-512x512.png remapped: res://assets/planet_sun/Solid/Dry/Dry_03-512x512.png +Loading resource: res://.godot/imported/Dry_03-512x512.png-d9defae892d522d40967c89dbf701bd8.ctex remapped: res://.godot/imported/Dry_03-512x512.png-d9defae892d522d40967c89dbf701bd8.ctex +Completed load for: 'res://assets/planet_sun/Solid/Dry/Dry_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Dry/Dry_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Dry/Dry_04-512x512.png remapped: res://assets/planet_sun/Solid/Dry/Dry_04-512x512.png +Loading resource: res://.godot/imported/Dry_04-512x512.png-dc5cbf1f55beb7ee46ec0b8363729b8e.ctex remapped: res://.godot/imported/Dry_04-512x512.png-dc5cbf1f55beb7ee46ec0b8363729b8e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Dry/Dry_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Dry/Dry_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Dry/Dry_05-512x512.png remapped: res://assets/planet_sun/Solid/Dry/Dry_05-512x512.png +Loading resource: res://.godot/imported/Dry_05-512x512.png-a85a6b847497a162abf92b4172759c5b.ctex remapped: res://.godot/imported/Dry_05-512x512.png-a85a6b847497a162abf92b4172759c5b.ctex +Completed load for: 'res://assets/planet_sun/Solid/Dry/Dry_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Dry/Dry_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Frozen/Frozen_01-512x512.png remapped: res://assets/planet_sun/Solid/Frozen/Frozen_01-512x512.png +Loading resource: res://.godot/imported/Frozen_01-512x512.png-5f21ee6cbb095e9a9ac215b294b6fc75.ctex remapped: res://.godot/imported/Frozen_01-512x512.png-5f21ee6cbb095e9a9ac215b294b6fc75.ctex +Completed load for: 'res://assets/planet_sun/Solid/Frozen/Frozen_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Frozen/Frozen_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Frozen/Frozen_02-512x512.png remapped: res://assets/planet_sun/Solid/Frozen/Frozen_02-512x512.png +Loading resource: res://.godot/imported/Frozen_02-512x512.png-87121b969f80661c51dd633d58477767.ctex remapped: res://.godot/imported/Frozen_02-512x512.png-87121b969f80661c51dd633d58477767.ctex +Completed load for: 'res://assets/planet_sun/Solid/Frozen/Frozen_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Frozen/Frozen_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Frozen/Frozen_03-512x512.png remapped: res://assets/planet_sun/Solid/Frozen/Frozen_03-512x512.png +Loading resource: res://.godot/imported/Frozen_03-512x512.png-6e7b89f0af340691708e4a0afc7d5a43.ctex remapped: res://.godot/imported/Frozen_03-512x512.png-6e7b89f0af340691708e4a0afc7d5a43.ctex +Completed load for: 'res://assets/planet_sun/Solid/Frozen/Frozen_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Frozen/Frozen_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Frozen/Frozen_04-512x512.png remapped: res://assets/planet_sun/Solid/Frozen/Frozen_04-512x512.png +Loading resource: res://.godot/imported/Frozen_04-512x512.png-3b54c0540bc96a8d7655c861de2c704a.ctex remapped: res://.godot/imported/Frozen_04-512x512.png-3b54c0540bc96a8d7655c861de2c704a.ctex +Completed load for: 'res://assets/planet_sun/Solid/Frozen/Frozen_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Frozen/Frozen_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Frozen/Frozen_05-512x512.png remapped: res://assets/planet_sun/Solid/Frozen/Frozen_05-512x512.png +Loading resource: res://.godot/imported/Frozen_05-512x512.png-4fd83781c93285b65428b937f27abd50.ctex remapped: res://.godot/imported/Frozen_05-512x512.png-4fd83781c93285b65428b937f27abd50.ctex +Completed load for: 'res://assets/planet_sun/Solid/Frozen/Frozen_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Frozen/Frozen_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Glacial/Glacial_01-512x512.png remapped: res://assets/planet_sun/Solid/Glacial/Glacial_01-512x512.png +Loading resource: res://.godot/imported/Glacial_01-512x512.png-03785137ef8c531d1da21fba74b5bc22.ctex remapped: res://.godot/imported/Glacial_01-512x512.png-03785137ef8c531d1da21fba74b5bc22.ctex +Completed load for: 'res://assets/planet_sun/Solid/Glacial/Glacial_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Glacial/Glacial_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Glacial/Glacial_02-512x512.png remapped: res://assets/planet_sun/Solid/Glacial/Glacial_02-512x512.png +Loading resource: res://.godot/imported/Glacial_02-512x512.png-b6a644c77f12b5ec6cc962e128e408bf.ctex remapped: res://.godot/imported/Glacial_02-512x512.png-b6a644c77f12b5ec6cc962e128e408bf.ctex +Completed load for: 'res://assets/planet_sun/Solid/Glacial/Glacial_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Glacial/Glacial_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Glacial/Glacial_03-512x512.png remapped: res://assets/planet_sun/Solid/Glacial/Glacial_03-512x512.png +Loading resource: res://.godot/imported/Glacial_03-512x512.png-05ccc521441d81624c118ddf44145921.ctex remapped: res://.godot/imported/Glacial_03-512x512.png-05ccc521441d81624c118ddf44145921.ctex +Completed load for: 'res://assets/planet_sun/Solid/Glacial/Glacial_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Glacial/Glacial_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Glacial/Glacial_04-512x512.png remapped: res://assets/planet_sun/Solid/Glacial/Glacial_04-512x512.png +Loading resource: res://.godot/imported/Glacial_04-512x512.png-eeb6d6ede8abb50d0b8b6f8e48646676.ctex remapped: res://.godot/imported/Glacial_04-512x512.png-eeb6d6ede8abb50d0b8b6f8e48646676.ctex +Completed load for: 'res://assets/planet_sun/Solid/Glacial/Glacial_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Glacial/Glacial_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Glacial/Glacial_05-512x512.png remapped: res://assets/planet_sun/Solid/Glacial/Glacial_05-512x512.png +Loading resource: res://.godot/imported/Glacial_05-512x512.png-4d29950e587fd3e41f9bbff370e8d3ba.ctex remapped: res://.godot/imported/Glacial_05-512x512.png-4d29950e587fd3e41f9bbff370e8d3ba.ctex +Completed load for: 'res://assets/planet_sun/Solid/Glacial/Glacial_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Glacial/Glacial_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Icy/Icy_01-512x512.png remapped: res://assets/planet_sun/Solid/Icy/Icy_01-512x512.png +Loading resource: res://.godot/imported/Icy_01-512x512.png-09895d3c9d2e32e56735a430596ad2e4.ctex remapped: res://.godot/imported/Icy_01-512x512.png-09895d3c9d2e32e56735a430596ad2e4.ctex +Completed load for: 'res://assets/planet_sun/Solid/Icy/Icy_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Icy/Icy_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Icy/Icy_02-512x512.png remapped: res://assets/planet_sun/Solid/Icy/Icy_02-512x512.png +Loading resource: res://.godot/imported/Icy_02-512x512.png-ea3ce9082d3013ab0e832caa2fb88e2e.ctex remapped: res://.godot/imported/Icy_02-512x512.png-ea3ce9082d3013ab0e832caa2fb88e2e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Icy/Icy_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Icy/Icy_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Icy/Icy_03-512x512.png remapped: res://assets/planet_sun/Solid/Icy/Icy_03-512x512.png +Loading resource: res://.godot/imported/Icy_03-512x512.png-e1bd0d94a28e8de7564d155088235fce.ctex remapped: res://.godot/imported/Icy_03-512x512.png-e1bd0d94a28e8de7564d155088235fce.ctex +Completed load for: 'res://assets/planet_sun/Solid/Icy/Icy_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Icy/Icy_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Icy/Icy_04-512x512.png remapped: res://assets/planet_sun/Solid/Icy/Icy_04-512x512.png +Loading resource: res://.godot/imported/Icy_04-512x512.png-92a9916c3b5f46b790d650cefdbfd12a.ctex remapped: res://.godot/imported/Icy_04-512x512.png-92a9916c3b5f46b790d650cefdbfd12a.ctex +Completed load for: 'res://assets/planet_sun/Solid/Icy/Icy_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Icy/Icy_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Icy/Icy_05-512x512.png remapped: res://assets/planet_sun/Solid/Icy/Icy_05-512x512.png +Loading resource: res://.godot/imported/Icy_05-512x512.png-03d0d0ce91c3a1b1a69c79028c6f8e7e.ctex remapped: res://.godot/imported/Icy_05-512x512.png-03d0d0ce91c3a1b1a69c79028c6f8e7e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Icy/Icy_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Icy/Icy_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lunar/Lunar_01-512x512.png remapped: res://assets/planet_sun/Solid/Lunar/Lunar_01-512x512.png +Loading resource: res://.godot/imported/Lunar_01-512x512.png-50a4a5328e3c66f244f7bed08788b9ee.ctex remapped: res://.godot/imported/Lunar_01-512x512.png-50a4a5328e3c66f244f7bed08788b9ee.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lunar/Lunar_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Lunar/Lunar_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lunar/Lunar_02-512x512.png remapped: res://assets/planet_sun/Solid/Lunar/Lunar_02-512x512.png +Loading resource: res://.godot/imported/Lunar_02-512x512.png-187b89ef5dc0f166b8d7c7e18be5e974.ctex remapped: res://.godot/imported/Lunar_02-512x512.png-187b89ef5dc0f166b8d7c7e18be5e974.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lunar/Lunar_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Lunar/Lunar_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lunar/Lunar_03-512x512.png remapped: res://assets/planet_sun/Solid/Lunar/Lunar_03-512x512.png +Loading resource: res://.godot/imported/Lunar_03-512x512.png-313881fa3b2349b14c75341222dbb739.ctex remapped: res://.godot/imported/Lunar_03-512x512.png-313881fa3b2349b14c75341222dbb739.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lunar/Lunar_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Lunar/Lunar_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lunar/Lunar_04-512x512.png remapped: res://assets/planet_sun/Solid/Lunar/Lunar_04-512x512.png +Loading resource: res://.godot/imported/Lunar_04-512x512.png-e6f306abc409e350b8679b5a96304663.ctex remapped: res://.godot/imported/Lunar_04-512x512.png-e6f306abc409e350b8679b5a96304663.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lunar/Lunar_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Lunar/Lunar_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lunar/Lunar_05-512x512.png remapped: res://assets/planet_sun/Solid/Lunar/Lunar_05-512x512.png +Loading resource: res://.godot/imported/Lunar_05-512x512.png-3702b36708bd1912086493b975c5124e.ctex remapped: res://.godot/imported/Lunar_05-512x512.png-3702b36708bd1912086493b975c5124e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lunar/Lunar_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Lunar/Lunar_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lush/Lush_01-512x512.png remapped: res://assets/planet_sun/Solid/Lush/Lush_01-512x512.png +Loading resource: res://.godot/imported/Lush_01-512x512.png-70da42846a54c366be4b856512665848.ctex remapped: res://.godot/imported/Lush_01-512x512.png-70da42846a54c366be4b856512665848.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lush/Lush_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Lush/Lush_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lush/Lush_02-512x512.png remapped: res://assets/planet_sun/Solid/Lush/Lush_02-512x512.png +Loading resource: res://.godot/imported/Lush_02-512x512.png-62460e4cc1884d0ff278197548356f14.ctex remapped: res://.godot/imported/Lush_02-512x512.png-62460e4cc1884d0ff278197548356f14.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lush/Lush_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Lush/Lush_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lush/Lush_03-512x512.png remapped: res://assets/planet_sun/Solid/Lush/Lush_03-512x512.png +Loading resource: res://.godot/imported/Lush_03-512x512.png-5fc13b2fc9e847c66d170be6432dce40.ctex remapped: res://.godot/imported/Lush_03-512x512.png-5fc13b2fc9e847c66d170be6432dce40.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lush/Lush_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Lush/Lush_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lush/Lush_04-512x512.png remapped: res://assets/planet_sun/Solid/Lush/Lush_04-512x512.png +Loading resource: res://.godot/imported/Lush_04-512x512.png-8bd2c90d5d5844dd8c739dc995c62207.ctex remapped: res://.godot/imported/Lush_04-512x512.png-8bd2c90d5d5844dd8c739dc995c62207.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lush/Lush_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Lush/Lush_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Lush/Lush_05-512x512.png remapped: res://assets/planet_sun/Solid/Lush/Lush_05-512x512.png +Loading resource: res://.godot/imported/Lush_05-512x512.png-b90e0bb7b9c31226ec6b631f0c830e80.ctex remapped: res://.godot/imported/Lush_05-512x512.png-b90e0bb7b9c31226ec6b631f0c830e80.ctex +Completed load for: 'res://assets/planet_sun/Solid/Lush/Lush_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Lush/Lush_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Magma/Magma_01-512x512.png remapped: res://assets/planet_sun/Solid/Magma/Magma_01-512x512.png +Loading resource: res://.godot/imported/Magma_01-512x512.png-3af96d8df58739fe0ffb496da1974465.ctex remapped: res://.godot/imported/Magma_01-512x512.png-3af96d8df58739fe0ffb496da1974465.ctex +Completed load for: 'res://assets/planet_sun/Solid/Magma/Magma_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Magma/Magma_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Magma/Magma_02-512x512.png remapped: res://assets/planet_sun/Solid/Magma/Magma_02-512x512.png +Loading resource: res://.godot/imported/Magma_02-512x512.png-c8602600de9073931f387848055455a1.ctex remapped: res://.godot/imported/Magma_02-512x512.png-c8602600de9073931f387848055455a1.ctex +Completed load for: 'res://assets/planet_sun/Solid/Magma/Magma_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Magma/Magma_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Magma/Magma_03-512x512.png remapped: res://assets/planet_sun/Solid/Magma/Magma_03-512x512.png +Loading resource: res://.godot/imported/Magma_03-512x512.png-154bfd7d45702082f411678fe8a38883.ctex remapped: res://.godot/imported/Magma_03-512x512.png-154bfd7d45702082f411678fe8a38883.ctex +Completed load for: 'res://assets/planet_sun/Solid/Magma/Magma_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Magma/Magma_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Magma/Magma_04-512x512.png remapped: res://assets/planet_sun/Solid/Magma/Magma_04-512x512.png +Loading resource: res://.godot/imported/Magma_04-512x512.png-4ee563bb63b4bbbb5ce644932298cb1f.ctex remapped: res://.godot/imported/Magma_04-512x512.png-4ee563bb63b4bbbb5ce644932298cb1f.ctex +Completed load for: 'res://assets/planet_sun/Solid/Magma/Magma_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Magma/Magma_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Magma/Magma_05-512x512.png remapped: res://assets/planet_sun/Solid/Magma/Magma_05-512x512.png +Loading resource: res://.godot/imported/Magma_05-512x512.png-9600251be63600bd2307ed7bf6576149.ctex remapped: res://.godot/imported/Magma_05-512x512.png-9600251be63600bd2307ed7bf6576149.ctex +Completed load for: 'res://assets/planet_sun/Solid/Magma/Magma_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Magma/Magma_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Muddy/Muddy_01-512x512.png remapped: res://assets/planet_sun/Solid/Muddy/Muddy_01-512x512.png +Loading resource: res://.godot/imported/Muddy_01-512x512.png-4bf3a8befed10cf98b362a68af15874e.ctex remapped: res://.godot/imported/Muddy_01-512x512.png-4bf3a8befed10cf98b362a68af15874e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Muddy/Muddy_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Muddy/Muddy_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Muddy/Muddy_02-512x512.png remapped: res://assets/planet_sun/Solid/Muddy/Muddy_02-512x512.png +Loading resource: res://.godot/imported/Muddy_02-512x512.png-3bea81827a5834b4dd307067d8a6c33b.ctex remapped: res://.godot/imported/Muddy_02-512x512.png-3bea81827a5834b4dd307067d8a6c33b.ctex +Completed load for: 'res://assets/planet_sun/Solid/Muddy/Muddy_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Muddy/Muddy_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Muddy/Muddy_03-512x512.png remapped: res://assets/planet_sun/Solid/Muddy/Muddy_03-512x512.png +Loading resource: res://.godot/imported/Muddy_03-512x512.png-9d809c5e145efb65c4255ec92bc25f75.ctex remapped: res://.godot/imported/Muddy_03-512x512.png-9d809c5e145efb65c4255ec92bc25f75.ctex +Completed load for: 'res://assets/planet_sun/Solid/Muddy/Muddy_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Muddy/Muddy_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Muddy/Muddy_04-512x512.png remapped: res://assets/planet_sun/Solid/Muddy/Muddy_04-512x512.png +Loading resource: res://.godot/imported/Muddy_04-512x512.png-3f36055a1c16548b601e77557bfb690d.ctex remapped: res://.godot/imported/Muddy_04-512x512.png-3f36055a1c16548b601e77557bfb690d.ctex +Completed load for: 'res://assets/planet_sun/Solid/Muddy/Muddy_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Muddy/Muddy_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Muddy/Muddy_05-512x512.png remapped: res://assets/planet_sun/Solid/Muddy/Muddy_05-512x512.png +Loading resource: res://.godot/imported/Muddy_05-512x512.png-e95b7d4da7d03c18eb21bdf051ad1744.ctex remapped: res://.godot/imported/Muddy_05-512x512.png-e95b7d4da7d03c18eb21bdf051ad1744.ctex +Completed load for: 'res://assets/planet_sun/Solid/Muddy/Muddy_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Muddy/Muddy_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Oasis/Oasis_01-512x512.png remapped: res://assets/planet_sun/Solid/Oasis/Oasis_01-512x512.png +Loading resource: res://.godot/imported/Oasis_01-512x512.png-6b0200b21422a1e8eacda3b64090e298.ctex remapped: res://.godot/imported/Oasis_01-512x512.png-6b0200b21422a1e8eacda3b64090e298.ctex +Completed load for: 'res://assets/planet_sun/Solid/Oasis/Oasis_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Oasis/Oasis_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Oasis/Oasis_02-512x512.png remapped: res://assets/planet_sun/Solid/Oasis/Oasis_02-512x512.png +Loading resource: res://.godot/imported/Oasis_02-512x512.png-b49497da5a21020fa5fe03466bc449e8.ctex remapped: res://.godot/imported/Oasis_02-512x512.png-b49497da5a21020fa5fe03466bc449e8.ctex +Completed load for: 'res://assets/planet_sun/Solid/Oasis/Oasis_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Oasis/Oasis_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Oasis/Oasis_03-512x512.png remapped: res://assets/planet_sun/Solid/Oasis/Oasis_03-512x512.png +Loading resource: res://.godot/imported/Oasis_03-512x512.png-fde39d05c6d072e4944b8ee52a51ce42.ctex remapped: res://.godot/imported/Oasis_03-512x512.png-fde39d05c6d072e4944b8ee52a51ce42.ctex +Completed load for: 'res://assets/planet_sun/Solid/Oasis/Oasis_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Oasis/Oasis_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Oasis/Oasis_04-512x512.png remapped: res://assets/planet_sun/Solid/Oasis/Oasis_04-512x512.png +Loading resource: res://.godot/imported/Oasis_04-512x512.png-49eeec72dbfe6e6f7570f417c22420c7.ctex remapped: res://.godot/imported/Oasis_04-512x512.png-49eeec72dbfe6e6f7570f417c22420c7.ctex +Completed load for: 'res://assets/planet_sun/Solid/Oasis/Oasis_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Oasis/Oasis_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Oasis/Oasis_05-512x512.png remapped: res://assets/planet_sun/Solid/Oasis/Oasis_05-512x512.png +Loading resource: res://.godot/imported/Oasis_05-512x512.png-235178754c1a7b551eaaa75326fbb02d.ctex remapped: res://.godot/imported/Oasis_05-512x512.png-235178754c1a7b551eaaa75326fbb02d.ctex +Completed load for: 'res://assets/planet_sun/Solid/Oasis/Oasis_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Oasis/Oasis_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Ocean/Ocean_01-512x512.png remapped: res://assets/planet_sun/Solid/Ocean/Ocean_01-512x512.png +Loading resource: res://.godot/imported/Ocean_01-512x512.png-692d40ada82f424346f7dda4d2aa2a7a.ctex remapped: res://.godot/imported/Ocean_01-512x512.png-692d40ada82f424346f7dda4d2aa2a7a.ctex +Completed load for: 'res://assets/planet_sun/Solid/Ocean/Ocean_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Ocean/Ocean_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Ocean/Ocean_02-512x512.png remapped: res://assets/planet_sun/Solid/Ocean/Ocean_02-512x512.png +Loading resource: res://.godot/imported/Ocean_02-512x512.png-184232787bd55b6314c4dbd1ddb2db05.ctex remapped: res://.godot/imported/Ocean_02-512x512.png-184232787bd55b6314c4dbd1ddb2db05.ctex +Completed load for: 'res://assets/planet_sun/Solid/Ocean/Ocean_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Ocean/Ocean_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Ocean/Ocean_03-512x512.png remapped: res://assets/planet_sun/Solid/Ocean/Ocean_03-512x512.png +Loading resource: res://.godot/imported/Ocean_03-512x512.png-b66e276141b3d371d7df87c192b38c1d.ctex remapped: res://.godot/imported/Ocean_03-512x512.png-b66e276141b3d371d7df87c192b38c1d.ctex +Completed load for: 'res://assets/planet_sun/Solid/Ocean/Ocean_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Ocean/Ocean_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Ocean/Ocean_04-512x512.png remapped: res://assets/planet_sun/Solid/Ocean/Ocean_04-512x512.png +Loading resource: res://.godot/imported/Ocean_04-512x512.png-82909e6745a66fba8dc2bc21cebff454.ctex remapped: res://.godot/imported/Ocean_04-512x512.png-82909e6745a66fba8dc2bc21cebff454.ctex +Completed load for: 'res://assets/planet_sun/Solid/Ocean/Ocean_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Ocean/Ocean_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Ocean/Ocean_05-512x512.png remapped: res://assets/planet_sun/Solid/Ocean/Ocean_05-512x512.png +Loading resource: res://.godot/imported/Ocean_05-512x512.png-5dc42a704d44c7a1f1bfb100f8ddfc5e.ctex remapped: res://.godot/imported/Ocean_05-512x512.png-5dc42a704d44c7a1f1bfb100f8ddfc5e.ctex +Completed load for: 'res://assets/planet_sun/Solid/Ocean/Ocean_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Ocean/Ocean_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Rocky/Rocky_01-512x512.png remapped: res://assets/planet_sun/Solid/Rocky/Rocky_01-512x512.png +Loading resource: res://.godot/imported/Rocky_01-512x512.png-ffa33a78ded3ec88fa0238e71d7f2629.ctex remapped: res://.godot/imported/Rocky_01-512x512.png-ffa33a78ded3ec88fa0238e71d7f2629.ctex +Completed load for: 'res://assets/planet_sun/Solid/Rocky/Rocky_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Rocky/Rocky_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Rocky/Rocky_02-512x512.png remapped: res://assets/planet_sun/Solid/Rocky/Rocky_02-512x512.png +Loading resource: res://.godot/imported/Rocky_02-512x512.png-1010dcedabd348f2cbb5af24b2823dc0.ctex remapped: res://.godot/imported/Rocky_02-512x512.png-1010dcedabd348f2cbb5af24b2823dc0.ctex +Completed load for: 'res://assets/planet_sun/Solid/Rocky/Rocky_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Rocky/Rocky_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Rocky/Rocky_03-512x512.png remapped: res://assets/planet_sun/Solid/Rocky/Rocky_03-512x512.png +Loading resource: res://.godot/imported/Rocky_03-512x512.png-40712fe6de1d7b81e28a90f76097e767.ctex remapped: res://.godot/imported/Rocky_03-512x512.png-40712fe6de1d7b81e28a90f76097e767.ctex +Completed load for: 'res://assets/planet_sun/Solid/Rocky/Rocky_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Rocky/Rocky_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Rocky/Rocky_04-512x512.png remapped: res://assets/planet_sun/Solid/Rocky/Rocky_04-512x512.png +Loading resource: res://.godot/imported/Rocky_04-512x512.png-1d43d96407a369dafc955b3e072bd4ea.ctex remapped: res://.godot/imported/Rocky_04-512x512.png-1d43d96407a369dafc955b3e072bd4ea.ctex +Completed load for: 'res://assets/planet_sun/Solid/Rocky/Rocky_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Rocky/Rocky_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Rocky/Rocky_05-512x512.png remapped: res://assets/planet_sun/Solid/Rocky/Rocky_05-512x512.png +Loading resource: res://.godot/imported/Rocky_05-512x512.png-2ea2aeaae8de9317fc2c326cd407e949.ctex remapped: res://.godot/imported/Rocky_05-512x512.png-2ea2aeaae8de9317fc2c326cd407e949.ctex +Completed load for: 'res://assets/planet_sun/Solid/Rocky/Rocky_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Rocky/Rocky_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Snowy/Snowy_01-512x512.png remapped: res://assets/planet_sun/Solid/Snowy/Snowy_01-512x512.png +Loading resource: res://.godot/imported/Snowy_01-512x512.png-7b15994daf17659121e0753977278167.ctex remapped: res://.godot/imported/Snowy_01-512x512.png-7b15994daf17659121e0753977278167.ctex +Completed load for: 'res://assets/planet_sun/Solid/Snowy/Snowy_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Snowy/Snowy_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Snowy/Snowy_02-512x512.png remapped: res://assets/planet_sun/Solid/Snowy/Snowy_02-512x512.png +Loading resource: res://.godot/imported/Snowy_02-512x512.png-ad3c01af210cfbb7bb14f5682ec87872.ctex remapped: res://.godot/imported/Snowy_02-512x512.png-ad3c01af210cfbb7bb14f5682ec87872.ctex +Completed load for: 'res://assets/planet_sun/Solid/Snowy/Snowy_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Snowy/Snowy_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Snowy/Snowy_03-512x512.png remapped: res://assets/planet_sun/Solid/Snowy/Snowy_03-512x512.png +Loading resource: res://.godot/imported/Snowy_03-512x512.png-0493b1445f98164a03b548749f7ffbb2.ctex remapped: res://.godot/imported/Snowy_03-512x512.png-0493b1445f98164a03b548749f7ffbb2.ctex +Completed load for: 'res://assets/planet_sun/Solid/Snowy/Snowy_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Snowy/Snowy_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Snowy/Snowy_04-512x512.png remapped: res://assets/planet_sun/Solid/Snowy/Snowy_04-512x512.png +Loading resource: res://.godot/imported/Snowy_04-512x512.png-30547a42493c6637d258acab739394f8.ctex remapped: res://.godot/imported/Snowy_04-512x512.png-30547a42493c6637d258acab739394f8.ctex +Completed load for: 'res://assets/planet_sun/Solid/Snowy/Snowy_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Snowy/Snowy_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Snowy/Snowy_05-512x512.png remapped: res://assets/planet_sun/Solid/Snowy/Snowy_05-512x512.png +Loading resource: res://.godot/imported/Snowy_05-512x512.png-275f1a6c4315cdf1781fb9cb5f70d8e3.ctex remapped: res://.godot/imported/Snowy_05-512x512.png-275f1a6c4315cdf1781fb9cb5f70d8e3.ctex +Completed load for: 'res://assets/planet_sun/Solid/Snowy/Snowy_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Snowy/Snowy_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_01-512x512.png remapped: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_01-512x512.png +Loading resource: res://.godot/imported/Terrestrial_01-512x512.png-1336c5f2823cc082d29dd853d82564a5.ctex remapped: res://.godot/imported/Terrestrial_01-512x512.png-1336c5f2823cc082d29dd853d82564a5.ctex +Completed load for: 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_02-512x512.png remapped: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_02-512x512.png +Loading resource: res://.godot/imported/Terrestrial_02-512x512.png-c73d85b93aa450789e82ff76da86ebdc.ctex remapped: res://.godot/imported/Terrestrial_02-512x512.png-c73d85b93aa450789e82ff76da86ebdc.ctex +Completed load for: 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_03-512x512.png remapped: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_03-512x512.png +Loading resource: res://.godot/imported/Terrestrial_03-512x512.png-6b6a70ede04f54ffc618aaa7ebb02a8a.ctex remapped: res://.godot/imported/Terrestrial_03-512x512.png-6b6a70ede04f54ffc618aaa7ebb02a8a.ctex +Completed load for: 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_04-512x512.png remapped: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_04-512x512.png +Loading resource: res://.godot/imported/Terrestrial_04-512x512.png-b7cbebc5c91e86af5e2ecd626924b974.ctex remapped: res://.godot/imported/Terrestrial_04-512x512.png-b7cbebc5c91e86af5e2ecd626924b974.ctex +Completed load for: 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_05-512x512.png remapped: res://assets/planet_sun/Solid/Terrestrial/Terrestrial_05-512x512.png +Loading resource: res://.godot/imported/Terrestrial_05-512x512.png-610435ca31ca4bbb766f1090a539a3b4.ctex remapped: res://.godot/imported/Terrestrial_05-512x512.png-610435ca31ca4bbb766f1090a539a3b4.ctex +Completed load for: 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Terrestrial/Terrestrial_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Tropical/Tropical_01-512x512.png remapped: res://assets/planet_sun/Solid/Tropical/Tropical_01-512x512.png +Loading resource: res://.godot/imported/Tropical_01-512x512.png-6e9307b110569c0907e29e416ecc9d49.ctex remapped: res://.godot/imported/Tropical_01-512x512.png-6e9307b110569c0907e29e416ecc9d49.ctex +Completed load for: 'res://assets/planet_sun/Solid/Tropical/Tropical_01-512x512.png' remapped 'res://assets/planet_sun/Solid/Tropical/Tropical_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Tropical/Tropical_02-512x512.png remapped: res://assets/planet_sun/Solid/Tropical/Tropical_02-512x512.png +Loading resource: res://.godot/imported/Tropical_02-512x512.png-0215dcd295c1b9cacb764ca69a0951d1.ctex remapped: res://.godot/imported/Tropical_02-512x512.png-0215dcd295c1b9cacb764ca69a0951d1.ctex +Completed load for: 'res://assets/planet_sun/Solid/Tropical/Tropical_02-512x512.png' remapped 'res://assets/planet_sun/Solid/Tropical/Tropical_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Tropical/Tropical_03-512x512.png remapped: res://assets/planet_sun/Solid/Tropical/Tropical_03-512x512.png +Loading resource: res://.godot/imported/Tropical_03-512x512.png-f53c70e509141923d496335824f6b372.ctex remapped: res://.godot/imported/Tropical_03-512x512.png-f53c70e509141923d496335824f6b372.ctex +Completed load for: 'res://assets/planet_sun/Solid/Tropical/Tropical_03-512x512.png' remapped 'res://assets/planet_sun/Solid/Tropical/Tropical_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Tropical/Tropical_04-512x512.png remapped: res://assets/planet_sun/Solid/Tropical/Tropical_04-512x512.png +Loading resource: res://.godot/imported/Tropical_04-512x512.png-be97a31375ea37d60d74a62d3540e149.ctex remapped: res://.godot/imported/Tropical_04-512x512.png-be97a31375ea37d60d74a62d3540e149.ctex +Completed load for: 'res://assets/planet_sun/Solid/Tropical/Tropical_04-512x512.png' remapped 'res://assets/planet_sun/Solid/Tropical/Tropical_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Solid/Tropical/Tropical_05-512x512.png remapped: res://assets/planet_sun/Solid/Tropical/Tropical_05-512x512.png +Loading resource: res://.godot/imported/Tropical_05-512x512.png-41f69e57ad4d021510189fc9d8b3c44d.ctex remapped: res://.godot/imported/Tropical_05-512x512.png-41f69e57ad4d021510189fc9d8b3c44d.ctex +Completed load for: 'res://assets/planet_sun/Solid/Tropical/Tropical_05-512x512.png' remapped 'res://assets/planet_sun/Solid/Tropical/Tropical_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_01-512x512.png remapped: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_01-512x512.png +Loading resource: res://.godot/imported/Sun_Blue_01-512x512.png-9619d841526871de6d930d21adcfd53a.ctex remapped: res://.godot/imported/Sun_Blue_01-512x512.png-9619d841526871de6d930d21adcfd53a.ctex +Completed load for: 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_01-512x512.png' remapped 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_02-512x512.png remapped: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_02-512x512.png +Loading resource: res://.godot/imported/Sun_Blue_02-512x512.png-0c8e6b111546b50b004c764f623288b8.ctex remapped: res://.godot/imported/Sun_Blue_02-512x512.png-0c8e6b111546b50b004c764f623288b8.ctex +Completed load for: 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_02-512x512.png' remapped 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_03-512x512.png remapped: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_03-512x512.png +Loading resource: res://.godot/imported/Sun_Blue_03-512x512.png-d683025531c9dd65b802d7615c3ccb6b.ctex remapped: res://.godot/imported/Sun_Blue_03-512x512.png-d683025531c9dd65b802d7615c3ccb6b.ctex +Completed load for: 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_03-512x512.png' remapped 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_04-512x512.png remapped: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_04-512x512.png +Loading resource: res://.godot/imported/Sun_Blue_04-512x512.png-c093961cea0a75dce854e519087fba4a.ctex remapped: res://.godot/imported/Sun_Blue_04-512x512.png-c093961cea0a75dce854e519087fba4a.ctex +Completed load for: 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_04-512x512.png' remapped 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_05-512x512.png remapped: res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_05-512x512.png +Loading resource: res://.godot/imported/Sun_Blue_05-512x512.png-0f513e27d4d12726d5690bfd1ab7b51a.ctex remapped: res://.godot/imported/Sun_Blue_05-512x512.png-0f513e27d4d12726d5690bfd1ab7b51a.ctex +Completed load for: 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_05-512x512.png' remapped 'res://assets/planet_sun/Suns/Blue Sun/Sun_Blue_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Red Sun/Sun_Red_01-512x512.png remapped: res://assets/planet_sun/Suns/Red Sun/Sun_Red_01-512x512.png +Loading resource: res://.godot/imported/Sun_Red_01-512x512.png-7469831969227a602ecb644db700b350.ctex remapped: res://.godot/imported/Sun_Red_01-512x512.png-7469831969227a602ecb644db700b350.ctex +Completed load for: 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_01-512x512.png' remapped 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Red Sun/Sun_Red_02-512x512.png remapped: res://assets/planet_sun/Suns/Red Sun/Sun_Red_02-512x512.png +Loading resource: res://.godot/imported/Sun_Red_02-512x512.png-a416552987ea92c9d7960036b7deb94f.ctex remapped: res://.godot/imported/Sun_Red_02-512x512.png-a416552987ea92c9d7960036b7deb94f.ctex +Completed load for: 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_02-512x512.png' remapped 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Red Sun/Sun_Red_03-512x512.png remapped: res://assets/planet_sun/Suns/Red Sun/Sun_Red_03-512x512.png +Loading resource: res://.godot/imported/Sun_Red_03-512x512.png-9b59a3f95d6f1d13a953355090075168.ctex remapped: res://.godot/imported/Sun_Red_03-512x512.png-9b59a3f95d6f1d13a953355090075168.ctex +Completed load for: 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_03-512x512.png' remapped 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Red Sun/Sun_Red_04-512x512.png remapped: res://assets/planet_sun/Suns/Red Sun/Sun_Red_04-512x512.png +Loading resource: res://.godot/imported/Sun_Red_04-512x512.png-f82851a5afc3157b503ccdd3b1a4553e.ctex remapped: res://.godot/imported/Sun_Red_04-512x512.png-f82851a5afc3157b503ccdd3b1a4553e.ctex +Completed load for: 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_04-512x512.png' remapped 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Red Sun/Sun_Red_05-512x512.png remapped: res://assets/planet_sun/Suns/Red Sun/Sun_Red_05-512x512.png +Loading resource: res://.godot/imported/Sun_Red_05-512x512.png-86996f52fdf0c83ac92839e346e12e3a.ctex remapped: res://.godot/imported/Sun_Red_05-512x512.png-86996f52fdf0c83ac92839e346e12e3a.ctex +Completed load for: 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_05-512x512.png' remapped 'res://assets/planet_sun/Suns/Red Sun/Sun_Red_05-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_01-512x512.png remapped: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_01-512x512.png +Loading resource: res://.godot/imported/Sun_Yellow_01-512x512.png-ec4a0ccdd9662ac49db850be0d09d331.ctex remapped: res://.godot/imported/Sun_Yellow_01-512x512.png-ec4a0ccdd9662ac49db850be0d09d331.ctex +Completed load for: 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_01-512x512.png' remapped 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_01-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_02-512x512.png remapped: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_02-512x512.png +Loading resource: res://.godot/imported/Sun_Yellow_02-512x512.png-d645b30eb5bf7d90cf3cc8681f9e9046.ctex remapped: res://.godot/imported/Sun_Yellow_02-512x512.png-d645b30eb5bf7d90cf3cc8681f9e9046.ctex +Completed load for: 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_02-512x512.png' remapped 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_02-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_03-512x512.png remapped: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_03-512x512.png +Loading resource: res://.godot/imported/Sun_Yellow_03-512x512.png-afbfe087dd477022f076126d6956260b.ctex remapped: res://.godot/imported/Sun_Yellow_03-512x512.png-afbfe087dd477022f076126d6956260b.ctex +Completed load for: 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_03-512x512.png' remapped 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_03-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_04-512x512.png remapped: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_04-512x512.png +Loading resource: res://.godot/imported/Sun_Yellow_04-512x512.png-52d1df3017faaaaf1f46b588f4ed1dfe.ctex remapped: res://.godot/imported/Sun_Yellow_04-512x512.png-52d1df3017faaaaf1f46b588f4ed1dfe.ctex +Completed load for: 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_04-512x512.png' remapped 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_04-512x512.png' at thread -1 +Loading resource: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_05-512x512.png remapped: res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_05-512x512.png +Loading resource: res://.godot/imported/Sun_Yellow_05-512x512.png-bae7ba2d32829f0b6720c5597941f707.ctex remapped: res://.godot/imported/Sun_Yellow_05-512x512.png-bae7ba2d32829f0b6720c5597941f707.ctex +Completed load for: 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_05-512x512.png' remapped 'res://assets/planet_sun/Suns/Yellow Sun/Sun_Yellow_05-512x512.png' at thread -1 +Loading resource: res://resources/items/affix_database.tres remapped: res://resources/items/affix_database.tres +Loading resource: res://scripts/items/item_affix_database.gd remapped: res://scripts/items/item_affix_database.gd +Completed load for: 'res://scripts/items/item_affix_database.gd' remapped 'res://scripts/items/item_affix_database.gd' at thread -1 +Loading resource: res://resources/items/affixes/hull_percent.tres remapped: res://resources/items/affixes/hull_percent.tres +Completed load for: 'res://resources/items/affixes/hull_percent.tres' remapped 'res://resources/items/affixes/hull_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/damage_percent.tres remapped: res://resources/items/affixes/damage_percent.tres +Completed load for: 'res://resources/items/affixes/damage_percent.tres' remapped 'res://resources/items/affixes/damage_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/shield_percent.tres remapped: res://resources/items/affixes/shield_percent.tres +Completed load for: 'res://resources/items/affixes/shield_percent.tres' remapped 'res://resources/items/affixes/shield_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/energy_regeneration.tres remapped: res://resources/items/affixes/energy_regeneration.tres +Completed load for: 'res://resources/items/affixes/energy_regeneration.tres' remapped 'res://resources/items/affixes/energy_regeneration.tres' at thread -1 +Loading resource: res://resources/items/affixes/shield_regeneration.tres remapped: res://resources/items/affixes/shield_regeneration.tres +Completed load for: 'res://resources/items/affixes/shield_regeneration.tres' remapped 'res://resources/items/affixes/shield_regeneration.tres' at thread -1 +Loading resource: res://resources/items/affixes/speed_percent.tres remapped: res://resources/items/affixes/speed_percent.tres +Completed load for: 'res://resources/items/affixes/speed_percent.tres' remapped 'res://resources/items/affixes/speed_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/experience_percent.tres remapped: res://resources/items/affixes/experience_percent.tres +Completed load for: 'res://resources/items/affixes/experience_percent.tres' remapped 'res://resources/items/affixes/experience_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/credits_percent.tres remapped: res://resources/items/affixes/credits_percent.tres +Completed load for: 'res://resources/items/affixes/credits_percent.tres' remapped 'res://resources/items/affixes/credits_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/critical_chance_percent.tres remapped: res://resources/items/affixes/critical_chance_percent.tres +Completed load for: 'res://resources/items/affixes/critical_chance_percent.tres' remapped 'res://resources/items/affixes/critical_chance_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/critical_damage_percent.tres remapped: res://resources/items/affixes/critical_damage_percent.tres +Completed load for: 'res://resources/items/affixes/critical_damage_percent.tres' remapped 'res://resources/items/affixes/critical_damage_percent.tres' at thread -1 +Loading resource: res://resources/items/affixes/missile_cooldown.tres remapped: res://resources/items/affixes/missile_cooldown.tres +Completed load for: 'res://resources/items/affixes/missile_cooldown.tres' remapped 'res://resources/items/affixes/missile_cooldown.tres' at thread -1 +Loading resource: res://resources/items/affixes/shield_on_damage.tres remapped: res://resources/items/affixes/shield_on_damage.tres +Completed load for: 'res://resources/items/affixes/shield_on_damage.tres' remapped 'res://resources/items/affixes/shield_on_damage.tres' at thread -1 +Loading resource: res://resources/items/affixes/kinetic_absorption.tres remapped: res://resources/items/affixes/kinetic_absorption.tres +Completed load for: 'res://resources/items/affixes/kinetic_absorption.tres' remapped 'res://resources/items/affixes/kinetic_absorption.tres' at thread -1 +Loading resource: res://resources/items/affixes/energy_absorption.tres remapped: res://resources/items/affixes/energy_absorption.tres +Completed load for: 'res://resources/items/affixes/energy_absorption.tres' remapped 'res://resources/items/affixes/energy_absorption.tres' at thread -1 +Loading resource: res://resources/items/affixes/radiation_absorption.tres remapped: res://resources/items/affixes/radiation_absorption.tres +Completed load for: 'res://resources/items/affixes/radiation_absorption.tres' remapped 'res://resources/items/affixes/radiation_absorption.tres' at thread -1 +Loading resource: res://resources/items/affixes/luck_percent.tres remapped: res://resources/items/affixes/luck_percent.tres +Completed load for: 'res://resources/items/affixes/luck_percent.tres' remapped 'res://resources/items/affixes/luck_percent.tres' at thread -1 +Completed load for: 'res://resources/items/affix_database.tres' remapped 'res://resources/items/affix_database.tres' at thread -1 +Completed load for: 'res://scripts/game/game_state.gd' remapped 'res://scripts/game/game_state.gd' at thread -1 +Loading resource: res://addons/godot_mcp_toolkit/runtime/mcp_runtime_server.gd remapped: res://addons/godot_mcp_toolkit/runtime/mcp_runtime_server.gd +Completed load for: 'res://addons/godot_mcp_toolkit/runtime/mcp_runtime_server.gd' remapped 'res://addons/godot_mcp_toolkit/runtime/mcp_runtime_server.gd' at thread -1 +Loaded system CA certificates +Loading resource: res://tests/levels/planet_expeditions_test.tscn remapped: res://tests/levels/planet_expeditions_test.tscn +Loading resource: res://tests/levels/planet_expeditions_test.gd remapped: res://tests/levels/planet_expeditions_test.gd +Loading resource: res://scenes/game/game.tscn remapped: res://scenes/game/game.tscn +Loading resource: res://scripts/game/game.gd remapped: res://scripts/game/game.gd +Loading resource: res://scenes/ui/planet_services_menu.tscn remapped: res://scenes/ui/planet_services_menu.tscn +Loading resource: res://scripts/ui/planet_services_menu.gd remapped: res://scripts/ui/planet_services_menu.gd +Loading resource: res://assets/icons/resources/credits.svg remapped: res://assets/icons/resources/credits.svg +Loading resource: res://.godot/imported/credits.svg-f8d3e258536ac8d1209ad161871ccdce.ctex remapped: res://.godot/imported/credits.svg-f8d3e258536ac8d1209ad161871ccdce.ctex +Completed load for: 'res://assets/icons/resources/credits.svg' remapped 'res://assets/icons/resources/credits.svg' at thread -1 +Completed load for: 'res://scripts/ui/planet_services_menu.gd' remapped 'res://scripts/ui/planet_services_menu.gd' at thread -1 +Completed load for: 'res://scenes/ui/planet_services_menu.tscn' remapped 'res://scenes/ui/planet_services_menu.tscn' at thread -1 +Loading resource: res://scenes/game/enemy_ship.tscn remapped: res://scenes/game/enemy_ship.tscn +Loading resource: res://scripts/game/enemy_ship.gd remapped: res://scripts/game/enemy_ship.gd +Loading resource: res://scenes/game/damage_popup.tscn remapped: res://scenes/game/damage_popup.tscn +Loading resource: res://scripts/game/damage_popup.gd remapped: res://scripts/game/damage_popup.gd +Completed load for: 'res://scripts/game/damage_popup.gd' remapped 'res://scripts/game/damage_popup.gd' at thread -1 +Completed load for: 'res://scenes/game/damage_popup.tscn' remapped 'res://scenes/game/damage_popup.tscn' at thread -1 +Loading resource: res://scenes/game/impact_effect.tscn remapped: res://scenes/game/impact_effect.tscn +Loading resource: res://scripts/game/impact_effect.gd remapped: res://scripts/game/impact_effect.gd +Completed load for: 'res://scripts/game/impact_effect.gd' remapped 'res://scripts/game/impact_effect.gd' at thread -1 +Completed load for: 'res://scenes/game/impact_effect.tscn' remapped 'res://scenes/game/impact_effect.tscn' at thread -1 +Loading resource: res://scenes/game/weapon_projectile.tscn remapped: res://scenes/game/weapon_projectile.tscn +Loading resource: res://scripts/game/weapon_projectile.gd remapped: res://scripts/game/weapon_projectile.gd +Loading resource: res://assets/other/bullet.png remapped: res://assets/other/bullet.png +Loading resource: res://.godot/imported/bullet.png-66cc684355c2a62500163bc6295d59dc.ctex remapped: res://.godot/imported/bullet.png-66cc684355c2a62500163bc6295d59dc.ctex +Completed load for: 'res://assets/other/bullet.png' remapped 'res://assets/other/bullet.png' at thread -1 +Completed load for: 'res://scripts/game/weapon_projectile.gd' remapped 'res://scripts/game/weapon_projectile.gd' at thread -1 +Completed load for: 'res://scenes/game/weapon_projectile.tscn' remapped 'res://scenes/game/weapon_projectile.tscn' at thread -1 +Loading resource: res://resources/items/energy_bank.tres remapped: res://resources/items/energy_bank.tres +Loading resource: res://assets/icons/resources/energy_bank.svg remapped: res://assets/icons/resources/energy_bank.svg +Loading resource: res://.godot/imported/energy_bank.svg-8c8e30dd3b3aa92f057a91b42959e0d5.ctex remapped: res://.godot/imported/energy_bank.svg-8c8e30dd3b3aa92f057a91b42959e0d5.ctex +Completed load for: 'res://assets/icons/resources/energy_bank.svg' remapped 'res://assets/icons/resources/energy_bank.svg' at thread -1 +Completed load for: 'res://resources/items/energy_bank.tres' remapped 'res://resources/items/energy_bank.tres' at thread -1 +Loading resource: res://assets/other/enemy_mine.png remapped: res://assets/other/enemy_mine.png +Loading resource: res://.godot/imported/enemy_mine.png-cbe7ead53abadbefaca3c3e913b8b0c4.ctex remapped: res://.godot/imported/enemy_mine.png-cbe7ead53abadbefaca3c3e913b8b0c4.ctex +Completed load for: 'res://assets/other/enemy_mine.png' remapped 'res://assets/other/enemy_mine.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_01.png remapped: res://assets/alien_ships/alien_01.png +Loading resource: res://.godot/imported/alien_01.png-be6de3b72a7b92055fe983d28a70ec33.ctex remapped: res://.godot/imported/alien_01.png-be6de3b72a7b92055fe983d28a70ec33.ctex +Completed load for: 'res://assets/alien_ships/alien_01.png' remapped 'res://assets/alien_ships/alien_01.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_02.png remapped: res://assets/alien_ships/alien_02.png +Loading resource: res://.godot/imported/alien_02.png-573fd544da4230a54f566c218aa2f6bb.ctex remapped: res://.godot/imported/alien_02.png-573fd544da4230a54f566c218aa2f6bb.ctex +Completed load for: 'res://assets/alien_ships/alien_02.png' remapped 'res://assets/alien_ships/alien_02.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_03.png remapped: res://assets/alien_ships/alien_03.png +Loading resource: res://.godot/imported/alien_03.png-fc13080e1eb9cbfcf8bdb637ef3ccc5f.ctex remapped: res://.godot/imported/alien_03.png-fc13080e1eb9cbfcf8bdb637ef3ccc5f.ctex +Completed load for: 'res://assets/alien_ships/alien_03.png' remapped 'res://assets/alien_ships/alien_03.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_04.png remapped: res://assets/alien_ships/alien_04.png +Loading resource: res://.godot/imported/alien_04.png-08422063a1f190a13aaa53c043a0059b.ctex remapped: res://.godot/imported/alien_04.png-08422063a1f190a13aaa53c043a0059b.ctex +Completed load for: 'res://assets/alien_ships/alien_04.png' remapped 'res://assets/alien_ships/alien_04.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_05.png remapped: res://assets/alien_ships/alien_05.png +Loading resource: res://.godot/imported/alien_05.png-e4f794e8c5d408fe110f2bbf7f8482aa.ctex remapped: res://.godot/imported/alien_05.png-e4f794e8c5d408fe110f2bbf7f8482aa.ctex +Completed load for: 'res://assets/alien_ships/alien_05.png' remapped 'res://assets/alien_ships/alien_05.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_06.png remapped: res://assets/alien_ships/alien_06.png +Loading resource: res://.godot/imported/alien_06.png-568a354080e9555010b6e5baa3710174.ctex remapped: res://.godot/imported/alien_06.png-568a354080e9555010b6e5baa3710174.ctex +Completed load for: 'res://assets/alien_ships/alien_06.png' remapped 'res://assets/alien_ships/alien_06.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_07.png remapped: res://assets/alien_ships/alien_07.png +Loading resource: res://.godot/imported/alien_07.png-cc4cc84d3c6686a1b65bb0cb98a0ee07.ctex remapped: res://.godot/imported/alien_07.png-cc4cc84d3c6686a1b65bb0cb98a0ee07.ctex +Completed load for: 'res://assets/alien_ships/alien_07.png' remapped 'res://assets/alien_ships/alien_07.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_08.png remapped: res://assets/alien_ships/alien_08.png +Loading resource: res://.godot/imported/alien_08.png-79dc74c09683a0653187f9ba3f2ae0ed.ctex remapped: res://.godot/imported/alien_08.png-79dc74c09683a0653187f9ba3f2ae0ed.ctex +Completed load for: 'res://assets/alien_ships/alien_08.png' remapped 'res://assets/alien_ships/alien_08.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_09.png remapped: res://assets/alien_ships/alien_09.png +Loading resource: res://.godot/imported/alien_09.png-c70ce05aa1370c6b60e62a187f30ecf5.ctex remapped: res://.godot/imported/alien_09.png-c70ce05aa1370c6b60e62a187f30ecf5.ctex +Completed load for: 'res://assets/alien_ships/alien_09.png' remapped 'res://assets/alien_ships/alien_09.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_10.png remapped: res://assets/alien_ships/alien_10.png +Loading resource: res://.godot/imported/alien_10.png-be65d4f3f4c99a9d9fec274abf1264f0.ctex remapped: res://.godot/imported/alien_10.png-be65d4f3f4c99a9d9fec274abf1264f0.ctex +Completed load for: 'res://assets/alien_ships/alien_10.png' remapped 'res://assets/alien_ships/alien_10.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_11.png remapped: res://assets/alien_ships/alien_11.png +Loading resource: res://.godot/imported/alien_11.png-4fa1eb7ed9ddcc033df1220cdc405221.ctex remapped: res://.godot/imported/alien_11.png-4fa1eb7ed9ddcc033df1220cdc405221.ctex +Completed load for: 'res://assets/alien_ships/alien_11.png' remapped 'res://assets/alien_ships/alien_11.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_12.png remapped: res://assets/alien_ships/alien_12.png +Loading resource: res://.godot/imported/alien_12.png-9e1d33a5e7fe1fd4b24f7c5c073aee52.ctex remapped: res://.godot/imported/alien_12.png-9e1d33a5e7fe1fd4b24f7c5c073aee52.ctex +Completed load for: 'res://assets/alien_ships/alien_12.png' remapped 'res://assets/alien_ships/alien_12.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_13.png remapped: res://assets/alien_ships/alien_13.png +Loading resource: res://.godot/imported/alien_13.png-8c0ba224bf465312b4e9a53eead15c61.ctex remapped: res://.godot/imported/alien_13.png-8c0ba224bf465312b4e9a53eead15c61.ctex +Completed load for: 'res://assets/alien_ships/alien_13.png' remapped 'res://assets/alien_ships/alien_13.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_14.png remapped: res://assets/alien_ships/alien_14.png +Loading resource: res://.godot/imported/alien_14.png-3d8a0e0a2a5e0ba5864727b90f411122.ctex remapped: res://.godot/imported/alien_14.png-3d8a0e0a2a5e0ba5864727b90f411122.ctex +Completed load for: 'res://assets/alien_ships/alien_14.png' remapped 'res://assets/alien_ships/alien_14.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_15.png remapped: res://assets/alien_ships/alien_15.png +Loading resource: res://.godot/imported/alien_15.png-5c231ed351dde549b7f3422fd95f99e9.ctex remapped: res://.godot/imported/alien_15.png-5c231ed351dde549b7f3422fd95f99e9.ctex +Completed load for: 'res://assets/alien_ships/alien_15.png' remapped 'res://assets/alien_ships/alien_15.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_16.png remapped: res://assets/alien_ships/alien_16.png +Loading resource: res://.godot/imported/alien_16.png-569cf208bd6bddaed52ccfaf76886539.ctex remapped: res://.godot/imported/alien_16.png-569cf208bd6bddaed52ccfaf76886539.ctex +Completed load for: 'res://assets/alien_ships/alien_16.png' remapped 'res://assets/alien_ships/alien_16.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_17.png remapped: res://assets/alien_ships/alien_17.png +Loading resource: res://.godot/imported/alien_17.png-f99a76de912f0c27ae13245fce7c9f65.ctex remapped: res://.godot/imported/alien_17.png-f99a76de912f0c27ae13245fce7c9f65.ctex +Completed load for: 'res://assets/alien_ships/alien_17.png' remapped 'res://assets/alien_ships/alien_17.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_18.png remapped: res://assets/alien_ships/alien_18.png +Loading resource: res://.godot/imported/alien_18.png-6ce97997eebfab9056f7276133257034.ctex remapped: res://.godot/imported/alien_18.png-6ce97997eebfab9056f7276133257034.ctex +Completed load for: 'res://assets/alien_ships/alien_18.png' remapped 'res://assets/alien_ships/alien_18.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_19.png remapped: res://assets/alien_ships/alien_19.png +Loading resource: res://.godot/imported/alien_19.png-a9e5ae73af6b88a7980ded5b6bc75991.ctex remapped: res://.godot/imported/alien_19.png-a9e5ae73af6b88a7980ded5b6bc75991.ctex +Completed load for: 'res://assets/alien_ships/alien_19.png' remapped 'res://assets/alien_ships/alien_19.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_20.png remapped: res://assets/alien_ships/alien_20.png +Loading resource: res://.godot/imported/alien_20.png-21b1fd0d9b9a41bf705a0e81c818dd1a.ctex remapped: res://.godot/imported/alien_20.png-21b1fd0d9b9a41bf705a0e81c818dd1a.ctex +Completed load for: 'res://assets/alien_ships/alien_20.png' remapped 'res://assets/alien_ships/alien_20.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_21.png remapped: res://assets/alien_ships/alien_21.png +Loading resource: res://.godot/imported/alien_21.png-de83032cf6eea42b0c9efb27b2e96dda.ctex remapped: res://.godot/imported/alien_21.png-de83032cf6eea42b0c9efb27b2e96dda.ctex +Completed load for: 'res://assets/alien_ships/alien_21.png' remapped 'res://assets/alien_ships/alien_21.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_22.png remapped: res://assets/alien_ships/alien_22.png +Loading resource: res://.godot/imported/alien_22.png-2e59a0089c865f40af07349bfa4a5b37.ctex remapped: res://.godot/imported/alien_22.png-2e59a0089c865f40af07349bfa4a5b37.ctex +Completed load for: 'res://assets/alien_ships/alien_22.png' remapped 'res://assets/alien_ships/alien_22.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_23.png remapped: res://assets/alien_ships/alien_23.png +Loading resource: res://.godot/imported/alien_23.png-ee1fd9bb1f8b678fa9637b0c4eb5ab82.ctex remapped: res://.godot/imported/alien_23.png-ee1fd9bb1f8b678fa9637b0c4eb5ab82.ctex +Completed load for: 'res://assets/alien_ships/alien_23.png' remapped 'res://assets/alien_ships/alien_23.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_24.png remapped: res://assets/alien_ships/alien_24.png +Loading resource: res://.godot/imported/alien_24.png-e06c6bddcf3ff35ac95ccc8dc90ae493.ctex remapped: res://.godot/imported/alien_24.png-e06c6bddcf3ff35ac95ccc8dc90ae493.ctex +Completed load for: 'res://assets/alien_ships/alien_24.png' remapped 'res://assets/alien_ships/alien_24.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_25.png remapped: res://assets/alien_ships/alien_25.png +Loading resource: res://.godot/imported/alien_25.png-22ed40b0b2c18d1e9d9dc77e95505eb7.ctex remapped: res://.godot/imported/alien_25.png-22ed40b0b2c18d1e9d9dc77e95505eb7.ctex +Completed load for: 'res://assets/alien_ships/alien_25.png' remapped 'res://assets/alien_ships/alien_25.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_26.png remapped: res://assets/alien_ships/alien_26.png +Loading resource: res://.godot/imported/alien_26.png-344cce72123e7683cfd257e6490d2772.ctex remapped: res://.godot/imported/alien_26.png-344cce72123e7683cfd257e6490d2772.ctex +Completed load for: 'res://assets/alien_ships/alien_26.png' remapped 'res://assets/alien_ships/alien_26.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_27.png remapped: res://assets/alien_ships/alien_27.png +Loading resource: res://.godot/imported/alien_27.png-cf891fc94b8852124b018c9848808a96.ctex remapped: res://.godot/imported/alien_27.png-cf891fc94b8852124b018c9848808a96.ctex +Completed load for: 'res://assets/alien_ships/alien_27.png' remapped 'res://assets/alien_ships/alien_27.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_28.png remapped: res://assets/alien_ships/alien_28.png +Loading resource: res://.godot/imported/alien_28.png-e349e996887716b9c8e3e1403849d07c.ctex remapped: res://.godot/imported/alien_28.png-e349e996887716b9c8e3e1403849d07c.ctex +Completed load for: 'res://assets/alien_ships/alien_28.png' remapped 'res://assets/alien_ships/alien_28.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_29.png remapped: res://assets/alien_ships/alien_29.png +Loading resource: res://.godot/imported/alien_29.png-04a6fc0abde9a49257c91f70d5a9ec64.ctex remapped: res://.godot/imported/alien_29.png-04a6fc0abde9a49257c91f70d5a9ec64.ctex +Completed load for: 'res://assets/alien_ships/alien_29.png' remapped 'res://assets/alien_ships/alien_29.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_30.png remapped: res://assets/alien_ships/alien_30.png +Loading resource: res://.godot/imported/alien_30.png-4e2e27b681e081bbbf4a4e486273f0c1.ctex remapped: res://.godot/imported/alien_30.png-4e2e27b681e081bbbf4a4e486273f0c1.ctex +Completed load for: 'res://assets/alien_ships/alien_30.png' remapped 'res://assets/alien_ships/alien_30.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_31.png remapped: res://assets/alien_ships/alien_31.png +Loading resource: res://.godot/imported/alien_31.png-a43d2af7832681413a7e9ebec5770f0d.ctex remapped: res://.godot/imported/alien_31.png-a43d2af7832681413a7e9ebec5770f0d.ctex +Completed load for: 'res://assets/alien_ships/alien_31.png' remapped 'res://assets/alien_ships/alien_31.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_32.png remapped: res://assets/alien_ships/alien_32.png +Loading resource: res://.godot/imported/alien_32.png-364c255b141fd44ec0ec5f00aa984f5e.ctex remapped: res://.godot/imported/alien_32.png-364c255b141fd44ec0ec5f00aa984f5e.ctex +Completed load for: 'res://assets/alien_ships/alien_32.png' remapped 'res://assets/alien_ships/alien_32.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_33.png remapped: res://assets/alien_ships/alien_33.png +Loading resource: res://.godot/imported/alien_33.png-bd3ba2c88901b9b0b1cbfc14f7e0a33f.ctex remapped: res://.godot/imported/alien_33.png-bd3ba2c88901b9b0b1cbfc14f7e0a33f.ctex +Completed load for: 'res://assets/alien_ships/alien_33.png' remapped 'res://assets/alien_ships/alien_33.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_34.png remapped: res://assets/alien_ships/alien_34.png +Loading resource: res://.godot/imported/alien_34.png-49e57687cf3587a42a27ea361b36ab2c.ctex remapped: res://.godot/imported/alien_34.png-49e57687cf3587a42a27ea361b36ab2c.ctex +Completed load for: 'res://assets/alien_ships/alien_34.png' remapped 'res://assets/alien_ships/alien_34.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_35.png remapped: res://assets/alien_ships/alien_35.png +Loading resource: res://.godot/imported/alien_35.png-7fadfb8de2c664d3367029b38c485f6f.ctex remapped: res://.godot/imported/alien_35.png-7fadfb8de2c664d3367029b38c485f6f.ctex +Completed load for: 'res://assets/alien_ships/alien_35.png' remapped 'res://assets/alien_ships/alien_35.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_36.png remapped: res://assets/alien_ships/alien_36.png +Loading resource: res://.godot/imported/alien_36.png-fbf69418b061d61539f01d65004c8fcd.ctex remapped: res://.godot/imported/alien_36.png-fbf69418b061d61539f01d65004c8fcd.ctex +Completed load for: 'res://assets/alien_ships/alien_36.png' remapped 'res://assets/alien_ships/alien_36.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_37.png remapped: res://assets/alien_ships/alien_37.png +Loading resource: res://.godot/imported/alien_37.png-a93b529efe7993133e3db4a93bc10283.ctex remapped: res://.godot/imported/alien_37.png-a93b529efe7993133e3db4a93bc10283.ctex +Completed load for: 'res://assets/alien_ships/alien_37.png' remapped 'res://assets/alien_ships/alien_37.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_38.png remapped: res://assets/alien_ships/alien_38.png +Loading resource: res://.godot/imported/alien_38.png-8503a785560f6b3e34f5e08efe1455f1.ctex remapped: res://.godot/imported/alien_38.png-8503a785560f6b3e34f5e08efe1455f1.ctex +Completed load for: 'res://assets/alien_ships/alien_38.png' remapped 'res://assets/alien_ships/alien_38.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_39.png remapped: res://assets/alien_ships/alien_39.png +Loading resource: res://.godot/imported/alien_39.png-ef07c4802a264066394524862d8a9f3e.ctex remapped: res://.godot/imported/alien_39.png-ef07c4802a264066394524862d8a9f3e.ctex +Completed load for: 'res://assets/alien_ships/alien_39.png' remapped 'res://assets/alien_ships/alien_39.png' at thread -1 +Loading resource: res://assets/alien_ships/alien_40.png remapped: res://assets/alien_ships/alien_40.png +Loading resource: res://.godot/imported/alien_40.png-6f2cadc2a7db4a0681edd0ff5ebe2d6b.ctex remapped: res://.godot/imported/alien_40.png-6f2cadc2a7db4a0681edd0ff5ebe2d6b.ctex +Completed load for: 'res://assets/alien_ships/alien_40.png' remapped 'res://assets/alien_ships/alien_40.png' at thread -1 +Completed load for: 'res://scripts/game/enemy_ship.gd' remapped 'res://scripts/game/enemy_ship.gd' at thread -1 +Loading resource: res://scripts/game/enemy_health_bar.gd remapped: res://scripts/game/enemy_health_bar.gd +Completed load for: 'res://scripts/game/enemy_health_bar.gd' remapped 'res://scripts/game/enemy_health_bar.gd' at thread -1 +Completed load for: 'res://scenes/game/enemy_ship.tscn' remapped 'res://scenes/game/enemy_ship.tscn' at thread -1 +Loading resource: res://scripts/game/wormhole_vortex.gdshader remapped: res://scripts/game/wormhole_vortex.gdshader +Completed load for: 'res://scripts/game/wormhole_vortex.gdshader' remapped 'res://scripts/game/wormhole_vortex.gdshader' at thread -1 +Loading resource: res://assets/icons/resources/iron.png remapped: res://assets/icons/resources/iron.png +Loading resource: res://.godot/imported/iron.png-9f0bab611f228be580c28e352ca1d8cc.ctex remapped: res://.godot/imported/iron.png-9f0bab611f228be580c28e352ca1d8cc.ctex +Completed load for: 'res://assets/icons/resources/iron.png' remapped 'res://assets/icons/resources/iron.png' at thread -1 +Loading resource: res://assets/icons/resources/titanium.png remapped: res://assets/icons/resources/titanium.png +Loading resource: res://.godot/imported/titanium.png-0b4998bc95056c5a7906568e449b30ff.ctex remapped: res://.godot/imported/titanium.png-0b4998bc95056c5a7906568e449b30ff.ctex +Completed load for: 'res://assets/icons/resources/titanium.png' remapped 'res://assets/icons/resources/titanium.png' at thread -1 +Loading resource: res://assets/icons/resources/uranium.png remapped: res://assets/icons/resources/uranium.png +Loading resource: res://.godot/imported/uranium.png-ceac43be56616b10258ea19f379a1280.ctex remapped: res://.godot/imported/uranium.png-ceac43be56616b10258ea19f379a1280.ctex +Completed load for: 'res://assets/icons/resources/uranium.png' remapped 'res://assets/icons/resources/uranium.png' at thread -1 +Loading resource: res://assets/icons/resources/aluminium.png remapped: res://assets/icons/resources/aluminium.png +Loading resource: res://.godot/imported/aluminium.png-63588dbb597f01d62b3f0366767573a6.ctex remapped: res://.godot/imported/aluminium.png-63588dbb597f01d62b3f0366767573a6.ctex +Completed load for: 'res://assets/icons/resources/aluminium.png' remapped 'res://assets/icons/resources/aluminium.png' at thread -1 +Loading resource: res://assets/icons/resources/sulfur.png remapped: res://assets/icons/resources/sulfur.png +Loading resource: res://.godot/imported/sulfur.png-2f60f314b66456b06aeadc4c9514b477.ctex remapped: res://.godot/imported/sulfur.png-2f60f314b66456b06aeadc4c9514b477.ctex +Completed load for: 'res://assets/icons/resources/sulfur.png' remapped 'res://assets/icons/resources/sulfur.png' at thread -1 +Loading resource: res://assets/wrecks/wreck_frigate.png remapped: res://assets/wrecks/wreck_frigate.png +Loading resource: res://.godot/imported/wreck_frigate.png-c70e885156f2b58c93f9f1a465c39b94.ctex remapped: res://.godot/imported/wreck_frigate.png-c70e885156f2b58c93f9f1a465c39b94.ctex +Completed load for: 'res://assets/wrecks/wreck_frigate.png' remapped 'res://assets/wrecks/wreck_frigate.png' at thread -1 +Loading resource: res://assets/wrecks/wreck_freighter.png remapped: res://assets/wrecks/wreck_freighter.png +Loading resource: res://.godot/imported/wreck_freighter.png-db535807eab479ebfbba43be7cd0e2b2.ctex remapped: res://.godot/imported/wreck_freighter.png-db535807eab479ebfbba43be7cd0e2b2.ctex +Completed load for: 'res://assets/wrecks/wreck_freighter.png' remapped 'res://assets/wrecks/wreck_freighter.png' at thread -1 +Loading resource: res://assets/wrecks/wreck_interceptor.png remapped: res://assets/wrecks/wreck_interceptor.png +Loading resource: res://.godot/imported/wreck_interceptor.png-db737464df7a4040a1be1a610f183903.ctex remapped: res://.godot/imported/wreck_interceptor.png-db737464df7a4040a1be1a610f183903.ctex +Completed load for: 'res://assets/wrecks/wreck_interceptor.png' remapped 'res://assets/wrecks/wreck_interceptor.png' at thread -1 +Loading resource: res://assets/planets/freighter.png remapped: res://assets/planets/freighter.png +Loading resource: res://.godot/imported/freighter.png-d1f56db711f65035af634f2203d0a955.ctex remapped: res://.godot/imported/freighter.png-d1f56db711f65035af634f2203d0a955.ctex +Completed load for: 'res://assets/planets/freighter.png' remapped 'res://assets/planets/freighter.png' at thread -1 +Loading resource: res://assets/planets/lander.png remapped: res://assets/planets/lander.png +Loading resource: res://.godot/imported/lander.png-f4d17420d155f7bac0137a7c6f07ace7.ctex remapped: res://.godot/imported/lander.png-f4d17420d155f7bac0137a7c6f07ace7.ctex +Completed load for: 'res://assets/planets/lander.png' remapped 'res://assets/planets/lander.png' at thread -1 +Loading resource: res://resources/effects/ship_fireball.gdshader remapped: res://resources/effects/ship_fireball.gdshader +Completed load for: 'res://resources/effects/ship_fireball.gdshader' remapped 'res://resources/effects/ship_fireball.gdshader' at thread -1 +Completed load for: 'res://scripts/game/game.gd' remapped 'res://scripts/game/game.gd' at thread -1 +Loading resource: res://scripts/game/space_level_background.gd remapped: res://scripts/game/space_level_background.gd +Loading resource: res://assets/background/space/nebula_dust.png remapped: res://assets/background/space/nebula_dust.png +Loading resource: res://.godot/imported/nebula_dust.png-0de2098893f30c0962ea0a8cb5ba1aeb.ctex remapped: res://.godot/imported/nebula_dust.png-0de2098893f30c0962ea0a8cb5ba1aeb.ctex +Completed load for: 'res://assets/background/space/nebula_dust.png' remapped 'res://assets/background/space/nebula_dust.png' at thread -1 +Completed load for: 'res://scripts/game/space_level_background.gd' remapped 'res://scripts/game/space_level_background.gd' at thread -1 +Loading resource: res://scenes/game/player_ship.tscn remapped: res://scenes/game/player_ship.tscn +Loading resource: res://scripts/game/ship_controller.gd remapped: res://scripts/game/ship_controller.gd +Loading resource: res://resources/ui/cloak.gdshader remapped: res://resources/ui/cloak.gdshader +Completed load for: 'res://resources/ui/cloak.gdshader' remapped 'res://resources/ui/cloak.gdshader' at thread -1 +Loading resource: res://assets/Ships/combat_drone.png remapped: res://assets/Ships/combat_drone.png +Loading resource: res://.godot/imported/combat_drone.png-1ee839fafe5ff3881843088267b833ba.ctex remapped: res://.godot/imported/combat_drone.png-1ee839fafe5ff3881843088267b833ba.ctex +Completed load for: 'res://assets/Ships/combat_drone.png' remapped 'res://assets/Ships/combat_drone.png' at thread -1 +Completed load for: 'res://scripts/game/ship_controller.gd' remapped 'res://scripts/game/ship_controller.gd' at thread -1 +Loading resource: res://scripts/game/weapon_controller.gd remapped: res://scripts/game/weapon_controller.gd +Completed load for: 'res://scripts/game/weapon_controller.gd' remapped 'res://scripts/game/weapon_controller.gd' at thread -1 +Loading resource: res://scripts/game/ship_engine_audio.gd remapped: res://scripts/game/ship_engine_audio.gd +Completed load for: 'res://scripts/game/ship_engine_audio.gd' remapped 'res://scripts/game/ship_engine_audio.gd' at thread -1 +Loading resource: res://scripts/game/engine_visual.gd remapped: res://scripts/game/engine_visual.gd +Completed load for: 'res://scripts/game/engine_visual.gd' remapped 'res://scripts/game/engine_visual.gd' at thread -1 +Completed load for: 'res://scenes/game/player_ship.tscn' remapped 'res://scenes/game/player_ship.tscn' at thread -1 +Loading resource: res://scripts/game/flight_hud.gd remapped: res://scripts/game/flight_hud.gd +Loading resource: res://resources/ui/skill_icon.gdshader remapped: res://resources/ui/skill_icon.gdshader +Completed load for: 'res://resources/ui/skill_icon.gdshader' remapped 'res://resources/ui/skill_icon.gdshader' at thread -1 +Loading resource: res://assets/icons/ui/aim_cursor.svg remapped: res://assets/icons/ui/aim_cursor.svg +Loading resource: res://.godot/imported/aim_cursor.svg-cd2711c215cac45daa91fe6817bf504e.ctex remapped: res://.godot/imported/aim_cursor.svg-cd2711c215cac45daa91fe6817bf504e.ctex +Completed load for: 'res://assets/icons/ui/aim_cursor.svg' remapped 'res://assets/icons/ui/aim_cursor.svg' at thread -1 +Completed load for: 'res://scripts/game/flight_hud.gd' remapped 'res://scripts/game/flight_hud.gd' at thread -1 +Loading resource: res://scenes/ui/ship_equipment_panel.tscn remapped: res://scenes/ui/ship_equipment_panel.tscn +Loading resource: res://scripts/ui/ship_schematic.gd remapped: res://scripts/ui/ship_schematic.gd +Loading resource: res://resources/ui/ship_silhouette.gdshader remapped: res://resources/ui/ship_silhouette.gdshader +Completed load for: 'res://resources/ui/ship_silhouette.gdshader' remapped 'res://resources/ui/ship_silhouette.gdshader' at thread -1 +Completed load for: 'res://scripts/ui/ship_schematic.gd' remapped 'res://scripts/ui/ship_schematic.gd' at thread -1 +Loading resource: res://scenes/ui/inventory_slot_view.tscn remapped: res://scenes/ui/inventory_slot_view.tscn +Loading resource: res://scripts/ui/equipment_slot_view.gd remapped: res://scripts/ui/equipment_slot_view.gd +Loading resource: res://assets/icons/screwdriver.png remapped: res://assets/icons/screwdriver.png +Loading resource: res://.godot/imported/screwdriver.png-7ce78b723732e8b7321d8be8b4729825.ctex remapped: res://.godot/imported/screwdriver.png-7ce78b723732e8b7321d8be8b4729825.ctex +Completed load for: 'res://assets/icons/screwdriver.png' remapped 'res://assets/icons/screwdriver.png' at thread -1 +Completed load for: 'res://scripts/ui/equipment_slot_view.gd' remapped 'res://scripts/ui/equipment_slot_view.gd' at thread -1 +Completed load for: 'res://scenes/ui/inventory_slot_view.tscn' remapped 'res://scenes/ui/inventory_slot_view.tscn' at thread -1 +Completed load for: 'res://scenes/ui/ship_equipment_panel.tscn' remapped 'res://scenes/ui/ship_equipment_panel.tscn' at thread -1 +Loading resource: res://scenes/ui/ship_inventory_panel.tscn remapped: res://scenes/ui/ship_inventory_panel.tscn +Loading resource: res://scripts/ui/ship_inventory_panel.gd remapped: res://scripts/ui/ship_inventory_panel.gd +Completed load for: 'res://scripts/ui/ship_inventory_panel.gd' remapped 'res://scripts/ui/ship_inventory_panel.gd' at thread -1 +Completed load for: 'res://scenes/ui/ship_inventory_panel.tscn' remapped 'res://scenes/ui/ship_inventory_panel.tscn' at thread -1 +Loading resource: res://scripts/game/scene_music_player.gd remapped: res://scripts/game/scene_music_player.gd +Completed load for: 'res://scripts/game/scene_music_player.gd' remapped 'res://scripts/game/scene_music_player.gd' at thread -1 +Loading resource: res://scenes/ui/captain_panel.tscn remapped: res://scenes/ui/captain_panel.tscn +Loading resource: res://scripts/ui/captain_panel.gd remapped: res://scripts/ui/captain_panel.gd +Completed load for: 'res://scripts/ui/captain_panel.gd' remapped 'res://scripts/ui/captain_panel.gd' at thread -1 +Completed load for: 'res://scenes/ui/captain_panel.tscn' remapped 'res://scenes/ui/captain_panel.tscn' at thread -1 +Completed load for: 'res://scenes/game/game.tscn' remapped 'res://scenes/game/game.tscn' at thread -1 +Completed load for: 'res://tests/levels/planet_expeditions_test.gd' remapped 'res://tests/levels/planet_expeditions_test.gd' at thread -1 +Completed load for: 'res://tests/levels/planet_expeditions_test.tscn' remapped 'res://tests/levels/planet_expeditions_test.tscn' at thread -1 +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_expeditions_test.gd:66) +Loading resource: res://assets/sounds/music/music2.mp3 remapped: res://assets/sounds/music/music2.mp3 +Loading resource: res://.godot/imported/music2.mp3-01cfceab2822ae9919d6349789949988.mp3str remapped: res://.godot/imported/music2.mp3-01cfceab2822ae9919d6349789949988.mp3str +Completed load for: 'res://assets/sounds/music/music2.mp3' remapped 'res://assets/sounds/music/music2.mp3' at thread -1 +Loading resource: res://assets/background/space/deep_space.png remapped: res://assets/background/space/deep_space.png +Loading resource: res://.godot/imported/deep_space.png-59d6499dcec6c1a3f0421dcca270f4f6.ctex remapped: res://.godot/imported/deep_space.png-59d6499dcec6c1a3f0421dcca270f4f6.ctex +Completed load for: 'res://assets/background/space/deep_space.png' remapped 'res://assets/background/space/deep_space.png' at thread -1 +Loading resource: res://assets/sounds/effects/engine2.mp3 remapped: res://assets/sounds/effects/engine2.mp3 +Loading resource: res://.godot/imported/engine2.mp3-55c79366794bf0dcb408b7aa062b657e.mp3str remapped: res://.godot/imported/engine2.mp3-55c79366794bf0dcb408b7aa062b657e.mp3str +Completed load for: 'res://assets/sounds/effects/engine2.mp3' remapped 'res://assets/sounds/effects/engine2.mp3' at thread -1 +Loading resource: res://assets/Ships/player/szerszen.png remapped: res://assets/Ships/player/szerszen.png +Loading resource: res://.godot/imported/szerszen.png-e23ede0a372aa7e06ec1d33ee683770d.ctex remapped: res://.godot/imported/szerszen.png-e23ede0a372aa7e06ec1d33ee683770d.ctex +Completed load for: 'res://assets/Ships/player/szerszen.png' remapped 'res://assets/Ships/player/szerszen.png' at thread -1 +Loading resource: res://assets/icons/resources/parts.png remapped: res://assets/icons/resources/parts.png +Loading resource: res://.godot/imported/parts.png-f14343f401c851f9b669606251dc7106.ctex remapped: res://.godot/imported/parts.png-f14343f401c851f9b669606251dc7106.ctex +Completed load for: 'res://assets/icons/resources/parts.png' remapped 'res://assets/icons/resources/parts.png' at thread -1 +Loading resource: res://assets/icons/resources/ammunition.png remapped: res://assets/icons/resources/ammunition.png +Loading resource: res://.godot/imported/ammunition.png-55b812a61f21303b828ce907b57955d0.ctex remapped: res://.godot/imported/ammunition.png-55b812a61f21303b828ce907b57955d0.ctex +Completed load for: 'res://assets/icons/resources/ammunition.png' remapped 'res://assets/icons/resources/ammunition.png' at thread -1 +Loading resource: res://assets/icons/resources/irradiated_ammunition.png remapped: res://assets/icons/resources/irradiated_ammunition.png +Loading resource: res://.godot/imported/irradiated_ammunition.png-43f90162db35d57c3d57de6de22435e4.ctex remapped: res://.godot/imported/irradiated_ammunition.png-43f90162db35d57c3d57de6de22435e4.ctex +Completed load for: 'res://assets/icons/resources/irradiated_ammunition.png' remapped 'res://assets/icons/resources/irradiated_ammunition.png' at thread -1 +Loading resource: res://assets/icons/resources/missile.png remapped: res://assets/icons/resources/missile.png +Loading resource: res://.godot/imported/missile.png-d91a6d6e7348b7fba50d4cc3ac087245.ctex remapped: res://.godot/imported/missile.png-d91a6d6e7348b7fba50d4cc3ac087245.ctex +Completed load for: 'res://assets/icons/resources/missile.png' remapped 'res://assets/icons/resources/missile.png' at thread -1 +Loading resource: res://assets/avatars/captain.png remapped: res://assets/avatars/captain.png +Loading resource: res://.godot/imported/captain.png-9a0afd3b17a97167234f3e3ea4d8c400.ctex remapped: res://.godot/imported/captain.png-9a0afd3b17a97167234f3e3ea4d8c400.ctex +Completed load for: 'res://assets/avatars/captain.png' remapped 'res://assets/avatars/captain.png' at thread -1 +Loading resource: res://assets/planets/breathing.png remapped: res://assets/planets/breathing.png +Loading resource: res://.godot/imported/breathing.png-1440177498b986582aa8fa419222aebd.ctex remapped: res://.godot/imported/breathing.png-1440177498b986582aa8fa419222aebd.ctex +Completed load for: 'res://assets/planets/breathing.png' remapped 'res://assets/planets/breathing.png' at thread -1 +Loading resource: res://assets/planets/suit.png remapped: res://assets/planets/suit.png +Loading resource: res://.godot/imported/suit.png-db172b9d589597e61bb794b457cc532a.ctex remapped: res://.godot/imported/suit.png-db172b9d589597e61bb794b457cc532a.ctex +Completed load for: 'res://assets/planets/suit.png' remapped 'res://assets/planets/suit.png' at thread -1 +Loading resource: res://assets/planets/sidearm.png remapped: res://assets/planets/sidearm.png +Loading resource: res://.godot/imported/sidearm.png-3038cac58c8d2bd2e747aab9e152d791.ctex remapped: res://.godot/imported/sidearm.png-3038cac58c8d2bd2e747aab9e152d791.ctex +Completed load for: 'res://assets/planets/sidearm.png' remapped 'res://assets/planets/sidearm.png' at thread -1 +Loading resource: res://assets/icons/ui/crafting_art.png remapped: res://assets/icons/ui/crafting_art.png +Loading resource: res://.godot/imported/crafting_art.png-30b85c072a19ade651aee4403a07600c.ctex remapped: res://.godot/imported/crafting_art.png-30b85c072a19ade651aee4403a07600c.ctex +Completed load for: 'res://assets/icons/ui/crafting_art.png' remapped 'res://assets/icons/ui/crafting_art.png' at thread -1 +Loading resource: res://assets/icons/ui/captain_skills_art.png remapped: res://assets/icons/ui/captain_skills_art.png +Loading resource: res://.godot/imported/captain_skills_art.png-b442619ccaaf8a841989cf1910d4fb60.ctex remapped: res://.godot/imported/captain_skills_art.png-b442619ccaaf8a841989cf1910d4fb60.ctex +Completed load for: 'res://assets/icons/ui/captain_skills_art.png' remapped 'res://assets/icons/ui/captain_skills_art.png' at thread -1 +Loading resource: res://assets/planets/grass.png remapped: res://assets/planets/grass.png +Loading resource: res://.godot/imported/grass.png-9bfcf9a0e074fbea05dc53353a8ea2d1.ctex remapped: res://.godot/imported/grass.png-9bfcf9a0e074fbea05dc53353a8ea2d1.ctex +Completed load for: 'res://assets/planets/grass.png' remapped 'res://assets/planets/grass.png' at thread -1 +Loading resource: res://assets/planets/tree.png remapped: res://assets/planets/tree.png +Loading resource: res://.godot/imported/tree.png-0be38c99716d98cc959e804a34acfa4d.ctex remapped: res://.godot/imported/tree.png-0be38c99716d98cc959e804a34acfa4d.ctex +Completed load for: 'res://assets/planets/tree.png' remapped 'res://assets/planets/tree.png' at thread -1 +Loading resource: res://assets/planets/mountain.png remapped: res://assets/planets/mountain.png +Loading resource: res://.godot/imported/mountain.png-f83cad1b54a219229f0566a8f1faf988.ctex remapped: res://.godot/imported/mountain.png-f83cad1b54a219229f0566a8f1faf988.ctex +Completed load for: 'res://assets/planets/mountain.png' remapped 'res://assets/planets/mountain.png' at thread -1 +Loading resource: res://assets/planets/mine.png remapped: res://assets/planets/mine.png +Loading resource: res://.godot/imported/mine.png-ff6562df28db380bc2509337855749cd.ctex remapped: res://.godot/imported/mine.png-ff6562df28db380bc2509337855749cd.ctex +Completed load for: 'res://assets/planets/mine.png' remapped 'res://assets/planets/mine.png' at thread -1 +Loading resource: res://assets/planets/ruins.png remapped: res://assets/planets/ruins.png +Loading resource: res://.godot/imported/ruins.png-012edb274ef91c4f1b81c9d6d2bc506f.ctex remapped: res://.godot/imported/ruins.png-012edb274ef91c4f1b81c9d6d2bc506f.ctex +Completed load for: 'res://assets/planets/ruins.png' remapped 'res://assets/planets/ruins.png' at thread -1 +PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return +XR: Clearing primary interface +WARNING: 4 ObjectDB instances were leaked at exit (run with `--verbose` for details). +XR: Removed interface "Native mobile" +XR: Removed interface "OpenXR" +Leaked instance: AudioStreamMP3:9223372282758433031 - Reference count: 1 + at: cleanup (core/object/object.cpp:2536) +Leaked instance: AudioStreamPlaybackMP3:9223372282775210249 - Reference count: 1 +Leaked instance: AudioStreamMP3:9223372283815397660 - Reference count: 1 +Leaked instance: AudioStreamPlaybackMP3:9223372283832174878 - Reference count: 1 +Hint: Leaked instances typically happen when nodes are removed from the scene tree (with `remove_child()`) but not freed (with `free()` or `queue_free()`). +Orphan StringName: Master (static: 0, total: 4) +StringName: 1 unclaimed string names at exit. diff --git a/artifacts/scenery_performance.log b/artifacts/scenery_performance.log new file mode 100644 index 0000000..a2c0836 --- /dev/null +++ b/artifacts/scenery_performance.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER RENDER PASS: interpolated intermediate frames=149; median frame ms=8.334; p95 ms=8.556 diff --git a/artifacts/scenery_performance_errors.log b/artifacts/scenery_performance_errors.log new file mode 100644 index 0000000..9ee691e --- /dev/null +++ b/artifacts/scenery_performance_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_render_test.gd:5) diff --git a/artifacts/space_ship_comparison.png b/artifacts/space_ship_comparison.png new file mode 100644 index 0000000..c53725c Binary files /dev/null and b/artifacts/space_ship_comparison.png differ diff --git a/artifacts/space_ship_comparison.png.import b/artifacts/space_ship_comparison.png.import new file mode 100644 index 0000000..1f0b558 --- /dev/null +++ b/artifacts/space_ship_comparison.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2yk57k3bjk0v" +path="res://.godot/imported/space_ship_comparison.png-efdbd64ca0bf7acc14f29bc1fd01d3e1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/space_ship_comparison.png" +dest_files=["res://.godot/imported/space_ship_comparison.png-efdbd64ca0bf7acc14f29bc1fd01d3e1.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/artifacts/surface_events_test.log b/artifacts/surface_events_test.log new file mode 100644 index 0000000..0dbb5c6 --- /dev/null +++ b/artifacts/surface_events_test.log @@ -0,0 +1,37 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +seed=200 structures=27 +seed=201 structures=32 +seed=202 structures=33 +seed=203 structures=18 +seed=204 structures=30 +seed=205 structures=28 +seed=206 structures=28 +seed=207 structures=14 +seed=208 structures=24 +seed=209 structures=20 +seed=210 structures=25 +seed=211 structures=11 +seed=212 structures=28 +seed=213 structures=22 +seed=214 structures=29 +seed=215 structures=12 +seed=216 structures=27 +seed=217 structures=32 +seed=218 structures=25 +seed=219 structures=14 +seed=220 structures=19 +seed=221 structures=22 +seed=222 structures=26 +seed=223 structures=11 +seed=224 structures=28 +seed=225 structures=31 +seed=226 structures=27 +seed=227 structures=12 +seed=228 structures=23 +seed=229 structures=24 +SURFACE EVENTS PASS: no rivers, dry scenery placement, occasional events, exponential levels, price, insufficient funds, one purchase and expedition cargo +Engineer bonuses / 40000 rolls: +0=10049 +10=574 +20=19 diff --git a/artifacts/surface_events_test_quality.log b/artifacts/surface_events_test_quality.log new file mode 100644 index 0000000..afa9ec9 --- /dev/null +++ b/artifacts/surface_events_test_quality.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6571 +[MCPRegistry] runtime port 6571 registered for c:/users/tomek/documents/godot/randoloot +SURFACE EVENTS PASS: no rivers, dry scenery placement, occasional events, exponential levels, price, insufficient funds, one purchase and expedition cargo +Engineer bonuses / 40000 rolls: +0=10049 +10=574 +20=19 diff --git a/artifacts/surface_props_import.log b/artifacts/surface_props_import.log new file mode 100644 index 0000000..4e4bfa7 --- /dev/null +++ b/artifacts/surface_props_import.log @@ -0,0 +1,71 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[ 0% ] first_scan_filesystem | Started Project initialization (5 steps) +[ 0% ] first_scan_filesystem | Scanning file structure... +[ 16% ] first_scan_filesystem | Loading global class names... +[ 33% ] first_scan_filesystem | Verifying GDExtensions... +[ 50% ] first_scan_filesystem | Creating autoload scripts... +[ 66% ] first_scan_filesystem | Initializing plugins... +Godot MCP Toolkit v1.0.3 — by NPGameDev · npgamedev.com +[MCPExtensions] Hot-reload watcher active +[MCPServer] port: scanning 6550-6560 (default) +[MCPServer] session token written to user://addons/godot_mcp_toolkit/project_instance_32cc2271ac67/mcp_token +[MCPServer] listening on 127.0.0.1:6551 +[MCPRegistry] registered c:/users/tomek/documents/godot/randoloot on port 6551 +[ 83% ] first_scan_filesystem | Starting file scan... +[ DONE ] first_scan_filesystem + +[ 0% ] update_scripts_classes | Started Registering global classes... (4 steps) +[ 0% ] update_scripts_classes |  +[ 20% ] update_scripts_classes |  +[ 40% ] update_scripts_classes |  +[ 60% ] update_scripts_classes |  +[ DONE ] update_scripts_classes + +[ 0% ] _update_scan_actions | Started Scanning actions... (8 steps) +[ 0% ] _update_scan_actions | airstrip.png +[ 11% ] _update_scan_actions | engineer_camp.png +[ 22% ] _update_scan_actions | fuel_depot.png +[ 33% ] _update_scan_actions | radar.png +[ 44% ] _update_scan_actions | ruined_house.png +[ 55% ] _update_scan_actions | scrapyard.png +[ 66% ] _update_scan_actions | solar_farm.png +[ 77% ] _update_scan_actions | warehouse.png +[ DONE ] _update_scan_actions + +[ 0% ] reimport | Started (Re)Importing Assets (8 steps) +[ 0% ] reimport | Preparing files to reimport... +[ 11% ] reimport | Preparing files to reimport... +[ 22% ] reimport | Preparing files to reimport... +[ 33% ] reimport | Preparing files to reimport... +[ 44% ] reimport | Preparing files to reimport... +[ 55% ] reimport | Preparing files to reimport... +[ 66% ] reimport | Preparing files to reimport... +[ 77% ] reimport | Preparing files to reimport... +[ 0% ] reimport | Executing pre-reimport operations... +[ 0% ] reimport | airstrip.png +[ 11% ] reimport | engineer_camp.png +[ 22% ] reimport | fuel_depot.png +[ 33% ] reimport | radar.png +[ 44% ] reimport | ruined_house.png +[ 55% ] reimport | scrapyard.png +[ 66% ] reimport | solar_farm.png +[ 77% ] reimport | warehouse.png +[ 88% ] reimport | Finalizing Asset Import... +[ DONE ] reimport + +[ 0% ] reimport | Started (Re)Importing Assets (8 steps) +[ 0% ] reimport | Executing post-reimport operations... +[ DONE ] reimport + +[ 0% ] loading_editor_layout | Started Loading editor (5 steps) +[ 0% ] loading_editor_layout | Loading editor layout... +[ 16% ] loading_editor_layout | Loading docks... +[ 33% ] loading_editor_layout | Reopening scenes... +[ 50% ] loading_editor_layout | Loading central editor layout... +[ 66% ] loading_editor_layout | Loading plugin window layout... +[ 83% ] loading_editor_layout | Editor layout ready. +[ DONE ] loading_editor_layout + +[MCPServer] stopped +[MCPRegistry] deregistered c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/surface_props_reimport.log b/artifacts/surface_props_reimport.log new file mode 100644 index 0000000..1c5d955 --- /dev/null +++ b/artifacts/surface_props_reimport.log @@ -0,0 +1,70 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[ 0% ] first_scan_filesystem | Started Project initialization (5 steps) +[ 0% ] first_scan_filesystem | Scanning file structure... +[ 16% ] first_scan_filesystem | Loading global class names... +[ 33% ] first_scan_filesystem | Verifying GDExtensions... +[ 50% ] first_scan_filesystem | Creating autoload scripts... +[ 66% ] first_scan_filesystem | Initializing plugins... +Godot MCP Toolkit v1.0.3 — by NPGameDev · npgamedev.com +[MCPExtensions] Hot-reload watcher active +[MCPServer] port: scanning 6550-6560 (default) +[MCPServer] session token written to user://addons/godot_mcp_toolkit/project_instance_32cc2271ac67/mcp_token +[MCPServer] listening on 127.0.0.1:6551 +[MCPRegistry] registered c:/users/tomek/documents/godot/randoloot on port 6551 +[ 83% ] first_scan_filesystem | Starting file scan... +[ DONE ] first_scan_filesystem + +[ 0% ] update_scripts_classes | Started Registering global classes... (3 steps) +[ 0% ] update_scripts_classes |  +[ 25% ] update_scripts_classes |  +[ 50% ] update_scripts_classes |  +[ DONE ] update_scripts_classes + +[ 0% ] _update_scan_actions | Started Scanning actions... (8 steps) +[ 0% ] _update_scan_actions | airstrip.png +[ 11% ] _update_scan_actions | engineer_camp.png +[ 22% ] _update_scan_actions | fuel_depot.png +[ 33% ] _update_scan_actions | radar.png +[ 44% ] _update_scan_actions | ruined_house.png +[ 55% ] _update_scan_actions | scrapyard.png +[ 66% ] _update_scan_actions | solar_farm.png +[ 77% ] _update_scan_actions | warehouse.png +[ DONE ] _update_scan_actions + +[ 0% ] reimport | Started (Re)Importing Assets (8 steps) +[ 0% ] reimport | Preparing files to reimport... +[ 11% ] reimport | Preparing files to reimport... +[ 22% ] reimport | Preparing files to reimport... +[ 33% ] reimport | Preparing files to reimport... +[ 44% ] reimport | Preparing files to reimport... +[ 55% ] reimport | Preparing files to reimport... +[ 66% ] reimport | Preparing files to reimport... +[ 77% ] reimport | Preparing files to reimport... +[ 0% ] reimport | Executing pre-reimport operations... +[ 0% ] reimport | airstrip.png +[ 11% ] reimport | engineer_camp.png +[ 22% ] reimport | fuel_depot.png +[ 33% ] reimport | radar.png +[ 44% ] reimport | ruined_house.png +[ 55% ] reimport | scrapyard.png +[ 66% ] reimport | solar_farm.png +[ 77% ] reimport | warehouse.png +[ 88% ] reimport | Finalizing Asset Import... +[ DONE ] reimport + +[ 0% ] reimport | Started (Re)Importing Assets (8 steps) +[ 0% ] reimport | Executing post-reimport operations... +[ DONE ] reimport + +[ 0% ] loading_editor_layout | Started Loading editor (5 steps) +[ 0% ] loading_editor_layout | Loading editor layout... +[ 16% ] loading_editor_layout | Loading docks... +[ 33% ] loading_editor_layout | Reopening scenes... +[ 50% ] loading_editor_layout | Loading central editor layout... +[ 66% ] loading_editor_layout | Loading plugin window layout... +[ 83% ] loading_editor_layout | Editor layout ready. +[ DONE ] loading_editor_layout + +[MCPServer] stopped +[MCPRegistry] deregistered c:/users/tomek/documents/godot/randoloot diff --git a/artifacts/surface_props_sheet.png b/artifacts/surface_props_sheet.png new file mode 100644 index 0000000..482bec0 Binary files /dev/null and b/artifacts/surface_props_sheet.png differ diff --git a/artifacts/surface_props_sheet.png.import b/artifacts/surface_props_sheet.png.import new file mode 100644 index 0000000..19b6954 --- /dev/null +++ b/artifacts/surface_props_sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c8pvte24cq1me" +path="res://.godot/imported/surface_props_sheet.png-c3dfcaa219f4bc74ee5405d36c1d0925.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/surface_props_sheet.png" +dest_files=["res://.godot/imported/surface_props_sheet.png-c3dfcaa219f4bc74ee5405d36c1d0925.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/artifacts/surface_quality_gui.log b/artifacts/surface_quality_gui.log new file mode 100644 index 0000000..66ff20f --- /dev/null +++ b/artifacts/surface_quality_gui.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +SURFACE SCENERY UI PASS: zoom, props, transparency, automatic event dialog, 100-credit purchase, temporary module cargo diff --git a/artifacts/surface_quality_gui_errors.log b/artifacts/surface_quality_gui_errors.log new file mode 100644 index 0000000..c3b729c --- /dev/null +++ b/artifacts/surface_quality_gui_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/surface_scenery_preview.gd:19) diff --git a/artifacts/surface_quality_performance.log b/artifacts/surface_quality_performance.log new file mode 100644 index 0000000..022dce2 --- /dev/null +++ b/artifacts/surface_quality_performance.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER RENDER PASS: interpolated intermediate frames=148; median frame ms=8.332; p95 ms=8.463 diff --git a/artifacts/surface_quality_performance_errors.log b/artifacts/surface_quality_performance_errors.log new file mode 100644 index 0000000..9ee691e --- /dev/null +++ b/artifacts/surface_quality_performance_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_render_test.gd:5) diff --git a/artifacts/surface_scenery_gui.log b/artifacts/surface_scenery_gui.log new file mode 100644 index 0000000..66ff20f --- /dev/null +++ b/artifacts/surface_scenery_gui.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +SURFACE SCENERY UI PASS: zoom, props, transparency, automatic event dialog, 100-credit purchase, temporary module cargo diff --git a/artifacts/surface_scenery_gui_errors.log b/artifacts/surface_scenery_gui_errors.log new file mode 100644 index 0000000..c3b729c --- /dev/null +++ b/artifacts/surface_scenery_gui_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/surface_scenery_preview.gd:19) diff --git a/artifacts/terrain_debug.log b/artifacts/terrain_debug.log new file mode 100644 index 0000000..449e421 --- /dev/null +++ b/artifacts/terrain_debug.log @@ -0,0 +1,8 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +TERRAIN NOISE CONTINUITY PASS: abrupt grayscale edges=1 +LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered diff --git a/artifacts/terrain_debug_errors.log b/artifacts/terrain_debug_errors.log new file mode 100644 index 0000000..e69de29 diff --git a/artifacts/terrain_detail_0.png b/artifacts/terrain_detail_0.png new file mode 100644 index 0000000..7f7d301 Binary files /dev/null and b/artifacts/terrain_detail_0.png differ diff --git a/artifacts/terrain_detail_0.png.import b/artifacts/terrain_detail_0.png.import new file mode 100644 index 0000000..712c9e8 --- /dev/null +++ b/artifacts/terrain_detail_0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dy21y2vy7ppld" +path="res://.godot/imported/terrain_detail_0.png-f62b1de6d84d20b721b8c7b288f04b50.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_detail_0.png" +dest_files=["res://.godot/imported/terrain_detail_0.png-f62b1de6d84d20b721b8c7b288f04b50.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/artifacts/terrain_detail_1.png b/artifacts/terrain_detail_1.png new file mode 100644 index 0000000..7569bc7 Binary files /dev/null and b/artifacts/terrain_detail_1.png differ diff --git a/artifacts/terrain_detail_1.png.import b/artifacts/terrain_detail_1.png.import new file mode 100644 index 0000000..842bdac --- /dev/null +++ b/artifacts/terrain_detail_1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4lk2yw1uqyjy" +path="res://.godot/imported/terrain_detail_1.png-f832e01bb5174dbf8ebd2516c862896c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_detail_1.png" +dest_files=["res://.godot/imported/terrain_detail_1.png-f832e01bb5174dbf8ebd2516c862896c.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/artifacts/terrain_detail_2.png b/artifacts/terrain_detail_2.png new file mode 100644 index 0000000..c586589 Binary files /dev/null and b/artifacts/terrain_detail_2.png differ diff --git a/artifacts/terrain_detail_2.png.import b/artifacts/terrain_detail_2.png.import new file mode 100644 index 0000000..54d818d --- /dev/null +++ b/artifacts/terrain_detail_2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bobnp4wdg5alr" +path="res://.godot/imported/terrain_detail_2.png-fe3e6bfd9fcae7696d803ddfe88cff2a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_detail_2.png" +dest_files=["res://.godot/imported/terrain_detail_2.png-fe3e6bfd9fcae7696d803ddfe88cff2a.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/artifacts/terrain_detail_3.png b/artifacts/terrain_detail_3.png new file mode 100644 index 0000000..8eeee9c Binary files /dev/null and b/artifacts/terrain_detail_3.png differ diff --git a/artifacts/terrain_detail_3.png.import b/artifacts/terrain_detail_3.png.import new file mode 100644 index 0000000..11d3a54 --- /dev/null +++ b/artifacts/terrain_detail_3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://brdd0rlfbsnqh" +path="res://.godot/imported/terrain_detail_3.png-c5c8bee4d8e7362d75bd155517cdf57f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_detail_3.png" +dest_files=["res://.godot/imported/terrain_detail_3.png-c5c8bee4d8e7362d75bd155517cdf57f.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/artifacts/terrain_detail_4.png b/artifacts/terrain_detail_4.png new file mode 100644 index 0000000..187c9b4 Binary files /dev/null and b/artifacts/terrain_detail_4.png differ diff --git a/artifacts/terrain_detail_4.png.import b/artifacts/terrain_detail_4.png.import new file mode 100644 index 0000000..32d1c50 --- /dev/null +++ b/artifacts/terrain_detail_4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d04otadlpbg81" +path="res://.godot/imported/terrain_detail_4.png-e75385b206d3292b58f75dabe3b37213.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_detail_4.png" +dest_files=["res://.godot/imported/terrain_detail_4.png-e75385b206d3292b58f75dabe3b37213.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/artifacts/terrain_detail_5.png b/artifacts/terrain_detail_5.png new file mode 100644 index 0000000..9aecf87 Binary files /dev/null and b/artifacts/terrain_detail_5.png differ diff --git a/artifacts/terrain_detail_5.png.import b/artifacts/terrain_detail_5.png.import new file mode 100644 index 0000000..6a60144 --- /dev/null +++ b/artifacts/terrain_detail_5.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0yeehbe08cbt" +path="res://.godot/imported/terrain_detail_5.png-fe141532de08d54842b986e5a328d69e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_detail_5.png" +dest_files=["res://.godot/imported/terrain_detail_5.png-fe141532de08d54842b986e5a328d69e.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/artifacts/terrain_layers_0.png b/artifacts/terrain_layers_0.png new file mode 100644 index 0000000..2a554d9 Binary files /dev/null and b/artifacts/terrain_layers_0.png differ diff --git a/artifacts/terrain_layers_0.png.import b/artifacts/terrain_layers_0.png.import new file mode 100644 index 0000000..c7199a2 --- /dev/null +++ b/artifacts/terrain_layers_0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxojqqsd77y2q" +path="res://.godot/imported/terrain_layers_0.png-0149ed030f2ff46fc090d054e2afa31b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_layers_0.png" +dest_files=["res://.godot/imported/terrain_layers_0.png-0149ed030f2ff46fc090d054e2afa31b.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/artifacts/terrain_layers_1.png b/artifacts/terrain_layers_1.png new file mode 100644 index 0000000..4ca1673 Binary files /dev/null and b/artifacts/terrain_layers_1.png differ diff --git a/artifacts/terrain_layers_1.png.import b/artifacts/terrain_layers_1.png.import new file mode 100644 index 0000000..9f67da4 --- /dev/null +++ b/artifacts/terrain_layers_1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blt2udm4b7s6m" +path="res://.godot/imported/terrain_layers_1.png-407da183d105abaaec4a2c417070d05e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_layers_1.png" +dest_files=["res://.godot/imported/terrain_layers_1.png-407da183d105abaaec4a2c417070d05e.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/artifacts/terrain_layers_2.png b/artifacts/terrain_layers_2.png new file mode 100644 index 0000000..679a4f1 Binary files /dev/null and b/artifacts/terrain_layers_2.png differ diff --git a/artifacts/terrain_layers_2.png.import b/artifacts/terrain_layers_2.png.import new file mode 100644 index 0000000..475f658 --- /dev/null +++ b/artifacts/terrain_layers_2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpxw7e1klrqif" +path="res://.godot/imported/terrain_layers_2.png-98f7555bb42efe94624823243f32a290.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_layers_2.png" +dest_files=["res://.godot/imported/terrain_layers_2.png-98f7555bb42efe94624823243f32a290.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/artifacts/terrain_layers_3.png b/artifacts/terrain_layers_3.png new file mode 100644 index 0000000..570c278 Binary files /dev/null and b/artifacts/terrain_layers_3.png differ diff --git a/artifacts/terrain_layers_3.png.import b/artifacts/terrain_layers_3.png.import new file mode 100644 index 0000000..501f02c --- /dev/null +++ b/artifacts/terrain_layers_3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blxlu3j227r1t" +path="res://.godot/imported/terrain_layers_3.png-15422b21d3622154291acfa88732cac2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_layers_3.png" +dest_files=["res://.godot/imported/terrain_layers_3.png-15422b21d3622154291acfa88732cac2.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/artifacts/terrain_layers_4.png b/artifacts/terrain_layers_4.png new file mode 100644 index 0000000..3b5ac98 Binary files /dev/null and b/artifacts/terrain_layers_4.png differ diff --git a/artifacts/terrain_layers_4.png.import b/artifacts/terrain_layers_4.png.import new file mode 100644 index 0000000..235d705 --- /dev/null +++ b/artifacts/terrain_layers_4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmj3hx3osmtt0" +path="res://.godot/imported/terrain_layers_4.png-64af32f38bf558ffddb299b6b7c89d33.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_layers_4.png" +dest_files=["res://.godot/imported/terrain_layers_4.png-64af32f38bf558ffddb299b6b7c89d33.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/artifacts/terrain_layers_5.png b/artifacts/terrain_layers_5.png new file mode 100644 index 0000000..4d9ad5f Binary files /dev/null and b/artifacts/terrain_layers_5.png differ diff --git a/artifacts/terrain_layers_5.png.import b/artifacts/terrain_layers_5.png.import new file mode 100644 index 0000000..0282f05 --- /dev/null +++ b/artifacts/terrain_layers_5.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ndnskaq1rde8" +path="res://.godot/imported/terrain_layers_5.png-98c25a7ed05344aef5ddd94dccf90676.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_layers_5.png" +dest_files=["res://.godot/imported/terrain_layers_5.png-98c25a7ed05344aef5ddd94dccf90676.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/artifacts/terrain_material_after.log b/artifacts/terrain_material_after.log new file mode 100644 index 0000000..7b1bf5c --- /dev/null +++ b/artifacts/terrain_material_after.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered diff --git a/artifacts/terrain_material_after_errors.log b/artifacts/terrain_material_after_errors.log new file mode 100644 index 0000000..e69de29 diff --git a/artifacts/terrain_material_before.log b/artifacts/terrain_material_before.log new file mode 100644 index 0000000..2f51255 --- /dev/null +++ b/artifacts/terrain_material_before.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE PREVIEW PASS: six distinct terrain styles, rivers and tributaries rendered diff --git a/artifacts/terrain_material_before.png b/artifacts/terrain_material_before.png new file mode 100644 index 0000000..a119621 Binary files /dev/null and b/artifacts/terrain_material_before.png differ diff --git a/artifacts/terrain_material_before.png.import b/artifacts/terrain_material_before.png.import new file mode 100644 index 0000000..83fae68 --- /dev/null +++ b/artifacts/terrain_material_before.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dc4qoyk2hiydg" +path="res://.godot/imported/terrain_material_before.png-26373b9394a530f85fd5e1e78b2b5653.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_material_before.png" +dest_files=["res://.godot/imported/terrain_material_before.png-26373b9394a530f85fd5e1e78b2b5653.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/artifacts/terrain_material_before_errors.log b/artifacts/terrain_material_before_errors.log new file mode 100644 index 0000000..7ba463e --- /dev/null +++ b/artifacts/terrain_material_before_errors.log @@ -0,0 +1,4 @@ +ERROR: Can't save PNG at path: 'res://artifacts/landscape_1.png'. + at: save_image (drivers/png/resource_saver_png.cpp:56) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/landscape_preview.gd:34) diff --git a/artifacts/terrain_material_final.log b/artifacts/terrain_material_final.log new file mode 100644 index 0000000..7b1bf5c --- /dev/null +++ b/artifacts/terrain_material_final.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered diff --git a/artifacts/terrain_material_final_errors.log b/artifacts/terrain_material_final_errors.log new file mode 100644 index 0000000..e69de29 diff --git a/artifacts/terrain_material_generation_test.log b/artifacts/terrain_material_generation_test.log new file mode 100644 index 0000000..7716e1d --- /dev/null +++ b/artifacts/terrain_material_generation_test.log @@ -0,0 +1,6 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE GENERATION PASS: six styles, seven scenery types, deterministic layouts, no rivers, separated mountains and buildings diff --git a/artifacts/terrain_material_performance.log b/artifacts/terrain_material_performance.log new file mode 100644 index 0000000..6144271 --- /dev/null +++ b/artifacts/terrain_material_performance.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER RENDER PASS: interpolated intermediate frames=148; median frame ms=8.331; p95 ms=8.486 diff --git a/artifacts/terrain_material_performance_errors.log b/artifacts/terrain_material_performance_errors.log new file mode 100644 index 0000000..9ee691e --- /dev/null +++ b/artifacts/terrain_material_performance_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_render_test.gd:5) diff --git a/artifacts/terrain_material_performance_final.log b/artifacts/terrain_material_performance_final.log new file mode 100644 index 0000000..29148a4 --- /dev/null +++ b/artifacts/terrain_material_performance_final.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDER RENDER PASS: interpolated intermediate frames=148; median frame ms=8.332; p95 ms=8.446 diff --git a/artifacts/terrain_material_performance_final_errors.log b/artifacts/terrain_material_performance_final_errors.log new file mode 100644 index 0000000..9ee691e --- /dev/null +++ b/artifacts/terrain_material_performance_final_errors.log @@ -0,0 +1,4 @@ +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/previews/lander_render_test.gd:5) diff --git a/artifacts/terrain_material_seamless.log b/artifacts/terrain_material_seamless.log new file mode 100644 index 0000000..7b1bf5c --- /dev/null +++ b/artifacts/terrain_material_seamless.log @@ -0,0 +1,7 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +Vulkan 1.4.341 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered diff --git a/artifacts/terrain_material_seamless_errors.log b/artifacts/terrain_material_seamless_errors.log new file mode 100644 index 0000000..e69de29 diff --git a/artifacts/terrain_material_variants.png b/artifacts/terrain_material_variants.png new file mode 100644 index 0000000..05d27fa Binary files /dev/null and b/artifacts/terrain_material_variants.png differ diff --git a/artifacts/terrain_material_variants.png.import b/artifacts/terrain_material_variants.png.import new file mode 100644 index 0000000..1b9d190 --- /dev/null +++ b/artifacts/terrain_material_variants.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cpdsyiy77vnk5" +path="res://.godot/imported/terrain_material_variants.png-aa3db2b1601b8e3ff65801e59bb13874.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_material_variants.png" +dest_files=["res://.godot/imported/terrain_material_variants.png-aa3db2b1601b8e3ff65801e59bb13874.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/artifacts/terrain_material_variants_final.png b/artifacts/terrain_material_variants_final.png new file mode 100644 index 0000000..1d5a607 Binary files /dev/null and b/artifacts/terrain_material_variants_final.png differ diff --git a/artifacts/terrain_material_variants_final.png.import b/artifacts/terrain_material_variants_final.png.import new file mode 100644 index 0000000..d3a25a5 --- /dev/null +++ b/artifacts/terrain_material_variants_final.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cxj0lcb5ry0oe" +path="res://.godot/imported/terrain_material_variants_final.png-15d0f564d5d4c08b524c16daa706d4e6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_material_variants_final.png" +dest_files=["res://.godot/imported/terrain_material_variants_final.png-15d0f564d5d4c08b524c16daa706d4e6.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/artifacts/terrain_material_variants_v2.png b/artifacts/terrain_material_variants_v2.png new file mode 100644 index 0000000..e8403be Binary files /dev/null and b/artifacts/terrain_material_variants_v2.png differ diff --git a/artifacts/terrain_material_variants_v2.png.import b/artifacts/terrain_material_variants_v2.png.import new file mode 100644 index 0000000..25adf5e --- /dev/null +++ b/artifacts/terrain_material_variants_v2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://denfmj08qjiup" +path="res://.godot/imported/terrain_material_variants_v2.png-62c9278020564ff6376d20e97bf39ddf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://artifacts/terrain_material_variants_v2.png" +dest_files=["res://.godot/imported/terrain_material_variants_v2.png-62c9278020564ff6376d20e97bf39ddf.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/artifacts/terrain_revision_test.log b/artifacts/terrain_revision_test.log new file mode 100644 index 0000000..c375999 --- /dev/null +++ b/artifacts/terrain_revision_test.log @@ -0,0 +1,12 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org + +[MCPRuntimeServer] port: scanning 6570-6585 (default) +[MCPRuntimeServer] listening on 127.0.0.1:6570 +[MCPRegistry] runtime port 6570 registered for c:/users/tomek/documents/godot/randoloot +WARNING: Camera2D overridden to physics process mode due to use of physics interpolation. + at: _update_process_callback (scene/2d/camera_2d.cpp:88) + GDScript backtrace (most recent call first): + [0] _ready (res://tests/levels/planet_expeditions_test.gd:66) +PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return +WARNING: 6 ObjectDB instances were leaked at exit (run with `--verbose` for details). + at: cleanup (core/object/object.cpp:2536) diff --git a/assets/planets/artwork_prompts.json b/assets/planets/artwork_prompts.json new file mode 100644 index 0000000..8fd4c9a --- /dev/null +++ b/assets/planets/artwork_prompts.json @@ -0,0 +1,42 @@ +{ + "breathing": { + "asset": "assets/planets/breathing.png", + "prompt": "Use case: stylized-concept. Production PNG icon for a top-down realistic painted sci-fi exploration game. single compact futuristic breathing apparatus with twin oxygen cartridges, dark gunmetal housing and cyan glowing indicator, isolated premium inventory item. Centered square composition, strong readable silhouette at 48 pixels, exquisite 3D painted materials, restrained cinematic highlights. Entire item inside canvas with 14% transparent safe margin. Genuinely transparent background, clean alpha edges, no text no lettering no frame no background no starfield no cast shadow. One item only." + }, + "suit": { + "asset": "assets/planets/suit.png", + "prompt": "Use case: stylized-concept. Production PNG icon for a top-down realistic painted sci-fi exploration game. single sealed futuristic exploration spacesuit torso with helmet, ivory titanium armor with amber and cyan accents, isolated premium inventory item. Centered square composition, strong readable silhouette at 48 pixels, exquisite 3D painted materials, restrained cinematic highlights. Entire item inside canvas with 14% transparent safe margin. Genuinely transparent background, clean alpha edges, no text no lettering no frame no background no starfield no cast shadow. One item only." + }, + "sidearm": { + "asset": "assets/planets/sidearm.png", + "prompt": "Use case: stylized-concept. Production PNG icon for a top-down realistic painted sci-fi exploration game. single futuristic compact handheld expedition energy pistol, gunmetal and copper materials with small turquoise indicator, isolated premium inventory item. Centered square composition, strong readable silhouette at 48 pixels, exquisite 3D painted materials, restrained cinematic highlights. Entire item inside canvas with 14% transparent safe margin. Genuinely transparent background, clean alpha edges, no text no lettering no frame no background no starfield no cast shadow. One item only." + }, + "freighter": { + "asset": "assets/planets/freighter.png", + "prompt": "Use case: stylized-concept. Production sprite for a premium painted top-down sci-fi 2D game. single long expedition freighter spacecraft viewed orthographically straight from above, bow facing up, broad central armored spine with six modular cargo pods, visible hangar opening with cyan light, twin engine blocks, weathered ivory and dark gunmetal with copper accents, readable silhouette. Entire object centered inside square image with 15% transparent safe margin. Sharp readable silhouette, hand-painted 3D detail, consistent soft light from upper left. Genuinely transparent exterior, no ground no stars no background no text no lettering no frame, no perspective, one object only." + }, + "lander": { + "asset": "assets/planets/lander.png", + "prompt": "Use case: stylized-concept. Production sprite for a premium painted top-down sci-fi 2D game. single small one-person exploration shuttle viewed orthographically straight from above, nose facing up, compact rounded triangular ivory hull, cyan cockpit, two small outboard engines, orange hazard panels and subtle weathering, clearly smaller and friendlier than a combat fighter. Entire object centered inside square image with 15% transparent safe margin. Sharp readable silhouette, hand-painted 3D detail, consistent soft light from upper left. Genuinely transparent exterior, no ground no stars no background no text no lettering no frame, no perspective, one object only." + }, + "tree": { + "asset": "assets/planets/tree.png", + "prompt": "Use case: stylized-concept. Production sprite for a premium painted top-down sci-fi 2D game. single lush broadleaf tree canopy viewed orthographically directly from above, irregular rich green foliage with olive highlights, detailed clustered leaves, trunk largely hidden, painted realistic game sprite. Entire object centered inside square image with 15% transparent safe margin. Sharp readable silhouette, hand-painted 3D detail, consistent soft light from upper left. Genuinely transparent exterior, no ground no stars no background no text no lettering no frame, no perspective, one object only." + }, + "grass": { + "asset": "assets/planets/grass.png", + "prompt": "Use case: stylized-concept. Production PNG asset for a premium painted top-down sci-fi exploration game. a seamless tileable overhead terrain texture of natural meadow grass and mossy earth, restrained fine ground detail with subtle bare soil patches, realistic painted videogame material, no trees no rocks no objects no horizon, flat orthographic lighting, muted olive green, texture reaches all four edges and tiles seamlessly. Square composition. Opaque full-frame texture, no border. Consistent soft overhead light from upper left. No text no letters no grid no perspective no watermark." + }, + "mountain": { + "asset": "assets/planets/mountain.png", + "prompt": "Use case: stylized-concept. Production PNG asset for a premium painted top-down sci-fi exploration game. one compact rugged mountain ridge cluster seen directly overhead, layered grey-brown rocky peaks and crags with sparse moss and restrained pale snow near tallest tips, realistic hand-painted videogame terrain prop, isolated clean silhouette, no ground outside ridge, no scene. Square composition. Genuinely transparent background, entire object inside frame with 12% empty safe margin, clean alpha edges. Consistent soft overhead light from upper left. No text no letters no grid no perspective no watermark." + }, + "mine": { + "asset": "assets/planets/mine.png", + "prompt": "Use case: stylized-concept. Production PNG asset for a premium painted top-down sci-fi exploration game. one small abandoned futuristic mine entrance installation seen orthographically directly overhead, worn metal elevator shaft and a compact industrial excavation shelter with rusty amber equipment and two cyan work lights, realistic painted sci-fi videogame prop, isolated compact compound, no surrounding terrain. Square composition. Genuinely transparent background, entire object inside frame with 12% empty safe margin, clean alpha edges. Consistent soft overhead light from upper left. No text no letters no grid no perspective no watermark." + }, + "ruins": { + "asset": "assets/planets/ruins.png", + "prompt": "Use case: stylized-concept. Production PNG asset for a premium painted top-down sci-fi exploration game. one small cluster of ancient alien ruins seen orthographically directly overhead, broken pale stone concentric platforms with a mysterious turquoise core, a few toppled angular pillars, moss in cracks, realistic painted sci-fi videogame prop, isolated compact compound, no surrounding terrain. Square composition. Genuinely transparent background, entire object inside frame with 12% empty safe margin, clean alpha edges. Consistent soft overhead light from upper left. No text no letters no grid no perspective no watermark." + } +} \ No newline at end of file diff --git a/assets/planets/breathing.png b/assets/planets/breathing.png new file mode 100644 index 0000000..4a91f6b Binary files /dev/null and b/assets/planets/breathing.png differ diff --git a/assets/planets/breathing.png.import b/assets/planets/breathing.png.import new file mode 100644 index 0000000..341986d --- /dev/null +++ b/assets/planets/breathing.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cylifxm0cnxkv" +path="res://.godot/imported/breathing.png-1440177498b986582aa8fa419222aebd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/breathing.png" +dest_files=["res://.godot/imported/breathing.png-1440177498b986582aa8fa419222aebd.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=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=1 diff --git a/assets/planets/freighter.png b/assets/planets/freighter.png new file mode 100644 index 0000000..ff2396a Binary files /dev/null and b/assets/planets/freighter.png differ diff --git a/assets/planets/freighter.png.import b/assets/planets/freighter.png.import new file mode 100644 index 0000000..bfe0b3e --- /dev/null +++ b/assets/planets/freighter.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cp1vo3yhv3wl0" +path="res://.godot/imported/freighter.png-d1f56db711f65035af634f2203d0a955.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/freighter.png" +dest_files=["res://.godot/imported/freighter.png-d1f56db711f65035af634f2203d0a955.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=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=1 diff --git a/assets/planets/grass.png b/assets/planets/grass.png new file mode 100644 index 0000000..846499c Binary files /dev/null and b/assets/planets/grass.png differ diff --git a/assets/planets/grass.png.import b/assets/planets/grass.png.import new file mode 100644 index 0000000..aafc898 --- /dev/null +++ b/assets/planets/grass.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bwe7vvtieggny" +path="res://.godot/imported/grass.png-9bfcf9a0e074fbea05dc53353a8ea2d1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/grass.png" +dest_files=["res://.godot/imported/grass.png-9bfcf9a0e074fbea05dc53353a8ea2d1.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=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=1 diff --git a/assets/planets/lander.png b/assets/planets/lander.png new file mode 100644 index 0000000..d732899 Binary files /dev/null and b/assets/planets/lander.png differ diff --git a/assets/planets/lander.png.import b/assets/planets/lander.png.import new file mode 100644 index 0000000..e4e20b2 --- /dev/null +++ b/assets/planets/lander.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmlkbxfgvdpni" +path="res://.godot/imported/lander.png-f4d17420d155f7bac0137a7c6f07ace7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/lander.png" +dest_files=["res://.godot/imported/lander.png-f4d17420d155f7bac0137a7c6f07ace7.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=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=1 diff --git a/assets/planets/mine.png b/assets/planets/mine.png new file mode 100644 index 0000000..77db39a Binary files /dev/null and b/assets/planets/mine.png differ diff --git a/assets/planets/mine.png.import b/assets/planets/mine.png.import new file mode 100644 index 0000000..7ecf5f0 --- /dev/null +++ b/assets/planets/mine.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpw48xlb4lrlc" +path="res://.godot/imported/mine.png-ff6562df28db380bc2509337855749cd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/mine.png" +dest_files=["res://.godot/imported/mine.png-ff6562df28db380bc2509337855749cd.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=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=1 diff --git a/assets/planets/mountain.png b/assets/planets/mountain.png new file mode 100644 index 0000000..43f84e7 Binary files /dev/null and b/assets/planets/mountain.png differ diff --git a/assets/planets/mountain.png.import b/assets/planets/mountain.png.import new file mode 100644 index 0000000..ff015e3 --- /dev/null +++ b/assets/planets/mountain.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj0qrvj6rn2m2" +path="res://.godot/imported/mountain.png-f83cad1b54a219229f0566a8f1faf988.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/mountain.png" +dest_files=["res://.godot/imported/mountain.png-f83cad1b54a219229f0566a8f1faf988.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=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=1 diff --git a/assets/planets/props/airstrip.png b/assets/planets/props/airstrip.png new file mode 100644 index 0000000..219440a Binary files /dev/null and b/assets/planets/props/airstrip.png differ diff --git a/assets/planets/props/airstrip.png.import b/assets/planets/props/airstrip.png.import new file mode 100644 index 0000000..6565382 --- /dev/null +++ b/assets/planets/props/airstrip.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cutmsukan55ve" +path="res://.godot/imported/airstrip.png-9c4dba7c0f2b4c06d15e29a809b2cc24.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/airstrip.png" +dest_files=["res://.godot/imported/airstrip.png-9c4dba7c0f2b4c06d15e29a809b2cc24.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=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=1 diff --git a/assets/planets/props/engineer_camp.png b/assets/planets/props/engineer_camp.png new file mode 100644 index 0000000..68f8eb8 Binary files /dev/null and b/assets/planets/props/engineer_camp.png differ diff --git a/assets/planets/props/engineer_camp.png.import b/assets/planets/props/engineer_camp.png.import new file mode 100644 index 0000000..8455da9 --- /dev/null +++ b/assets/planets/props/engineer_camp.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://r63tef2a6lny" +path="res://.godot/imported/engineer_camp.png-2f9ff98a4fc8e679443bf9e485e32415.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/engineer_camp.png" +dest_files=["res://.godot/imported/engineer_camp.png-2f9ff98a4fc8e679443bf9e485e32415.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=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=1 diff --git a/assets/planets/props/fuel_depot.png b/assets/planets/props/fuel_depot.png new file mode 100644 index 0000000..ca4ebb2 Binary files /dev/null and b/assets/planets/props/fuel_depot.png differ diff --git a/assets/planets/props/fuel_depot.png.import b/assets/planets/props/fuel_depot.png.import new file mode 100644 index 0000000..5cc0693 --- /dev/null +++ b/assets/planets/props/fuel_depot.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ipj3oat0yjhi" +path="res://.godot/imported/fuel_depot.png-7bc94320a8ef5b016d124e4554705a13.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/fuel_depot.png" +dest_files=["res://.godot/imported/fuel_depot.png-7bc94320a8ef5b016d124e4554705a13.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=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=1 diff --git a/assets/planets/props/prompts.json b/assets/planets/props/prompts.json new file mode 100644 index 0000000..1839dae --- /dev/null +++ b/assets/planets/props/prompts.json @@ -0,0 +1,34 @@ +{ + "ruined_house": { + "asset": "assets/planets/props/ruined_house.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a ruined small colonial house, collapsed roof, broken pale concrete walls, exposed rooms and scattered rubble tightly contained around the building. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "warehouse": { + "asset": "assets/planets/props/warehouse.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a weathered industrial storage warehouse with corrugated steel roof, orange loading doors and a few cargo containers beside it. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "radar": { + "asset": "assets/planets/props/radar.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a remote radar outpost with a round parabolic satellite dish, compact control hut and antenna. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "airstrip": { + "asset": "assets/planets/props/airstrip.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a compact abandoned planetary landing pad with short runway markings, small hangar and broken beacon lights; no lettering. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "fuel_depot": { + "asset": "assets/planets/props/fuel_depot.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict an industrial fuel depot consisting of three cylindrical tanks, connecting pipes and a small pumping unit. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "solar_farm": { + "asset": "assets/planets/props/solar_farm.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a compact damaged solar power station with six dark blue rectangular photovoltaic panels and a small battery hut. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "scrapyard": { + "asset": "assets/planets/props/scrapyard.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a derelict planetary machinery scrapyard with a broken rover, rusted engine blocks, scrap metal piles and a crane arm. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + }, + "engineer_camp": { + "asset": "assets/planets/props/engineer_camp.png", + "prompt": "High quality 2D game sprite, strict orthographic TOP DOWN view looking vertically down, realistic hand-painted science fiction RTS asset. Depict a tiny friendly engineer's roadside workshop camp with a canvas awning, workbench, tools, two cargo crates and a single small human engineer wearing an orange suit. Standalone isolated prop centered, entire footprint visible with generous transparent padding, no surrounding terrain or ground tile, transparent background, soft short shadow directly below. Muted worn cream steel and orange industrial accents, natural detailed materials, clear silhouette readable when scaled to 120 pixels. No text, no labels, no border, no UI, no isometric angle, no perspective horizon. This is one finished sprite for a planetary exploration game." + } +} \ No newline at end of file diff --git a/assets/planets/props/radar.png b/assets/planets/props/radar.png new file mode 100644 index 0000000..9587a36 Binary files /dev/null and b/assets/planets/props/radar.png differ diff --git a/assets/planets/props/radar.png.import b/assets/planets/props/radar.png.import new file mode 100644 index 0000000..7af2335 --- /dev/null +++ b/assets/planets/props/radar.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1yxps60snd45" +path="res://.godot/imported/radar.png-89791b71409b60b794c6884859d90306.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/radar.png" +dest_files=["res://.godot/imported/radar.png-89791b71409b60b794c6884859d90306.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=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=1 diff --git a/assets/planets/props/ruined_house.png b/assets/planets/props/ruined_house.png new file mode 100644 index 0000000..3f525bc Binary files /dev/null and b/assets/planets/props/ruined_house.png differ diff --git a/assets/planets/props/ruined_house.png.import b/assets/planets/props/ruined_house.png.import new file mode 100644 index 0000000..78255c6 --- /dev/null +++ b/assets/planets/props/ruined_house.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://di5o1pp4kvpx6" +path="res://.godot/imported/ruined_house.png-5d1f6c40881a9315492c5af8fd59629c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/ruined_house.png" +dest_files=["res://.godot/imported/ruined_house.png-5d1f6c40881a9315492c5af8fd59629c.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=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=1 diff --git a/assets/planets/props/scrapyard.png b/assets/planets/props/scrapyard.png new file mode 100644 index 0000000..2814236 Binary files /dev/null and b/assets/planets/props/scrapyard.png differ diff --git a/assets/planets/props/scrapyard.png.import b/assets/planets/props/scrapyard.png.import new file mode 100644 index 0000000..c335661 --- /dev/null +++ b/assets/planets/props/scrapyard.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d0fyvy2ldeqim" +path="res://.godot/imported/scrapyard.png-716f5186f39b10362ba3b8e51ee02c7e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/scrapyard.png" +dest_files=["res://.godot/imported/scrapyard.png-716f5186f39b10362ba3b8e51ee02c7e.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=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=1 diff --git a/assets/planets/props/solar_farm.png b/assets/planets/props/solar_farm.png new file mode 100644 index 0000000..9c4bf1b Binary files /dev/null and b/assets/planets/props/solar_farm.png differ diff --git a/assets/planets/props/solar_farm.png.import b/assets/planets/props/solar_farm.png.import new file mode 100644 index 0000000..e16a6fc --- /dev/null +++ b/assets/planets/props/solar_farm.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://byfqmoxvi6vqm" +path="res://.godot/imported/solar_farm.png-0d5c442f2ce33fc8c1a773fe227ef549.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/solar_farm.png" +dest_files=["res://.godot/imported/solar_farm.png-0d5c442f2ce33fc8c1a773fe227ef549.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=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=1 diff --git a/assets/planets/props/warehouse.png b/assets/planets/props/warehouse.png new file mode 100644 index 0000000..2959c4e Binary files /dev/null and b/assets/planets/props/warehouse.png differ diff --git a/assets/planets/props/warehouse.png.import b/assets/planets/props/warehouse.png.import new file mode 100644 index 0000000..93a97ff --- /dev/null +++ b/assets/planets/props/warehouse.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3m8rxou5vfit" +path="res://.godot/imported/warehouse.png-a255d468c2f00b28f41864632fb7a90c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/props/warehouse.png" +dest_files=["res://.godot/imported/warehouse.png-a255d468c2f00b28f41864632fb7a90c.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=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=1 diff --git a/assets/planets/ruins.png b/assets/planets/ruins.png new file mode 100644 index 0000000..b47a6b4 Binary files /dev/null and b/assets/planets/ruins.png differ diff --git a/assets/planets/ruins.png.import b/assets/planets/ruins.png.import new file mode 100644 index 0000000..c7f04b6 --- /dev/null +++ b/assets/planets/ruins.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy05iekdukvny" +path="res://.godot/imported/ruins.png-012edb274ef91c4f1b81c9d6d2bc506f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/ruins.png" +dest_files=["res://.godot/imported/ruins.png-012edb274ef91c4f1b81c9d6d2bc506f.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=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=1 diff --git a/assets/planets/sidearm.png b/assets/planets/sidearm.png new file mode 100644 index 0000000..8c9b545 Binary files /dev/null and b/assets/planets/sidearm.png differ diff --git a/assets/planets/sidearm.png.import b/assets/planets/sidearm.png.import new file mode 100644 index 0000000..cb276b2 --- /dev/null +++ b/assets/planets/sidearm.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://say137jb3in7" +path="res://.godot/imported/sidearm.png-3038cac58c8d2bd2e747aab9e152d791.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/sidearm.png" +dest_files=["res://.godot/imported/sidearm.png-3038cac58c8d2bd2e747aab9e152d791.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=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=1 diff --git a/assets/planets/suit.png b/assets/planets/suit.png new file mode 100644 index 0000000..6df37fe Binary files /dev/null and b/assets/planets/suit.png differ diff --git a/assets/planets/suit.png.import b/assets/planets/suit.png.import new file mode 100644 index 0000000..1b64244 --- /dev/null +++ b/assets/planets/suit.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://davx74rkhel3j" +path="res://.godot/imported/suit.png-db172b9d589597e61bb794b457cc532a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/suit.png" +dest_files=["res://.godot/imported/suit.png-db172b9d589597e61bb794b457cc532a.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=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=1 diff --git a/assets/planets/terrain/moss.png b/assets/planets/terrain/moss.png new file mode 100644 index 0000000..896433d Binary files /dev/null and b/assets/planets/terrain/moss.png differ diff --git a/assets/planets/terrain/moss.png.import b/assets/planets/terrain/moss.png.import new file mode 100644 index 0000000..717d5c0 --- /dev/null +++ b/assets/planets/terrain/moss.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hb33b0wdb41o" +path="res://.godot/imported/moss.png-e2719202d7d73633e1f8b31e3abb686f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/terrain/moss.png" +dest_files=["res://.godot/imported/moss.png-e2719202d7d73633e1f8b31e3abb686f.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=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=1 diff --git a/assets/planets/terrain/prompts.json b/assets/planets/terrain/prompts.json new file mode 100644 index 0000000..d7c6dcf --- /dev/null +++ b/assets/planets/terrain/prompts.json @@ -0,0 +1,18 @@ +{ + "soil": { + "asset": "assets/planets/terrain/soil.png", + "prompt": "Seamless tileable high resolution 2048x2048 square ground texture for a realistic top-down science fiction planetary exploration game: dark earthy loam, scattered tiny pebbles, irregular compacted dirt patches, a few dry root fibers; rich fine photographic soil texture, no large rocks. Orthographic straight overhead macro view, flat diffuse neutral illumination, balanced microdetail at multiple scales, crisp material grain and natural organic variation. Entire image filled edge to edge with ground. Perfect seamless repeating edges, no horizon, no directional cast shadows, no objects, no border, no labels, no text, no icons, no perspective. Photorealistic bitmap surface material, visually coherent with high quality RTS terrain." + }, + "rock": { + "asset": "assets/planets/terrain/rock.png", + "prompt": "Seamless tileable high resolution 2048x2048 square ground texture for a realistic top-down science fiction planetary exploration game: weathered gray and warm slate bedrock, fine irregular natural fractures, subtle mineral grains and small gravel; realistic rocky ground without raised mountains. Orthographic straight overhead macro view, flat diffuse neutral illumination, balanced microdetail at multiple scales, crisp material grain and natural organic variation. Entire image filled edge to edge with ground. Perfect seamless repeating edges, no horizon, no directional cast shadows, no objects, no border, no labels, no text, no icons, no perspective. Photorealistic bitmap surface material, visually coherent with high quality RTS terrain." + }, + "sand": { + "asset": "assets/planets/terrain/sand.png", + "prompt": "Seamless tileable high resolution 2048x2048 square ground texture for a realistic top-down science fiction planetary exploration game: fine pale warm sand with subtle wind ripples, scattered tiny tan gravel and delicate irregular erosion marks; realistic sand ground. Orthographic straight overhead macro view, flat diffuse neutral illumination, balanced microdetail at multiple scales, crisp material grain and natural organic variation. Entire image filled edge to edge with ground. Perfect seamless repeating edges, no horizon, no directional cast shadows, no objects, no border, no labels, no text, no icons, no perspective. Photorealistic bitmap surface material, visually coherent with high quality RTS terrain." + }, + "moss": { + "asset": "assets/planets/terrain/moss.png", + "prompt": "Seamless tileable high resolution 2048x2048 square ground texture for a realistic top-down science fiction planetary exploration game: dense low moss and short natural wild grass in irregular organic tufts, sparse tiny clover leaves and small exposed soil pockets; rich green ground without trees or tall plants. Orthographic straight overhead macro view, flat diffuse neutral illumination, balanced microdetail at multiple scales, crisp material grain and natural organic variation. Entire image filled edge to edge with ground. Perfect seamless repeating edges, no horizon, no directional cast shadows, no objects, no border, no labels, no text, no icons, no perspective. Photorealistic bitmap surface material, visually coherent with high quality RTS terrain." + } +} \ No newline at end of file diff --git a/assets/planets/terrain/rock.png b/assets/planets/terrain/rock.png new file mode 100644 index 0000000..7564b85 Binary files /dev/null and b/assets/planets/terrain/rock.png differ diff --git a/assets/planets/terrain/rock.png.import b/assets/planets/terrain/rock.png.import new file mode 100644 index 0000000..5bd48b1 --- /dev/null +++ b/assets/planets/terrain/rock.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1g7sj7bcepry" +path="res://.godot/imported/rock.png-75653a03569f17d9f3a7afea0b07f9ed.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/terrain/rock.png" +dest_files=["res://.godot/imported/rock.png-75653a03569f17d9f3a7afea0b07f9ed.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=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=1 diff --git a/assets/planets/terrain/sand.png b/assets/planets/terrain/sand.png new file mode 100644 index 0000000..94b75a7 Binary files /dev/null and b/assets/planets/terrain/sand.png differ diff --git a/assets/planets/terrain/sand.png.import b/assets/planets/terrain/sand.png.import new file mode 100644 index 0000000..c9bf071 --- /dev/null +++ b/assets/planets/terrain/sand.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg87hiyhe04ww" +path="res://.godot/imported/sand.png-26b9b57e6a21895d8b3f4f1b4cc871be.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/terrain/sand.png" +dest_files=["res://.godot/imported/sand.png-26b9b57e6a21895d8b3f4f1b4cc871be.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=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=1 diff --git a/assets/planets/terrain/soil.png b/assets/planets/terrain/soil.png new file mode 100644 index 0000000..870578f Binary files /dev/null and b/assets/planets/terrain/soil.png differ diff --git a/assets/planets/terrain/soil.png.import b/assets/planets/terrain/soil.png.import new file mode 100644 index 0000000..fd0f130 --- /dev/null +++ b/assets/planets/terrain/soil.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b76kgstskmb7n" +path="res://.godot/imported/soil.png-f76a85d640702a4edf86ec326de3f6e2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/terrain/soil.png" +dest_files=["res://.godot/imported/soil.png-f76a85d640702a4edf86ec326de3f6e2.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=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=1 diff --git a/assets/planets/tree.png b/assets/planets/tree.png new file mode 100644 index 0000000..dc894a6 Binary files /dev/null and b/assets/planets/tree.png differ diff --git a/assets/planets/tree.png.import b/assets/planets/tree.png.import new file mode 100644 index 0000000..62941d0 --- /dev/null +++ b/assets/planets/tree.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dmbecb4ot4y1i" +path="res://.godot/imported/tree.png-0be38c99716d98cc959e804a34acfa4d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/planets/tree.png" +dest_files=["res://.godot/imported/tree.png-0be38c99716d98cc959e804a34acfa4d.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=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=1 diff --git a/planet_mechanic.txt b/planet_mechanic.txt index 5afc32e..d597dee 100644 --- a/planet_mechanic.txt +++ b/planet_mechanic.txt @@ -5,7 +5,7 @@ Cel dokumentu ------------- Plan lądowania na planetach earthlike, eksploracji ich powierzchni i korzystania z frachtowca. Zawiera ustalone zasady oraz propozycje -pięciu dodatkowych materiałów. Nie oznacza wdrożenia mechaniki. +pięciu dodatkowych materiałów. Sekcja 13 opisuje wdrożoną pierwszą wersję. Nieustalone wartości liczbowe nie są ostatecznymi parametrami balansu. @@ -73,7 +73,8 @@ Przed lądowaniem warto pokazywać przewidywaną utratę HP lądownika. 3. WYPOSAŻENIE KAPITANA ====================== -Kapitan może zaczynać bez ekwipunku. Sprzęt zwiększa skuteczność +Kapitan zaczyna z prostym sprzętem poziomu 1 w każdym z trzech slotów. +Sprzęt zwiększa skuteczność eksploracji, ale nie jest warunkiem wejścia na powierzchnię earthlike. SYSTEM ODDYCHANIA @@ -91,9 +92,10 @@ szansę sukcesu danej decyzji. Należy pokazać ją przed wyborem. Nie planuje się na początku pełnego trybu chodzenia kapitanem. Sprzęt działa poprzez rozstrzygnięcia zdarzeń przy POI. -Warsztat i receptury wyposażenia pozostają w planie dalszego rozwoju. -Najpierw powstaje eksploracja i zdobywanie zasobów; ich zastosowania, -szczegółowe parametry sprzętu i technologie będą projektowane później. +Nowy sprzęt kapitana zdobywa się wyłącznie przez wytwarzanie w warsztacie +frachtowca. POI dają surowce i moduły statku, nigdy sprzęt kapitana. +Sprzęt ma na razie tylko rodzaj i poziom. Dalsze wymagania i technologie +będą projektowane później. 4. LĄDOWNIK: HP, ZUŻYCIE I NAPRAWY @@ -130,9 +132,10 @@ materiałów dostępnych wyłącznie na powierzchni planety. Po nieudanej wyprawie można zdobyć części w kosmosie i wrócić do eksploracji. -Miejsce naprawy i sposób rozliczania ułamkowych procentów HP -pozostają do dopracowania. Tak samo maksymalne HP, straty przy -lądowaniu i dokładne źródła obrażeń na powierzchni. +Naprawa odbywa się w hangarze frachtowca. Maksimum: 100 HP. +Brakujące procenty zaokrągla się w górę do pełnej części. +Wejście w atmosferę kosztuje 5–20 HP zależnie od trudności biomu. +Dalsze uszkodzenia pochodzą głównie z nieudanych prób przy POI. 5. POWRÓT, ZNISZCZENIE I WYJŚCIE Z GRY @@ -388,7 +391,7 @@ Ustalono: - Lądować można na każdej earthlike, także bez wyposażenia kapitana. - Około 70% earthlike ma łatwy biom; brak gwarantowanej łatwej planety. - Biom i ekwipunek modyfikują szanse przy POI, zamiast blokować lądowanie. -- Pierwsza forma POI to interakcja E i wybór decyzji. +- Pierwsza forma POI to interakcja F i wybór decyzji. - Trudniejsze planety dają więcej surowców i moduły wyższego poziomu. - Każde lądowanie generuje nową mapę; wizyty można powtarzać. - Przed lądowaniem wymagane jest 100% HP lądownika. @@ -402,18 +405,126 @@ Ustalono: - Najpierw powstaje eksploracja i zdobywanie zasobów; ich dalsze zastosowania zostaną rozwinięte później. -Do dopracowania: -- Klasyfikacja grafik earthlike i częstość ich generowania poza - gwarantowaną planetą tubylców. -- Wpływ tlenu, temperatury, zagrożeń i sprzętu na szanse sukcesu. -- Dokładne szanse, nagrody i skutki porażki dla kolejnych decyzji POI. -- Maksymalne HP i strata HP przy wejściu w atmosferę. -- Źródła uszkodzeń podczas eksploracji. -- Miejsce naprawy i zaokrąglanie kosztu ułamkowych procentów HP. -- Wielkość mapy, liczba POI i ewentualna pojemność ładowni. -- Mnożniki surowców i przelicznik trudności na poziom modułów. -- Kryterium walki blokującej lądowanie. -- Pauzowanie gry w ekranie frachtowca. -- Przyszłe receptury, badania i rozwój trzech pomieszczeń. -- Zapis stanu po zakończeniu wyprawy, kiedy powstanie system zapisu. -- Zasady rozpoczęcia całkowicie nowej gry. +13. PARAMETRY PIERWSZEJ DZIAŁAJĄCEJ WERSJI (17.10.2026) +====================================================== + +- Kosmos jest zamrożony podczas eksploracji i pobytu we frachtowcu. +- Grafiki earthlike: wszystkie warianty Terrestrial, Lush i Tropical + z katalogu planet; sprawdzono ich kontynenty, oceany i atmosferę. +- Planeta tubylców zawsze otrzymuje jedną z tych grafik. +- Warunki planety są stałe dla ziarna układu; kolejne wizyty zmieniają mapę. +- Mapa powierzchni: 3840 × 3840, jeziora, rzeka, lasy, góry i 8 POI. + Teren można swobodnie przelatywać; miejsca odkrywa się z odległości 650, + a interakcja F działa z odległości 150 jednostek. +- F skanuje planetę, L ląduje lub dokuje; na powierzchni sterowanie jak statkiem: W/S, A/D, Q/E, TAB, + F bada miejsce, L lub przycisk powrotu kończy wyprawę. +- Lądowanie wymaga wykonanego skanu i 100 HP lądownika. +- Wroga jednostka bliżej niż 650 lub ostatnie 6 sekund od strzału/obrażeń + blokuje lądowanie i dokowanie. Dalecy wrogowie nie blokują eksploracji. +- Szanse etapów POI przed modyfikatorami: 90%, 60%, 35%. + Niepowodzenie zamyka miejsce i zabiera 8–15 HP + 5 za wcześniejszy etap + oraz do 10 dodatkowych HP za trudność biomu. +- Sprzęt redukuje odpowiednią karę środowiska o 6% za poziom powyżej 1 + (maksymalnie 80%). Dodatkowy bonus wynosi 0,4 punktu procentowego + za poziom powyżej 1 na każdym elemencie, razem maksymalnie 12 pp. + Końcowe szanse są ograniczone do 8–98%. +- Bazowa nagroda za sukces: 5–12 surowców, mnożona przez + (1 + 2 × trudność) i (1 + 0,65 × indeks etapu). + 55% losowań korzysta z pięciu nowych materiałów, reszta z obecnych rud. +- Szansa modułu statku za sukces: 15–40% zależnie od biomu. + Poziom modułu: poziom układu + do 6 za biom + indeks etapu. +- Ruiny dają dodatkowo archiwa, zapisywane po udanym powrocie. + Nie dodajemy XP z powierzchni; badania technologii pozostają na później. +- Ładownia wyprawy nie ma na razie limitu. Przy pełnej ładowni statku + odzyskane moduły czekają na odbiór w hangarze, bez utraty przedmiotów. +- Kapitan ma trzy sloty pod swoim panelem. Przeciąganie lub dwuklik + zmienia wyposażenie. Każdy posiadany egzemplarz pozostaje własnością gracza. +- Warsztat tworzy kolejny poziom ponad najwyższy posiadany danego rodzaju. + Receptury na poziom L: + System oddychania: 5L części, 2L krzemu, L miedzi. + Skafander: 5L części, 2L niklu, 3L żelaza. + Broń ręczna: 5L części, L wolframu, 2L tytanu. +- Zamknięcie gry rozlicza wyprawę jak powrót. Nie wprowadzono jeszcze + zapisu na dysku: po całkowitym zamknięciu aplikacji postęp nie jest zachowany. +- Śmierć statku i zmiana układu zachowują sprzęt, skany, archiwa, HP + lądownika i odebrane zasoby w ramach bieżącej rozgrywki. +- Całkowicie nowa wyprawa zeruje ten stan i przywraca sprzęt poziomu 1. + +Do dalszego dopracowania: +- Balans nagród, kosztów warsztatu i ochrony sprzętu po testach graczy. +- Badania technologii oraz rozbudowa pomieszczeń frachtowca. +- Zastosowania rtęci i dodatkowe receptury. +- Trwały zapis rozgrywki i migracje danych. + +Aktualizacja sterowania: wspólny model ruchu statku i lądownika, z bezwładnością, +obrotem, hamowaniem/wstecznym oraz ruchem bocznym. F bada POI; E to ruch w prawo. +TAB uruchamia dopalanie (osobna energia 100, zużycie 20/s, regeneracja 5/s). +Po skanie opis tlenu, temperatury, flory i szans POI pojawia się od razu. + +Aktualizacja krajobrazów (18.10.2026): +- Okno lądowania/dokowania jest całkowicie ukryte przy pobliskim wrogu + i podczas blokady walki; wraca po ustaniu zagrożenia. +- Sześć krajobrazów: zielone doliny, jesienne lasy, mokradła, skaliste + wyżyny, suche kaniony i alpejska tundra. Klimat wpływa na wybór. +- Teren renderowany proceduralnie w rozdzielczości ekranu: detale gleby, + zróżnicowana roślinność, skały, miękkie wybrzeża i śnieg na wzniesieniach. +- Rzeki mają meandry, 1–3 dopływy, zmienną szerokość, płytkie brzegi + i głębsze koryto. Nie są rysowane jako zestaw równoległych linii. +- Wokół POI pozostają polany, a lądowisko jest odsunięte od koryta. + +Aktualizacja powierzchni i wydarzeń (18.10.2026): +- Kamera powierzchni oddalona do zoom 0,8; grafika lądownika ma delikatne + wyostrzenie. Jego rozmiar ekranowy jest zbliżony do statku w kosmosie. +- Rzeki usunięto. Ich przebieg nie był spójny z wysokością terenu. + Pozostają jeziora i wybrzeża wynikające z mapy wysokości. +- Dodano 8 nowych grafik PNG: zniszczony dom, magazyn, radar, + lądowisko z hangarem, skład paliwa, instalacja solarna, złomowisko, + obóz inżyniera. Są losowane na suchych parcelach, poza górami i POI. +- Liczba elementów otoczenia zależy od dostępnego miejsca; generator + próbuje umieścić 25–38 obiektów. Na skalistych mapach może być ich mniej. +- W 40% losowań generator podejmuje próbę umieszczenia spotkania z inżynierem. + Spotkanie powstaje, jeśli znajdzie się odpowiednia parcela. +- Wydarzenie ma pytajnik na powierzchni i minimapie. Podlot na 180 jednostek + automatycznie otwiera okno. Po odmowie można wrócić (oddalić się ponad 260) + lub użyć F przy obozie. Badanie POI nadal działa osobno. +- Oferta: jeden nieznany moduł statku za dokładnie 100 kredytów. + Brak kredytów blokuje zakup; odmowa nie pobiera pieniędzy. +- Poziom: bieżący poziom układu + bonus 0–20, ograniczony maksimum gry 1000. + Waga bonusu k wynosi 0,75^k, normalizowana dla 21 możliwych wyników. + Około 25,06% na +0, 1,41% na +10 i 0,0795% na +20. + Szczęście kapitana nie zmienia tego zakresu. +- Losowane są tarcze, pancerz, silnik, reaktor lub komputer. +- Po zakupie ta oferta jest zużyta. Moduł trafia do ładowni wyprawy: + zostaje po dobrowolnym powrocie, przepada po zniszczeniu lądownika. + Wydanych kredytów nie zwraca się. Pełna ładownia statku nadal nie gubi + nagrody — moduł czeka wtedy na odbiór we frachtowcu. +- Źródło grafik: wbudowany imagegen; pliki i komplet promptów znajdują się + w assets/planets/props/ (prompts.json). + +Korekta wydarzeń, zabudowy i jakości (18.10.2026): +- Wydarzenia są oznaczone wyłącznie pytajnikiem. Nie wyświetlają grafiki + obozu ani budynku; ten sam sposób oznaczania służy przyszłym wydarzeniom. +- Dodatkowe budynki występują sporadycznie: próba umieszczenia 2–5 + na całej mapie, a nie 25–38. Nie zmienia to standardowych 8 POI. +- Powierzchnia jest renderowana w 1,5-krotnie większej rozdzielczości + w obu wymiarach i filtrowana przy wyświetlaniu. Kamera zachowuje + poprzedni obszar widzenia, HUD pozostaje w rozdzielczości okna. +- Pole wysokości 96×96 jest wygładzane interpolacją sześcienną do 768×768 + przed użyciem w shaderze, aby ograniczyć kanciaste brzegi jezior i siatkę. +- Wyostrzanie lądownika jest łagodniejsze, aby nie podkreślać schodków. + +Aktualizacja materiałów powierzchni (18.10.2026): +- Dodano cztery osobne tekstury PNG: ziemia z drobnym żwirem, + spękana skała, piasek i mech z niską roślinnością. +- Tekstury mieszają się z dotychczasową trawą według wilgotności, + wysokości, nachylenia, klimatu oraz kilku skal lokalnego szumu. +- Powstają lokalne płaty ziemi, mchu, żwiru, skał, piasku i śniegu. + Materiały mają różne skale, orientacje i płynnie zniekształcane UV. +- Zastosowano lustrzane kafelkowanie bez skoków na krawędziach tekstur. +- Zmieniono funkcję losującą komórki szumu na stabilny hash całkowitoliczbowy. + Usuwa to widoczne kwadratowe granice pól mieszania na rendererze Vulkan. +- Wygładzone pole wysokości ma teraz 1024×1024 zamiast 768×768. +- Obecne ustalenia pozostają: wydarzenia jako sam pytajnik, 2–5 prób + umieszczenia budynków na mapę, brak rzek i zoom powierzchni 0,8. +- Nowe tekstury wygenerowano wbudowanym imagegen. Pliki i komplet promptów: + assets/planets/terrain/ oraz assets/planets/terrain/prompts.json. diff --git a/resources/effects/lander_detail.gdshader b/resources/effects/lander_detail.gdshader new file mode 100644 index 0000000..a171d51 --- /dev/null +++ b/resources/effects/lander_detail.gdshader @@ -0,0 +1,11 @@ +shader_type canvas_item; +render_mode unshaded; +varying vec4 vertex_tint; +void vertex() { vertex_tint=COLOR; } +void fragment() { + vec4 center=texture(TEXTURE,UV); + vec2 dx=dFdx(UV), dy=dFdy(UV); + vec3 neighbors=texture(TEXTURE,UV+dx).rgb+texture(TEXTURE,UV-dx).rgb+texture(TEXTURE,UV+dy).rgb+texture(TEXTURE,UV-dy).rgb; + vec3 sharp=clamp(center.rgb*1.2-neighbors*0.05,vec3(0.0),vec3(1.0)); + COLOR=vec4(mix(center.rgb,sharp,smoothstep(0.8,1.0,center.a)),center.a)*vertex_tint; +} diff --git a/resources/effects/lander_detail.gdshader.uid b/resources/effects/lander_detail.gdshader.uid new file mode 100644 index 0000000..f34370a --- /dev/null +++ b/resources/effects/lander_detail.gdshader.uid @@ -0,0 +1 @@ +uid://ciogq1503ofss diff --git a/resources/effects/planet_terrain.gdshader b/resources/effects/planet_terrain.gdshader new file mode 100644 index 0000000..498f805 --- /dev/null +++ b/resources/effects/planet_terrain.gdshader @@ -0,0 +1,90 @@ +shader_type canvas_item; +render_mode unshaded; +uniform sampler2D height_map : filter_linear, repeat_disable; +uniform sampler2D grass_detail : source_color, filter_linear_mipmap, repeat_disable; +uniform sampler2D soil_detail : source_color, filter_linear_mipmap, repeat_disable; +uniform sampler2D rock_detail : source_color, filter_linear_mipmap, repeat_disable; +uniform sampler2D sand_detail : source_color, filter_linear_mipmap, repeat_disable; +uniform sampler2D moss_detail : source_color, filter_linear_mipmap, repeat_disable; +uniform vec4 low_color : source_color; +uniform vec4 high_color : source_color; +uniform vec4 sand_color : source_color; +uniform vec4 rock_color : source_color; +uniform float climate = 0.0; +uniform float seed_offset = 0.0; +uniform int biome_kind = 0; + +float hash(vec2 p) { + uvec2 cell=uvec2(ivec2(p)); + uint value=cell.x*1597334677u ^ cell.y*3812015801u; + value^=value>>16u; + value*=2246822519u; + value^=value>>13u; + value*=3266489917u; + value^=value>>16u; + return float(value & 16777215u)/16777216.0; +} +float noise(vec2 p) { + vec2 i=floor(p), f=fract(p); f=f*f*(3.0-2.0*f); + return mix(mix(hash(i),hash(i+vec2(1,0)),f.x),mix(hash(i+vec2(0,1)),hash(i+vec2(1,1)),f.x),f.y); +} +float fbm(vec2 p) { + return noise(p)*0.55+noise(p*2.03+8.1)*0.27+noise(p*4.13+3.7)*0.13+noise(p*8.21)*0.05; +} +vec2 tile_uv(vec2 uv) { return vec2(1.0)-abs(fract(uv*0.5)*2.0-vec2(1.0)); } +float luminance(vec3 color) { return dot(color,vec3(0.299,0.587,0.114)); } +void fragment() { + vec2 p=UV*3840.0; + vec2 seed=vec2(seed_offset,seed_offset*0.317); + float region=fbm(p*0.0022+seed); + float moisture=fbm(p*0.0051+seed+vec2(31.4,17.3)); + float patches=fbm(p*0.012+seed+vec2(74.2,91.7)); + float fine=noise(p*0.19+seed); + float h=texture(height_map,UV).r+(patches-0.5)*0.03; + float slope_x=texture(height_map,UV+vec2(0.003,0)).r-texture(height_map,UV-vec2(0.003,0)).r; + float slope_y=texture(height_map,UV+vec2(0,0.003)).r-texture(height_map,UV-vec2(0,0.003)).r; + float shade=clamp(1.0-slope_x*3.8-slope_y*2.8,0.72,1.25); + // Different orientations and warped coordinates hide repeating square tiles. + vec2 warp=vec2(region-0.5,moisture-0.5)*110.0; + vec2 q=p+warp; + vec3 grass=texture(grass_detail,tile_uv(q/325.0+seed*0.013)).rgb; + vec3 soil=texture(soil_detail,tile_uv(vec2(q.y,-q.x)/245.0+seed*0.017)).rgb; + vec3 rock=texture(rock_detail,tile_uv((q*mat2(vec2(0.8,0.6),vec2(-0.6,0.8)))/360.0)).rgb; + vec3 sand=texture(sand_detail,tile_uv(vec2(-q.x,q.y)/235.0+vec2(0.37,0.18))).rgb; + vec3 moss=texture(moss_detail,tile_uv(q/210.0+seed*0.019)).rgb; + vec3 grass_base=mix(low_color.rgb,high_color.rgb,clamp(region*0.75+smoothstep(0.3,0.7,h)*0.25,0.0,1.0)); + vec3 grass_surface=grass_base*(0.57+luminance(grass)*1.18); + vec3 soil_surface=mix(sand_color.rgb*0.58,soil*0.85,0.5)*(0.9+fine*0.16); + vec3 rock_surface=rock_color.rgb*(0.55+luminance(rock)*1.05); + vec3 sand_surface=sand_color.rgb*(0.54+luminance(sand)*0.86); + vec3 moss_surface=mix(low_color.rgb*0.82,vec3(0.2,0.32,0.16),0.2)*(0.63+luminance(moss)*1.1); + float vegetation=smoothstep(0.28,0.66,region*0.55+moisture*0.45); + float wetness=smoothstep(0.42,0.70,moisture); + float arid=biome_kind==4 ? 1.0 : 0.0; + if(biome_kind==2) { vegetation*=0.82; wetness=min(1.0,wetness+0.35); } + if(biome_kind==3) { vegetation*=0.65; } + if(biome_kind==5) { vegetation*=0.35; } + vegetation*=1.0-arid*0.8; + // Exposed soil, low vegetation and moss form distinct local patches. + vegetation*=1.0-smoothstep(0.58,0.76,patches)*0.72; + vec3 land=mix(soil_surface,grass_surface,vegetation); + land=mix(land,moss_surface,wetness*vegetation*0.72); + float sand_patches=smoothstep(0.42,0.7,patches)*(1.0-moisture); + land=mix(land,sand_surface,sand_patches*(0.22+arid*0.78)); + float stone=max(smoothstep(0.59,0.77,h+patches*0.045),clamp(length(vec2(slope_x,slope_y))*9.0,0.0,0.7)); + land=mix(land,rock_surface,stone); + // Small scree and gravel pockets below the main rock formations. + float scree=smoothstep(0.67,0.79,patches)*smoothstep(0.36,0.62,h)*0.45; + land=mix(land,rock_surface,scree); + if(climate< -10.0) { + float snow=smoothstep(0.46,0.73,h+(region-0.5)*0.13); + vec3 snow_surface=vec3(0.83,0.89,0.87)*(0.83+luminance(sand)*0.28); + land=mix(land,snow_surface,snow); + } + vec3 shore=mix(sand_surface,land,smoothstep(0.28,0.33,h)); + float lake=1.0-smoothstep(0.265,0.278,h); + float depth=clamp((0.274-h)*8.0,0.0,1.0); + vec3 water=mix(vec3(0.23,0.42,0.39),vec3(0.08,0.22,0.27),depth); + water+=(fine-0.5)*0.012; + COLOR=vec4(mix(shore*shade,water,lake),1.0); +} diff --git a/resources/effects/planet_terrain.gdshader.uid b/resources/effects/planet_terrain.gdshader.uid new file mode 100644 index 0000000..b10ae20 --- /dev/null +++ b/resources/effects/planet_terrain.gdshader.uid @@ -0,0 +1 @@ +uid://6xexfq8vw32q diff --git a/scripts/captain/captain_progress.gd b/scripts/captain/captain_progress.gd index 8a21dd9..6fc240a 100644 --- a/scripts/captain/captain_progress.gd +++ b/scripts/captain/captain_progress.gd @@ -11,6 +11,10 @@ const MAX_LUCK_CHANCE := 0.60 @export var credits: int = 0 @export var parts: float = 0.0 @export var minerals: Dictionary = {"uranium": 0, "titanium": 0, "iron": 0, "aluminium": 0, "sulfur": 0} +@export var expedition: Resource = preload("res://scripts/planets/planet_progress.gd").new() +@export var gear_items: Array[Dictionary] = [] +@export var gear_slots: Dictionary = {} +@export var gear_next_uid := 1 @export var learning_points: int = 0 @export var skills: Dictionary = {} @export var equipped_skills: Array[String] = ["", "", "", "", ""] @@ -22,6 +26,7 @@ var _skill_rng := RandomNumberGenerator.new() func _init() -> void: _skill_rng.randomize() + preload("res://scripts/planets/captain_equipment.gd").initialize(self) func get_xp_required() -> int: return BALANCE.xp_required(level) diff --git a/scripts/game/flight_hud.gd b/scripts/game/flight_hud.gd index 7584f49..b5ab302 100644 --- a/scripts/game/flight_hud.gd +++ b/scripts/game/flight_hud.gd @@ -176,6 +176,10 @@ func _create_sidebar() -> void: _captain_panel.position = Vector2(12, 12) _captain_panel.size = Vector2(244, _captain_panel.get_combined_minimum_size().y) _captain_panel.resized.connect(_layout_debug) + var captain_gear := PanelContainer.new() + captain_gear.name = "CaptainEquipment" + captain_gear.set_script(preload("res://scripts/ui/captain_equipment_panel.gd")) + $HUDRoot.add_child(captain_gear) _passive_captain_panel = _create_passive_panel("PassiveCaptainPanel", "KAPITAN · PASYWNE") _passive_skills = _passive_captain_panel.get_node("Contents/Icons") as GridContainer _passive_skills.name = "PassiveCaptainSkills" diff --git a/scripts/game/flight_movement.gd b/scripts/game/flight_movement.gd new file mode 100644 index 0000000..d398726 --- /dev/null +++ b/scripts/game/flight_movement.gd @@ -0,0 +1,31 @@ +extends RefCounted +## Common steering math for the ship and surface lander. +static func apply(body: Object, delta: float, turn: float, thrust: bool, brake: bool, strafe: float, boost: bool, was_boosting: bool, allowed_speed: float) -> void: + if not is_zero_approx(turn): + body.angular_velocity = move_toward(body.angular_velocity, turn * body.max_turn_speed, body.turn_acceleration * delta) + else: + body.angular_velocity = move_toward(body.angular_velocity, 0.0, body.turn_damping * delta) + body.rotation += body.angular_velocity * delta + var forward := Vector2.UP.rotated(body.rotation) + if brake: + if body.velocity.dot(forward) > 0.0: + body.velocity = body.velocity.move_toward(Vector2.ZERO, body.brake_acceleration * delta) + else: + body.velocity -= forward * body.thrust_acceleration * delta + var reverse_speed: float = body.velocity.dot(forward) + if reverse_speed < -body.reverse_max_speed: + body.velocity += forward * (-body.reverse_max_speed - reverse_speed) + elif thrust or boost: + body.velocity += forward * body.thrust_acceleration * (2.0 if boost else 1.0) * delta + var forward_speed: float = body.velocity.dot(forward) + if forward_speed > allowed_speed and not was_boosting: + body.velocity += forward * (allowed_speed - forward_speed) + var right := Vector2.RIGHT.rotated(body.rotation) + if not is_zero_approx(strafe): + body.velocity += right * strafe * body.thrust_acceleration * delta + var strafe_speed: float = body.velocity.dot(right) + body.velocity += right * (clampf(strafe_speed, -body.max_strafe_speed, body.max_strafe_speed) - strafe_speed) + if not was_boosting and not boost and not brake and not thrust and is_zero_approx(strafe): + body.velocity = body.velocity.move_toward(Vector2.ZERO, body.space_drag * delta) + if body.velocity.length_squared() > allowed_speed * allowed_speed: + body.velocity = body.velocity.normalized() * allowed_speed diff --git a/scripts/game/flight_movement.gd.uid b/scripts/game/flight_movement.gd.uid new file mode 100644 index 0000000..9d17d46 --- /dev/null +++ b/scripts/game/flight_movement.gd.uid @@ -0,0 +1 @@ +uid://im5jldn3ew0t diff --git a/scripts/game/game.gd b/scripts/game/game.gd index a241d87..346d6e9 100644 --- a/scripts/game/game.gd +++ b/scripts/game/game.gd @@ -52,6 +52,11 @@ func _ready() -> void: services_menu.set("planet", protected_planet) $HUD/HUDRoot.add_child(services_menu) services_menu.connect("next_level_requested", open_wormhole) + var expeditions := Node.new() + expeditions.set_script(preload("res://scripts/planets/expedition_controller.gd")) + expeditions.game = self + expeditions.player = player + add_child(expeditions) func _spawn_celestial_bodies() -> void: var bodies := Node2D.new() @@ -83,6 +88,8 @@ func _spawn_celestial_bodies() -> void: planet.set("light_source", star) planet.set("radius", data["radius"]) planet.set("is_protected", data["protected"]) + planet.set("earthlike", bool(data.get("earthlike", false))) + planet.set("planet_profile", data.get("profile", {})) bodies.add_child(planet) if data["protected"]: protected_planet = planet diff --git a/scripts/game/ship_controller.gd b/scripts/game/ship_controller.gd index 694a599..3cb7ecc 100644 --- a/scripts/game/ship_controller.gd +++ b/scripts/game/ship_controller.gd @@ -54,6 +54,7 @@ var _sprite: Sprite2D var _contact_damage_timer := 0.0 var _is_destroyed := false var is_docked := false +var landing_combat_lock := 0.0 var _boost_speed := 0.0 var _boost_target := 0.0 var _boost_acceleration := 0.0 @@ -147,6 +148,8 @@ func _ensure_input_action(action_name: StringName, physical_key: Key) -> void: InputMap.action_add_event(action_name, event) func take_damage(amount: float, _critical: bool = false, damage_type: int = DamageTypes.Type.KINETIC) -> void: + if amount > 0 and not is_docked: + landing_combat_lock = 6.0 if _is_destroyed or is_docked or amount <= 0.0: return var hit := COMBAT_ROLLS.incoming_hit(amount * (1.0 - absorption[damage_type] / 100.0), get_evasion_chance(), get_damage_reduction()) @@ -318,6 +321,7 @@ func _restart_level_after_destruction() -> void: get_tree().reload_current_scene.call_deferred() func _physics_process(delta: float) -> void: + landing_combat_lock = maxf(0, landing_combat_lock - delta) _sync_virus_allies() if not _is_destroyed: GameState.captain.tick_skills(delta) @@ -351,52 +355,13 @@ func _physics_process(delta: float) -> void: shields = minf(max_shields, shields + shield_regeneration * delta) if shields != previous_shields: _update_shield_visual() - var turn_input := Input.get_axis("ship_turn_left", "ship_turn_right") - if not is_zero_approx(turn_input): - angular_velocity = move_toward( - angular_velocity, - turn_input * max_turn_speed, - turn_acceleration * delta - ) - else: - angular_velocity = move_toward(angular_velocity, 0.0, turn_damping * delta) - rotation += angular_velocity * delta - - var forward := Vector2.UP.rotated(rotation) - if Input.is_action_pressed("ship_brake"): - var forward_speed := velocity.dot(forward) - if forward_speed > 0.0: - velocity = velocity.move_toward(Vector2.ZERO, brake_acceleration * delta) - else: - velocity -= forward * thrust_acceleration * delta - var reverse_speed := velocity.dot(forward) - if reverse_speed < -reverse_max_speed: - velocity += forward * (-reverse_max_speed - reverse_speed) - elif Input.is_action_pressed("ship_thrust") or _mini_boost_active: - velocity += forward * thrust_acceleration * (2.0 if _mini_boost_active else 1.0) * delta - var forward_speed := velocity.dot(forward) - var forward_limit := _get_allowed_speed() - if forward_speed > forward_limit and not was_boosting: - velocity += forward * (forward_limit - forward_speed) - - var strafe_input := Input.get_axis("ship_strafe_left", "ship_strafe_right") - var right := Vector2.RIGHT.rotated(rotation) - if not is_zero_approx(strafe_input): - velocity += right * strafe_input * thrust_acceleration * delta - var strafe_speed := velocity.dot(right) - velocity += right * (clampf(strafe_speed, -max_strafe_speed, max_strafe_speed) - strafe_speed) - - if ( - not was_boosting - and not _mini_boost_active - and - not Input.is_action_pressed("ship_brake") - and not Input.is_action_pressed("ship_thrust") - and is_zero_approx(strafe_input) - ): - velocity = velocity.move_toward(Vector2.ZERO, space_drag * delta) - - _clamp_velocity_to_max_speed() + preload("res://scripts/game/flight_movement.gd").apply( + self, delta, + Input.get_axis("ship_turn_left", "ship_turn_right"), + Input.is_action_pressed("ship_thrust"), + Input.is_action_pressed("ship_brake"), + Input.get_axis("ship_strafe_left", "ship_strafe_right"), + _mini_boost_active, was_boosting, _get_allowed_speed()) move_and_slide() _check_enemy_collisions() _clamp_velocity_to_max_speed() diff --git a/scripts/game/ship_engine_audio.gd b/scripts/game/ship_engine_audio.gd index 0c293e1..a3865d1 100644 --- a/scripts/game/ship_engine_audio.gd +++ b/scripts/game/ship_engine_audio.gd @@ -5,10 +5,11 @@ const SILENT_VOLUME_DB := -60.0 const THRUST_VOLUME_DB := -11.0 const VOLUME_FADE_DB_PER_SECOND := 68.0 -var _ship: CharacterBody2D +var _ship: Node +var thrust_source: Node func _ready() -> void: - _ship = get_parent() as CharacterBody2D + _ship = thrust_source if is_instance_valid(thrust_source) else get_parent() var engine_stream := load(ENGINE_SOUND_PATH) as AudioStreamMP3 if engine_stream == null: push_error("Could not decode engine sound: %s" % ENGINE_SOUND_PATH) @@ -24,9 +25,11 @@ func _process(delta: float) -> void: if stream == null or not is_instance_valid(_ship): return - var thrust_active := Input.is_action_pressed("ship_thrust") or bool(_ship.call("is_mini_boosting")) - if bool(_ship.get("_is_destroyed")): - thrust_active = false + var thrust_active := false + if _ship.has_method("engine_thrust_active"): + thrust_active = bool(_ship.call("engine_thrust_active")) + else: + thrust_active = (Input.is_action_pressed("ship_thrust") or bool(_ship.call("is_mini_boosting"))) and not bool(_ship.get("_is_destroyed")) var target_volume := THRUST_VOLUME_DB if thrust_active else SILENT_VOLUME_DB volume_db = move_toward(volume_db, target_volume, VOLUME_FADE_DB_PER_SECOND * delta) var target_pitch := 1.12 if thrust_active else 0.86 diff --git a/scripts/game/weapon_controller.gd b/scripts/game/weapon_controller.gd index 4a74e79..fdf7531 100644 --- a/scripts/game/weapon_controller.gd +++ b/scripts/game/weapon_controller.gd @@ -204,6 +204,7 @@ func _fire_laser(slot_index: int, item: ItemInstance) -> void: _shot_timers[slot_index] = definition.fire_interval func _break_cloak_on_fire() -> void: + ship.landing_combat_lock = 6.0 var systems := ship.get_node_or_null("ExtensionSystems") if systems != null: systems.call("break_cloak_on_fire") diff --git a/scripts/levels/celestial_body.gd b/scripts/levels/celestial_body.gd index 08b6a93..3ad4f7b 100644 --- a/scripts/levels/celestial_body.gd +++ b/scripts/levels/celestial_body.gd @@ -7,6 +7,8 @@ var radius := 100.0 var is_star := false var is_protected := false var is_safe := false +var earthlike := false +var planet_profile: Dictionary = {} var _label: Label var _sprite: Sprite2D @@ -63,8 +65,12 @@ func _update_label() -> void: else: _label.text = display_name _label.add_theme_color_override("font_color", Color("9baec6")) + if earthlike: + _label.text += "\nEARTHLIKE · LĄDOWANIE" func _draw() -> void: + if earthlike: + draw_arc(Vector2.ZERO, radius + 9.0, -0.9, 0.9, 24, Color("7ddac7"), 2.0, true) if is_protected: var color := Color("77e8bc") if is_safe else Color("ffbd83") draw_arc(Vector2.ZERO, radius + 20.0, 0, TAU, 96, Color(color, 0.65), 2.0, true) diff --git a/scripts/levels/system_generator.gd b/scripts/levels/system_generator.gd index 053ce5a..da658c1 100644 --- a/scripts/levels/system_generator.gd +++ b/scripts/levels/system_generator.gd @@ -41,6 +41,13 @@ static func generate(level: int, seed_value: int) -> Dictionary: "texture": PLANET_TEXTURES[texture_rng.randi_range(0, PLANET_TEXTURES.size() - 1)], "protected": index == protected_index, }) + var profiles := preload("res://scripts/planets/planet_profiles.gd") + var earthlike := profiles.earthlike_textures() + for index in planets.size(): + if bool(planets[index].protected): + planets[index].texture = earthlike[texture_rng.randi_range(0, earthlike.size() - 1)] + planets[index].earthlike = profiles.is_earthlike(planets[index].texture) + planets[index].profile = profiles.generate(seed_value, index, planets[index].name) if bool(planets[index].earthlike) else {} var enemies: Array[Dictionary] = [] var ship_rng := RandomNumberGenerator.new() ship_rng.seed = seed_value ^ (level * 0x53484950) diff --git a/scripts/planets/captain_equipment.gd b/scripts/planets/captain_equipment.gd new file mode 100644 index 0000000..69427a9 --- /dev/null +++ b/scripts/planets/captain_equipment.gd @@ -0,0 +1,91 @@ +extends RefCounted +const KINDS := ["breathing", "suit", "sidearm"] +const NAMES := {"breathing": "System oddychania", "suit": "Skafander", "sidearm": "Broń ręczna"} +const COLORS := {"breathing": Color("79d9e8"), "suit": Color("efbb7b"), "sidearm": Color("bca0ef")} +const MATERIAL_NAMES := {"silicon": "Krzem", "copper": "Miedź", "nickel": "Nikiel", "tungsten": "Wolfram", "mercury": "Rtęć"} + +static func icon(kind: String) -> Texture2D: + return load("res://assets/planets/%s.png" % kind) as Texture2D + +static func initialize(captain: Resource) -> void: + if not captain.gear_items.is_empty(): + return + for index in KINDS.size(): + var kind: String = KINDS[index] + captain.gear_items.append({"uid": index + 1, "kind": kind, "level": 1}) + captain.gear_slots[kind] = index + 1 + captain.gear_next_uid = 4 + +static func item(captain: Resource, uid: int) -> Dictionary: + for gear in captain.gear_items: + if int(gear.uid) == uid: + return gear + return {} + +static func equipped(captain: Resource, kind: String) -> Dictionary: + return item(captain, int(captain.gear_slots.get(kind, -1))) + +static func level(captain: Resource, kind: String) -> int: + return int(equipped(captain, kind).get("level", 0)) + +static func equip(captain: Resource, kind: String, uid: int) -> bool: + var gear := item(captain, uid) + if gear.is_empty() or str(gear.kind) != kind or not kind in KINDS: + return false + captain.gear_slots[kind] = uid + captain.emit_changed() + return true + +static func unequip(captain: Resource, kind: String) -> void: + captain.gear_slots.erase(kind) + captain.emit_changed() + +static func next_level(captain: Resource, kind: String) -> int: + var highest := 0 + for gear in captain.gear_items: + if gear.kind == kind: + highest = maxi(highest, int(gear.level)) + return highest + 1 + +static func recipe(kind: String, target_level: int) -> Dictionary: + var amount := maxi(1, target_level) + match kind: + "breathing": return {"parts": 5 * amount, "silicon": 2 * amount, "copper": amount} + "suit": return {"parts": 5 * amount, "nickel": 2 * amount, "iron": 3 * amount} + "sidearm": return {"parts": 5 * amount, "tungsten": amount, "titanium": 2 * amount} + return {} + +static func can_craft(captain: Resource, kind: String) -> bool: + var cost := recipe(kind, next_level(captain, kind)) + if cost.is_empty(): + return false + for key in cost: + if (captain.parts if key == "parts" else float(captain.minerals.get(key, 0))) < cost[key]: + return false + return true + +static func craft(captain: Resource, kind: String) -> Dictionary: + if not can_craft(captain, kind): + return {} + var target := next_level(captain, kind) + var cost := recipe(kind, target) + for key in cost: + if key == "parts": + captain.parts -= cost[key] + else: + captain.minerals[key] = int(captain.minerals.get(key, 0)) - cost[key] + var gear := {"uid": captain.gear_next_uid, "kind": kind, "level": target} + captain.gear_next_uid += 1 + captain.gear_items.append(gear) + captain.emit_changed() + return gear + +static func recipe_text(captain: Resource, kind: String) -> String: + var names: Dictionary = preload("res://scripts/items/crafting_recipes.gd").NAMES.duplicate() + names.merge(MATERIAL_NAMES) + names.parts = "Części" + var pieces: PackedStringArray = [] + var cost := recipe(kind, next_level(captain, kind)) + for key in cost: + pieces.append("%s: %d" % [names.get(key, key), cost[key]]) + return " · ".join(pieces) diff --git a/scripts/planets/captain_equipment.gd.uid b/scripts/planets/captain_equipment.gd.uid new file mode 100644 index 0000000..5835f4a --- /dev/null +++ b/scripts/planets/captain_equipment.gd.uid @@ -0,0 +1 @@ +uid://bisbjhllgup78 diff --git a/scripts/planets/expedition_controller.gd b/scripts/planets/expedition_controller.gd new file mode 100644 index 0000000..126f577 --- /dev/null +++ b/scripts/planets/expedition_controller.gd @@ -0,0 +1,230 @@ +extends Node +const UI := preload("res://scripts/planets/expedition_ui.gd") +var game: Node2D +var player: CharacterBody2D +var freighter: Node2D +var screen: Control +var _layer: CanvasLayer +var _prompt: PanelContainer +var _text: Label +var _scan_button: Button +var _land_button: Button +var _near_planet: Node2D +var _message := "" +var _message_time := 0.0 +var _previous_pause := false +var _previous_docked := false +var _hud_was_visible := true +var _prompt_refresh_time := 0.0 + +func _ready() -> void: + process_mode = Node.PROCESS_MODE_ALWAYS + name = "PlanetExpeditions" + get_tree().auto_accept_quit = false + freighter = Node2D.new() + freighter.name = "Freighter" + freighter.position = Vector2(480,-270) + game.add_child(freighter) + var sprite := Sprite2D.new() + sprite.texture = preload("res://assets/planets/freighter.png") + sprite.scale = Vector2.ONE * 190.0 / maxf(sprite.texture.get_width(),sprite.texture.get_height()) + freighter.add_child(sprite) + var label := Label.new() + label.text = "FRACHTOWIEC [L]" + label.position = Vector2(-95,75) + label.add_theme_font_size_override("font_size",15) + label.add_theme_color_override("font_color",UI.CYAN) + freighter.add_child(label) + _layer = CanvasLayer.new() + _layer.layer = 60 + add_child(_layer) + _prompt = UI.panel(_layer,Vector2(440,0)) + var column := VBoxContainer.new() + _prompt.add_child(column) + _text = UI.label(column,"",14) + _text.custom_minimum_size.x = 420 + _text.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + var row := HBoxContainer.new() + column.add_child(row) + _scan_button = UI.button(row,"SKANUJ [F]",scan_nearby) + _land_button = UI.button(row,"LĄDUJ [L]",land_nearby) + _prompt.hide() + get_viewport().size_changed.connect(_layout_prompt) + +func combat_blocked() -> bool: + if float(player.get("landing_combat_lock")) > 0: + return true + for enemy in get_tree().get_nodes_in_group("enemies"): + if enemy is Node2D and player.global_position.distance_to(enemy.global_position) < 650: + return true + return false + +func _process(delta: float) -> void: + _message_time = maxf(0, _message_time - delta) + if is_instance_valid(screen) or get_tree().paused or bool(player.get("_is_destroyed")): + _prompt.hide() + return + _prompt_refresh_time += delta + # Proximity hints do not need to rebuild at the rendering frame rate. + if delta > 0 and _prompt_refresh_time < 0.1: + return + _prompt_refresh_time = 0 + _refresh_prompt() + +func _refresh_prompt() -> void: + _near_planet = null + var best := INF + for planet in get_tree().get_nodes_in_group("scanner_planets"): + if not bool(planet.get("earthlike")): + continue + var distance: float = player.global_position.distance_to(planet.global_position) - float(planet.get("radius")) + if distance < 190 and distance < best: + best = distance + _near_planet = planet + var nearby_freighter := player.global_position.distance_squared_to(freighter.global_position) < 230.0 * 230.0 + var has_destination := nearby_freighter or is_instance_valid(_near_planet) + if not has_destination and _message_time <= 0: + _prompt.hide() + # Never accumulate combat text while the hint is hidden. + if not _text.text.is_empty(): + _text.text = "" + return + var blocked := combat_blocked() + if blocked: + _prompt.hide() + return + var text := "" + if _message_time > 0: + text = _message + elif nearby_freighter: + text = "FRACHTOWIEC · Hangar / Warsztat / Laboratorium" + else: + var profile: Dictionary = _near_planet.planet_profile + if GameState.captain.expedition.scans.has(profile.id): + text = preload("res://scripts/planets/planet_profiles.gd").scan_description(profile,GameState.captain) + else: + text = "%s / EARTHLIKE\nZeskanuj warunki przed lądowaniem." % profile.name + if blocked and _message_time <= 0: + text += "\nDokowanie i lądowanie zablokowane podczas walki." + var changed := _text.text != text or _scan_button.visible != (is_instance_valid(_near_planet) and not nearby_freighter) or _land_button.visible != has_destination + if _text.text != text: + _text.text = text + _scan_button.visible = is_instance_valid(_near_planet) and not nearby_freighter + _land_button.visible = has_destination + _land_button.text = "DOKUJ [L]" if nearby_freighter else "LĄDUJ [L]" + _land_button.disabled = blocked + _prompt.show() + if changed: + # A standalone PanelContainer otherwise keeps its previous large height. + _layout_prompt.call_deferred() + +func _layout_prompt() -> void: + if not is_instance_valid(_prompt): + return + _prompt.size = Vector2(460, _prompt.get_combined_minimum_size().y) + var viewport_size := get_viewport().get_visible_rect().size + _prompt.position = Vector2((viewport_size.x - _prompt.size.x) * 0.5, maxf(16, viewport_size.y - _prompt.size.y - 160)) + + +func _unhandled_key_input(event: InputEvent) -> void: + if is_instance_valid(screen) or get_tree().paused or not event.pressed or event.echo: + return + if event.keycode == KEY_F: + scan_nearby() + elif event.keycode == KEY_L: + land_nearby() + else: + return + get_viewport().set_input_as_handled() + +func scan_nearby() -> void: + _refresh_prompt() + if not is_instance_valid(_near_planet): + return + GameState.captain.expedition.scan(_near_planet.planet_profile) + _message_time = 0 + _refresh_prompt() + +func land_nearby() -> void: + _refresh_prompt() + if is_instance_valid(screen) or bool(player.get("_is_destroyed")): + return + if combat_blocked(): + _notice("Odsuń się od przeciwników i zakończ walkę.") + return + if player.global_position.distance_to(freighter.global_position) < 230: + open_freighter() + return + if not is_instance_valid(_near_planet): + return + var progress: Resource = GameState.captain.expedition + if not progress.scans.has(_near_planet.planet_profile.id): + scan_nearby() + return + if not progress.begin_visit(_near_planet.planet_profile): + _notice("Lądownik wymaga naprawy do 100% we frachtowcu.") + return + _enter() + screen = Control.new() + screen.set_script(preload("res://scripts/planets/surface_screen.gd")) + screen.captain = GameState.captain + screen.progress = progress + screen.flight_ship = player + screen.finished.connect(finish_surface) + _layer.add_child(screen) + +func open_freighter() -> void: + _enter() + screen = Control.new() + screen.set_script(preload("res://scripts/planets/freighter_screen.gd")) + screen.captain = GameState.captain + screen.inventory = player.get_node("ShipInventory") + screen.closed.connect(_leave) + _layer.add_child(screen) + +func _enter() -> void: + _previous_pause = get_tree().paused + _previous_docked = player.is_docked + _hud_was_visible = game.get_node("HUD/HUDRoot").visible + game.get_node("HUD/HUDRoot").hide() + player.is_docked = true + player.velocity = Vector2.ZERO + get_tree().paused = true + _prompt.hide() + +func finish_surface(success: bool) -> void: + var progress: Resource = GameState.captain.expedition + var result: Dictionary = progress.finish_visit(GameState.captain,success) + progress.deliver_modules(player.get_node("ShipInventory")) + _leave() + var cargo_text := UI.material_text(result.get("materials",{})) + _notice(("POWRÓT Z WYPRAWY · " + (cargo_text if not cargo_text.is_empty() else "brak łupu")) if result.get("success",false) else "LĄDOWNIK ZNISZCZONY · Utracono łup bieżącej wyprawy.") + if not progress.delivered_modules.is_empty(): + _message += "\nBrak miejsca: %d modułów czeka we frachtowcu." % progress.delivered_modules.size() + +func _leave() -> void: + if is_instance_valid(screen): + _layer.remove_child(screen) + screen.queue_free() + screen = null + player.is_docked = _previous_docked + game.get_node("HUD/HUDRoot").visible = _hud_was_visible + get_tree().paused = _previous_pause + +func _notice(message: String) -> void: + _message = message + _message_time = 7 + _prompt_refresh_time = 0.1 + +func _notification(what: int) -> void: + if what == NOTIFICATION_WM_CLOSE_REQUEST: + if GameState.captain.expedition.active: + GameState.captain.expedition.finish_visit(GameState.captain,true) + get_tree().quit() + +func _exit_tree() -> void: + if is_instance_valid(GameState.captain) and GameState.captain.expedition.active: + GameState.captain.expedition.finish_visit(GameState.captain,true) + if is_instance_valid(screen): + get_tree().paused = _previous_pause + get_tree().auto_accept_quit = true diff --git a/scripts/planets/expedition_controller.gd.uid b/scripts/planets/expedition_controller.gd.uid new file mode 100644 index 0000000..45953a9 --- /dev/null +++ b/scripts/planets/expedition_controller.gd.uid @@ -0,0 +1 @@ +uid://c5moorsw4rrn7 diff --git a/scripts/planets/expedition_ui.gd b/scripts/planets/expedition_ui.gd new file mode 100644 index 0000000..eea4ef4 --- /dev/null +++ b/scripts/planets/expedition_ui.gd @@ -0,0 +1,52 @@ +extends Control +## Shared, compact visual vocabulary for the expedition screens. +const INK := Color("#08151f") +const CYAN := Color("#81dce4") +static func panel(parent: Node, minimum := Vector2.ZERO) -> PanelContainer: + var node := PanelContainer.new() + node.custom_minimum_size = minimum + var style := StyleBoxFlat.new() + style.bg_color = Color(0.025, 0.065, 0.095, 0.96) + style.border_color = Color("#345763") + style.set_border_width_all(1) + style.set_corner_radius_all(12) + style.content_margin_left = 20 + style.content_margin_right = 20 + style.content_margin_top = 16 + style.content_margin_bottom = 16 + node.add_theme_stylebox_override("panel", style) + parent.add_child(node) + return node +static func label(parent: Node, text: String, size := 16, color := Color("#d5e4e8")) -> Label: + var node := Label.new() + node.text = text + node.add_theme_font_size_override("font_size", size) + node.add_theme_color_override("font_color", color) + parent.add_child(node) + return node +static func button(parent: Node, text: String, action: Callable) -> Button: + var node := Button.new() + node.text = text + node.custom_minimum_size.y = 40 + node.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND + for state in ["normal", "hover", "pressed", "disabled"]: + var style := StyleBoxFlat.new() + style.bg_color = Color("#15303e") if state == "normal" else Color("#235465") + if state == "disabled": + style.bg_color = Color("#101e26") + style.border_color = Color("#426d7d") if state != "hover" else CYAN + style.set_border_width_all(1) + style.set_corner_radius_all(6) + style.content_margin_left = 14 + style.content_margin_right = 14 + node.add_theme_stylebox_override(state, style) + node.pressed.connect(action) + parent.add_child(node) + return node +static func material_text(materials: Dictionary) -> String: + var names: Dictionary = preload("res://scripts/items/crafting_recipes.gd").NAMES.duplicate() + names.merge(preload("res://scripts/planets/captain_equipment.gd").MATERIAL_NAMES) + var pieces: PackedStringArray = [] + for key in materials: + pieces.append("%s: %d" % [names.get(key, key), materials[key]]) + return " · ".join(pieces) diff --git a/scripts/planets/expedition_ui.gd.uid b/scripts/planets/expedition_ui.gd.uid new file mode 100644 index 0000000..cb6cc73 --- /dev/null +++ b/scripts/planets/expedition_ui.gd.uid @@ -0,0 +1 @@ +uid://dklxtr80anap2 diff --git a/scripts/planets/freighter_screen.gd b/scripts/planets/freighter_screen.gd new file mode 100644 index 0000000..ada60bf --- /dev/null +++ b/scripts/planets/freighter_screen.gd @@ -0,0 +1,141 @@ +extends Control +signal closed +const UI := preload("res://scripts/planets/expedition_ui.gd") +const GEAR := preload("res://scripts/planets/captain_equipment.gd") +var captain: Resource +var inventory: Node +var _content: VBoxContainer +var _tab := "hangar" + +func _ready() -> void: + set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + var background := ColorRect.new() + background.color = Color("#050e18") + background.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + add_child(background) + var margin := MarginContainer.new() + margin.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + for side in ["left","right","top","bottom"]: + margin.add_theme_constant_override("margin_"+side, 30) + add_child(margin) + var rows := VBoxContainer.new() + rows.add_theme_constant_override("separation", 18) + margin.add_child(rows) + var header := HBoxContainer.new() + rows.add_child(header) + var title := UI.label(header, "FRACHTOWIEC / POKŁAD OPERACYJNY", 27, UI.CYAN) + title.size_flags_horizontal = Control.SIZE_EXPAND_FILL + UI.button(header, "ODLOT [L / ESC]", func(): closed.emit()) + var main := HBoxContainer.new() + main.add_theme_constant_override("separation", 25) + main.size_flags_vertical = Control.SIZE_EXPAND_FILL + rows.add_child(main) + var schematic := UI.panel(main, Vector2(300, 0)) + schematic.size_flags_horizontal = Control.SIZE_EXPAND_FILL + schematic.size_flags_stretch_ratio = 0.8 + var left := VBoxContainer.new() + left.add_theme_constant_override("separation", 14) + schematic.add_child(left) + UI.label(left, "TWÓJ MOBILNY PORT", 18, UI.CYAN) + var art := TextureRect.new() + art.texture = preload("res://assets/planets/freighter.png") + art.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + art.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + art.size_flags_vertical = Control.SIZE_EXPAND_FILL + art.custom_minimum_size = Vector2(260, 200) + left.add_child(art) + for entry in [["hangar","01 HANGAR"],["workshop","02 WARSZTAT"],["lab","03 LABORATORIUM"]]: + var key: String = entry[0] + UI.button(left, entry[1], func(): _tab = key; _refresh()) + UI.label(left, "Frachtowiec podąża do kolejnego układu.\nZasoby i wyposażenie należą do kapitana.", 13) + var right := UI.panel(main, Vector2(530, 0)) + right.size_flags_horizontal = Control.SIZE_EXPAND_FILL + var scroll := ScrollContainer.new() + scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED + right.add_child(scroll) + _content = VBoxContainer.new() + _content.size_flags_horizontal = Control.SIZE_EXPAND_FILL + _content.add_theme_constant_override("separation", 14) + scroll.add_child(_content) + UI.label(rows, "Kosmos czeka na Twój powrót. • Naprawa lądownika: 1 część za 1% HP.", 14) + _refresh() + +func _input(event: InputEvent) -> void: + if event is InputEventKey and event.pressed and not event.echo and event.keycode in [KEY_L, KEY_ESCAPE]: + closed.emit() + get_viewport().set_input_as_handled() + +func _refresh() -> void: + for child in _content.get_children(): + _content.remove_child(child) + child.queue_free() + var progress: Resource = captain.expedition + if _tab == "hangar": + UI.label(_content, "HANGAR / LĄDOWNIK", 24, UI.CYAN) + UI.label(_content, "Kadłub lądownika: %d / 100 HP" % ceili(progress.lander_hp), 19) + var bar := ProgressBar.new() + bar.value = progress.lander_hp + bar.custom_minimum_size.y = 25 + _content.add_child(bar) + var cost: int = progress.repair_cost() + UI.label(_content, "Części: %d · Koszt naprawy: %d" % [captain.parts, cost], 16) + var repair := UI.button(_content, "NAPRAW DO 100%% · %d części" % cost, func(): + progress.repair(captain) + _refresh()) + repair.disabled = cost == 0 or captain.parts < cost + UI.label(_content, "Lądowanie wymaga 100% sprawności.\nWejście w atmosferę zużywa 5–20 HP.\nZniszczenie lądownika zabiera tylko łup bieżącej wyprawy.", 15) + UI.label(_content, "MODUŁY DO ODEBRANIA: %d" % progress.delivered_modules.size(), 18, UI.CYAN) + var delivery := UI.button(_content, "Przenieś moduły do ładowni statku", func(): + progress.deliver_modules(inventory) + _refresh()) + delivery.disabled = progress.delivered_modules.is_empty() + UI.label(_content, "Jeśli ładownia jest pełna, moduły czekają na odbiór.", 13) + elif _tab == "workshop": + UI.label(_content, "WARSZTAT / EKWIPUNEK KAPITANA", 23, UI.CYAN) + UI.label(_content, "Wyższy poziom zwiększa szanse przy POI.\nSprzęt powstaje wyłącznie w warsztacie.", 15) + for kind in GEAR.KINDS: + var card := UI.panel(_content) + var row := HBoxContainer.new() + row.add_theme_constant_override("separation", 14) + card.add_child(row) + var icon := TextureRect.new() + icon.texture = GEAR.icon(kind) + icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + icon.custom_minimum_size = Vector2(70,70) + row.add_child(icon) + var column := VBoxContainer.new() + column.size_flags_horizontal = Control.SIZE_EXPAND_FILL + row.add_child(column) + UI.label(column, "%s · POZ. %d" % [GEAR.NAMES[kind], GEAR.next_level(captain,kind)], 18) + var recipe := UI.label(column, GEAR.recipe_text(captain,kind), 13) + recipe.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + var button := UI.button(column, "WYTWÓRZ I ZAŁÓŻ", _craft.bind(kind)) + button.disabled = not GEAR.can_craft(captain,kind) + UI.label(_content, "POSIADANE WYPOSAŻENIE", 18, UI.CYAN) + for gear in captain.gear_items: + var equipped: bool = captain.gear_slots.get(gear.kind,-1) == gear.uid + UI.button(_content, "%s · poziom %d%s" % [GEAR.NAMES[gear.kind],gear.level," [ZAŁOŻONE]" if equipped else " — ZAŁÓŻ"], _equip.bind(gear.kind,gear.uid)).disabled = equipped + var stock := UI.label(_content, "ZASOBY: " + UI.material_text(captain.minerals) + " · Części: %d" % captain.parts, 13) + stock.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + else: + UI.label(_content, "LABORATORIUM / ARCHIWUM", 24, UI.CYAN) + UI.label(_content, "ZESKANOWANE PLANETY: %d" % progress.scans.size(), 17) + for profile in progress.scans.values(): + UI.label(_content, "%s · tlen %d%% · %d°C · flora %d" % [profile.name,profile.oxygen,profile.temperature,profile.flora], 15) + if progress.scans.is_empty(): + UI.label(_content, "Podleć do planety earthlike i wykonaj skan [F].", 15) + UI.label(_content, "ODZYSKANE ARCHIWA", 18, UI.CYAN) + for key in progress.research_records: + UI.label(_content, "%s ×%d" % [key,progress.research_records[key]], 15) + UI.label(_content, "Archiwa są przechowywane na przyszłe badania technologii.", 14) + +func _craft(kind: String) -> void: + var gear: Dictionary = GEAR.craft(captain,kind) + if not gear.is_empty(): + GEAR.equip(captain,kind,int(gear.uid)) + _refresh() + +func _equip(kind: String, uid: int) -> void: + GEAR.equip(captain,kind,uid) + _refresh() diff --git a/scripts/planets/freighter_screen.gd.uid b/scripts/planets/freighter_screen.gd.uid new file mode 100644 index 0000000..50d08ef --- /dev/null +++ b/scripts/planets/freighter_screen.gd.uid @@ -0,0 +1 @@ +uid://cgnd1b6cihwrq diff --git a/scripts/planets/lander_engine_visual.gd b/scripts/planets/lander_engine_visual.gd new file mode 100644 index 0000000..5c8d22b --- /dev/null +++ b/scripts/planets/lander_engine_visual.gd @@ -0,0 +1,41 @@ +extends Node2D +## Two lightweight exhaust plumes aligned with the lander's nozzles. +var source: Control +var nozzle_positions: Array[Vector2] = [Vector2(-30.5,32.0),Vector2(28.5,32.0)] +var _strength := 0.0 +var _phase := 0.0 +var _boost := false + +func _process(delta: float) -> void: + if not is_instance_valid(source): + return + var active: bool = source.engine_thrust_active() + _boost = source._motion.boost_active and active + var target := 1.0 if active else 0.0 + if _strength <= 0 and target == 0: + return + _phase += delta + _strength = move_toward(_strength,target,5.5*delta) + queue_redraw() + +func _draw() -> void: + if _strength <= 0.01: + return + var outer := Color("ff5919") if _boost else Color("218de8") + var inner := Color("ffbe52") if _boost else Color("50e5ff") + var core := Color("fff2cb") if _boost else Color("ddfbff") + for index in nozzle_positions.size(): + var mouth := nozzle_positions[index] + var flicker := 0.9 + 0.1*sin(_phase*31.0+index*1.7) + var length := (34.0 if _boost else 23.0)*_strength*flicker + draw_circle(mouth+Vector2(0,3),8.0*_strength,Color(outer,0.08*_strength)) + draw_circle(mouth,4.5,Color(inner,0.32*_strength)) + _plume(mouth,5.0,length,Color(outer,0.5*_strength)) + _plume(mouth,3.1,length*0.78,Color(inner,0.8*_strength)) + _plume(mouth,1.5,length*0.48,Color(core,0.95*_strength)) + +func _plume(mouth: Vector2, half_width: float, length: float, color: Color) -> void: + draw_colored_polygon(PackedVector2Array([ + mouth+Vector2(-half_width,-2), mouth+Vector2(-half_width*0.7,length*0.35), + mouth+Vector2(0,length),mouth+Vector2(half_width*0.7,length*0.35), + mouth+Vector2(half_width,-2)]),color) diff --git a/scripts/planets/lander_engine_visual.gd.uid b/scripts/planets/lander_engine_visual.gd.uid new file mode 100644 index 0000000..46a6b05 --- /dev/null +++ b/scripts/planets/lander_engine_visual.gd.uid @@ -0,0 +1 @@ +uid://bh0xy7gwvuxsa diff --git a/scripts/planets/lander_motion.gd b/scripts/planets/lander_motion.gd new file mode 100644 index 0000000..38b6d03 --- /dev/null +++ b/scripts/planets/lander_motion.gd @@ -0,0 +1,44 @@ +extends RefCounted +const FLIGHT := preload("res://scripts/game/flight_movement.gd") +var velocity := Vector2.ZERO +var rotation := 0.0 +var angular_velocity := 0.0 +var max_speed := 90.0 +var reverse_max_speed := 45.0 +var max_strafe_speed := 45.0 +var thrust_acceleration := 90.0 +var brake_acceleration := 180.0 +var space_drag := 16.0 +var max_turn_speed := 2.8 +var turn_acceleration := 7.0 +var turn_damping := 4.0 +var energy := 100.0 +var boost_active := false +var _exhausted := false +var _coast := 0.0 + +func configure(ship: Node) -> void: + for key in ["max_speed","reverse_max_speed","max_strafe_speed","thrust_acceleration","brake_acceleration","space_drag","max_turn_speed","turn_acceleration","turn_damping"]: + set(key, ship.get(key)) + +func step(delta: float, turn: float, thrust: bool, brake: bool, strafe: float, boost_pressed: bool) -> void: + energy = minf(100,energy + 5.0 * delta) + var previous := boost_active + boost_active = false + if not boost_pressed: + _exhausted = false + elif not _exhausted and not brake: + if energy < 20.0 * delta or energy <= 0: + _exhausted = true + else: + energy = maxf(0,energy-20.0*delta) + boost_active = true + if boost_active: + _coast = 0 + else: + if previous: + _coast = maxf(0,velocity.length()-max_speed) + _coast = move_toward(_coast,0,space_drag*delta) + FLIGHT.apply(self,delta,turn,thrust,brake,strafe,boost_active,false,max_speed*2 if boost_active else max_speed+_coast) + + rotation = wrapf(rotation,-PI,PI) diff --git a/scripts/planets/lander_motion.gd.uid b/scripts/planets/lander_motion.gd.uid new file mode 100644 index 0000000..ffb3f5d --- /dev/null +++ b/scripts/planets/lander_motion.gd.uid @@ -0,0 +1 @@ +uid://br0h3pmk25ceq diff --git a/scripts/planets/planet_profiles.gd b/scripts/planets/planet_profiles.gd new file mode 100644 index 0000000..18c8cdb --- /dev/null +++ b/scripts/planets/planet_profiles.gd @@ -0,0 +1,69 @@ +extends RefCounted +# These visually inspected families contain land, oceans and atmospheric clouds. +const EARTHLIKE_FAMILIES := ["Terrestrial", "Lush", "Tropical"] +const MATERIALS := ["silicon", "copper", "nickel", "tungsten", "mercury"] +const MATERIAL_NAMES := {"silicon": "Krzem", "copper": "Miedź", "nickel": "Nikiel", "tungsten": "Wolfram", "mercury": "Rtęć"} + +static func is_earthlike(texture: Texture2D) -> bool: + if texture == null: + return false + for family in EARTHLIKE_FAMILIES: + if texture.resource_path.contains("/Solid/%s/" % family): + return true + return false + +static func earthlike_textures() -> Array[Texture2D]: + var found: Array[Texture2D] = [] + for texture in preload("res://scripts/levels/celestial_texture_catalog.gd").PLANET_TEXTURES: + if is_earthlike(texture): + found.append(texture) + return found + +static func generate(system_seed: int, index: int, name: String) -> Dictionary: + var rng := RandomNumberGenerator.new() + rng.seed = system_seed ^ (index * 0x504c414e) ^ 0x42494f4d + var easy := rng.randf() < 0.7 + var oxygen := rng.randi_range(81, 100) if easy else rng.randi_range(0, 80) + var temperature := rng.randi_range(-10, 40) if easy else rng.randi_range(-50, 100) + var flora := 0 if easy else rng.randi_range(5, 50) + var o := maxf(0.0, 80.0 - oxygen) / 80.0 + var t := maxf(0.0, maxf(-10.0 - temperature, temperature - 40.0)) / 60.0 + var f := float(flora) / 50.0 + var difficulty := clampf((o + t + f) / 3.0, 0, 1) + return {"id": "%d:planet:%d" % [system_seed, index], "name": name, "oxygen": oxygen, "temperature": temperature, "flora": flora, "easy": easy, "difficulty": difficulty, "landing_damage": roundi(lerpf(5.0, 20.0, difficulty)), "seed": rng.randi(), "index": index} + +static func success_chance(profile: Dictionary, captain: Resource, stage: int) -> float: + var gear := preload("res://scripts/planets/captain_equipment.gd") + var penalties := [ + maxf(0, 80.0 - float(profile.oxygen)) / 80.0, + maxf(0, maxf(-10.0 - float(profile.temperature), float(profile.temperature) - 40.0)) / 60.0, + float(profile.flora) / 50.0] + var environment := 0.0 + var equipment_bonus := 0.0 + for index in 3: + var rank: int = gear.level(captain, gear.KINDS[index]) + var protection := minf(0.8, maxf(0, rank - 1) * 0.06) + environment += penalties[index] * (1.0 - protection) / 3.0 + equipment_bonus += maxf(0, rank - 1) * 0.004 + var base: float = [0.90, 0.60, 0.35][clampi(stage, 0, 2)] + return clampf(base - environment * 0.35 + minf(0.12, equipment_bonus), 0.08, 0.98) + +static func biome_name(profile: Dictionary) -> String: + if bool(profile.easy): + return "Łagodna biosfera" + if int(profile.temperature) < -10: + return "Zimna biosfera" + if int(profile.temperature) > 40: + return "Gorąca biosfera" + return "Dzika biosfera" + +static func scan_description(profile: Dictionary, captain: Resource) -> String: + var oxygen := int(profile.oxygen) + var temperature := int(profile.temperature) + var flora := int(profile.flora) + var breathing := "dogodne oddychanie" if oxygen > 80 else "system oddychania poprawia szanse" + var climate := "łagodny klimat" if temperature >= -10 and temperature <= 40 else "skafander ogranicza ryzyko" + var biology := "brak zagrożeń biologicznych" if flora == 0 else "broń ręczna ogranicza zagrożenia" + return "%s · %s\nTLEN %d%% — %s\nTEMPERATURA %d°C — %s\nFLORA %d/50 — %s\nLądowanie: −%d HP · Lądownik: %d%%\nPierwszy etap POI: %d%% szans z obecnym sprzętem" % [ + profile.name,biome_name(profile),oxygen,breathing,temperature,climate,flora,biology, + profile.landing_damage,ceili(captain.expedition.lander_hp),roundi(success_chance(profile,captain,0)*100)] diff --git a/scripts/planets/planet_profiles.gd.uid b/scripts/planets/planet_profiles.gd.uid new file mode 100644 index 0000000..34f0619 --- /dev/null +++ b/scripts/planets/planet_profiles.gd.uid @@ -0,0 +1 @@ +uid://dhx8nl127dgsh diff --git a/scripts/planets/planet_progress.gd b/scripts/planets/planet_progress.gd new file mode 100644 index 0000000..53dbad2 --- /dev/null +++ b/scripts/planets/planet_progress.gd @@ -0,0 +1,157 @@ +extends Resource +const EQUIPMENT := preload("res://scripts/planets/captain_equipment.gd") +const PROFILES := preload("res://scripts/planets/planet_profiles.gd") +@export var lander_hp := 100.0 +@export var visits: Dictionary = {} +@export var scans: Dictionary = {} +@export var delivered_modules: Array[Resource] = [] +@export var research_records: Dictionary = {} +var active := false +var cargo: Dictionary = {} +var cargo_modules: Array[Resource] = [] +var cargo_records: Dictionary = {} +var active_profile: Dictionary = {} +var visit_seed := 0 +var last_result: Dictionary = {} + +func repair_cost() -> int: + return maxi(0, ceili(100.0 - lander_hp - 0.00001)) + +func repair(captain: Resource) -> bool: + var cost := repair_cost() + if active or captain.parts < cost: + return false + captain.parts -= cost + lander_hp = 100 + captain.emit_changed() + return true + +func scan(profile: Dictionary) -> void: + scans[str(profile.id)] = profile.duplicate(true) + emit_changed() + +func begin_visit(profile: Dictionary) -> bool: + if active or repair_cost() > 0: + return false + active_profile = profile.duplicate(true) + var count := int(visits.get(profile.id, 0)) + 1 + visits[profile.id] = count + visit_seed = int(profile.seed) ^ (count * 7919) + cargo.clear() + cargo_modules.clear() + cargo_records.clear() + active = true + lander_hp = maxf(0, lander_hp - float(profile.landing_damage)) + last_result.clear() + return true + +func damage(amount: float) -> void: + if active: + lander_hp = clampf(lander_hp - maxf(0, amount), 0, 100) + emit_changed() + +func add_material(key: String, amount: int) -> void: + if active and amount > 0: + cargo[key] = int(cargo.get(key, 0)) + amount + emit_changed() + +func resolve_poi(captain: Resource, poi: Dictionary, rng: RandomNumberGenerator) -> Dictionary: + if not active or bool(poi.get("complete", false)): + return {} + var stage := int(poi.get("stage", 0)) + var chance := PROFILES.success_chance(active_profile, captain, stage) + var success := rng.randf() < chance + var result := {"success": success, "chance": chance, "damage": 0, "materials": {}, "module": null} + if success: + var difficulty := float(active_profile.difficulty) + var multiplier := (1.0 + difficulty * 2.0) * (1.0 + stage * 0.65) + var ordinary: Array = ["iron", "titanium", "aluminium", "uranium", "sulfur"] + var pool: Array = PROFILES.MATERIALS if rng.randf() < 0.55 else ordinary + var key: String = pool[rng.randi_range(0, pool.size() - 1)] + var amount := maxi(1, roundi(rng.randi_range(5, 12) * multiplier)) + add_material(key, amount) + result.materials[key] = amount + if rng.randf() < 0.15 + difficulty * 0.25: + var generator := preload("res://scripts/items/item_generator.gd") + var definitions: Array = generator.DEFINITIONS.filter(func(d): return d.category != ItemDefinition.Category.WEAPON) + var level := mini(1000, GameState.system_level + roundi(difficulty * 6.0) + stage) + var item: ItemInstance = generator.generate_loot(level, 1 if difficulty > 0.5 or stage >= 2 else 0, definitions[rng.randi_range(0, definitions.size() - 1)]) + cargo_modules.append(item) + result.module = item + if str(poi.kind) == "ruins": + var record := "Archiwum %s" % str(active_profile.name) + cargo_records[record] = int(cargo_records.get(record, 0)) + 1 + poi.stage = stage + 1 + if int(poi.stage) >= 3: + poi.complete = true + else: + var loss := rng.randi_range(8, 15) + stage * 5 + roundi(float(active_profile.difficulty) * 10) + damage(loss) + result.damage = loss + # Failure closes this location; previously collected loot stays until return. + poi.complete = true + emit_changed() + return result + +func finish_visit(captain: Resource, success: bool) -> Dictionary: + if not active: + return last_result + success = success and lander_hp > 0 + var result := {"success": success, "materials": cargo.duplicate(), "modules": cargo_modules.size(), "hp": lander_hp} + if success: + for key in cargo: + captain.minerals[key] = int(captain.minerals.get(key, 0)) + int(cargo[key]) + delivered_modules.append_array(cargo_modules) + for key in cargo_records: + research_records[key] = int(research_records.get(key, 0)) + int(cargo_records[key]) + active = false + cargo.clear() + cargo_modules.clear() + cargo_records.clear() + active_profile.clear() + last_result = result + captain.emit_changed() + emit_changed() + return result + +func deliver_modules(inventory: Node) -> int: + var delivered := 0 + for index in range(delivered_modules.size() - 1, -1, -1): + if inventory.add_item(delivered_modules[index]): + delivered_modules.remove_at(index) + delivered += 1 + emit_changed() + return delivered + +const ENGINEER_PRICE := 100 +const ENGINEER_LEVEL_RATIO := 0.75 + +static func roll_engineer_bonus(rng: RandomNumberGenerator) -> int: + var total := 0.0 + for bonus in 21: + total += pow(ENGINEER_LEVEL_RATIO,bonus) + var roll := rng.randf()*total + for bonus in 21: + roll -= pow(ENGINEER_LEVEL_RATIO,bonus) + if roll < 0: + return bonus + return 20 + +func buy_engineer_offer(captain: Resource, event: Dictionary, rng: RandomNumberGenerator) -> Dictionary: + if not active or lander_hp <= 0 or str(event.get("kind","")) != "engineer" or bool(event.get("complete",false)): + return {"success":false,"reason":"Oferta jest już niedostępna."} + if captain.credits < ENGINEER_PRICE: + return {"success":false,"reason":"Potrzebujesz 100 kredytów."} + var generator := preload("res://scripts/items/item_generator.gd") + var categories := [ItemDefinition.Category.SHIELD,ItemDefinition.Category.ARMOR,ItemDefinition.Category.ENGINE,ItemDefinition.Category.REACTOR,ItemDefinition.Category.COMPUTER] + var definitions: Array = generator.DEFINITIONS.filter(func(definition): return definition.category in categories) + var level := mini(1000,GameState.system_level+roll_engineer_bonus(rng)) + # Generate the exact offered level; captain luck must not bypass the +20 limit. + var item: ItemInstance = generator.generate_for_definition(definitions[rng.randi_range(0,definitions.size()-1)],level,0) + captain.credits -= ENGINEER_PRICE + cargo_modules.append(item) + event.complete = true + captain.emit_changed() + emit_changed() + return {"success":true,"item":item} + diff --git a/scripts/planets/planet_progress.gd.uid b/scripts/planets/planet_progress.gd.uid new file mode 100644 index 0000000..b9d1488 --- /dev/null +++ b/scripts/planets/planet_progress.gd.uid @@ -0,0 +1 @@ +uid://0csb0b127wtj diff --git a/scripts/planets/surface_generator.gd b/scripts/planets/surface_generator.gd new file mode 100644 index 0000000..46cd21c --- /dev/null +++ b/scripts/planets/surface_generator.gd @@ -0,0 +1,91 @@ +extends RefCounted +const LANDSCAPE := preload("res://scripts/planets/surface_landscape.gd") +const GRID := 96 +const CELL := 40.0 +const WORLD_SIZE := GRID * CELL + +static func generate(seed_value: int, profile: Dictionary) -> Dictionary: + var rng := RandomNumberGenerator.new() + rng.seed = seed_value + var landscape := LANDSCAPE.choose(seed_value,profile) + var noise := FastNoiseLite.new() + noise.seed = seed_value + noise.frequency = 0.0008 + posmod(seed_value,8)*0.0001 + noise.fractal_octaves = 4 + var humidity := FastNoiseLite.new() + humidity.seed = seed_value ^ 0x464f5245 + humidity.frequency = 0.003 + var heights := PackedFloat32Array() + heights.resize(GRID * GRID) + for y in GRID: + for x in GRID: + var point := Vector2(x, y) * CELL - Vector2.ONE * WORLD_SIZE * 0.5 + var h := clampf(0.5 + noise.get_noise_2d(point.x, point.y) * 0.6, 0.0, 1.0) + if int(landscape.index) == 2: + h = 0.35 + noise.get_noise_2d(point.x,point.y)*0.45 + elif int(landscape.index) == 3: + h = 0.43 + absf(noise.get_noise_2d(point.x,point.y))*0.95 + if point.length() < 200: + h = lerpf(0.5, h, smoothstep(110, 200, point.length())) + heights[y * GRID + x] = h + var trees: Array[Dictionary] = [] + var mountains: Array[Dictionary] = [] + var rocks: Array[Dictionary] = [] + for y in range(2, GRID - 2, 2): + for x in range(2, GRID - 2, 2): + var point := Vector2(x, y) * CELL - Vector2.ONE * WORLD_SIZE * 0.5 + Vector2(rng.randf_range(-25, 25), rng.randf_range(-25, 25)) + var h: float = heights[y * GRID + x] + if point.length() < 190: + continue + if h > 0.66 and rng.randf() < 0.65: + mountains.append({"position": point, "size": rng.randf_range(110, 210), "rotation": rng.randf_range(-PI, PI)}) + elif h > 0.28 and h < 0.65 and humidity.get_noise_2d(point.x, point.y) > -0.12 and rng.randf() < float(landscape.density): + trees.append({"position": point, "size": rng.randf_range(65, 115), "rotation": rng.randf_range(-PI, PI), "shade": rng.randf_range(0.75, 1.1)}) + for index in 180: + var point := Vector2(rng.randf_range(-1750,1750),rng.randf_range(-1750,1750)) + var gx := clampi(int((point.x+1920)/CELL),0,GRID-1) + var gy := clampi(int((point.y+1920)/CELL),0,GRID-1) + if point.length() > 200 and heights[gy*GRID+gx] > 0.30: + rocks.append({"position":point,"size":rng.randf_range(14,45),"rotation":rng.randf_range(-PI,PI)}) + var pois: Array[Dictionary] = [] + for index in 8: + var kind: String = ["mine", "ruins", "deposit"][index % 3] + var chosen := Vector2.ZERO + var found := false + for attempt in 1500: + var x := rng.randi_range(5, GRID - 6) + var y := rng.randi_range(5, GRID - 6) + var h: float = heights[y * GRID + x] + var point := Vector2(x, y) * CELL - Vector2.ONE * WORLD_SIZE * 0.5 + if h < 0.29 or h > 0.71 or point.length() < 400: + continue + var clear := true + for other in pois: + if point.distance_to(other.position) < 420: + clear = false + if clear: + chosen = point + found = true + break + if not found: + # A lander can cross every terrain; a remote fallback never traps it. + chosen = Vector2.from_angle(index * TAU / 8) * 1250 + pois.append({"id": index, "kind": kind, "position": chosen, "stage": 0, "complete": false, "discovered": false}) + # Clear vegetation around explorable structures so entrances stay readable. + for poi in pois: + trees = trees.filter(func(prop): return prop.position.distance_to(poi.position) > 100) + mountains = mountains.filter(func(prop): return prop.position.distance_to(poi.position) > 120) + rocks = rocks.filter(func(prop): return prop.position.distance_to(poi.position) > 65) + var data := {"seed":seed_value,"heights":heights,"height_texture":LANDSCAPE.height_texture(heights),"landscape":landscape,"rocks":rocks,"trees":trees,"mountains":mountains,"pois":pois,"profile":profile.duplicate(true)} + preload("res://scripts/planets/surface_scenery.gd").generate(data,rng) + return data + +static func terrain_texture(data: Dictionary) -> ImageTexture: + # Only the minimap is baked. The world uses full-resolution GPU terrain shading. + var image := Image.create(256,256,false,Image.FORMAT_RGB8) + for y in 256: + for x in 256: + var gx := clampi(int(float(x)/256*GRID),0,GRID-1) + var gy := clampi(int(float(y)/256*GRID),0,GRID-1) + image.set_pixel(x,y,LANDSCAPE.color_at(data.heights[gy*GRID+gx],0.0,data.landscape)) + return ImageTexture.create_from_image(image) diff --git a/scripts/planets/surface_generator.gd.uid b/scripts/planets/surface_generator.gd.uid new file mode 100644 index 0000000..6d87a7a --- /dev/null +++ b/scripts/planets/surface_generator.gd.uid @@ -0,0 +1 @@ +uid://c86afs6mqnwnu diff --git a/scripts/planets/surface_landscape.gd b/scripts/planets/surface_landscape.gd new file mode 100644 index 0000000..f021bdd --- /dev/null +++ b/scripts/planets/surface_landscape.gd @@ -0,0 +1,32 @@ +extends RefCounted +const PALETTES := [ + {"name":"Zielone doliny","low":Color("406338"),"high":Color("82935b"),"sand":Color("baaf83"),"rock":Color("737770"),"trees":Color("e4f1ce"),"density":0.78}, + {"name":"Jesienne lasy","low":Color("5f6540"),"high":Color("99905d"),"sand":Color("c6b58b"),"rock":Color("777671"),"trees":Color("e4ae63"),"density":0.86}, + {"name":"Mokradła","low":Color("3c6153"),"high":Color("74835a"),"sand":Color("98947b"),"rock":Color("646f6b"),"trees":Color("b3d8ad"),"density":0.42}, + {"name":"Skaliste wyżyny","low":Color("697250"),"high":Color("9b9b7e"),"sand":Color("c3b89c"),"rock":Color("83827c"),"trees":Color("d4d8bb"),"density":0.35}, + {"name":"Suche kaniony","low":Color("8c7652"),"high":Color("b49968"),"sand":Color("d3ba87"),"rock":Color("9e7960"),"trees":Color("c8bb7a"),"density":0.23}, + {"name":"Alpejska tundra","low":Color("6d827a"),"high":Color("a7afa1"),"sand":Color("aaa99a"),"rock":Color("858c89"),"trees":Color("c5dcdb"),"density":0.32} +] +static func choose(seed_value: int, profile: Dictionary) -> Dictionary: + var index := posmod(seed_value,4) + if int(profile.temperature) > 40: + index = 4 + elif int(profile.temperature) < -10: + index = 5 + var result: Dictionary = PALETTES[index].duplicate() + result.index = index + return result + +static func height_texture(heights: PackedFloat32Array) -> ImageTexture: + var image := Image.create_from_data(96,96,false,Image.FORMAT_RF,heights.to_byte_array()) + # Smooth the scalar field in native code, without enlarging the gameplay grid. + image.resize(1024,1024,Image.INTERPOLATE_CUBIC) + return ImageTexture.create_from_image(image) + +static func color_at(h: float, wet: float, palette: Dictionary) -> Color: + var land: Color = palette.low.lerp(palette.high,smoothstep(0.31,0.72,h)) + land = land.lerp(palette.rock,smoothstep(0.61,0.76,h)) + var shore: Color = palette.sand.lerp(land,smoothstep(0.275,0.33,h)) + var water := Color("327c80").lerp(Color("183d52"),smoothstep(0.3,0.12,h)) + var color := water.lerp(shore,smoothstep(0.265,0.285,h)) + return color.lerp(Color("2d6875"),smoothstep(0.35,0.5,wet)) diff --git a/scripts/planets/surface_landscape.gd.uid b/scripts/planets/surface_landscape.gd.uid new file mode 100644 index 0000000..22521a3 --- /dev/null +++ b/scripts/planets/surface_landscape.gd.uid @@ -0,0 +1 @@ +uid://kbdfeq84wgun diff --git a/scripts/planets/surface_minimap.gd b/scripts/planets/surface_minimap.gd new file mode 100644 index 0000000..efa0f63 --- /dev/null +++ b/scripts/planets/surface_minimap.gd @@ -0,0 +1,29 @@ +extends Control +var world: Node2D +var lander: Sprite2D +var _refresh_time := 0.0 +func _ready() -> void: + custom_minimum_size = Vector2(160, 160) + clip_contents = true + mouse_filter = Control.MOUSE_FILTER_IGNORE +func _process(delta: float) -> void: + _refresh_time += delta + if _refresh_time >= 1.0 / 15.0: + _refresh_time = 0 + queue_redraw() +func _draw() -> void: + if not is_instance_valid(world) or world.terrain == null: + return + draw_texture_rect(world.terrain, Rect2(Vector2.ZERO, size), false, Color(0.75, 0.85, 0.8)) + draw_rect(Rect2(Vector2.ZERO, size), Color("73b7b1"), false, 1) + var total: float = preload("res://scripts/planets/surface_generator.gd").WORLD_SIZE + for poi in world.data.pois: + if poi.discovered: + var at: Vector2 = (poi.position / total + Vector2.ONE * 0.5) * size + draw_circle(at, 2.5, Color("708377") if poi.complete else Color("f4cb80")) + for event in world.data.events: + if not event.complete: + var at: Vector2 = (event.position/total+Vector2.ONE*0.5)*size + draw_string(ThemeDB.fallback_font,at+Vector2(-4,5),"?",HORIZONTAL_ALIGNMENT_LEFT,-1,16,Color("f8d685")) + var point := (lander.position / total + Vector2.ONE * 0.5) * size + draw_circle(point, 3.5, Color("a7ffe8")) diff --git a/scripts/planets/surface_minimap.gd.uid b/scripts/planets/surface_minimap.gd.uid new file mode 100644 index 0000000..8a3aa2b --- /dev/null +++ b/scripts/planets/surface_minimap.gd.uid @@ -0,0 +1 @@ +uid://dtplueosim8sq diff --git a/scripts/planets/surface_scenery.gd b/scripts/planets/surface_scenery.gd new file mode 100644 index 0000000..7fde0f9 --- /dev/null +++ b/scripts/planets/surface_scenery.gd @@ -0,0 +1,55 @@ +extends RefCounted +const KINDS := ["ruined_house","warehouse","radar","airstrip","fuel_depot","solar_farm","scrapyard"] +const WIDTHS := {"ruined_house":135.0,"warehouse":180.0,"radar":130.0,"airstrip":290.0,"fuel_depot":150.0,"solar_farm":180.0,"scrapyard":160.0,"engineer_camp":130.0} + +static func generate(data: Dictionary, rng: RandomNumberGenerator) -> void: + data.structures = [] + data.events = [] + for index in rng.randi_range(2,5): + var kind: String = KINDS[rng.randi_range(0,KINDS.size()-1)] + var width: float = WIDTHS[kind]*rng.randf_range(0.85,1.15) + var position := find_site(data,rng,width*0.55) + if position == Vector2.INF: + continue + data.structures.append({"kind":kind,"position":position,"size":width,"rotation":rng.randf_range(-PI,PI)}) + if rng.randf() < 0.4: + var position := find_site(data,rng,100) + if position != Vector2.INF: + data.events.append({"kind":"engineer","position":position,"complete":false,"discovered":false}) + var clearings: Array = data.structures.duplicate() + for clearing in clearings: + data.trees = data.trees.filter(func(prop): return prop.position.distance_to(clearing.position) > float(clearing.size)*0.6+float(prop.size)*0.3) + data.rocks = data.rocks.filter(func(prop): return prop.position.distance_to(clearing.position) > float(clearing.size)*0.6+float(prop.size)*0.3) + +static func find_site(data: Dictionary, rng: RandomNumberGenerator, radius: float) -> Vector2: + for attempt in 300: + var point := Vector2(rng.randf_range(-1600,1600),rng.randf_range(-1600,1600)) + if point.length() < radius+250: + continue + var good := true + var minimum := 1.0 + var maximum := 0.0 + for offset in [Vector2.ZERO,Vector2.LEFT,Vector2.RIGHT,Vector2.UP,Vector2.DOWN,Vector2(-0.7,-0.7),Vector2(0.7,0.7),Vector2(-0.7,0.7),Vector2(0.7,-0.7)]: + var at: Vector2 = point+offset*radius + var x := clampi(int((at.x+1920)/40),0,95) + var y := clampi(int((at.y+1920)/40),0,95) + var h: float = data.heights[y*96+x] + minimum = minf(minimum,h) + maximum = maxf(maximum,h) + if minimum < 0.32 or maximum > 0.76 or maximum-minimum > 0.16: + continue + for mountain in data.mountains: + if point.distance_to(mountain.position) < radius+float(mountain.size)*0.7: + good = false + break + for poi in data.pois: + if point.distance_to(poi.position) < radius+150: + good = false + break + for structure in data.structures: + if point.distance_to(structure.position) < radius+float(structure.size)*0.65+60: + good = false + break + if good: + return point + return Vector2.INF diff --git a/scripts/planets/surface_scenery.gd.uid b/scripts/planets/surface_scenery.gd.uid new file mode 100644 index 0000000..e6df6ce --- /dev/null +++ b/scripts/planets/surface_scenery.gd.uid @@ -0,0 +1 @@ +uid://ciqpncuwxjjqh diff --git a/scripts/planets/surface_screen.gd b/scripts/planets/surface_screen.gd new file mode 100644 index 0000000..527c3c1 --- /dev/null +++ b/scripts/planets/surface_screen.gd @@ -0,0 +1,315 @@ +extends Control +signal finished(success: bool) +const UI := preload("res://scripts/planets/expedition_ui.gd") +const GENERATOR := preload("res://scripts/planets/surface_generator.gd") +var captain: Resource +var progress: Resource +var world: Node2D +var lander: Sprite2D +var camera: Camera2D +var _hp: ProgressBar +var _cargo: Label +var _status: Label +var _dialog: PanelContainer +var _choices: VBoxContainer +var _poi: Dictionary = {} +var _rng := RandomNumberGenerator.new() +var _motion := preload("res://scripts/planets/lander_motion.gd").new() +var flight_ship: Node +var _ending := false +var _hud_refresh_time := 0.0 +var _previous_position := Vector2.ZERO +var _active_event: Dictionary = {} +var _event_armed := true +const SURFACE_RENDER_SCALE := 1.5 +const SURFACE_CAMERA_ZOOM := 0.8 +var _surface_viewport: SubViewport + +func _ready() -> void: + set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + mouse_filter = Control.MOUSE_FILTER_STOP + _rng.seed = progress.visit_seed ^ 90317 + if is_instance_valid(flight_ship): + _motion.configure(flight_ship) + var container := TextureRect.new() + container.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + container.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + container.stretch_mode = TextureRect.STRETCH_SCALE + container.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR + container.mouse_filter = Control.MOUSE_FILTER_IGNORE + add_child(container) + var viewport := SubViewport.new() + _surface_viewport = viewport + viewport.size = Vector2i(get_viewport_rect().size * SURFACE_RENDER_SCALE) + viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + viewport.world_2d = World2D.new() + container.add_child(viewport) + container.texture = viewport.get_texture() + world = Node2D.new() + world.set_script(preload("res://scripts/planets/surface_world.gd")) + world.data = GENERATOR.generate(progress.visit_seed, progress.active_profile) + viewport.add_child(world) + lander = Sprite2D.new() + lander.physics_interpolation_mode = Node.PHYSICS_INTERPOLATION_MODE_ON + lander.texture = preload("res://assets/planets/lander.png") + lander.scale = Vector2.ONE * 100.0 / lander.texture.get_width() + lander.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS + var sprite_material := ShaderMaterial.new() + sprite_material.shader = preload("res://resources/effects/lander_detail.gdshader") + lander.material = sprite_material + lander.z_index = 30 + viewport.add_child(lander) + lander.reset_physics_interpolation() + var engine := Node2D.new() + engine.name = "EngineVisual" + engine.set_script(preload("res://scripts/planets/lander_engine_visual.gd")) + engine.source = self + engine.scale = Vector2.ONE / lander.scale + engine.z_index = -1 + lander.add_child(engine) + var audio := AudioStreamPlayer.new() + audio.name = "EngineAudio" + audio.set_script(preload("res://scripts/game/ship_engine_audio.gd")) + audio.thrust_source = self + add_child(audio) + camera = Camera2D.new() + camera.physics_interpolation_mode = Node.PHYSICS_INTERPOLATION_MODE_OFF + camera.process_callback = Camera2D.CAMERA2D_PROCESS_IDLE + camera.zoom = Vector2.ONE * SURFACE_CAMERA_ZOOM * SURFACE_RENDER_SCALE + camera.position_smoothing_enabled = true + camera.position_smoothing_speed = 6 + camera.limit_left = -1920 + camera.limit_top = -1920 + camera.limit_right = 1920 + camera.limit_bottom = 1920 + viewport.add_child(camera) + resized.connect(_resize_surface_viewport) + var info := UI.panel(self, Vector2(440, 0)) + info.position = Vector2(24, 24) + info.mouse_filter = Control.MOUSE_FILTER_IGNORE + var column := VBoxContainer.new() + info.add_child(column) + UI.label(column, str(progress.active_profile.name).to_upper(), 25, UI.CYAN) + UI.label(column,str(world.data.landscape.name),14,Color("e4cc9d")) + UI.label(column, "%s / TLEN %d%% / %d°C / FLORA %d" % [ + preload("res://scripts/planets/planet_profiles.gd").biome_name(progress.active_profile), + progress.active_profile.oxygen, progress.active_profile.temperature, progress.active_profile.flora], 13) + _hp = ProgressBar.new() + _hp.custom_minimum_size = Vector2(0, 14) + _hp.show_percentage = false + var hp_style := StyleBoxFlat.new() + hp_style.bg_color = Color("5bc9b5") + hp_style.set_corner_radius_all(5) + _hp.add_theme_stylebox_override("fill",hp_style) + column.add_child(_hp) + _status = UI.label(column, "", 13) + _cargo = UI.label(column, "", 13) + _cargo.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + _cargo.custom_minimum_size.x = 410 + var back := UI.button(self, "POWRÓT NA STATEK [L]", func(): _return(true)) + back.set_anchors_and_offsets_preset(Control.PRESET_TOP_LEFT) + back.position = Vector2(get_viewport_rect().size.x-285, 24) + back.size.x = 260 + var help := UI.panel(self) + help.set_anchors_and_offsets_preset(Control.PRESET_TOP_LEFT) + help.position = Vector2(24, get_viewport_rect().size.y-84) + UI.label(help, "W — ciąg · S — hamuj / wstecz · A/D — obrót\nQ/E — ruch boczny · TAB — dopalanie · F — zbadaj", 14) + var map_frame := UI.panel(self, Vector2(195,195)) + map_frame.set_anchors_and_offsets_preset(Control.PRESET_TOP_LEFT) + map_frame.position = get_viewport_rect().size-Vector2(220,220) + var minimap := Control.new() + minimap.set_script(preload("res://scripts/planets/surface_minimap.gd")) + minimap.world = world + minimap.lander = lander + map_frame.add_child(minimap) + _dialog = UI.panel(self, Vector2(460,0)) + _dialog.set_anchors_and_offsets_preset(Control.PRESET_TOP_LEFT) + _dialog.position = Vector2(get_viewport_rect().size.x-490,get_viewport_rect().size.y*0.5-100) + _choices = VBoxContainer.new() + _choices.add_theme_constant_override("separation", 12) + _dialog.add_child(_choices) + _dialog.hide() + _update_hud() + +func _physics_process(delta: float) -> void: + if _ending: + return + _previous_position = lander.position + if _dialog.visible: + _motion.velocity = Vector2.ZERO + _motion.angular_velocity = 0 + return + _motion.step(delta, Input.get_axis("ship_turn_left","ship_turn_right"), + Input.is_action_pressed("ship_thrust"), Input.is_action_pressed("ship_brake"), + Input.get_axis("ship_strafe_left","ship_strafe_right"), Input.is_action_pressed("ship_mini_boost")) + lander.rotation = _motion.rotation + var next := lander.position + _motion.velocity * delta + var bounded := next.clamp(Vector2(-1780,-1780),Vector2(1780,1780)) + if next.x != bounded.x: + _motion.velocity.x = 0 + if next.y != bounded.y: + _motion.velocity.y = 0 + lander.position = bounded + +func _process(delta: float) -> void: + if _ending: + return + # Camera and sprite must follow the same interpolated pose between physics ticks. + camera.position = _previous_position.lerp(lander.position, Engine.get_physics_interpolation_fraction()) + _hud_refresh_time += delta + if _hud_refresh_time >= 0.1: + _hud_refresh_time = 0 + world.refresh_pois(lander.position) + _update_hud() + _check_events() + + +func _input(event: InputEvent) -> void: + if not event is InputEventKey or not event.pressed or event.echo or _ending: + return + if event.is_action("ship_mini_boost"): + get_viewport().set_input_as_handled() + return + if event.keycode == KEY_L: + _return(true) + elif event.keycode == KEY_ESCAPE: + if _dialog.visible: + _dialog.hide() + else: + _return(true) + elif event.keycode == KEY_F and not _dialog.visible: + for encounter in world.data.events: + if not encounter.complete and lander.position.distance_to(encounter.position) <= 180: + _event_armed = false + _show_event(encounter) + get_viewport().set_input_as_handled() + return + for poi in world.data.pois: + if not poi.complete and lander.position.distance_to(poi.position) <= 150: + _poi = poi + _show_poi() + break + else: + return + get_viewport().set_input_as_handled() + +func _show_poi(message := "") -> void: + for child in _choices.get_children(): + _choices.remove_child(child) + child.queue_free() + _dialog.show() + var names := {"mine":"OPUSZCZONA KOPALNIA", "ruins":"STAROŻYTNE RUINY", "deposit":"ZŁOŻE MINERAŁÓW"} + UI.label(_choices, names[_poi.kind], 22, UI.CYAN) + var description := UI.label(_choices, "Każdy kolejny etap daje więcej łupu, ale zwiększa ryzyko.\nNieudana próba uszkadza lądownik i kończy badanie miejsca.", 14) + description.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + description.custom_minimum_size.x = 410 + if not message.is_empty(): + var result := UI.label(_choices, message, 15, Color("#efca8a")) + result.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + result.custom_minimum_size.x = 410 + if not _poi.complete: + var chance: float = preload("res://scripts/planets/planet_profiles.gd").success_chance(progress.active_profile, captain, _poi.stage) + UI.button(_choices, "%s · %d%% szans" % [{"mine":["Poziom 1 — wejście","Poziom 2 — głębszy szyb","Poziom 3 — najgłębsza komora"],"ruins":["Zbadaj dziedziniec","Otwórz komorę","Uruchom rdzeń"],"deposit":["Zbierz powierzchniowe złoże","Wykonaj odwiert","Wydobądź głęboką żyłę"]}[_poi.kind][int(_poi.stage)],roundi(chance*100)], _attempt) + UI.button(_choices, "Zakończ badanie tego miejsca", func(): _poi.complete = true; _dialog.hide()) + UI.button(_choices, "Wróć do lotu", func(): _dialog.hide()) + +func _attempt() -> void: + if _ending: + return + var result: Dictionary = progress.resolve_poi(captain, _poi, _rng) + if result.is_empty(): + return + var message := "" + if result.success: + message = "SUKCES · " + UI.material_text(result.materials) + if result.module != null: + message += "\nZnaleziono moduł statku, poziom %d." % result.module.item_level + if _poi.complete: + message += "\nMiejsce w pełni zbadane." + else: + message = "NIEPOWODZENIE · utrata %d HP.\nDalsze badanie tego miejsca jest niemożliwe." % result.damage + _update_hud() + _show_poi(message) + if progress.lander_hp <= 0: + _ending = true + _status.text = "LĄDOWNIK ZNISZCZONY — utracono łup wyprawy" + _dialog.hide() + var explosion := Node2D.new() + explosion.set_script(preload("res://scripts/game/player_destruction_effect.gd")) + explosion.configure(lander,Vector2.ZERO,camera) + lander.get_parent().add_child(explosion) + lander.hide() + await explosion.finished + finished.emit(false) + +func _update_hud() -> void: + _hp.value = progress.lander_hp + if not _ending: + _status.text = "LĄDOWNIK %d / 100 HP · ENERGIA %d%%" % [ceili(progress.lander_hp),roundi(_motion.energy)] + var loot := UI.material_text(progress.cargo) + _cargo.text = "ŁUP WYPRAWY: " + (loot if not loot.is_empty() else "brak") + "\nModuły: %d" % progress.cargo_modules.size() + +func _return(success: bool) -> void: + if _ending: + return + _ending = true + finished.emit(success) + +func engine_thrust_active() -> bool: + return not _ending and not _dialog.visible and (_motion.boost_active or (Input.is_action_pressed("ship_thrust") and not Input.is_action_pressed("ship_brake"))) + +func _check_events() -> void: + for event in world.data.events: + if event.complete: + continue + var distance: float = lander.position.distance_to(event.position) + if distance > 260: + _event_armed = true + elif distance <= 180 and _event_armed and not _dialog.visible: + _event_armed = false + _show_event(event) + return + +func _show_event(event: Dictionary, result: Dictionary = {}) -> void: + _active_event = event + for child in _choices.get_children(): + _choices.remove_child(child) + child.queue_free() + _dialog.show() + UI.label(_choices,"SPOTKANIE / INŻYNIER",23,UI.CYAN) + var text := "Znalazłeś miejscowego inżyniera. Za 100 kredytów sprzeda Ci moduł. Nie jesteś pewien, czy będzie coś warty." + if not result.is_empty(): + if result.get("success",false): + var item: ItemInstance = result.item + text = "Kupiono: %s\nPoziom modułu: %d\n\nModuł trafił do ładowni wyprawy. Wróć bezpiecznie na statek, aby go zachować." % [item.definition.display_name,item.item_level] + var icon := TextureRect.new() + icon.texture = item.definition.icon + icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + icon.custom_minimum_size = Vector2(70,70) + _choices.add_child(icon) + else: + text = str(result.get("reason","Oferta niedostępna.")) + var description := UI.label(_choices,text,16) + description.custom_minimum_size.x = 410 + description.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + if not event.complete: + UI.label(_choices,"Twoje kredyty: %d" % captain.credits,15,Color("efca8a")) + var buy := UI.button(_choices,"KUP NIEZNANY MODUŁ · 100 KREDYTÓW",_buy_engineer) + buy.disabled = captain.credits < 100 + UI.button(_choices,"Może później",func(): _dialog.hide()) + else: + UI.button(_choices,"Kontynuuj wyprawę",func(): _dialog.hide()) + +func _buy_engineer() -> void: + if _ending: + return + var result: Dictionary = progress.buy_engineer_offer(captain,_active_event,_rng) + _show_event(_active_event,result) + world.refresh_pois(lander.position) + _update_hud() + + +func _resize_surface_viewport() -> void: + if is_instance_valid(_surface_viewport): + _surface_viewport.size = Vector2i(Vector2(maxf(1,size.x),maxf(1,size.y))*SURFACE_RENDER_SCALE) diff --git a/scripts/planets/surface_screen.gd.uid b/scripts/planets/surface_screen.gd.uid new file mode 100644 index 0000000..c664168 --- /dev/null +++ b/scripts/planets/surface_screen.gd.uid @@ -0,0 +1 @@ +uid://q3gfloi4b0xc diff --git a/scripts/planets/surface_world.gd b/scripts/planets/surface_world.gd new file mode 100644 index 0000000..0647e28 --- /dev/null +++ b/scripts/planets/surface_world.gd @@ -0,0 +1,121 @@ +extends Node2D +const GENERATOR := preload("res://scripts/planets/surface_generator.gd") +var data: Dictionary +var terrain: ImageTexture +var _tree: Texture2D +var _mountain: Texture2D +var _poi_sprites: Dictionary = {} +var _poi_labels: Dictionary = {} +var _event_nodes: Array[Dictionary] = [] + +func _ready() -> void: + texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS + terrain = GENERATOR.terrain_texture(data) + var ground := Sprite2D.new() + ground.name = "Terrain" + ground.texture = data.height_texture + ground.scale = Vector2.ONE * GENERATOR.WORLD_SIZE / ground.texture.get_width() + ground.z_index = -5 + var material := ShaderMaterial.new() + material.shader = preload("res://resources/effects/planet_terrain.gdshader") + material.set_shader_parameter("height_map",data.height_texture) + material.set_shader_parameter("grass_detail",preload("res://assets/planets/grass.png")) + for kind in ["soil","rock","sand","moss"]: + material.set_shader_parameter(kind+"_detail",load("res://assets/planets/terrain/%s.png" % kind)) + material.set_shader_parameter("biome_kind",int(data.landscape.index)) + for key in ["low","high","sand","rock"]: + material.set_shader_parameter(key+"_color",data.landscape[key]) + material.set_shader_parameter("climate",float(data.profile.temperature)) + material.set_shader_parameter("seed_offset",float(posmod(int(data.seed),10000))) + ground.material = material + add_child(ground) + _tree = load("res://assets/planets/tree.png") + _mountain = load("res://assets/planets/mountain.png") + for poi in data.pois: + var sprite := Sprite2D.new() + sprite.texture = load("res://assets/planets/%s.png" % ("ruins" if poi.kind == "ruins" else "mine")) if poi.kind != "deposit" else load("res://assets/icons/resources/titanium.png") + sprite.position = poi.position + sprite.scale = Vector2.ONE * (125.0 if poi.kind != "deposit" else 60.0) / maxf(sprite.texture.get_width(), sprite.texture.get_height()) + sprite.z_index = 10 + add_child(sprite) + _poi_sprites[poi.id] = sprite + var label := Label.new() + label.position = poi.position + Vector2(-120, 65) + label.size.x = 240 + label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + label.add_theme_font_size_override("font_size", 13) + label.add_theme_color_override("font_color", Color("f0d5a1")) + label.add_theme_color_override("font_shadow_color", Color("061310")) + label.add_theme_constant_override("shadow_outline_size", 5) + label.z_index = 15 + add_child(label) + _poi_labels[poi.id] = label + for structure in data.structures: + var prop := Sprite2D.new() + prop.name = str(structure.kind).to_pascal_case() + prop.texture = load("res://assets/planets/props/%s.png" % structure.kind) + prop.position = structure.position + prop.rotation = structure.rotation + prop.scale = Vector2.ONE * float(structure.size) / maxf(prop.texture.get_width(),prop.texture.get_height()) + prop.z_index = 4 + add_child(prop) + for index in data.events.size(): + var event: Dictionary = data.events[index] + var marker := Label.new() + marker.name = "EventMarker%d" % index + marker.text = "?" + marker.position = event.position+Vector2(-22,-28) + marker.size = Vector2(44,55) + marker.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + marker.add_theme_font_size_override("font_size",40) + marker.add_theme_color_override("font_color",Color("f8d685")) + marker.add_theme_color_override("font_outline_color",Color("17211b")) + marker.add_theme_constant_override("outline_size",7) + marker.z_index = 25 + add_child(marker) + _event_nodes.append({"marker":marker}) + + refresh_pois(Vector2.ZERO) + +func refresh_pois(lander_position: Vector2) -> void: + for index in data.events.size(): + var event: Dictionary = data.events[index] + if lander_position.distance_to(event.position) < 600: + event.discovered = true + var nodes: Dictionary = _event_nodes[index] + nodes.marker.visible = not event.complete + + for poi in data.pois: + if lander_position.distance_to(poi.position) < 650: + poi.discovered = true + var sprite: Sprite2D = _poi_sprites[poi.id] + sprite.visible = bool(poi.discovered) + sprite.modulate = Color(0.5, 0.55, 0.5) if poi.complete else Color.WHITE + var label: Label = _poi_labels[poi.id] + label.visible = bool(poi.discovered) + var title: String = {"mine": "Opuszczona kopalnia", "ruins": "Starożytne ruiny", "deposit": "Złoże minerałów"}[poi.kind] + label.text = title + (" · zbadano" if poi.complete else ("\n[F] Zbadaj" if lander_position.distance_to(poi.position) <= 150 else "")) + +func _draw() -> void: + if terrain == null: + return + for mountain in data.mountains: + _draw_prop(_mountain, mountain.position, mountain.size, mountain.rotation, Color.WHITE) + for rock in data.rocks: + _draw_prop(_mountain,rock.position,rock.size,rock.rotation,Color("b3b0a0")) + for tree in data.trees: + var shade := float(tree.shade) + var color: Color = Color(shade,shade,shade)*data.landscape.trees + if int(data.profile.temperature) < -10: + color = color.lerp(Color("d1e1da"), 0.4) + elif int(data.profile.temperature) > 40: + color = color.lerp(Color("c6a86b"), 0.28) + _draw_prop(_tree, tree.position, tree.size, tree.rotation, color) + # Small landing beacon. + draw_circle(Vector2.ZERO, 50, Color(0.5, 0.85, 0.8, 0.12)) + draw_arc(Vector2.ZERO, 48, 0, TAU, 48, Color("8cd9c2"), 2, true) + +func _draw_prop(texture: Texture2D, point: Vector2, width: float, angle: float, color: Color) -> void: + draw_set_transform(point, angle) + draw_texture_rect(texture, Rect2(-width * 0.5, -width * 0.5, width, width), false, color) + draw_set_transform(Vector2.ZERO) diff --git a/scripts/planets/surface_world.gd.uid b/scripts/planets/surface_world.gd.uid new file mode 100644 index 0000000..8cb7c26 --- /dev/null +++ b/scripts/planets/surface_world.gd.uid @@ -0,0 +1 @@ +uid://ch1ku7ntyuogh diff --git a/scripts/ui/captain_equipment_panel.gd b/scripts/ui/captain_equipment_panel.gd new file mode 100644 index 0000000..7a24e1e --- /dev/null +++ b/scripts/ui/captain_equipment_panel.gd @@ -0,0 +1,121 @@ +extends PanelContainer +const GEAR := preload("res://scripts/planets/captain_equipment.gd") +var _wardrobe: PanelContainer +var _grid: GridContainer +var _gear_signature := "" + +func _ready() -> void: + var frame := StyleBoxFlat.new() + frame.bg_color = Color(0.025, 0.045, 0.065, 0.65) + frame.border_color = Color("35515d") + frame.set_border_width_all(1) + frame.set_corner_radius_all(6) + frame.set_content_margin_all(7) + add_theme_stylebox_override("panel", frame) + custom_minimum_size.x = 244 + var contents := VBoxContainer.new() + contents.add_theme_constant_override("separation", 4) + add_child(contents) + var title := Label.new() + title.text = "EKWIPUNEK KAPITANA" + title.add_theme_font_size_override("font_size", 10) + title.add_theme_color_override("font_color", Color("8fbfc6")) + contents.add_child(title) + var row := HBoxContainer.new() + row.alignment = BoxContainer.ALIGNMENT_CENTER + row.add_theme_constant_override("separation", 12) + contents.add_child(row) + for kind in GEAR.KINDS: + var slot := PanelContainer.new() + slot.name = kind.capitalize() + "Slot" + slot.set_script(preload("res://scripts/ui/captain_gear_slot.gd")) + slot.set("kind", kind) + row.add_child(slot) + var button := Button.new() + button.name = "OpenEquipment" + button.text = "WYPOSAŻENIE" + preload("res://scripts/ui/hud_button_style.gd").apply(button, Color("82cddd")) + button.add_theme_font_size_override("font_size", 9) + button.custom_minimum_size.y = 22 + contents.add_child(button) + button.pressed.connect(_toggle_wardrobe) + _create_wardrobe() + GameState.captain.changed.connect(_refresh_wardrobe) + _refresh_wardrobe() + +func _process(_delta: float) -> void: + var captain := get_parent().get_node_or_null("CaptainPanel") as Control + if captain: + position = captain.position + Vector2(0, captain.size.y + 7) + size = Vector2(captain.size.x, get_combined_minimum_size().y) + +func _create_wardrobe() -> void: + _wardrobe = PanelContainer.new() + _wardrobe.name = "CaptainGearInventory" + var frame := StyleBoxFlat.new() + frame.bg_color = Color("0b1823") + frame.border_color = Color("537e91") + frame.set_border_width_all(1) + frame.set_corner_radius_all(8) + frame.set_content_margin_all(12) + _wardrobe.add_theme_stylebox_override("panel", frame) + _wardrobe.custom_minimum_size = Vector2(350, 180) + get_parent().add_child(_wardrobe) + var contents := VBoxContainer.new() + contents.add_theme_constant_override("separation", 9) + _wardrobe.add_child(contents) + var header := HBoxContainer.new() + contents.add_child(header) + var title := Label.new() + title.text = "WYPOSAŻENIE KAPITANA" + title.size_flags_horizontal = Control.SIZE_EXPAND_FILL + title.add_theme_font_size_override("font_size", 12) + header.add_child(title) + var close := Button.new() + close.text = "×" + close.pressed.connect(func() -> void: _wardrobe.hide()) + header.add_child(close) + var hint := Label.new() + hint.text = "Przeciągnij na slot kapitana lub kliknij dwukrotnie." + hint.add_theme_font_size_override("font_size", 10) + contents.add_child(hint) + var scroll := ScrollContainer.new() + scroll.custom_minimum_size.y = 160 + scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED + contents.add_child(scroll) + _grid = GridContainer.new() + _grid.columns = 4 + _grid.add_theme_constant_override("h_separation", 10) + _grid.add_theme_constant_override("v_separation", 10) + scroll.add_child(_grid) + var return_area := PanelContainer.new() + return_area.set_script(preload("res://scripts/ui/captain_gear_slot.gd")) + return_area.set("return_slot", true) + return_area.custom_minimum_size = Vector2(0, 36) + contents.add_child(return_area) + get_parent().get_node("FloatingWindows").register_window(_wardrobe, _wardrobe, header) + _wardrobe.hide() + +func _toggle_wardrobe() -> void: + _wardrobe.visible = not _wardrobe.visible + _wardrobe.position = position + Vector2(size.x + 12, 0) + if _wardrobe.visible: + get_parent().get_node("FloatingWindows").focus_window(_wardrobe) + +func _refresh_wardrobe() -> void: + var signature := str(GameState.captain.gear_items) + if signature == _gear_signature: + return + _gear_signature = signature + if not is_instance_valid(_grid): + return + for child in _grid.get_children(): + _grid.remove_child(child) + child.queue_free() + for gear in GameState.captain.gear_items: + var slot := PanelContainer.new() + slot.set_script(preload("res://scripts/ui/captain_gear_slot.gd")) + slot.set("equipped_slot", false) + slot.set("uid", int(gear.uid)) + slot.set("kind", str(gear.kind)) + _grid.add_child(slot) diff --git a/scripts/ui/captain_equipment_panel.gd.uid b/scripts/ui/captain_equipment_panel.gd.uid new file mode 100644 index 0000000..8e3a8e7 --- /dev/null +++ b/scripts/ui/captain_equipment_panel.gd.uid @@ -0,0 +1 @@ +uid://drcm6l61jgx4j diff --git a/scripts/ui/captain_gear_slot.gd b/scripts/ui/captain_gear_slot.gd new file mode 100644 index 0000000..eb8d24b --- /dev/null +++ b/scripts/ui/captain_gear_slot.gd @@ -0,0 +1,104 @@ +extends PanelContainer +const GEAR := preload("res://scripts/planets/captain_equipment.gd") +var kind := "breathing" +var uid := -1 +var equipped_slot := true +var return_slot := false +var _picture: TextureRect +var _label: Label +var _valid_drop := false + +func _ready() -> void: + mouse_filter = Control.MOUSE_FILTER_STOP + custom_minimum_size = Vector2(58, 58) + _picture = TextureRect.new() + _picture.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + _picture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + _picture.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS + _picture.mouse_filter = Control.MOUSE_FILTER_IGNORE + add_child(_picture) + _label = Label.new() + _label.mouse_filter = Control.MOUSE_FILTER_IGNORE + _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT + _label.vertical_alignment = VERTICAL_ALIGNMENT_BOTTOM + _label.add_theme_font_size_override("font_size", 9) + _label.add_theme_color_override("font_shadow_color", Color.BLACK) + _label.add_theme_constant_override("shadow_outline_size", 3) + add_child(_label) + GameState.captain.changed.connect(refresh) + refresh() + +func gear_item() -> Dictionary: + if return_slot: + return {} + return GEAR.equipped(GameState.captain, kind) if equipped_slot else GEAR.item(GameState.captain, uid) + +func refresh() -> void: + if not is_node_ready(): + return + var gear := gear_item() + _picture.texture = GEAR.icon(kind) if not return_slot else null + _picture.modulate.a = 1.0 if not gear.is_empty() else 0.22 + _label.text = "POZ. %d" % int(gear.level) if not gear.is_empty() else ("ODŁÓŻ" if return_slot else "—") + tooltip_text = "Odłóż wyposażenie kapitana" if return_slot else "%s\n%s\nPrzeciągnij przedmiot do pasującego slotu. Dwuklik zakłada lub zdejmuje." % [GEAR.NAMES.get(kind, kind), "Poziom %d" % int(gear.level) if not gear.is_empty() else "Pusty slot"] + _style() + +func _style() -> void: + var frame := StyleBoxFlat.new() + frame.bg_color = Color(0.035, 0.065, 0.09, 0.8) + frame.border_color = Color("83f7be") if _valid_drop else GEAR.COLORS.get(kind, Color("638da0")).darkened(0.4) + frame.set_border_width_all(2 if _valid_drop else 1) + frame.set_corner_radius_all(6) + frame.set_content_margin_all(4) + add_theme_stylebox_override("panel", frame) + +func _process(_delta: float) -> void: + var valid := get_viewport().gui_is_dragging() and _can_drop_data(Vector2.ZERO, get_viewport().gui_get_drag_data()) + if valid != _valid_drop: + _valid_drop = valid + _style() + +func _gui_input(event: InputEvent) -> void: + if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT and event.double_click: + var gear := gear_item() + if not gear.is_empty(): + if equipped_slot: + GEAR.unequip(GameState.captain, kind) + else: + GEAR.equip(GameState.captain, str(gear.kind), int(gear.uid)) + accept_event() + +func _get_drag_data(_at: Vector2) -> Variant: + var gear := gear_item() + if gear.is_empty(): + return null + var overlay := get_tree().get_first_node_in_group("item_drag_overlay") + if overlay == null: + overlay = CanvasLayer.new() + overlay.set_script(preload("res://scripts/ui/item_drag_overlay.gd")) + var host := get_tree().current_scene + if host == null: + host = get_viewport() + host.add_child(overlay) + overlay.begin_icon(GEAR.icon(str(gear.kind)), GEAR.COLORS[str(gear.kind)], GEAR.NAMES[str(gear.kind)]) + var native := Control.new() + native.mouse_filter = Control.MOUSE_FILTER_IGNORE + set_drag_preview(native) + return {"captain_gear": int(gear.uid)} + +func _can_drop_data(_at: Vector2, data: Variant) -> bool: + if not data is Dictionary or not data.has("captain_gear"): + return false + var gear := GEAR.item(GameState.captain, int(data.captain_gear)) + if gear.is_empty(): + return false + if return_slot: + return int(GameState.captain.gear_slots.get(gear.kind, -1)) == int(gear.uid) + return equipped_slot and gear.kind == kind and int(GameState.captain.gear_slots.get(kind, -1)) != int(gear.uid) + +func _drop_data(_at: Vector2, data: Variant) -> void: + var gear := GEAR.item(GameState.captain, int(data.captain_gear)) + if return_slot: + GEAR.unequip(GameState.captain, str(gear.kind)) + else: + GEAR.equip(GameState.captain, kind, int(gear.uid)) diff --git a/scripts/ui/captain_gear_slot.gd.uid b/scripts/ui/captain_gear_slot.gd.uid new file mode 100644 index 0000000..2f8cc82 --- /dev/null +++ b/scripts/ui/captain_gear_slot.gd.uid @@ -0,0 +1 @@ +uid://cwhvyodpvouf diff --git a/scripts/ui/item_drag_overlay.gd b/scripts/ui/item_drag_overlay.gd index 8824020..7417e46 100644 --- a/scripts/ui/item_drag_overlay.gd +++ b/scripts/ui/item_drag_overlay.gd @@ -31,14 +31,17 @@ func _ready() -> void: _view.hide() func begin_drag(item: ItemInstance) -> void: + begin_icon(item.definition.icon, item.get_type_color(), item.definition.display_name) + +func begin_icon(texture: Texture2D, accent: Color, caption: String = "") -> void: _started_frame = Engine.get_process_frames() _pointer_position = get_viewport().get_mouse_position() - _picture.texture = item.definition.icon - _fallback.text = item.definition.display_name if item.definition.icon == null else "" - _fallback.visible = item.definition.icon == null + _picture.texture = texture + _fallback.text = caption if texture == null else "" + _fallback.visible = texture == null var frame := StyleBoxFlat.new() frame.bg_color = Color(0.025, 0.045, 0.065, 0.8) - frame.border_color = item.get_type_color() + frame.border_color = accent frame.set_border_width_all(1) frame.set_corner_radius_all(5) frame.set_content_margin_all(5) diff --git a/scripts/ui/mission_objectives.gd b/scripts/ui/mission_objectives.gd index 1ce1a16..4b678cf 100644 --- a/scripts/ui/mission_objectives.gd +++ b/scripts/ui/mission_objectives.gd @@ -39,7 +39,9 @@ func _process(_delta: float) -> void: _objective.text = "Pokonaj bossa" else: _objective.text = "Pokonaj wszystkich wrogów" - var captain := get_parent().get_node_or_null("CaptainPanel") as Control + var captain := get_parent().get_node_or_null("CaptainEquipment") as Control + if captain == null: + captain = get_parent().get_node_or_null("CaptainPanel") as Control if is_instance_valid(captain): size.x = captain.size.x size.y = get_combined_minimum_size().y diff --git a/scripts/ui/player_guide.gd b/scripts/ui/player_guide.gd index 5bff50a..40908e3 100644 --- a/scripts/ui/player_guide.gd +++ b/scripts/ui/player_guide.gd @@ -8,6 +8,7 @@ const PAGES := [ ["Walka i przetrwanie", "03", "[font_size=26][color=#f1bd79]Wróć z wyprawy[/color][/font_size]\n\n[color=#91dbea][b]Tarcze, kadłub i energia[/b][/color]\nTarcze pochłaniają obrażenia przed kadłubem. Utrata całego kadłuba oznacza zniszczenie statku. Energia zasila część broni oraz dopalanie; odnawia się z czasem, szybciej przy gwieździe.\n\n[color=#91dbea][b]Dobieraj broń do zapasów[/b][/color]\nBroń energetyczna zużywa energię. Działko maszynowe potrzebuje zwykłej amunicji, gamma — napromieniowanej, a wyrzutnie — rakiet. Puste zapasy oznaczają brak strzału. Absorpcja ogranicza obrażenia danego typu.\n\n[color=#91dbea][b]Korzystaj z rozszerzeń[/b][/color]\nMiny atakują obszarowo, flary odciągają uwagę, kamuflaż pomaga zerwać kontakt, teleport przenosi w bezpieczne miejsce, a drony wspierają ostrzał. Doładowanie tarcz działa przy gwieździe. Sprawdzaj koszt i cooldown w opisie.\n\n[color=#f1bd79][b]Uważaj na uciekających przeciwników[/b][/color]\nWróg z kadłubem poniżej 10% ucieka wolniej, ale może zostawić minę. Nie leć bezmyślnie prosto za nim."], ["Łup i wytwarzanie", "04", "[font_size=26][color=#f1bd79]Zbieraj. Porównuj. Twórz.[/color][/font_size]\n\n[color=#91dbea][b]Łup zbierasz przez podlecenie[/b][/color]\nPrzedmioty w pobliżu są przyciągane do statku. Magazyn mieści 20 przedmiotów; przy pełnym magazynie zwolnij miejsce, żeby zebrać kolejny.\n\n[color=#91dbea][b]Asteroidy zostawiają fizyczne odłamki[/b][/color]\nStrzelaj do asteroid. Po zniszczeniu rozpadają się bazowo na 5–7 poszarpanych fragmentów. Każdy to jedna jednostka surowca — musisz go zebrać. Umiejętność górnika zwiększa uzysk.\n\n[color=#91dbea][b]Przeszukuj wraki[/b][/color]\nPodleć do wraku i przytrzymaj E, aby go przeszukać. Wraki dają surowce (65%), amunicję lub rakiety (łącznie 20%) albo moduł (15%).\n\n[color=#91dbea][b]Warsztat — przycisk TWÓRZ[/b][/color]\nZ minerałów wytworzysz części, amunicję, rakiety i powerbanki. Receptura pokazuje wymagane składniki oraz ilość produktu.\n\n[color=#91dbea][b]Odzyskuj części[/b][/color]\nNajedź na zbędny przedmiot w magazynie i użyj przycisku rozłożenia. Części przydadzą się do napraw."], ["Statek i kapitan", "05", "[font_size=26][color=#f1bd79]Buduj własny styl gry[/color][/font_size]\n\n[color=#91dbea][b]Wyposażenie[/b][/color]\nKliknij panel statku w prawym górnym rogu i otwórz magazyn. Przeciągaj przedmioty do pasujących slotów: 3 bronie, 5 modułów i 5 rozszerzeń. Aktywne rozszerzenia uruchamiasz klawiszami 1–5; pasywne (oznaczone P) działają automatycznie w tych samych slotach. Najedź kursorem, żeby sprawdzić parametry i porównanie wyposażenia.\n\n[color=#91dbea][b]Nie każdy duplikat jest taki sam[/b][/color]\nBroń i moduły mogą mieć różne parametry oraz addony. Aktywne rozszerzenia losują cooldown od 30 do 5 pełnych sekund. Pasywne mają losowaną siłę efektu: Recykler odnawia tarcze i energię po zebraniu odłamka, Wirus przejmuje uciekających wrogów, a Pancerz z tytanu ogranicza obrażenia przy niskim kadłubie. Krótsze odnowienia są rzadkie — przed rozłożeniem porównaj egzemplarze. Rozszerzenia tego samego typu dzielą aktywne odnowienie.\n\n[color=#91dbea][b]Umiejętności kapitana[/b][/color]\nZa pokonanych wrogów zdobywasz doświadczenie i kredyty. Trudniejsze układy dają więcej bazowego XP. Jeśli kapitan przewyższa poziom układu o ponad 2 poziomy, XP za przeciwników i ruiny maleje; przy przewadze 8 poziomów spada do zera. Kredyty i surowce nadal zbierasz. Po awansie wybierasz umiejętność. Pasywne działają stale, aktywne przypisujesz do F1–F5.\n\n[color=#f1bd79][b]Okno umiejętności nie pauzuje gry.[/b][/color]\nOtwieraj je w bezpiecznym miejscu. Przed kolejnym układem uzupełnij zapasy i sprawdź wyposażenie."] + ,["Planety i frachtowiec", "06", "[font_size=26][color=#f1bd79]Wyprawa na powierzchnię[/color][/font_size]\n\nPodleć do planety oznaczonej EARTHLIKE. [b]F[/b] skanuje tlen, temperaturę i zagrożenie biologiczne. [b]L[/b] rozpoczyna lądowanie. Możesz eksplorować przed pokonaniem wrogów, ale lądowanie jest zablokowane podczas walki.\n\nLądownik wymaga 100 HP przed startem i traci 5–20 HP przy wejściu w atmosferę. Na powierzchni sterujesz jak statkiem: [b]W[/b] — ciąg, [b]S[/b] — hamowanie i wstecz, [b]A/D[/b] — obrót, [b]Q/E[/b] — ruch boczny, [b]TAB[/b] — dopalanie. Odkrywaj miejsca i używaj [b]F[/b], aby je zbadać. Lądownik ma osobną energię dopalania. Każdy etap badania pokazuje szansę sukcesu; dalsze etapy dają więcej łupu i większe ryzyko.\n\n[b]L[/b] lub przycisk powrotu kończy wyprawę i przenosi łup do Twoich zasobów. Zniszczenie lądownika oznacza utratę tylko zdobyczy tej wyprawy. Kolejne lądowanie tworzy nową mapę.\n\n[color=#91dbea][b]Frachtowiec[/b][/color]\nZnajdziesz go przy gwieździe centralnej. Podleć i naciśnij [b]L[/b]. Hangar naprawia lądownik (1 część za 1% HP), warsztat wytwarza sprzęt kapitana, a laboratorium przechowuje skany i archiwa.\n\nKapitan zaczyna z podstawowym systemem oddychania, skafandrem i bronią ręczną. Kolejne poziomy tworzysz w warsztacie; sprzęt zmienisz także w panelu pod kapitanem. Wyższy poziom poprawia szanse eksploracji.\n\n[color=#91dbea][b]Losowe spotkania[/b][/color]\nPytajnik na mapie oznacza wydarzenie. Podleć, aby otworzyć okno. Miejscowy inżynier może zaoferować nieznany moduł za 100 kredytów. Wyższe poziomy przedmiotów są coraz rzadsze. Kupiony moduł pozostaje w ładowni wyprawy do bezpiecznego powrotu.\n\n[color=#f1bd79]Podczas wyprawy i wizyty we frachtowcu kosmos jest zamrożony. Zapisywanie między uruchomieniami gry nie jest jeszcze dostępne.[/color]"] ] var _panel: PanelContainer var _reader: RichTextLabel diff --git a/scripts/ui/ship_inventory_panel.gd b/scripts/ui/ship_inventory_panel.gd index 3167f59..7dd534b 100644 --- a/scripts/ui/ship_inventory_panel.gd +++ b/scripts/ui/ship_inventory_panel.gd @@ -11,6 +11,7 @@ var _inventory: ShipInventory var _drawer_open := false var _slide_tween: Tween var _resource_cards: Dictionary = {} +var _planet_resources: Label var drawer_width := 560.0 func _ready() -> void: @@ -32,6 +33,11 @@ func _ready() -> void: _refresh_title() func _refresh_title() -> void: + if is_instance_valid(_planet_resources): + var stock := {} + for key in preload("res://scripts/planets/planet_profiles.gd").MATERIALS: + stock[key] = GameState.captain.minerals.get(key,0) + _planet_resources.text = "Z PLANET: " + preload("res://scripts/planets/expedition_ui.gd").material_text(stock) for key in ["iron", "titanium", "aluminium", "uranium", "sulfur"]: _resource_cards[key].set_amount(float(GameState.captain.minerals.get(key, 0))) _resource_cards["parts"].set_amount(GameState.captain.parts) @@ -76,6 +82,12 @@ func _create_resource_section() -> void: ["missile", "Rakiety", "Amunicja do wyrzutni rakiet. Obrażenia kinetyczne.", Color("ffac8b")], ]: _add_resource_card(ammunition, data) + _planet_resources = Label.new() + _planet_resources.custom_minimum_size.x = 440 + _planet_resources.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART + _planet_resources.add_theme_font_size_override("font_size",10) + _planet_resources.add_theme_color_override("font_color",Color("a5c8c6")) + section.add_child(_planet_resources) var cargo_title := Label.new() cargo_title.text = "PRZEDMIOTY" cargo_title.add_theme_font_size_override("font_size", 10) diff --git a/tests/levels/lander_flight_test.gd b/tests/levels/lander_flight_test.gd new file mode 100644 index 0000000..74bfee5 --- /dev/null +++ b/tests/levels/lander_flight_test.gd @@ -0,0 +1,81 @@ +extends Node +const MOTION := preload("res://scripts/planets/lander_motion.gd") +func _ready() -> void: + var motion := MOTION.new() + for tick in 60: + motion.step(1.0/60,1,false,false,0,false) + assert(motion.velocity == Vector2.ZERO and motion.rotation > 1) + motion = MOTION.new() + for tick in 60: + motion.step(1.0/60,0,true,false,0,false) + assert(motion.velocity.y < -50) + var speed: float = motion.velocity.length() + motion.step(1.0/60,0,false,false,0,false) + assert(motion.velocity.length() > speed-1 and motion.velocity.length() < speed) + for tick in 120: + motion.step(1.0/60,0,false,true,0,false) + assert(motion.velocity.y > 0 and motion.velocity.y <= motion.reverse_max_speed) + motion = MOTION.new() + motion.rotation = PI*0.5 + motion.step(0.1,0,true,false,0,false) + assert(motion.velocity.x > 0 and absf(motion.velocity.y) < 0.01) + motion = MOTION.new() + motion.step(0.1,0,false,false,1,false) + assert(motion.velocity.x > 0 and motion.rotation == 0) + for tick in 120: + motion.step(1.0/60,0,true,false,0,true) + assert(motion.boost_active and motion.energy < 100 and motion.velocity.length() > motion.max_speed) + var game := preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await get_tree().process_frame + var manager := game.get_node("PlanetExpeditions") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(-9999,-9999) + # Compare the actual ship controller with the lander under the same actions. + var paired := MOTION.new() + paired.configure(game.player) + game.player.position = Vector2(10000,10000) + game.player.velocity = Vector2.ZERO + game.player.rotation = 0 + game.player.angular_velocity = 0 + for phase in [["ship_thrust",0.0,true,false,0.0],["ship_turn_right",1.0,false,false,0.0],["ship_strafe_right",0.0,false,false,1.0],["ship_brake",0.0,false,true,0.0]]: + Input.action_press(phase[0]) + for tick in 60: + game.player._physics_process(1.0/60) + paired.step(1.0/60,phase[1],phase[2],phase[3],phase[4],false) + assert(game.player.velocity.distance_to(paired.velocity) < 0.001) + assert(absf(angle_difference(game.player.rotation,paired.rotation)) < 0.001) + Input.action_release(phase[0]) + game.player.velocity = Vector2.ZERO + game.player.rotation = 0 + game.player.angular_velocity = 0 + game.player.position = game.protected_planet.position + manager._process(0) + manager.scan_nearby() + assert(manager._text.text.contains("TLEN") and manager._text.text.contains("TEMPERATURA") and manager._text.text.contains("FLORA")) + assert(manager._text.text.contains("Pierwszy etap POI")) + manager.land_nearby() + var screen: Control = manager.screen + assert(screen._motion.max_speed == game.player.max_speed) + assert(screen._motion.turn_acceleration == game.player.turn_acceleration) + screen.lander.position = screen.world.data.pois[0].position + var key := InputEventKey.new() + key.pressed = true + key.keycode = KEY_E + screen._input(key) + assert(not screen._dialog.visible) + key.keycode = KEY_F + screen._input(key) + assert(screen._dialog.visible) + var ship_energy: float = game.player.energy + Input.action_press("ship_thrust") + screen._dialog.hide() + screen._physics_process(0.1) + Input.action_release("ship_thrust") + assert(screen._motion.velocity.y < 0) + assert(game.player.energy == ship_energy) + manager.finish_surface(true) + game.queue_free() + await get_tree().process_frame + print("LANDER FLIGHT PASS: thrust, inertia, brake/reverse, rotation, local strafe, boost, shared parameters, F interaction, immediate scan") + get_tree().quit() diff --git a/tests/levels/lander_flight_test.gd.uid b/tests/levels/lander_flight_test.gd.uid new file mode 100644 index 0000000..c1c5dac --- /dev/null +++ b/tests/levels/lander_flight_test.gd.uid @@ -0,0 +1 @@ +uid://11don000ouhx diff --git a/tests/levels/lander_flight_test.tscn b/tests/levels/lander_flight_test.tscn new file mode 100644 index 0000000..91bf8ae --- /dev/null +++ b/tests/levels/lander_flight_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/levels/lander_flight_test.gd" id="1"] +[node name="LanderFlightTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/levels/landscape_generation_test.gd b/tests/levels/landscape_generation_test.gd new file mode 100644 index 0000000..b0ca07b --- /dev/null +++ b/tests/levels/landscape_generation_test.gd @@ -0,0 +1,23 @@ +extends Node +const GENERATOR := preload("res://scripts/planets/surface_generator.gd") +func _ready() -> void: + var styles := {} + var kinds := {} + for index in 6: + var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(711,index,"Test") + profile.temperature = 70 if index==4 else (-30 if index==5 else 20) + var data: Dictionary = GENERATOR.generate(200+index,profile) + styles[data.landscape.name] = true + assert(data.pois.size() == 8 and data.rocks.size() > 0) + assert(not data.has("rivers") and not data.has("river")) + assert(data.structures.size() > 0) + for structure in data.structures: + kinds[structure.kind] = true + for mountain in data.mountains: + assert(structure.position.distance_to(mountain.position) >= float(structure.size)*0.55+float(mountain.size)*0.7) + assert(data.height_texture.get_width() == 1024) + var repeated: Dictionary = GENERATOR.generate(200+index,profile) + assert(repeated.structures == data.structures and repeated.events == data.events and repeated.pois == data.pois) + assert(styles.size() == 6 and kinds.size() >= 4) + print("LANDSCAPE GENERATION PASS: six styles, seven scenery types, deterministic layouts, no rivers, separated mountains and buildings") + get_tree().quit() diff --git a/tests/levels/landscape_generation_test.gd.uid b/tests/levels/landscape_generation_test.gd.uid new file mode 100644 index 0000000..ec75fd6 --- /dev/null +++ b/tests/levels/landscape_generation_test.gd.uid @@ -0,0 +1 @@ +uid://cyki82oexi44 diff --git a/tests/levels/landscape_generation_test.tscn b/tests/levels/landscape_generation_test.tscn new file mode 100644 index 0000000..4a271a4 --- /dev/null +++ b/tests/levels/landscape_generation_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/levels/landscape_generation_test.gd" id="1"] +[node name="LandscapeGenerationTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/levels/planet_expeditions_test.gd b/tests/levels/planet_expeditions_test.gd new file mode 100644 index 0000000..c00eff6 --- /dev/null +++ b/tests/levels/planet_expeditions_test.gd @@ -0,0 +1,132 @@ +extends Node +const GEAR := preload("res://scripts/planets/captain_equipment.gd") +const PROFILES := preload("res://scripts/planets/planet_profiles.gd") +const SURFACE := preload("res://scripts/planets/surface_generator.gd") +func _ready() -> void: + var captain: Resource = preload("res://scripts/captain/captain_progress.gd").new() + assert(captain.gear_items.size() == 3) + for kind in GEAR.KINDS: + assert(GEAR.level(captain,kind) == 1) + assert(not GEAR.equip(captain,"suit",1)) + var easy := 0 + for index in 1000: + var profile: Dictionary = PROFILES.generate(821,index,"Test") + if profile.easy: + easy += 1 + assert(profile.oxygen > 80 and profile.temperature >= -10 and profile.temperature <= 40 and profile.flora == 0) + assert(profile.landing_damage >= 5 and profile.landing_damage <= 20) + assert(easy > 640 and easy < 760) + var profile: Dictionary = PROFILES.generate(821,0,"Test") + var state: Resource = captain.expedition + assert(state.begin_visit(profile)) + var seed1: int = state.visit_seed + state.add_material("silicon",12) + var before := int(captain.minerals.get("silicon",0)) + assert(int(captain.minerals.get("silicon",0)) == before) + state.finish_visit(captain,true) + assert(captain.minerals.silicon == before+12) + state.finish_visit(captain,true) + assert(captain.minerals.silicon == before+12) + assert(not state.begin_visit(profile)) + captain.parts = 300 + var parts_before: int = captain.parts + var cost: int = state.repair_cost() + assert(state.repair(captain)) + assert(captain.parts == parts_before-cost) + assert(state.begin_visit(profile)) + assert(state.visit_seed != seed1) + state.add_material("silicon",100) + state.damage(100) + state.finish_visit(captain,true) + assert(captain.minerals.silicon == before+12) + assert(state.repair_cost() == 100) + assert(state.repair(captain)) + for key in ["silicon","copper","nickel","iron","tungsten","titanium"]: + captain.minerals[key] = 200 + var crafted: Dictionary = GEAR.craft(captain,"breathing") + assert(crafted.level == 2) + assert(GEAR.level(captain,"breathing") == 1) + assert(GEAR.equip(captain,"breathing",crafted.uid)) + assert(GEAR.level(captain,"breathing") == 2) + var world: Dictionary = SURFACE.generate(11447,profile) + assert(world.pois.size() == 8 and world.trees.size() > 0 and world.mountains.size() > 0 and world.structures.size() > 0) + assert(SURFACE.generate(11447,profile).pois == world.pois) + assert(SURFACE.generate(11448,profile).pois != world.pois) + for seed_value in 100: + var system: Dictionary = preload("res://scripts/levels/system_generator.gd").generate(1+seed_value%50,seed_value+711) + var landable := 0 + for planet in system.planets: + if planet.earthlike: + landable += 1 + assert(PROFILES.is_earthlike(planet.texture)) + if planet.protected: + assert(planet.earthlike and not planet.profile.is_empty()) + assert(landable >= 1) + var game := preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await get_tree().process_frame + var manager := game.get_node("PlanetExpeditions") + var player := game.get_node("PlayerShip") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(9999,9999) + player.position = manager.freighter.position + await get_tree().process_frame + player.landing_combat_lock = 6 + manager._process(0) + manager.land_nearby() + assert(manager.screen == null and not get_tree().paused) + player.landing_combat_lock = 0 + var blocker := get_tree().get_first_node_in_group("enemies") + blocker.position = player.position + Vector2(200,0) + assert(manager.combat_blocked()) + manager.land_nearby() + assert(manager.screen == null) + blocker.position = Vector2(9999,9999) + assert(not manager.combat_blocked()) + var inventory: ShipInventory = player.get_node("ShipInventory") + var module := preload("res://scripts/items/item_generator.gd").generate_loot(1,0) + for slot in 20: + inventory.cargo[slot] = module + GameState.captain.expedition.delivered_modules.append(module) + assert(GameState.captain.expedition.deliver_modules(inventory) == 0) + assert(GameState.captain.expedition.delivered_modules.size() == 1) + inventory.cargo[0] = null + assert(GameState.captain.expedition.deliver_modules(inventory) == 1) + assert(GameState.captain.expedition.delivered_modules.is_empty()) + var gear_panel := game.get_node("HUD/HUDRoot/CaptainEquipment") + var breathing_slot := gear_panel.find_child("BreathingSlot",true,false) + var suit_slot := gear_panel.find_child("SuitSlot",true,false) + GameState.captain.parts = 500 + GameState.captain.minerals.silicon = 500 + GameState.captain.minerals.copper = 500 + var upgrade: Dictionary = GEAR.craft(GameState.captain,"breathing") + assert(breathing_slot._can_drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid})) + assert(not suit_slot._can_drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid})) + assert(not breathing_slot._can_drop_data(Vector2.ZERO,{"item":module})) + breathing_slot._drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid}) + assert(GEAR.level(GameState.captain,"breathing") == 2) + manager.land_nearby() + assert(get_tree().paused and player.is_docked) + assert(manager.screen != null) + manager.screen._tab = "workshop" + manager.screen._refresh() + manager.screen._tab = "lab" + manager.screen._refresh() + manager._leave() + assert(not get_tree().paused and not player.is_docked) + player.position = game.protected_planet.position + await get_tree().process_frame + manager.scan_nearby() + manager.land_nearby() + assert(get_tree().paused and GameState.captain.expedition.active) + assert(manager.screen.world.data.pois.size() == 8) + manager.screen.lander.position = manager.screen.world.data.pois[0].position + manager.screen._poi = manager.screen.world.data.pois[0] + manager.screen._show_poi() + manager.screen._attempt() + manager.finish_surface(true) + assert(not get_tree().paused) + game.queue_free() + await get_tree().process_frame + print("PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return") + get_tree().quit() diff --git a/tests/levels/planet_expeditions_test.gd.uid b/tests/levels/planet_expeditions_test.gd.uid new file mode 100644 index 0000000..c645f6b --- /dev/null +++ b/tests/levels/planet_expeditions_test.gd.uid @@ -0,0 +1 @@ +uid://d2rid3wjb6fco diff --git a/tests/levels/planet_expeditions_test.tscn b/tests/levels/planet_expeditions_test.tscn new file mode 100644 index 0000000..56d2e38 --- /dev/null +++ b/tests/levels/planet_expeditions_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/levels/planet_expeditions_test.gd" id="1"] +[node name="PlanetExpeditionsTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/levels/planet_prompt_test.gd b/tests/levels/planet_prompt_test.gd new file mode 100644 index 0000000..9cb3130 --- /dev/null +++ b/tests/levels/planet_prompt_test.gd @@ -0,0 +1,93 @@ +extends Node +var game: Node2D +var manager: Node +func settle() -> void: + await get_tree().process_frame + await get_tree().process_frame + +func check_hint(expected: String) -> void: + await settle() + assert(manager._prompt.visible) + assert(manager._text.text.contains(expected)) + assert(manager._prompt.size.y < 260) + assert(manager._prompt.get_global_rect().encloses(manager._text.get_global_rect())) + if manager._land_button.visible: + assert(manager._prompt.get_global_rect().encloses(manager._land_button.get_global_rect())) + assert(get_viewport().get_visible_rect().encloses(manager._prompt.get_global_rect())) + +func _ready() -> void: + GameState.system_seed = 8428159 + game = preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await settle() + manager = game.get_node("PlanetExpeditions") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(-9999,-9999) + game.player.position = Vector2(10000,10000) + game.player.landing_combat_lock = 100 + var start := Time.get_ticks_usec() + for frame in 1000: + manager._process(0) + var elapsed := Time.get_ticks_usec()-start + assert(manager._text.text.is_empty() and not manager._prompt.visible) + print("PROMPT BENCH: 1000 hidden combat refreshes=",elapsed," us; text chars=",manager._text.text.length()) + game.player.position = game.protected_planet.position + manager._process(0) + assert(not manager._prompt.visible) + for frame in 1000: + manager._process(0) + assert(not manager._prompt.visible) + game.player.landing_combat_lock = 0 + manager._process(0) + await check_hint("EARTHLIKE") + var blocker := get_tree().get_first_node_in_group("enemies") + blocker.position = game.player.position+Vector2(100,0) + manager._process(0) + assert(not manager._prompt.visible) + game.player.position = manager.freighter.position + blocker.position = game.player.position+Vector2(100,0) + manager._process(0) + assert(not manager._prompt.visible) + blocker.position = Vector2(-9999,-9999) + game.player.position = game.protected_planet.position + manager._process(0) + await check_hint("EARTHLIKE") + # Reproduce an oversized panel retained by an earlier combat warning. + manager._prompt.size.y = 21054 + manager._text.text = "Old oversized prompt" + game.player.landing_combat_lock = 0 + manager._process(0) + await check_hint("EARTHLIKE") + assert(not manager._land_button.disabled) + manager.scan_nearby() + manager._process(0) + await check_hint("TEMPERATURA") + if "--capture-preview" in OS.get_cmdline_user_args(): + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/planet_scan_stats.png") + manager._message_time = 0 + manager._process(0) + await check_hint("TLEN") + for visit in 10: + game.player.position = manager.freighter.position + manager._process(0) + await check_hint("FRACHTOWIEC") + assert(manager._land_button.text == "DOKUJ [L]") + if visit == 0 and "--capture-preview" in OS.get_cmdline_user_args(): + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/freighter_prompt_fixed.png") + game.player.position = game.protected_planet.position + manager._process(0) + await check_hint("TLEN") + game.player.position = Vector2(10000,10000) + manager._notice("Krótka wiadomość") + manager._process(0) + await check_hint("Krótka wiadomość") + assert(not manager._land_button.visible) + manager._message_time = 0 + manager._process(0) + assert(not manager._prompt.visible) + print("PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content") + game.queue_free() + await settle() + get_tree().quit() diff --git a/tests/levels/planet_prompt_test.gd.uid b/tests/levels/planet_prompt_test.gd.uid new file mode 100644 index 0000000..fe79a90 --- /dev/null +++ b/tests/levels/planet_prompt_test.gd.uid @@ -0,0 +1 @@ +uid://ch30r6x546lp7 diff --git a/tests/levels/planet_prompt_test.tscn b/tests/levels/planet_prompt_test.tscn new file mode 100644 index 0000000..3aa42a0 --- /dev/null +++ b/tests/levels/planet_prompt_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/levels/planet_prompt_test.gd" id="1"] +[node name="PlanetPromptTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/levels/surface_events_test.gd b/tests/levels/surface_events_test.gd new file mode 100644 index 0000000..5e40aa1 --- /dev/null +++ b/tests/levels/surface_events_test.gd @@ -0,0 +1,59 @@ +extends Node +const PROGRESS := preload("res://scripts/planets/planet_progress.gd") +const GENERATOR := preload("res://scripts/planets/surface_generator.gd") +func _ready() -> void: + var rng := RandomNumberGenerator.new() + rng.seed = 727373 + var histogram := PackedInt32Array() + histogram.resize(21) + for index in 40000: + var bonus: int = PROGRESS.roll_engineer_bonus(rng) + assert(bonus >= 0 and bonus <= 20) + histogram[bonus] += 1 + assert(histogram[0] > 9500 and histogram[0] < 10500) + assert(histogram[10] > 450 and histogram[10] < 700) + assert(histogram[20] > 0 and histogram[20] < 80) + var captain: Resource = preload("res://scripts/captain/captain_progress.gd").new() + var state: Resource = captain.expedition + var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(777,1,"Test") + state.begin_visit(profile) + var event := {"kind":"engineer","complete":false} + captain.credits = 99 + assert(not state.buy_engineer_offer(captain,event,rng).success) + assert(captain.credits == 99 and state.cargo_modules.is_empty() and not event.complete) + captain.credits = 200 + var before_level := GameState.system_level + GameState.system_level = 32 + var result: Dictionary = state.buy_engineer_offer(captain,event,rng) + assert(result.success and captain.credits == 100 and event.complete) + assert(result.item.item_level >= 32 and result.item.item_level <= 52) + assert(state.cargo_modules.size() == 1) + assert(not state.buy_engineer_offer(captain,event,rng).success) + assert(captain.credits == 100 and state.cargo_modules.size() == 1) + state.finish_visit(captain,true) + assert(state.delivered_modules.size() == 1) + state.lander_hp = 100 + state.begin_visit(profile) + state.buy_engineer_offer(captain,{"kind":"engineer","complete":false},rng) + state.damage(100) + state.finish_visit(captain,true) + assert(captain.credits == 0 and state.delivered_modules.size() == 1) + GameState.system_level = before_level + var encounters := 0 + for index in 30: + var data: Dictionary = GENERATOR.generate(200+index,profile) + assert(not data.has("river") and not data.has("rivers")) + assert(data.structures.size() <= 5) + assert(data.events.size() <= 1) + encounters += data.events.size() + for structure in data.structures: + var at: Vector2 = structure.position + for offset in [Vector2.ZERO,Vector2.UP,Vector2.DOWN,Vector2.LEFT,Vector2.RIGHT]: + var point: Vector2 = at + offset*float(structure.size)*0.55 + var x := clampi(int((point.x+1920)/40),0,95) + var y := clampi(int((point.y+1920)/40),0,95) + assert(data.heights[y*96+x] >= 0.32) + assert(encounters > 3 and encounters < 23) + print("SURFACE EVENTS PASS: no rivers, dry scenery placement, occasional events, exponential levels, price, insufficient funds, one purchase and expedition cargo") + print("Engineer bonuses / 40000 rolls: +0=",histogram[0]," +10=",histogram[10]," +20=",histogram[20]) + get_tree().quit() diff --git a/tests/levels/surface_events_test.gd.uid b/tests/levels/surface_events_test.gd.uid new file mode 100644 index 0000000..8d3133f --- /dev/null +++ b/tests/levels/surface_events_test.gd.uid @@ -0,0 +1 @@ +uid://cr5pc3wreypo3 diff --git a/tests/levels/surface_events_test.tscn b/tests/levels/surface_events_test.tscn new file mode 100644 index 0000000..a821749 --- /dev/null +++ b/tests/levels/surface_events_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/levels/surface_events_test.gd" id="1"] +[node name="SurfaceEventsTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/previews/lander_engine_test.gd b/tests/previews/lander_engine_test.gd new file mode 100644 index 0000000..512d7dc --- /dev/null +++ b/tests/previews/lander_engine_test.gd @@ -0,0 +1,53 @@ +extends Node +func _ready() -> void: + GameState.system_seed = 8428159 + var game := preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await get_tree().process_frame + var manager := game.get_node("PlanetExpeditions") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(9000,9000) + game.player.position = game.protected_planet.position + manager.scan_nearby() + manager.land_nearby() + var surface: Control = manager.screen + var audio: AudioStreamPlayer = surface.get_node("EngineAudio") + var engine: Node2D = surface.lander.get_node("EngineVisual") + assert(audio.get_script() == preload("res://scripts/game/ship_engine_audio.gd")) + assert(audio.stream is AudioStreamMP3 and audio.stream.loop and audio.playing) + assert(engine.nozzle_positions.size() == 2 and engine.nozzle_positions[0].x < 0 and engine.nozzle_positions[1].x > 0) + Input.action_press("ship_thrust") + audio._process(1.0) + engine._process(0.25) + assert(surface.engine_thrust_active() and engine._strength == 1 and audio.volume_db == -11) + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/lander_engines_normal.png") + Input.action_press("ship_mini_boost") + surface._physics_process(1.0/60) + engine._process(0.1) + assert(engine._boost) + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/lander_engines_boost.png") + surface._dialog.show() + assert(not surface.engine_thrust_active()) + audio._process(1) + engine._process(0.3) + assert(audio.volume_db == -60 and engine._strength == 0) + surface._dialog.hide() + Input.action_release("ship_thrust") + Input.action_release("ship_mini_boost") + surface._physics_process(1.0/60) + assert(not surface.engine_thrust_active()) + surface._ending = true + assert(not surface.engine_thrust_active()) + var instance := audio.get_instance_id() + manager.finish_surface(true) + await get_tree().process_frame + await get_tree().process_frame + assert(not is_instance_id_valid(instance)) + game.queue_free() + await get_tree().process_frame + print("LANDER ENGINE PASS: ship MP3, twin nozzle positions, thrust, boost, POI silence, coast silence, shutdown cleanup") + get_tree().quit() diff --git a/tests/previews/lander_engine_test.gd.uid b/tests/previews/lander_engine_test.gd.uid new file mode 100644 index 0000000..ebb888a --- /dev/null +++ b/tests/previews/lander_engine_test.gd.uid @@ -0,0 +1 @@ +uid://lsdu24o54toa diff --git a/tests/previews/lander_engine_test.tscn b/tests/previews/lander_engine_test.tscn new file mode 100644 index 0000000..2a13441 --- /dev/null +++ b/tests/previews/lander_engine_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/previews/lander_engine_test.gd" id="1"] +[node name="LanderEngineTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/previews/lander_render_test.gd b/tests/previews/lander_render_test.gd new file mode 100644 index 0000000..755df28 --- /dev/null +++ b/tests/previews/lander_render_test.gd @@ -0,0 +1,59 @@ +extends Node +func _ready() -> void: + GameState.system_seed = 8428159 + var game := preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await get_tree().process_frame + var manager := game.get_node("PlanetExpeditions") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(9000,9000) + game.player.position = game.protected_planet.position + game.player.landing_combat_lock = 0 + manager.scan_nearby() + manager.land_nearby() + var surface: Control = manager.screen + assert(surface.lander.physics_interpolation_mode == Node.PHYSICS_INTERPOLATION_MODE_ON) + assert(surface.lander.texture_filter == CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS) + # Deliberately separate physics and render rates to expose stepping. + Engine.physics_ticks_per_second = 20 + Engine.max_fps = 120 + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) + surface._motion.velocity = Vector2(160,0) + var previous_physics: Vector2 = surface.lander.position + var previous_render := previous_physics + var interpolated_frames := 0 + var frame_times: Array[float] = [] + var start := Time.get_ticks_usec() + var last := start + for frame in 180: + await RenderingServer.frame_post_draw + var now := Time.get_ticks_usec() + if frame > 20: + frame_times.append((now-last)/1000.0) + last = now + var pose: Vector2 = surface.camera.position + if surface.lander.position.is_equal_approx(previous_physics) and not pose.is_equal_approx(previous_render): + interpolated_frames += 1 + previous_physics = surface.lander.position + previous_render = pose + assert(interpolated_frames > 20) + Engine.physics_ticks_per_second = 60 + frame_times.sort() + print("LANDER RENDER PASS: interpolated intermediate frames=",interpolated_frames, + "; median frame ms=",frame_times[frame_times.size()/2], + "; p95 ms=",frame_times[int(frame_times.size()*0.95)]) + surface.lander.position = Vector2.ZERO + surface._previous_position = Vector2.ZERO + surface.lander.rotation = 0 + surface._motion.velocity = Vector2.ZERO + surface._motion.rotation = 0 + surface.lander.reset_physics_interpolation() + surface.camera.position = Vector2.ZERO + surface.camera.reset_smoothing() + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/lander_sharp_preview.png") + manager.finish_surface(true) + game.queue_free() + await get_tree().process_frame + get_tree().quit() diff --git a/tests/previews/lander_render_test.gd.uid b/tests/previews/lander_render_test.gd.uid new file mode 100644 index 0000000..1244a7a --- /dev/null +++ b/tests/previews/lander_render_test.gd.uid @@ -0,0 +1 @@ +uid://dj7obsf8mw838 diff --git a/tests/previews/lander_render_test.tscn b/tests/previews/lander_render_test.tscn new file mode 100644 index 0000000..1367db1 --- /dev/null +++ b/tests/previews/lander_render_test.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/previews/lander_render_test.gd" id="1"] +[node name="LanderRenderTest" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/previews/landscape_preview.gd b/tests/previews/landscape_preview.gd new file mode 100644 index 0000000..3dcec87 --- /dev/null +++ b/tests/previews/landscape_preview.gd @@ -0,0 +1,63 @@ +extends Node +func _ready() -> void: + if not InputMap.has_action("ship_mini_boost"): + InputMap.add_action("ship_mini_boost") + var palette_names := {} + var sheet := Image.create(1280,1080,false,Image.FORMAT_RGBA8) + var progress: Resource = GameState.captain.expedition + for index in 6: + var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(99,index,"Krajobraz %d" % (index+1)) + profile.temperature = 75 if index==4 else (-35 if index==5 else 20) + profile.easy = index<4 + profile.oxygen = 90 + profile.flora = 0 + progress.lander_hp = 100 + assert(progress.begin_visit(profile)) + progress.visit_seed = 200+index + var surface := Control.new() + surface.set_script(preload("res://scripts/planets/surface_screen.gd")) + surface.captain = GameState.captain + surface.progress = progress + add_child(surface) + var material: ShaderMaterial = surface.world.get_node("Terrain").material + if "--debug-region" in OS.get_cmdline_user_args(): + var diagnostic := material.shader.duplicate() as Shader + diagnostic.code = diagnostic.code.replace("COLOR=vec4(mix(shore*shade,water,lake),1.0);","COLOR=vec4(vec3(region),1.0);") + material.shader = diagnostic + for kind in ["soil","rock","sand","moss"]: + var texture: Texture2D = material.get_shader_parameter(kind+"_detail") + assert(texture != null and texture.get_width() >= 1024) + var target: Vector2 = surface.world.data.structures[0].position if not surface.world.data.structures.is_empty() else surface.world.data.pois[0].position + target = target.clamp(Vector2(-1200,-1200),Vector2(1200,1200)) + surface.lander.position = target + surface._previous_position = target + surface.lander.reset_physics_interpolation() + surface.camera.position = target + surface.camera.reset_smoothing() + palette_names[surface.world.data.landscape.name] = true + for frame in 4: + await get_tree().process_frame + await RenderingServer.frame_post_draw + var screenshot: Image = get_viewport().get_texture().get_image() + screenshot.save_png("res://artifacts/%sterrain_detail_%d.png" % ["debug_" if "--debug-region" in OS.get_cmdline_user_args() else "",index]) + if index == 0 and "--debug-region" in OS.get_cmdline_user_args(): + var seams := 0 + for y in range(220,600,2): + for x in range(480,1000): + var a := screenshot.get_pixel(x,y) + var b := screenshot.get_pixel(x+1,y) + if absf(a.r-a.g)<0.0005 and absf(a.g-a.b)<0.0005 and absf(b.r-b.g)<0.0005 and absf(b.g-b.b)<0.0005 and absf(a.r-b.r)>0.07: + seams += 1 + assert(seams < 20) + print("TERRAIN NOISE CONTINUITY PASS: abrupt grayscale edges=",seams) + screenshot.convert(Image.FORMAT_RGBA8) + screenshot.resize(640,360,Image.INTERPOLATE_LANCZOS) + sheet.blit_rect(screenshot,Rect2i(0,0,640,360),Vector2i(index%2*640,index/2*360)) + progress.finish_visit(GameState.captain,true) + surface.queue_free() + await get_tree().process_frame + assert(palette_names.size() == 6) + if not "--debug-region" in OS.get_cmdline_user_args(): + sheet.save_png("res://artifacts/terrain_material_variants_final.png") + print("LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered") + get_tree().quit() diff --git a/tests/previews/landscape_preview.gd.uid b/tests/previews/landscape_preview.gd.uid new file mode 100644 index 0000000..87e8418 --- /dev/null +++ b/tests/previews/landscape_preview.gd.uid @@ -0,0 +1 @@ +uid://d1e1u6ofd0cx6 diff --git a/tests/previews/landscape_preview.tscn b/tests/previews/landscape_preview.tscn new file mode 100644 index 0000000..871fcdc --- /dev/null +++ b/tests/previews/landscape_preview.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/previews/landscape_preview.gd" id="1"] +[node name="LandscapePreview" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/previews/planet_preview.gd b/tests/previews/planet_preview.gd new file mode 100644 index 0000000..aea360a --- /dev/null +++ b/tests/previews/planet_preview.gd @@ -0,0 +1,69 @@ +extends Node +func _ready() -> void: + GameState.system_seed = 8428159 + var game := preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await get_tree().process_frame + var manager := game.get_node("PlanetExpeditions") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(9000,9000) + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/planet_hud.png") + manager.open_freighter() + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/freighter_hangar.png") + manager.screen._tab = "workshop" + manager.screen._refresh() + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/freighter_workshop.png") + manager._leave() + GameState.captain.expedition.lander_hp = 100 + game.player.position = game.protected_planet.position + await get_tree().process_frame + manager._process(0) + game.player.landing_combat_lock = 0 + manager.scan_nearby() + manager.land_nearby() + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/planet_surface.png") + var screen: Control = manager.screen + screen.lander.position = screen.world.data.pois[0].position + screen.camera.position = screen.lander.position + screen.camera.reset_smoothing() + screen._poi = screen.world.data.pois[0] + screen._show_poi() + await get_tree().process_frame + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/planet_poi.png") + GameState.captain.expedition.damage(100) + screen._attempt() + await get_tree().create_timer(3.0,true).timeout + await RenderingServer.frame_post_draw + get_viewport().get_texture().get_image().save_png("res://artifacts/planet_lander_destruction.png") + await screen.finished + assert(not get_tree().paused and not GameState.captain.expedition.last_result.success) + var sheet := Image.create(1024,768,false,Image.FORMAT_RGBA8) + sheet.fill(Color("#16232a")) + var keys := ["breathing","suit","sidearm","lander","tree","mountain","mine","ruins","grass","freighter"] + for index in keys.size(): + var image: Image = load("res://assets/planets/%s.png" % keys[index]).get_image() + if image.is_compressed(): image.decompress() + image.convert(Image.FORMAT_RGBA8) + image.resize(220,220,Image.INTERPOLATE_LANCZOS) + sheet.blend_rect(image,Rect2i(0,0,220,220),Vector2i(index%4*256,index/4*256)) + sheet.save_png("res://artifacts/planet_asset_sheet.png") + var planets := Image.create(1250,750,false,Image.FORMAT_RGBA8) + planets.fill(Color("#08111a")) + for index in 15: + var image: Image = preload("res://scripts/planets/planet_profiles.gd").earthlike_textures()[index].get_image() + if image.is_compressed(): image.decompress() + image.convert(Image.FORMAT_RGBA8) + image.resize(240,240,Image.INTERPOLATE_LANCZOS) + planets.blend_rect(image,Rect2i(0,0,240,240),Vector2i(index%5*250,index/5*250)) + planets.save_png("res://artifacts/earthlike_review.png") + print("PLANET PREVIEWS CAPTURED") + get_tree().quit() diff --git a/tests/previews/planet_preview.gd.uid b/tests/previews/planet_preview.gd.uid new file mode 100644 index 0000000..9b3b9e5 --- /dev/null +++ b/tests/previews/planet_preview.gd.uid @@ -0,0 +1 @@ +uid://datmnerpvi4kv diff --git a/tests/previews/planet_preview.tscn b/tests/previews/planet_preview.tscn new file mode 100644 index 0000000..bfcf27d --- /dev/null +++ b/tests/previews/planet_preview.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/previews/planet_preview.gd" id="1"] +[node name="PlanetPreview" type="Node"] +script = ExtResource("1") \ No newline at end of file diff --git a/tests/previews/surface_scenery_preview.gd b/tests/previews/surface_scenery_preview.gd new file mode 100644 index 0000000..bd84e3d --- /dev/null +++ b/tests/previews/surface_scenery_preview.gd @@ -0,0 +1,81 @@ +extends Node +func settle() -> void: + for frame in 4: + await get_tree().process_frame + await RenderingServer.frame_post_draw + +func teleport(surface: Control, at: Vector2) -> void: + surface.lander.position = at + surface._previous_position = at + surface.lander.reset_physics_interpolation() + surface.camera.position = at + surface.camera.reset_smoothing() + surface.world.refresh_pois(at) + +func _ready() -> void: + GameState.system_seed = 8428159 + GameState.captain.credits = 500 + var game := preload("res://scenes/game/game.tscn").instantiate() + add_child(game) + await settle() + get_viewport().get_texture().get_image().save_png("res://artifacts/space_ship_comparison.png") + var manager := game.get_node("PlanetExpeditions") + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.position = Vector2(9999,9999) + var planet: Node2D = game.protected_planet + var found_seed := 0 + for index in range(200,240): + var data: Dictionary = preload("res://scripts/planets/surface_generator.gd").generate(index,planet.planet_profile) + if not data.events.is_empty(): + found_seed = index + break + assert(found_seed > 0) + planet.planet_profile.seed = found_seed ^ 7919 + game.player.position = planet.position + game.player.landing_combat_lock = 0 + manager.scan_nearby() + manager.land_nearby() + var surface: Control = manager.screen + assert(surface.camera.zoom.is_equal_approx(Vector2.ONE*0.8*surface.SURFACE_RENDER_SCALE)) + assert(surface.world.data.structures.size() <= 5 and surface.world.data.events.size() == 1) + assert(surface._surface_viewport.size == Vector2i(1920,1080)) + for event_nodes in surface.world._event_nodes: + assert(event_nodes.size() == 1 and event_nodes.has("marker")) + var event: Dictionary = surface.world.data.events[0] + teleport(surface,event.position+Vector2(0,220)) + await settle() + get_viewport().get_texture().get_image().save_png("res://artifacts/planet_scenery_event_marker.png") + teleport(surface,event.position+Vector2(0,100)) + surface._check_events() + assert(surface._dialog.visible) + await settle() + get_viewport().get_texture().get_image().save_png("res://artifacts/engineer_event_offer.png") + var purchase: Button + for child in surface._choices.get_children(): + if child is Button and child.text.begins_with("KUP NIEZNANY"): + purchase = child + assert(purchase != null and not purchase.disabled) + purchase.pressed.emit() + assert(event.complete and GameState.captain.credits == 400) + assert(surface.progress.cargo_modules.size() == 1) + await settle() + get_viewport().get_texture().get_image().save_png("res://artifacts/engineer_event_result.png") + var keys: Array = preload("res://scripts/planets/surface_scenery.gd").KINDS.duplicate() + keys.append("engineer_camp") + var sheet := Image.create(1280,640,false,Image.FORMAT_RGBA8) + sheet.fill(Color("15252e")) + for index in keys.size(): + var texture: Texture2D = load("res://assets/planets/props/%s.png" % keys[index]) + var image: Image = texture.get_image() + if image.is_compressed(): image.decompress() + image.convert(Image.FORMAT_RGBA8) + assert(image.get_pixel(0,0).a < 0.01) + var scale_value := minf(285.0/image.get_width(),285.0/image.get_height()) + image.resize(roundi(image.get_width()*scale_value),roundi(image.get_height()*scale_value),Image.INTERPOLATE_LANCZOS) + sheet.blend_rect(image,Rect2i(Vector2i.ZERO,image.get_size()),Vector2i(index%4*320+(320-image.get_width())/2,index/4*320+(320-image.get_height())/2)) + sheet.save_png("res://artifacts/surface_props_sheet.png") + manager.finish_surface(true) + game.queue_free() + await get_tree().process_frame + print("SURFACE SCENERY UI PASS: zoom, props, transparency, automatic event dialog, 100-credit purchase, temporary module cargo") + get_tree().quit() diff --git a/tests/previews/surface_scenery_preview.gd.uid b/tests/previews/surface_scenery_preview.gd.uid new file mode 100644 index 0000000..c425533 --- /dev/null +++ b/tests/previews/surface_scenery_preview.gd.uid @@ -0,0 +1 @@ +uid://cijqf61a7sny6 diff --git a/tests/previews/surface_scenery_preview.tscn b/tests/previews/surface_scenery_preview.tscn new file mode 100644 index 0000000..c2552b0 --- /dev/null +++ b/tests/previews/surface_scenery_preview.tscn @@ -0,0 +1,4 @@ +[gd_scene load_steps=2 format=3] +[ext_resource type="Script" path="res://tests/previews/surface_scenery_preview.gd" id="1"] +[node name="SurfaceSceneryPreview" type="Node"] +script = ExtResource("1") \ No newline at end of file