diff --git a/addons/dialogic/Modules/Signal/icon.png.import b/addons/dialogic/Modules/Signal/icon.png.import index 56ae09e..3d0b745 100644 --- a/addons/dialogic/Modules/Signal/icon.png.import +++ b/addons/dialogic/Modules/Signal/icon.png.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://bxorbhnr4o2rj" -path="res://.godot/imported/icon.png-5e2e422904d471016252dff8d4bdfa96.ctex" +path.s3tc="res://.godot/imported/icon.png-5e2e422904d471016252dff8d4bdfa96.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://addons/dialogic/Modules/Signal/icon.png" -dest_files=["res://.godot/imported/icon.png-5e2e422904d471016252dff8d4bdfa96.ctex"] +dest_files=["res://.godot/imported/icon.png-5e2e422904d471016252dff8d4bdfa96.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,4 +38,4 @@ 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 +detect_3d/compress_to=0 diff --git a/addons/dialogic/Modules/Text/node_name_label_icon.svg.import b/addons/dialogic/Modules/Text/node_name_label_icon.svg.import index d1d8625..7b9c36d 100644 --- a/addons/dialogic/Modules/Text/node_name_label_icon.svg.import +++ b/addons/dialogic/Modules/Text/node_name_label_icon.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://k0g15mxi14ba" -path="res://.godot/imported/node_name_label_icon.svg-d482939b74b41ec2da6edc97e41c8bf8.ctex" +path.s3tc="res://.godot/imported/node_name_label_icon.svg-d482939b74b41ec2da6edc97e41c8bf8.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://addons/dialogic/Modules/Text/node_name_label_icon.svg" -dest_files=["res://.godot/imported/node_name_label_icon.svg-d482939b74b41ec2da6edc97e41c8bf8.ctex"] +dest_files=["res://.godot/imported/node_name_label_icon.svg-d482939b74b41ec2da6edc97e41c8bf8.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=1.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/game_data/scripts/story/story_step.gd b/common/game_data/scripts/story/story_step.gd index b1beab6..4f16cbc 100644 --- a/common/game_data/scripts/story/story_step.gd +++ b/common/game_data/scripts/story/story_step.gd @@ -54,8 +54,8 @@ func get_first_vending_machine_occurence(_level : int, _difficulty_setting : int func get_vending_machine_occurence(_level : int, _difficulty_setting : int) -> int: return 3 -func get_first_cave_occurence(level : int, difficulty_setting : int) -> int: - return get_cave_occurence(level, difficulty_setting) +func get_first_cave_occurence(_level : int, _difficulty_setting : int) -> int: + return 1 func get_cave_occurence(_level : int, _difficulty_setting : int) -> int: return 3 diff --git a/common/game_data/scripts/story/story_steps/1_1_start_story_step.gd b/common/game_data/scripts/story/story_steps/1_1_start_story_step.gd index 0593329..cb07725 100644 --- a/common/game_data/scripts/story/story_steps/1_1_start_story_step.gd +++ b/common/game_data/scripts/story/story_steps/1_1_start_story_step.gd @@ -32,7 +32,7 @@ func get_region_sequence_length(_difficulty_setting : int) -> int: return 5 func get_objective_multiplier() -> float: - return 0.8 + return 0.6 func is_run_point_dangerous(_level : int, _difficulty_setting : int) -> bool: return false @@ -47,7 +47,7 @@ func get_challenge_chance(_level : int, _difficulty_setting : int) -> float: return 0. func get_ship_dialog_path(level : int, difficulty_setting : int ,ship_in_space := true) -> String: - if ship_in_space and level == get_cave_occurence(level, difficulty_setting): + if ship_in_space and level + 1 == get_cave_occurence(level, difficulty_setting): return CAVE_DIALOG_PATH if ship_in_space and is_run_finished(level + 1, difficulty_setting): return MERCURY_ARRIVAL_DIALOG_PATH diff --git a/common/game_data/scripts/story/story_steps/1_2_mercury_story_step.gd b/common/game_data/scripts/story/story_steps/1_2_mercury_story_step.gd index 88d3abf..c6667d4 100644 --- a/common/game_data/scripts/story/story_steps/1_2_mercury_story_step.gd +++ b/common/game_data/scripts/story/story_steps/1_2_mercury_story_step.gd @@ -36,12 +36,12 @@ func get_region_sequence_length(_difficulty_setting : int) -> int: return 6 func get_objective_multiplier() -> float: - return 1 + return 0.8 func get_ship_dialog_path(level : int, difficulty_setting : int, ship_in_space := true) -> String: if level == 0: return MERCURY_DEPARTURE_DIALOG_PATH - if level == 2: + if level == 1 and ship_in_space: return VENDING_MACHINE_DIALOG_PATH if ship_in_space and is_run_finished(level + 1, difficulty_setting): return VENUS_ARRIVAL_DIALOG_PATH diff --git a/common/game_data/scripts/story/story_steps/1_3_borea_story_step.gd b/common/game_data/scripts/story/story_steps/1_3_borea_story_step.gd index aa06f0c..4bd48e7 100644 --- a/common/game_data/scripts/story/story_steps/1_3_borea_story_step.gd +++ b/common/game_data/scripts/story/story_steps/1_3_borea_story_step.gd @@ -26,7 +26,7 @@ func get_destination_scene() -> Scene: return BoreaScene.new() func get_objective_multiplier() -> float: - return 1.2 + return 1. func get_player_max_energy(difficulty_setting := 1) -> int: if difficulty_setting == 0: diff --git a/common/game_data/scripts/story/story_steps/2_aqua_story_step.gd b/common/game_data/scripts/story/story_steps/2_aqua_story_step.gd index 443f0e1..d56467d 100644 --- a/common/game_data/scripts/story/story_steps/2_aqua_story_step.gd +++ b/common/game_data/scripts/story/story_steps/2_aqua_story_step.gd @@ -34,7 +34,7 @@ func get_player_max_inventory(_difficulty_setting) -> int: return 4 func get_objective_multiplier() -> float: - return 1.4 + return 1.2 func get_ship_dialog_path(level : int, _difficulty_setting : int, _ship_in_space := true) -> String: if level == 5: diff --git a/common/game_data/scripts/story/story_steps/3_subterra_story_step.gd b/common/game_data/scripts/story/story_steps/3_subterra_story_step.gd index 6c31f30..f45da99 100644 --- a/common/game_data/scripts/story/story_steps/3_subterra_story_step.gd +++ b/common/game_data/scripts/story/story_steps/3_subterra_story_step.gd @@ -35,7 +35,7 @@ func get_player_max_inventory(_difficulty_setting : int) -> int: return 5 func get_objective_multiplier() -> float: - return 1.6 + return 1.4 func get_ship_dialog_path(level : int, _difficulty_setting : int, _ship_in_space := true) -> String: if level == 5: diff --git a/common/game_data/scripts/story/story_steps/4_estia_story_step.gd b/common/game_data/scripts/story/story_steps/4_estia_story_step.gd index 9ace114..18cceb6 100644 --- a/common/game_data/scripts/story/story_steps/4_estia_story_step.gd +++ b/common/game_data/scripts/story/story_steps/4_estia_story_step.gd @@ -35,7 +35,7 @@ func get_player_max_inventory(_difficulty_setting : int) -> int: return 5 func get_objective_multiplier() -> float: - return 1.8 + return 1.6 func get_ship_dialog_path(level : int, _difficulty_setting : int, _ship_in_space := true) -> String: if level == 5: diff --git a/common/game_data/scripts/story/story_steps/5_astra_story_step.gd b/common/game_data/scripts/story/story_steps/5_astra_story_step.gd index c5abfee..edf5dd6 100644 --- a/common/game_data/scripts/story/story_steps/5_astra_story_step.gd +++ b/common/game_data/scripts/story/story_steps/5_astra_story_step.gd @@ -22,6 +22,9 @@ func get_logs() -> Array[Log]: func get_destination_text() -> String: return tr("ESTIA_BASE") +func get_region_sequence_length(_difficulty_setting : int) -> int: + return 10 + func get_destination_scene() -> Scene: return AstraScene.new( false diff --git a/common/icons/atom.svg.import b/common/icons/atom.svg.import index f854f7f..d97b193 100644 --- a/common/icons/atom.svg.import +++ b/common/icons/atom.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://n5ohgm4odri5" -path="res://.godot/imported/atom.svg-203f467e4f45f7544a18f8b0644aa19a.ctex" +path.s3tc="res://.godot/imported/atom.svg-203f467e4f45f7544a18f8b0644aa19a.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://common/icons/atom.svg" -dest_files=["res://.godot/imported/atom.svg-203f467e4f45f7544a18f8b0644aa19a.ctex"] +dest_files=["res://.godot/imported/atom.svg-203f467e4f45f7544a18f8b0644aa19a.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/icons/cloud-rain.svg.import b/common/icons/cloud-rain.svg.import index aad2505..7c7bf20 100644 --- a/common/icons/cloud-rain.svg.import +++ b/common/icons/cloud-rain.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://ce3hclmo0jcoh" -path="res://.godot/imported/cloud-rain.svg-80379b0936dff4583ecdd239d916ebab.ctex" +path.s3tc="res://.godot/imported/cloud-rain.svg-80379b0936dff4583ecdd239d916ebab.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://common/icons/cloud-rain.svg" -dest_files=["res://.godot/imported/cloud-rain.svg-80379b0936dff4583ecdd239d916ebab.ctex"] +dest_files=["res://.godot/imported/cloud-rain.svg-80379b0936dff4583ecdd239d916ebab.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/icons/coin.svg.import b/common/icons/coin.svg.import index 96f0325..29d58c7 100644 --- a/common/icons/coin.svg.import +++ b/common/icons/coin.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://cs5jk1312wauu" -path="res://.godot/imported/coin.svg-08623932cd6c1ab8a19bb6ae049240d0.ctex" +path.s3tc="res://.godot/imported/coin.svg-08623932cd6c1ab8a19bb6ae049240d0.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://common/icons/coin.svg" -dest_files=["res://.godot/imported/coin.svg-08623932cd6c1ab8a19bb6ae049240d0.ctex"] +dest_files=["res://.godot/imported/coin.svg-08623932cd6c1ab8a19bb6ae049240d0.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/icons/radioactive.svg.import b/common/icons/radioactive.svg.import index 3419a52..54d53e5 100644 --- a/common/icons/radioactive.svg.import +++ b/common/icons/radioactive.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://baughrx6x5sx2" -path="res://.godot/imported/radioactive.svg-826ebf1689bc47cf482da642b68adf02.ctex" +path.s3tc="res://.godot/imported/radioactive.svg-826ebf1689bc47cf482da642b68adf02.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://common/icons/radioactive.svg" -dest_files=["res://.godot/imported/radioactive.svg-826ebf1689bc47cf482da642b68adf02.ctex"] +dest_files=["res://.godot/imported/radioactive.svg-826ebf1689bc47cf482da642b68adf02.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/icons/wave-sine.svg.import b/common/icons/wave-sine.svg.import index 6cf9c64..7e7c773 100644 --- a/common/icons/wave-sine.svg.import +++ b/common/icons/wave-sine.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://c15ith3niu7sa" -path="res://.godot/imported/wave-sine.svg-af18e7f57640d33da7bef035e7276303.ctex" +path.s3tc="res://.godot/imported/wave-sine.svg-af18e7f57640d33da7bef035e7276303.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://common/icons/wave-sine.svg" -dest_files=["res://.godot/imported/wave-sine.svg-af18e7f57640d33da7bef035e7276303.ctex"] +dest_files=["res://.godot/imported/wave-sine.svg-af18e7f57640d33da7bef035e7276303.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/scene_manager/scripts/scenes/astra_end_scene.gd b/common/scene_manager/scripts/scenes/astra_end_scene.gd index eb2f577..3b11037 100644 --- a/common/scene_manager/scripts/scenes/astra_end_scene.gd +++ b/common/scene_manager/scripts/scenes/astra_end_scene.gd @@ -8,7 +8,7 @@ func get_scene_icon() -> Texture: return preload("res://common/icons/building-factory-2.svg") func get_scene_path() -> String: - return "res://stages/3d_scenes/astra_base/astra_end_base.tscn" + return "res://stages/3d_scenes/astra_end_base/astra_end_base.tscn" func is_mouse_captured() -> bool: return true \ No newline at end of file diff --git a/common/steam_connection/steam_connection.gd b/common/steam_connection/steam_connection.gd index 06ef20a..c0f0656 100644 --- a/common/steam_connection/steam_connection.gd +++ b/common/steam_connection/steam_connection.gd @@ -21,7 +21,7 @@ const ACH_STW_TOO_FAR="STW_TOO_FAR" func unlock_achievement(achivement_name : String): if Steam.isSteamRunning(): var status = Steam.getAchievement(achivement_name) - print("Steam Achievement %s" % achivement_name) + print_debug("Steam Achievement %s" % achivement_name) if status.has("ret") and status.ret and not status.achieved: Steam.setAchievement(achivement_name) Steam.storeStats() \ No newline at end of file diff --git a/common/tools/scripts/random.gd b/common/tools/scripts/random.gd index cc7abda..03b8a5c 100644 --- a/common/tools/scripts/random.gd +++ b/common/tools/scripts/random.gd @@ -186,7 +186,6 @@ const RANDOM_REGION_TYPE_POOL = [ "REGION_TYPE_GROUNDS", "REGION_TYPE_PLATEAU", "REGION_TYPE_FOOTHILLS", - "REGION_TYPE_CANYON", "REGION_TYPE_RIDGE", "REGION_TYPE_LANDSCAPE", ] diff --git a/entities/interactable_3d/3d_door/scripts/3d_door.gd b/entities/interactable_3d/3d_door/scripts/3d_door.gd index a6ba539..3d4b989 100644 --- a/entities/interactable_3d/3d_door/scripts/3d_door.gd +++ b/entities/interactable_3d/3d_door/scripts/3d_door.gd @@ -14,8 +14,8 @@ func set_to_scene(v : Scene = to_scene): %Icon.texture = to_scene.get_scene_icon() %Icon2.texture = to_scene.get_scene_icon() -func click(): +func click(_player3d :Player3D): if interactable: clicked.emit() if to_scene: - SceneManager.change_to_scene(to_scene) \ No newline at end of file + SceneManager.change_to_scene(to_scene) diff --git a/entities/interactable_3d/cristal/scripts/cristal.gd b/entities/interactable_3d/cristal/scripts/cristal.gd index b87035a..e3925c7 100644 --- a/entities/interactable_3d/cristal/scripts/cristal.gd +++ b/entities/interactable_3d/cristal/scripts/cristal.gd @@ -9,7 +9,7 @@ signal broken func _ready(): update_model() -func click(): +func click(_player3d :Player3D): if interactable: clicked.emit() %BreackAudioPlayer.playing = true diff --git a/entities/interactable_3d/interactable_3d.gd b/entities/interactable_3d/interactable_3d.gd index cb7425b..195e285 100644 --- a/entities/interactable_3d/interactable_3d.gd +++ b/entities/interactable_3d/interactable_3d.gd @@ -13,7 +13,7 @@ signal clicked func _ready(): set_interactable() -func click(): +func click(_player3d : Player3D): if interactable: clicked.emit() diff --git a/entities/interactable_3d/phone/scripts/phone.gd b/entities/interactable_3d/phone/scripts/phone.gd index 2ec0e6a..03605f3 100644 --- a/entities/interactable_3d/phone/scripts/phone.gd +++ b/entities/interactable_3d/phone/scripts/phone.gd @@ -2,7 +2,7 @@ extends Interactable3D class_name Phone -func click(): +func click(_player3d :Player3D): if interactable: clicked.emit() interactable = false diff --git a/entities/interactable_3d/radio/assets/3d/radio.blend b/entities/interactable_3d/radio/assets/3d/radio.blend index 7bdb48f..4456bc8 100644 Binary files a/entities/interactable_3d/radio/assets/3d/radio.blend and b/entities/interactable_3d/radio/assets/3d/radio.blend differ diff --git a/entities/interactable_3d/radio/assets/3d/radio.blend.import b/entities/interactable_3d/radio/assets/3d/radio.blend.import index 4b219e7..fdddefa 100644 --- a/entities/interactable_3d/radio/assets/3d/radio.blend.import +++ b/entities/interactable_3d/radio/assets/3d/radio.blend.import @@ -39,7 +39,15 @@ import_script/path="" materials/extract=0 materials/extract_format=0 materials/extract_path="" -_subresources={} +_subresources={ +"materials": { +"Material": { +"use_external/enabled": true, +"use_external/fallback_path": "res://common/assets/materials/default_3d.tres", +"use_external/path": "uid://dvvi1k5c5iowc" +} +} +} blender/nodes/visible=0 blender/nodes/active_collection_only=false blender/nodes/punctual_lights=true diff --git a/entities/interactable_3d/radio/assets/3d/radio.blend1 b/entities/interactable_3d/radio/assets/3d/radio.blend1 index 63b783f..7bdb48f 100644 Binary files a/entities/interactable_3d/radio/assets/3d/radio.blend1 and b/entities/interactable_3d/radio/assets/3d/radio.blend1 differ diff --git a/entities/interactable_3d/radio/radio_3d.tscn b/entities/interactable_3d/radio/radio_3d.tscn new file mode 100644 index 0000000..ed424f1 --- /dev/null +++ b/entities/interactable_3d/radio/radio_3d.tscn @@ -0,0 +1,90 @@ +[gd_scene format=3 uid="uid://d2mqot6b0wrji"] + +[ext_resource type="PackedScene" uid="uid://butkx8cygbesm" path="res://entities/interactable_3d/radio/assets/3d/radio.blend" id="1_4uibp"] +[ext_resource type="Script" uid="uid://cg53cu64nnq2u" path="res://entities/interactable_3d/radio/scripts/radio_3d.gd" id="1_a4m61"] +[ext_resource type="PackedScene" uid="uid://bf5viaiuq62f0" path="res://gui/game/log_screen/log_screen.tscn" id="3_6gjd1"] +[ext_resource type="Texture2D" uid="uid://bxorbhnr4o2rj" path="res://addons/dialogic/Modules/Signal/icon.png" id="3_h0e4o"] + +[sub_resource type="Gradient" id="Gradient_oh5lq"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(0.06318334, 0.059500005, 0.17, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_g4v7s"] +gradient = SubResource("Gradient_oh5lq") +width = 25 +height = 24 + +[sub_resource type="Gradient" id="Gradient_4uibp"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0.508547, 0.5470086, 0.5811966, 0.6367521, 0.6752137) +colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_4uibp"] +gradient = SubResource("Gradient_4uibp") +width = 500 +height = 500 +fill = 1 +fill_from = Vector2(0.5, 0.5) +fill_to = Vector2(1, 0.5) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yf5fn"] +transparency = 1 +shading_mode = 0 +vertex_color_use_as_albedo = true +albedo_texture = SubResource("GradientTexture2D_4uibp") +billboard_mode = 1 +billboard_keep_scale = true + +[sub_resource type="PlaneMesh" id="PlaneMesh_g4v7s"] +material = SubResource("StandardMaterial3D_yf5fn") +orientation = 2 + +[sub_resource type="Curve" id="Curve_4uibp"] +_data = [Vector2(0, 0), 0.0, 3.382857, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="Gradient" id="Gradient_xb8ew"] +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="BoxShape3D" id="BoxShape3D_g4v7s"] +size = Vector3(0.7519531, 0.5413208, 0.4404297) + +[node name="Radio3d" type="Area3D" unique_id=478512957] +script = ExtResource("1_a4m61") +log_title = "Title is the real title" + +[node name="radio" parent="." unique_id=828194383 instance=ExtResource("1_4uibp")] + +[node name="OffScreen" type="Sprite3D" parent="radio" unique_id=1730668971] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.12157962, -0.0024592131, -0.16259766) +visible = false +texture = SubResource("GradientTexture2D_g4v7s") + +[node name="Icon" type="Sprite3D" parent="radio" unique_id=664077032] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1324744, 0.015149429, -0.15777588) +pixel_size = 0.003 +texture = ExtResource("3_h0e4o") + +[node name="CPUParticles3D" type="CPUParticles3D" parent="." unique_id=464922262] +unique_name_in_owner = true +amount = 2 +preprocess = 1.0 +explosiveness = 0.6 +mesh = SubResource("PlaneMesh_g4v7s") +gravity = Vector3(0, 0, 0) +scale_amount_curve = SubResource("Curve_4uibp") +color = Color(1, 0, 0.4333334, 0.78431374) +color_ramp = SubResource("Gradient_xb8ew") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1594995973] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.01159668, 0.09970093, -0.0076293945) +shape = SubResource("BoxShape3D_g4v7s") + +[node name="LogScreen" parent="." unique_id=1955577551 instance=ExtResource("3_6gjd1")] +unique_name_in_owner = true +log_title = "Title is the real title" +log_text = "Text" + +[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="." unique_id=703219960] diff --git a/entities/interactable_3d/radio/scripts/radio_3d.gd b/entities/interactable_3d/radio/scripts/radio_3d.gd new file mode 100644 index 0000000..4f20a3d --- /dev/null +++ b/entities/interactable_3d/radio/scripts/radio_3d.gd @@ -0,0 +1,54 @@ +@tool +extends Interactable3D +class_name Radio3d + +@export var log_title : String = "Title" : set = set_title +@export var log_text : String = "Text" : set = set_text + +@export var read := false : set = set_read + +func _ready(): + set_interactable() + set_title() + set_text() + set_read() + +func set_title(v := log_title): + log_title = v + if is_node_ready(): + %LogScreen.log_title = log_title + +func set_text(v := log_text): + log_text = v + if is_node_ready(): + %LogScreen.log_text = log_text + +func set_read(v := read): + read = v + + if is_node_ready(): + %CPUParticles3D.emitting = not read + %OffScreen.visible = read + %Icon.visible = not read + +func click(player3d :Player3D): + if interactable: + clicked.emit() + %LogScreen.appear() + AudioManager.play_sfx("MessageEnter") + + %LogScreen.appear() + read = true + interactable = false + player3d.controlling_player = false + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + %LogScreen.disappeared.connect( + func(): + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + player3d.controlling_player = true + get_tree().create_timer(0.5).timeout.connect( # Put a delay to not interfere with the ok button click + func(): + interactable = true + ) + AudioManager.play_sfx("MessageExit") + ) diff --git a/entities/interactable_3d/radio/scripts/radio_3d.gd.uid b/entities/interactable_3d/radio/scripts/radio_3d.gd.uid new file mode 100644 index 0000000..a447d7a --- /dev/null +++ b/entities/interactable_3d/radio/scripts/radio_3d.gd.uid @@ -0,0 +1 @@ +uid://cg53cu64nnq2u diff --git a/entities/interactables/item_object/script/item_object.gd b/entities/interactables/item_object/script/item_object.gd index 796b777..5852f7a 100644 --- a/entities/interactables/item_object/script/item_object.gd +++ b/entities/interactables/item_object/script/item_object.gd @@ -15,6 +15,8 @@ const SPRITE_SCENE: PackedScene = preload("res://entities/interactables/item_obj @onready var object_sprite: ItemObjectSprite = generate_sprite() +var is_taken := false + func _init(_item = null): if _item: item = _item @@ -49,11 +51,17 @@ func card_info() -> CardInfo: return item.card_info() func interact(player : Player) -> bool: - if player.can_pick_item(item): - await pickup_animation(player.global_position) - queue_free() + if ( + player.can_pick_item(item) + and not is_taken + and player.elapsed_time > player.last_seed_taken + Player.TAKE_ITEM_INTERVAL + ): + player.last_seed_taken = player.elapsed_time + is_taken = true player.pick_item(item) + await pickup_animation(player.global_position) item.has_been_inspected = true + queue_free() return true return false diff --git a/entities/interactables/radio/scripts/radio.gd b/entities/interactables/radio/scripts/radio.gd index 01e1c04..f625b22 100644 --- a/entities/interactables/radio/scripts/radio.gd +++ b/entities/interactables/radio/scripts/radio.gd @@ -4,16 +4,16 @@ class_name Radio @onready var log_screen : LogScreen = %LogScreen var radio_log : StoryStep.Log = null : set = set_radio_log -var unread := true : set = set_unread +var unread := false : set = set_unread func _ready(): var story_step := GameInfo.game_data.progression_data.get_story_step() if len(story_step.get_logs()): radio_log = story_step.get_logs().pick_random() - - if radio_log: unread = not radio_log.key in GameInfo.game_data.logs_read + + if unread : available = true else: hide() diff --git a/entities/interactables/truck/compost/assets/sprites/compost.png.import b/entities/interactables/truck/compost/assets/sprites/compost.png.import index 9d85fdc..09f82fc 100644 --- a/entities/interactables/truck/compost/assets/sprites/compost.png.import +++ b/entities/interactables/truck/compost/assets/sprites/compost.png.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://n7hhyqhhtx0q" -path="res://.godot/imported/compost.png-e03e492b1de4adb6f23b4a9bd2caffe2.ctex" +path.s3tc="res://.godot/imported/compost.png-e03e492b1de4adb6f23b4a9bd2caffe2.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://entities/interactables/truck/compost/assets/sprites/compost.png" -dest_files=["res://.godot/imported/compost.png-e03e492b1de4adb6f23b4a9bd2caffe2.ctex"] +dest_files=["res://.godot/imported/compost.png-e03e492b1de4adb6f23b4a9bd2caffe2.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,4 +38,4 @@ 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 +detect_3d/compress_to=0 diff --git a/entities/plants/scripts/plant_mutation/ancient_mutation.gd b/entities/plants/scripts/plant_mutation/ancient_mutation.gd index 7e36c5a..63a1854 100644 --- a/entities/plants/scripts/plant_mutation/ancient_mutation.gd +++ b/entities/plants/scripts/plant_mutation/ancient_mutation.gd @@ -27,7 +27,7 @@ func get_day_factor(): return max(1, DEFAULT_DAY_FACTOR - level) func get_score_increase(): - return max(1, level - DEFAULT_DAY_FACTOR + 1) + return max(1, level - DEFAULT_DAY_FACTOR + 2) func mutate_score(data : PlantData, score) -> int: if data.get_state() != PlantData.State.MATURE: diff --git a/entities/plants/scripts/texture_builder/part_assembler.gd b/entities/plants/scripts/texture_builder/part_assembler.gd index 94f2602..1795dd7 100644 --- a/entities/plants/scripts/texture_builder/part_assembler.gd +++ b/entities/plants/scripts/texture_builder/part_assembler.gd @@ -56,7 +56,6 @@ func generate_plants(): child.free() for i in n_to_generate: - print("Generate plant :") var plant_pos_x = (i % n_per_row) * space_between_plants @warning_ignore("integer_division") var plant_pos_y = (i / n_per_row) * space_between_plants @@ -80,7 +79,6 @@ func generate_plants(): picked_mutation.level = randi_range(min_level, max_level) plant_data.mutations.append(picked_mutation) var plant: Plant = Plant.new(plant_data) - print(plant.data.plant_name) %Plants.add_child(plant) plant.global_position = plant_position @@ -89,7 +87,6 @@ func generate_seeds(): child.free() for i in n_to_generate: - print("Generate seed :") var seed_pos_x = (i % n_per_row) * space_between_plants @warning_ignore("integer_division") var seed_pos_y = (i / n_per_row) * space_between_plants diff --git a/entities/plants/scripts/texture_builder/plant_part_builder.gd b/entities/plants/scripts/texture_builder/plant_part_builder.gd index 957984e..5199e38 100644 --- a/entities/plants/scripts/texture_builder/plant_part_builder.gd +++ b/entities/plants/scripts/texture_builder/plant_part_builder.gd @@ -15,7 +15,7 @@ class_name PlantPartBuilder func load_resource(): var destination := "res://entities/plants/resources/plant_parts/" + part_name + ".tres" - print("Loading: ", part_name, " n°: ", part_index, " at: ", destination) + # print("Loading: ", part_name, " n°: ", part_index, " at: ", destination) var part_group: PartGroup = ResourceLoader.load(destination) as PartGroup if part_group.parts.size() <= part_index: printerr("No part at ", part_index) @@ -47,7 +47,7 @@ func load_resource(): func save_as_resource(): var destination := "res://entities/plants/resources/plant_parts/" + part_name + ".tres" - print("Saving: ", part_name, " n°: ", part_index, " at: ", destination) + # print("Saving: ", part_name, " n°: ", part_index, " at: ", destination) var part_group: PartGroup = ResourceLoader.load(destination) as PartGroup if not part_group: part_group = PartGroup.new() diff --git a/entities/plants/scripts/texture_builder/plant_texture_builder.gd b/entities/plants/scripts/texture_builder/plant_texture_builder.gd index 27b1f83..9f396b5 100644 --- a/entities/plants/scripts/texture_builder/plant_texture_builder.gd +++ b/entities/plants/scripts/texture_builder/plant_texture_builder.gd @@ -137,7 +137,7 @@ func build_plant_texture(plant_data: PlantData) -> Texture: texture = PLACEHOLDER_GROWING_TEXTURE base_part = pick_random(baby_bases) _: - print("{state} not handled".format({"state": PlantData.State.keys()[plant_data.get_state()]})) + # print("{state} not handled".format({"state": PlantData.State.keys()[plant_data.get_state()]})) return null var weight_per_origin_type: Array[int] = origin_weights_base.values().duplicate() diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd index 0061675..953e971 100644 --- a/entities/player/scripts/player.gd +++ b/entities/player/scripts/player.gd @@ -7,6 +7,7 @@ const HOLDING_ITEM_SPRITE_SIZE = 20. const TURN_ANIMATION_MINIMUM_THRESHOLD = 0.2 const SPEED = 350 const JUST_DROPPED_ITEM_UPDATE_INTERVAL = 1. +const TAKE_ITEM_INTERVAL = .3 const LOW_SIGNAL_ALERT_DISTANCE = 500 const BACKROOM_DISTANCE = 4000 @@ -46,6 +47,7 @@ var show_low_signal : bool = false : var just_dropped_item_objects : Array = [] var last_just_dropped_item_objects_updated := 0. var last_instruction_done := 0. +var last_seed_taken := 0. var elapsed_time := 0. var backrooms_loaded := false @@ -165,7 +167,9 @@ func update_just_dropped_item_objects(): func take_surrounding_seeds(): var overlapping_areas = (%InteractArea2D as Area2D).get_overlapping_areas() - if not data.inventory.is_full(): + if ( + not data.inventory.is_full() + ): for area in overlapping_areas: if ( area is ItemObject diff --git a/entities/player_3d/scripts/player_3d.gd b/entities/player_3d/scripts/player_3d.gd index 22ac407..f2bd61d 100644 --- a/entities/player_3d/scripts/player_3d.gd +++ b/entities/player_3d/scripts/player_3d.gd @@ -52,7 +52,7 @@ func _input(event): var tween = create_tween() tween.tween_property(%InteractTutorial, "modulate:a", 0., 0.8) GameInfo.game_data.tutorials_done.append("3d_action") - action_hovered.click() + action_hovered.click(self) func _physics_process(delta): diff --git a/gui/game/help/help.tscn b/gui/game/help/help.tscn index 43711f6..99a7c98 100644 --- a/gui/game/help/help.tscn +++ b/gui/game/help/help.tscn @@ -1265,6 +1265,11 @@ scroll_active = false horizontal_alignment = 2 vertical_alignment = 1 +[node name="Subtitle2" type="Label" parent="MutationTutorial/MarginContainer" unique_id=1854062041] +layout_mode = 2 +text = "PLANTS_HAVE_A_CHANCE_TO_PASS_THEIR_MUTATIONS_TO_NEARBY_SEEDS" +horizontal_alignment = 1 + [node name="MutationOkButton" type="Button" parent="MutationTutorial/MarginContainer" unique_id=2070965633] layout_mode = 2 size_flags_horizontal = 4 diff --git a/gui/pointer/assets/cursors/pointer-signal.svg.import b/gui/pointer/assets/cursors/pointer-signal.svg.import index 4e48255..3ae40c6 100644 --- a/gui/pointer/assets/cursors/pointer-signal.svg.import +++ b/gui/pointer/assets/cursors/pointer-signal.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://sq5of6kpjrxj" -path="res://.godot/imported/pointer-signal.svg-f760203858e8cefeb5c8506af6f58026.ctex" +path.s3tc="res://.godot/imported/pointer-signal.svg-f760203858e8cefeb5c8506af6f58026.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://gui/pointer/assets/cursors/pointer-signal.svg" -dest_files=["res://.godot/imported/pointer-signal.svg-f760203858e8cefeb5c8506af6f58026.ctex"] +dest_files=["res://.godot/imported/pointer-signal.svg-f760203858e8cefeb5c8506af6f58026.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,7 +38,7 @@ 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 +detect_3d/compress_to=0 svg/scale=1.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/stages/3d_scenes/astra_base/astra_base.tscn b/stages/3d_scenes/astra_base/astra_base.tscn index 51d9a34..c6d7b75 100644 --- a/stages/3d_scenes/astra_base/astra_base.tscn +++ b/stages/3d_scenes/astra_base/astra_base.tscn @@ -206,13 +206,13 @@ unique_name_in_owner = true [node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1392940941] environment = SubResource("Environment_lhhy6") -[node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("3_4wxm6")] -unique_name_in_owner = true -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29.925, 1, 4.22) - [node name="Phone" parent="." unique_id=429299908 instance=ExtResource("4_mwti2")] unique_name_in_owner = true -transform = Transform3D(-1, 0, -1.509958e-07, 0, 1, 0, 1.509958e-07, 0, -1, 0.8795166, 0.90269387, -2.0494514) +transform = Transform3D(-1, 0, -1.509958e-07, 0, 1, 0, 1.509958e-07, 0, -1, 0.88, 0.903, -2.049) + +[node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("3_4wxm6")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.5150342, 1, 0) [node name="Lift" parent="." unique_id=1854388434 instance=ExtResource("5_lhhy6")] unique_name_in_owner = true @@ -228,7 +228,6 @@ shape = SubResource("SphereShape3D_kdvug") [node name="LiftHideScreen" type="Sprite3D" parent="Lift" unique_id=809134917] unique_name_in_owner = true transform = Transform3D(1.3626386e-07, 0.19990343, 0.9798156, -2.7800754e-08, 0.9798156, -0.19990343, -1, 0, 1.3907092e-07, -0.8308959, 1.5522995, 0) -visible = false texture = SubResource("GradientTexture2D_g4v7s") [node name="TrailerCamera" type="Camera3D" parent="." unique_id=1809922038] diff --git a/stages/3d_scenes/astra_base/scripts/astra_base.gd b/stages/3d_scenes/astra_base/scripts/astra_base.gd index 4d6e0ee..a75963a 100644 --- a/stages/3d_scenes/astra_base/scripts/astra_base.gd +++ b/stages/3d_scenes/astra_base/scripts/astra_base.gd @@ -1,4 +1,3 @@ -@tool extends Node3D class_name AstraBase @@ -31,6 +30,8 @@ func _ready(): Input.mouse_mode = Input.MOUSE_MODE_CAPTURED set_room_part_number() + arrive_player() + func spawn_player(): chosen_incubator_id = randi_range(0, len(%Incubators.get_children()) - 1) var new_player_incubator := %Incubators.get_children()[chosen_incubator_id] as Incubator @@ -50,11 +51,13 @@ func spawn_player(): func story_on_spawn(): AudioManager.play_sfx("Respawn") + %LiftHideScreen.visible = false if ( GameInfo.game_data.progression_data.get_story_step() is TutorialStoryStep and not TutorialStoryStep.INTRO_DIALOG in GameInfo.game_data.dialogs_done ): + %Phone.visible = true %Phone.play_audio() await %Phone.clicked %Phone.stop_audio() diff --git a/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend b/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend index dcb6ab5..7c2de2a 100644 Binary files a/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend and b/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend differ diff --git a/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend1 b/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend1 index f867681..ce38bb4 100644 Binary files a/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend1 and b/stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend1 differ diff --git a/stages/3d_scenes/astra_end_base/astra_end_base.tscn b/stages/3d_scenes/astra_end_base/astra_end_base.tscn index db10650..0f6d38b 100644 --- a/stages/3d_scenes/astra_end_base/astra_end_base.tscn +++ b/stages/3d_scenes/astra_end_base/astra_end_base.tscn @@ -3,6 +3,7 @@ [ext_resource type="Script" uid="uid://btc447j47jbx0" path="res://stages/3d_scenes/astra_end_base/scripts/astra_end_base.gd" id="1_fevne"] [ext_resource type="Shader" uid="uid://bv2rghn44mrrf" path="res://stages/title_screen/resources/shaders/stars.gdshader" id="1_xd71i"] [ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="3_c8vcx"] +[ext_resource type="Material" uid="uid://ukcnxnnsi8ki" path="res://common/assets/materials/pearlescent.tres" id="4_a1v2l"] [ext_resource type="PackedScene" uid="uid://bqo4uknlbm8r1" path="res://stages/3d_scenes/astra_end_base/assets/3d/astra_end_base.blend" id="4_s7tqr"] [ext_resource type="Texture2D" uid="uid://ca8jjqdbm3tc3" path="res://stages/3d_scenes/astra_end_base/assets/2d/alien_writings/lucius_cipher.png" id="5_tbsgm"] [ext_resource type="Texture2D" uid="uid://65ajxn4q8mxk" path="res://stages/3d_scenes/astra_end_base/assets/2d/alien_writings/calligraphic_avali_scratch.png" id="6_on72i"] @@ -10,6 +11,9 @@ [ext_resource type="Texture2D" uid="uid://br57pu7qq2bnq" path="res://stages/3d_scenes/astra_end_base/assets/2d/alien_writings/retrospection.png" id="8_ipyd4"] [ext_resource type="Texture2D" uid="uid://dj0d2hkji46gd" path="res://stages/3d_scenes/astra_end_base/assets/2d/alien_writings/templar_cipher_plus.png" id="9_r7duo"] [ext_resource type="Texture2D" uid="uid://bcayfx6nwlx7f" path="res://stages/3d_scenes/astra_end_base/assets/2d/alien_writings/wavefront.png" id="10_a1v2l"] +[ext_resource type="PackedScene" uid="uid://cypsoytvytdup" path="res://entities/interactable_3d/3d_door/3d_door.tscn" id="11_kd1mw"] +[ext_resource type="PackedScene" uid="uid://d2mqot6b0wrji" path="res://entities/interactable_3d/radio/radio_3d.tscn" id="12_ipyd4"] +[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="13_r7duo"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_2ei4e"] shader = ExtResource("1_xd71i") @@ -52,7 +56,94 @@ volumetric_fog_sky_affect = 0.0 adjustment_enabled = true adjustment_saturation = 1.3 -[node name="BoreaBase" type="Node3D" unique_id=442220603] +[sub_resource type="SphereMesh" id="SphereMesh_6vgbi"] + +[sub_resource type="Gradient" id="Gradient_pt3q5"] +offsets = PackedFloat32Array(0.26086956, 0.70652175, 0.9927536) +colors = PackedColorArray(1, 0, 0.43137255, 1, 0.54899985, 0.18, 1, 0.6, 0.54899985, 0.18, 1, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_faqab"] +gradient = SubResource("Gradient_pt3q5") +fill = 1 +fill_from = Vector2(0.5, 0.5) +fill_to = Vector2(1, 0.5) + +[sub_resource type="Animation" id="Animation_4ljrk"] +resource_name = "Pulse" +length = 2.0 +loop_mode = 1 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 3, 0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1.1005427, -0.90000004, -0.0019688606, 0.90000004, 0.0019688606, 1, -0.16111112, 0, 0.1711111, 0), +"times": PackedFloat32Array(0, 0.8, 1.9933333) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite3D:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 3, 0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1.0991166, -0.7, 0.00159657, 0.7, -0.00159657, 1, -0.15555556, 0, 0.17777777, 0), +"times": PackedFloat32Array(0, 1.2666667, 2) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite3D:scale:z") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(), +"points": PackedFloat32Array(), +"times": PackedFloat32Array() +} + +[sub_resource type="Animation" id="Animation_pt3q5"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite3D:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_vugff"] +_data = { +&"Pulse": SubResource("Animation_4ljrk"), +&"RESET": SubResource("Animation_pt3q5") +} + +[sub_resource type="SphereShape3D" id="SphereShape3D_g4v7s"] +radius = 3.5017478 + +[sub_resource type="SphereShape3D" id="SphereShape3D_yf5fn"] +radius = 0.8390978 + +[node name="AstraBase" type="Node3D" unique_id=442220603] script = ExtResource("1_fevne") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=1539431276] @@ -66,12 +157,35 @@ environment = SubResource("Environment_fevne") [node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("3_c8vcx")] unique_name_in_owner = true -transform = Transform3D(0.25881904, 0, 0.96592593, 0, 1, 0, -0.96592593, 0, 0.25881904, 29.731356, 41.40791, 8.823577) +transform = Transform3D(0.25881904, 0, 0.96592593, 0, 1, 0, -0.96592593, 0, 0.25881904, 29.048777, 41.40791, 8.823577) speed = 5.0 +[node name="PearlModel" type="MeshInstance3D" parent="Player3D" unique_id=1334707823] +transform = Transform3D(0.6999995, 0, 1.0430813e-07, 0, 0.7, 0, -1.0430813e-07, 0, 0.6999995, 0.69991827, -0.49926376, -0.10863876) +mesh = SubResource("SphereMesh_6vgbi") +skeleton = NodePath("../..") +surface_material_override/0 = ExtResource("4_a1v2l") + +[node name="Sprite3D" type="Sprite3D" parent="Player3D/PearlModel" unique_id=349396599] +transform = Transform3D(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +pixel_size = 0.03 +billboard = 1 +texture = SubResource("GradientTexture2D_faqab") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Player3D/PearlModel" unique_id=1205524219] +libraries/ = SubResource("AnimationLibrary_vugff") +autoplay = &"Pulse" + [node name="borea_base" parent="." unique_id=1161090043 instance=ExtResource("4_s7tqr")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.026304245, 0.09278107, -0.027095795) +[node name="StaticBody3D" type="StaticBody3D" parent="borea_base" unique_id=1593264839] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 56.653046, -235.67523, -4.3221416) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="borea_base/StaticBody3D" unique_id=366905805] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1359253, -2.8711548, -1.2334776) +shape = SubResource("SphereShape3D_g4v7s") + [node name="Writings" type="Node3D" parent="." unique_id=1164701902] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 89.32092, -217.201, 0) @@ -81,28 +195,38 @@ pixel_size = 0.003 texture = ExtResource("5_tbsgm") [node name="Wall1" type="Sprite3D" parent="Writings" unique_id=721718473] -transform = Transform3D(0.97154945, -0.22105828, -0.08499965, 0.17205775, 0.4121628, 0.8947166, -0.16275081, -0.8838861, 0.43847132, -29.599998, -16.999985, -6.9000006) +transform = Transform3D(0.99170494, -0.12726313, -0.018050455, 0.07970211, 0.4986614, 0.86312467, -0.10084282, -0.8574034, 0.50466794, -29.599998, -17.031189, -6.9000006) pixel_size = 0.005 +shaded = true +alpha_cut = 1 texture = ExtResource("6_on72i") [node name="Wall2" type="Sprite3D" parent="Writings" unique_id=759085966] -transform = Transform3D(0.95404595, -0.21523872, 0.2084915, 0.11698221, 0.9080688, 0.4021517, -0.27588323, -0.3592814, 0.8915185, -27.599998, -11.299988, -15) +transform = Transform3D(0.9424416, -0.22922032, 0.24343787, 0.06502391, 0.8397868, 0.53900826, -0.32798755, -0.49215457, 0.8063549, -27.599998, -11.299988, -15) pixel_size = 0.005 +shaded = true +alpha_cut = 1 texture = ExtResource("7_kd1mw") [node name="Wall3" type="Sprite3D" parent="Writings" unique_id=1200417759] -transform = Transform3D(0.94133574, -0.16944362, 0.29185277, 0.06530849, 0.93993133, 0.33506027, -0.33109507, -0.29634333, 0.8958566, -37.59999, -14.299988, -10.400027) +transform = Transform3D(0.9631755, -0.14006364, 0.22951505, 0.02751878, 0.90047455, 0.43403864, -0.2674653, -0.41173884, 0.87116885, -37.59999, -14.299988, -10.626168) pixel_size = 0.005 +shaded = true +alpha_cut = 1 texture = ExtResource("8_ipyd4") [node name="Wall4" type="Sprite3D" parent="Writings" unique_id=612060231] -transform = Transform3D(0.5820415, 0.80313295, -0.1273065, -0.007992949, 0.16220072, 0.98672664, 0.8131212, -0.5732974, 0.10082706, -35.59999, -18.599976, 0.5999727) +transform = Transform3D(0.5723594, 0.81974465, 0.020626552, -0.12535757, 0.0626126, 0.99013513, 0.8103656, -0.5692978, 0.13859814, -35.59999, -19.026611, 0.5999727) pixel_size = 0.005 +shaded = true +alpha_cut = 1 texture = ExtResource("9_r7duo") [node name="Wall5" type="Sprite3D" parent="Writings" unique_id=1287618329] transform = Transform3D(0.980034, 0.0050439783, 0.19876635, -0.021924706, 0.9963235, 0.0828185, -0.19761789, -0.085522816, 0.97654146, -45.6, -10.899994, -10.700001) pixel_size = 0.005 +shaded = true +alpha_cut = 1 texture = ExtResource("10_a1v2l") [node name="Lights" type="Node3D" parent="." unique_id=1950247072] @@ -142,3 +266,41 @@ shadow_bias = 0.09 shadow_normal_bias = 10.0 spot_range = 198.038 spot_attenuation = 0.39 + +[node name="3dDoor" parent="." unique_id=814731756 instance=ExtResource("11_kd1mw")] +transform = Transform3D(0.97102314, 0, -0.23898536, 0, 1, 0, 0.23898536, 0, 0.97102314, 30.60401, 42.212543, 9.433124) + +[node name="DemeterRadio3d" parent="." unique_id=478512957 instance=ExtResource("12_ipyd4")] +transform = Transform3D(-0.84546113, 0, -0.5340372, 0, 1, 0, 0.5340372, 0, -0.84546113, 25.89695, 40.26554, 5.76624) +log_title = "LOG_GOODBYE_ORCHID_TITLE_TEXT" +log_text = "LOG_GOODBYE_ORCHID_CONTENT_TEXT" + +[node name="Expedition2Radio3d" parent="." unique_id=1207167717 instance=ExtResource("12_ipyd4")] +transform = Transform3D(-0.8210772, 0, -0.5708172, 0, 1, 0, 0.5708172, 0, -0.8210772, 23.319265, 25.52825, 6.7581625) +log_title = "LOG_ASTRA_EXPEDITION_2_TITLE_TEXT" +log_text = "LOG_ASTRA_EXPEDITION_2_CONTENT_TEXT" + +[node name="Expedition3Radio3d" parent="." unique_id=1640762741 instance=ExtResource("12_ipyd4")] +transform = Transform3D(-0.76642853, 0, 0.64232963, 0, 1, 0, -0.64232963, 0, -0.76642853, -5.4841, 8.296667, 2.2523332) +log_title = "LOG_ASTRA_EXPEDITION_3_TITLE_TEXT" +log_text = "LOG_ASTRA_EXPEDITION_3_CONTENT_TEXT" + +[node name="Expedition4Radio3d" parent="." unique_id=1825654965 instance=ExtResource("12_ipyd4")] +transform = Transform3D(0.36502358, 0, 0.93099827, 0, 1, 0, -0.93099827, 0, 0.36502358, 47.443226, -237.23366, 5.464453) +log_title = "LOG_ASTRA_EXPEDITION_4_TITLE_TEXT" +log_text = "LOG_ASTRA_EXPEDITION_4_CONTENT_TEXT" + +[node name="Expedition5Radio3d" parent="." unique_id=2000329927 instance=ExtResource("12_ipyd4")] +transform = Transform3D(-0.7659324, 0, 0.6429211, 0, 1, 0, -0.6429211, 0, -0.7659324, 217.73625, -239.33879, -10.856295) +log_title = "LOG_ASTRA_EXPEDITION_5_TITLE_TEXT" +log_text = "LOG_ASTRA_EXPEDITION_5_CONTENT_TEXT" + +[node name="PearlInteractable3D" type="Area3D" parent="." unique_id=2022845503] +transform = Transform3D(-0.7659324, 0, 0.6429211, 0, 1, 0, -0.6429211, 0, -0.7659324, 226.28517, -239.23868, -11.878513) +script = ExtResource("13_r7duo") +metadata/_custom_type_script = "uid://bj4d1x8n8ina" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PearlInteractable3D" unique_id=992091321] +shape = SubResource("SphereShape3D_yf5fn") + +[connection signal="clicked" from="PearlInteractable3D" to="." method="_on_pearl_interactable_3d_clicked"] diff --git a/stages/3d_scenes/astra_end_base/scripts/astra_end_base.gd b/stages/3d_scenes/astra_end_base/scripts/astra_end_base.gd index 841f930..18cdbcc 100644 --- a/stages/3d_scenes/astra_end_base/scripts/astra_end_base.gd +++ b/stages/3d_scenes/astra_end_base/scripts/astra_end_base.gd @@ -3,4 +3,6 @@ extends Node3D func _ready(): Input.mouse_mode = Input.MOUSE_MODE_CAPTURED - AudioManager.play_music_alone("AstraEnd") +func _on_pearl_interactable_3d_clicked(): + SteamConnection.unlock_achievement(SteamConnection.ACH_STW_REPAIR_THE_PLANET) + SceneManager.change_to_scene(CreditsScene.new()) diff --git a/stages/3d_scenes/borea_base/borea_base.tscn b/stages/3d_scenes/borea_base/borea_base.tscn index 0ca2e7d..51af895 100644 --- a/stages/3d_scenes/borea_base/borea_base.tscn +++ b/stages/3d_scenes/borea_base/borea_base.tscn @@ -669,6 +669,7 @@ skeleton = NodePath("../../../../..") unique_name_in_owner = true transform = Transform3D(0.96053207, 0, 0.27816978, 0, 1, 0, -0.27816978, 0, 0.96053207, 55.192722, -3.5220742, -16.972366) script = ExtResource("12_jcdon") +interactable = false audio_player = NodePath("AudioStreamPlayer3D") metadata/_custom_type_script = "uid://bj4d1x8n8ina" diff --git a/stages/3d_scenes/borea_base/scripts/borea_base.gd b/stages/3d_scenes/borea_base/scripts/borea_base.gd index c2808d2..4df17bb 100644 --- a/stages/3d_scenes/borea_base/scripts/borea_base.gd +++ b/stages/3d_scenes/borea_base/scripts/borea_base.gd @@ -40,6 +40,7 @@ func _on_ai_receptacle_clicked(): match state: State.ARRIVAL: Dialogic.start(DIALOG_BOREA_ARRIVAL) + %CommunicationLever.interactable = true State.COMMS_UP: Dialogic.start(DIALOG_COMMS_UP) diff --git a/stages/3d_scenes/cave/scripts/cave.gd b/stages/3d_scenes/cave/scripts/cave.gd index 3ebf20d..893ea59 100644 --- a/stages/3d_scenes/cave/scripts/cave.gd +++ b/stages/3d_scenes/cave/scripts/cave.gd @@ -18,4 +18,5 @@ func setup_room(door_id : int): func _on_exit_clicked(): + %Exit.interactable = false SceneManager.change_to_scene(RegionScene.new(GameInfo.game_data.current_region_data)) diff --git a/stages/3d_scenes/cockpit_scene/cockpit.tscn b/stages/3d_scenes/cockpit_scene/cockpit.tscn index 6e44286..d12be5d 100644 --- a/stages/3d_scenes/cockpit_scene/cockpit.tscn +++ b/stages/3d_scenes/cockpit_scene/cockpit.tscn @@ -242,6 +242,7 @@ screen_text = "RESPAWN_TO_LAST_BASE" [node name="Pearl" parent="." unique_id=1993856261 instance=ExtResource("19_lom5w")] unique_name_in_owner = true transform = Transform3D(0.380475, 0, 0.9247912, 0, 1, 0, -0.9247912, 0, 0.380475, -1.0093391, -0.7638596, 1.3686184) +interactable = false [connection signal="clicked" from="Phone" to="." method="_on_phone_clicked"] [connection signal="clicked" from="OrchidSaver" to="." method="_on_orchid_saver_clicked"] diff --git a/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd b/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd index 902b940..f5d7cc4 100644 --- a/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd +++ b/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd @@ -40,7 +40,9 @@ func _ready(): %Phone.visible = GameInfo.game_data.game_mode == GameData.Mode.STORY %InfiniteModeScreen.visible = GameInfo.game_data.game_mode == GameData.Mode.INFINITE - %Pearl.visible = GameInfo.game_data.progression_data.get_story_step() is AstraStoryStep + %Pearl.visible = GameInfo.game_data.current_run.story_step is AstraStoryStep + + update_dialogs() func update_dialogs(): if GameInfo.game_data and GameInfo.game_data.current_run: @@ -56,7 +58,7 @@ func update_dialogs(): ): phone_dialogs.append(FAILED_DIALOG) - var story_dialog = run_data.story_step.get_ship_dialog_path(run_data.level, GameInfo.game_data.ship_in_space) + var story_dialog = run_data.story_step.get_ship_dialog_path(run_data.level, run_data.difficulty_setting, GameInfo.game_data.ship_in_space) if ( story_dialog and not story_dialog in GameInfo.game_data.dialogs_done @@ -84,7 +86,7 @@ func _on_phone_clicked(): if phone_dialog == FAILED_DIALOG: %FailTutorial.appear() if (len(phone_dialogs)): - await get_tree().create_timer(2.).timeout + await get_tree().create_timer(randf_range(0.2,1.)).timeout ring_phone() diff --git a/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn b/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn index 6365930..41dbf24 100644 --- a/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn +++ b/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn @@ -287,25 +287,25 @@ transform = Transform3D(0.86598426, 0, -0.5000024, 0, 0.9999422, 0, 0.49997625, [node name="cockpit2" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship" unique_id=1190034532 instance=ExtResource("4_ofwam")] -[node name="Skeleton3D" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature" parent_id_path=PackedInt32Array(1190034532, 856976144) index="0" unique_id=1970411272] +[node name="Skeleton3D" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature" parent_id_path=PackedInt32Array(1190034532, 119636235) index="0" unique_id=1653253795] bones/0/rotation = Quaternion(-0.52081746, 0.47827742, 0.52081746, 0.47827742) bones/1/rotation = Quaternion(0.042539995, -1.4957005e-08, -9.944439e-10, 0.9990948) bones/2/rotation = Quaternion(0.52081746, 0.47827742, 0.52081746, -0.47827742) bones/3/rotation = Quaternion(0.042539995, 1.4957005e-08, 9.944439e-10, 0.9990948) -[node name="WinkEnd_R" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="0" unique_id=2031973763] +[node name="WinkEnd_R" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="0" unique_id=493791274] transform = Transform3D(7.145433e-10, -1, -7.4505806e-08, 2.9971538e-08, -4.4703484e-08, 1, -1, -7.1454553e-10, 2.9971538e-08, -12.358327, -1.0543112, -8.881784e-16) -[node name="Wing_R" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="1" unique_id=203164776] +[node name="Wing_R" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="1" unique_id=1517389456] transform = Transform3D(0, -0.9963807, -0.08500305, 0, -0.08500302, 0.9963807, -1, 0, 0, 0, 0, 0) -[node name="WinkEnd_L" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="2" unique_id=206539248] +[node name="WinkEnd_L" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="2" unique_id=432843655] transform = Transform3D(7.145433e-10, 1, 7.4505806e-08, -2.9971538e-08, -4.4703484e-08, 1, 1, -7.1454553e-10, 2.9971538e-08, 12.358327, -1.0543112, 0) -[node name="Wing_L" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="3" unique_id=1082612885] +[node name="Wing_L" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="3" unique_id=1557624769] transform = Transform3D(0, 0.9963807, 0.08500305, 0, -0.08500302, 0.9963807, 1, 0, 0, 0, 0, 0) -[node name="AnimationPlayer" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2" index="7" unique_id=980851307] +[node name="AnimationPlayer" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2" index="7" unique_id=1720187928] autoplay = &"Fold" [node name="Camera3D" type="Camera3D" parent="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport" unique_id=541588220] @@ -348,6 +348,4 @@ icon = ExtResource("7_cnkwc") unique_name_in_owner = true libraries/ = SubResource("AnimationLibrary_cnkwc") -[connection signal="button_down" from="MarginContainer/ShipTutorialContainer/OkButton" to="." method="_on_ok_button_button_down"] - [editable path="MarginContainer/ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2"] diff --git a/stages/3d_scenes/common/pearl.tscn b/stages/3d_scenes/common/pearl.tscn index e63bc83..67f5aeb 100644 --- a/stages/3d_scenes/common/pearl.tscn +++ b/stages/3d_scenes/common/pearl.tscn @@ -88,17 +88,17 @@ _data = { radius = 1.1602892 [node name="Pearl" type="Area3D" unique_id=1993856261] -transform = Transform3D(0.380475, 0, 0.9247912, 0, 1, 0, -0.9247912, 0, 0.380475, 0, 0, 0) script = ExtResource("1_rt5rq") metadata/_custom_type_script = "uid://bj4d1x8n8ina" [node name="PearlModel" type="MeshInstance3D" parent="." unique_id=614754254] +transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0, 0) mesh = SubResource("SphereMesh_g4v7s") skeleton = NodePath("../..") surface_material_override/0 = ExtResource("2_rt5rq") [node name="Sprite3D" type="Sprite3D" parent="PearlModel" unique_id=1007515788] -transform = Transform3D(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0) +transform = Transform3D(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) pixel_size = 0.03 billboard = 1 texture = SubResource("GradientTexture2D_pt3q5") @@ -108,4 +108,5 @@ libraries/ = SubResource("AnimationLibrary_pt3q5") autoplay = &"Pulse" [node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=2004276860] +transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0, 0) shape = SubResource("SphereShape3D_g4v7s") diff --git a/stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend new file mode 100644 index 0000000..7649437 Binary files /dev/null and b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend differ diff --git a/stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend.import b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend.import new file mode 100644 index 0000000..37e7936 --- /dev/null +++ b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend.import @@ -0,0 +1,63 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b2fvcw8of7sgh" +path="res://.godot/imported/ship_leave.blend-5947296b617032739f6f3bc42fa72164.scn" + +[deps] + +source_file="res://stages/3d_scenes/ship_garage/assets/videos/ship_leave.blend" +dest_files=["res://.godot/imported/ship_leave.blend-5947296b617032739f6f3bc42fa72164.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +mesh_library/use_node_names_as_mesh_names=false +array_mesh/deduplicate_surfaces=true +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +blender/nodes/visible=0 +blender/nodes/active_collection_only=false +blender/nodes/punctual_lights=true +blender/nodes/cameras=true +blender/nodes/custom_properties=true +blender/nodes/modifiers=1 +blender/meshes/vertex_colors=1 +blender/meshes/uvs=true +blender/meshes/normals=true +blender/meshes/export_geometry_nodes_instances=false +blender/meshes/gpu_instances=false +blender/meshes/tangents=true +blender/meshes/skins=2 +blender/meshes/export_bones_deforming_mesh_only=false +blender/materials/unpack_enabled=true +blender/materials/export_materials=1 +blender/animation/limit_playback=true +blender/animation/always_sample=true +blender/animation/group_tracks=true +gltf/naming_version=2 +gltf/texture_map_mode=1 diff --git a/stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv new file mode 100644 index 0000000..f3d5b85 Binary files /dev/null and b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv differ diff --git a/stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv.uid b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv.uid new file mode 100644 index 0000000..f6220af --- /dev/null +++ b/stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv.uid @@ -0,0 +1 @@ +uid://sj5bbl6pn2v8 diff --git a/stages/3d_scenes/ship_garage/scripts/ship_garage.gd b/stages/3d_scenes/ship_garage/scripts/ship_garage.gd index cd3de0c..f9a947e 100644 --- a/stages/3d_scenes/ship_garage/scripts/ship_garage.gd +++ b/stages/3d_scenes/ship_garage/scripts/ship_garage.gd @@ -25,6 +25,7 @@ func _ready(): %Phone.stop_audio() Dialogic.start(DIALOG_PATH) await Dialogic.timeline_ended + AudioManager.stop_all_ambiances() %Player3D.controlling_player = false %VideoAnimationPlayer.play("Appear") (%Video as VideoStreamPlayer).play() diff --git a/stages/3d_scenes/ship_garage/ship_garage.tscn b/stages/3d_scenes/ship_garage/ship_garage.tscn index 11af510..0c44fca 100644 --- a/stages/3d_scenes/ship_garage/ship_garage.tscn +++ b/stages/3d_scenes/ship_garage/ship_garage.tscn @@ -7,7 +7,7 @@ [ext_resource type="PackedScene" uid="uid://blvetnnib2ks0" path="res://stages/3d_scenes/cockpit_scene/assets/3d/cockpit2.blend" id="5_43lym"] [ext_resource type="PackedScene" uid="uid://csx7d5khjd6y5" path="res://entities/interactable_3d/phone/phone.tscn" id="7_dkh4e"] [ext_resource type="Material" uid="uid://cr7bp4fhh1ipr" path="res://entities/player_3d/resources/materials/post_process_quad.tres" id="7_ovhgo"] -[ext_resource type="VideoStream" uid="uid://hufnq6sj37p3" path="res://stages/3d_scenes/ship_garage/assets/videos/plan_1.ogv" id="8_jwd5g"] +[ext_resource type="VideoStream" uid="uid://sj5bbl6pn2v8" path="res://stages/3d_scenes/ship_garage/assets/videos/ship_leave.ogv" id="8_ovhgo"] [sub_resource type="Environment" id="Environment_ovhgo"] background_mode = 2 @@ -420,7 +420,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -color = Color(0.06318334, 0.059500005, 0.17, 0.8627451) +color = Color(0.06318334, 0.059500005, 0.17, 1) [node name="Plan1AspectRatioContainer" type="AspectRatioContainer" parent="VideoCanvasLayer/Control" unique_id=2079607498] layout_mode = 1 @@ -436,7 +436,7 @@ stretch_mode = 0 unique_name_in_owner = true custom_maximum_size = Vector2(-1, 1080) layout_mode = 2 -stream = ExtResource("8_jwd5g") +stream = ExtResource("8_ovhgo") expand = true bus = &"Sfx" diff --git a/stages/3d_scenes/vending_machine_room/scripts/vending_machine_room.gd b/stages/3d_scenes/vending_machine_room/scripts/vending_machine_room.gd index 73e8206..fc47a02 100644 --- a/stages/3d_scenes/vending_machine_room/scripts/vending_machine_room.gd +++ b/stages/3d_scenes/vending_machine_room/scripts/vending_machine_room.gd @@ -30,4 +30,5 @@ func setup_room(door_id : int): ) func _on_exit_clicked(): + %Exit.interactable = false SceneManager.change_to_scene(RegionScene.new(GameInfo.game_data.current_region_data)) diff --git a/stages/terrain/region/assets/textures/moss_biome/moss_particle.png.import b/stages/terrain/region/assets/textures/moss_biome/moss_particle.png.import index 3e993e7..55e9718 100644 --- a/stages/terrain/region/assets/textures/moss_biome/moss_particle.png.import +++ b/stages/terrain/region/assets/textures/moss_biome/moss_particle.png.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://k2smk66py4uq" -path="res://.godot/imported/moss_particle.png-5ac5ac284abd73e64071d175c4b8d609.ctex" +path.s3tc="res://.godot/imported/moss_particle.png-5ac5ac284abd73e64071d175c4b8d609.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://stages/terrain/region/assets/textures/moss_biome/moss_particle.png" -dest_files=["res://.godot/imported/moss_particle.png-5ac5ac284abd73e64071d175c4b8d609.ctex"] +dest_files=["res://.godot/imported/moss_particle.png-5ac5ac284abd73e64071d175c4b8d609.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -37,4 +38,4 @@ 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 +detect_3d/compress_to=0 diff --git a/stages/terrain/region/scripts/plant_grid.gd b/stages/terrain/region/scripts/plant_grid.gd index e26b177..4c81bf0 100644 --- a/stages/terrain/region/scripts/plant_grid.gd +++ b/stages/terrain/region/scripts/plant_grid.gd @@ -1,7 +1,7 @@ extends Sprite2D class_name PlantGrid -const GRID_SHIFT : int = roundi(Region.TILE_SIZE / 2.) +const GRID_SHIFT : int = roundi(Region.TILE_SIZE / 3.) const GRID_SIZE : int = Region.TILE_SIZE const POINT_RADIUS : int = 5 const POINT_COLOR : Color = Color.WHITE diff --git a/translation/dialogs/dialogic_92_borea_later_translation.csv b/translation/dialogs/dialogic_92_borea_later_translation.csv index e6481a6..e071d20 100644 --- a/translation/dialogs/dialogic_92_borea_later_translation.csv +++ b/translation/dialogs/dialogic_92_borea_later_translation.csv @@ -35,4 +35,4 @@ Text/1de/text,"Replant it? But if we can no longer make it habitable for humans, Text/1df/text,"Well, if you really want to do something, I suppose you could...","Enfin si tu veux vraiment faire quelque chose, j'imagine que tu pourrais..." Text/1e0/text,"The last AI I spoke to is named Poseidon, and its servers are located in an underwater base not far from here.","La dernière IA avec laquelle j'ai parlé s'appelle Poséidon, et ses serveurs se trouvent dans une base sous-marine pas très loin d'ici." Text/1e1/text,I suppose you could go and see what's going on there.,J'imagine que tu pourrais aller voir ce qu'il s'y passe. -Text/1e2/text,I'm programming the Internode; head to the back of the base—I'm getting a supply of 0-800 ready for the trip.,"Je programme l'Internode, rends-toi au fond de la base, je te prépare un stock de 0-800 pour le voyage." +Text/1e2/text,I'm programming the Internode; head to the back of the base—I'm getting a supply of O-800 ready for the trip.,"Je programme l'Internode, rends-toi au fond de la base, je te prépare un stock de O-800 pour le voyage." diff --git a/translation/game/gui.csv b/translation/game/gui.csv index c7abe2e..3ba63b1 100644 --- a/translation/game/gui.csv +++ b/translation/game/gui.csv @@ -170,6 +170,7 @@ HOW_TO_GET_PLANT_POINTS,"How to get Plant Points","Comment avoir des Points de P PLANT_POINTS_TUTORIAL_DESC_1_TEXT,"Each mature plant has one [b]Plant Point[/b], you can see your progress on your [b]Objective[/b] in the top of the screen.","Chaque plante mature possède un [b]Point de Plante[/b]. Vous pouvez suivre votre progression dans votre [b]Objectif[/b] en haut de l'écran." PLANT_POINTS_TUTORIAL_DESC_2_TEXT,"Plant Points of dead or harvested plants are [b]not counted anymore[/b].","Les Points de Plante des plantes mortes ou récoltées ne sont [b]plus comptabilisés[/b]." PLANT_MUTATION_TEXT,"[b]Mutations[/b] Mutation change the plant behavior. These mutations are transmitted between generations, where they can change or evolve superior levels","[b]Mutations[/b] Les mutations changent le comportement de la plante. Ces mutations se transmettent entre les générations, et peuvent changer ou évoluer aux niveaux supérieurs" +PLANTS_HAVE_A_CHANCE_TO_PASS_THEIR_MUTATIONS_TO_NEARBY_SEEDS,"Plants have a chance to pass their mutations to nearby seeds","Les plantes ont une chance de transmettre leurs mutations aux graines voisines" SHOW_ENERGY_TUTORIAL,"Show energy tutorial","Montrer le tutoriel de l'énergie" SHOW_PLANT_TUTORIAL,"Show plant tutorial","Montrer le tutoriel des plantes" SHOW_MUTATION_TUTORIAL,"Show mutation tutorial","Montrer le tutoriel des mutations" diff --git a/translation/game/logs.csv b/translation/game/logs.csv index 30fe417..8393a81 100644 --- a/translation/game/logs.csv +++ b/translation/game/logs.csv @@ -233,3 +233,93 @@ Utilsateur 2071: Ah ah ah ! Un jour, tu vas tous nous tuer avec le sourire ! Bon Athéna: Tu fais bien de le préciser, si l'entièreté de la base est décimée, vous vous retrouvez sans gouvernement, il faudra penser à en faire réélire un. Utilsateur 2071: Une chose à la fois Athéna, la porte s'ouvre bien sous commande manuelle. Utilsateur 2071: Il fait une puanteur là-dedans, ça sent la mort et ça ne me dit rien qui vaille..." +LOG_ASTRA_EXPEDITION_2_TITLE_TEXT,"3209 - Astra Expedition 2","3209 - Expedition Astra 2" +LOG_ASTRA_EXPEDITION_2_CONTENT_TEXT,"User 2071: It's horrible, Athena—they're all dead! I'm not sure why, but they've all collapsed, lifeless! Tell me I'm safe, or I'm getting the hell out of here right now! +Athena: Simon, calm down. Breathe. Focus on your heart rate. The energy wave was likely strongest at its epicenter—that explains their deaths—but there's no indication it will happen again. +User 2071: I certainly hope so; otherwise, I'm coming back and making you eat your own cables! +Athena: I need you to calm down. We have to see this expedition through; the survival of your species on this planet might depend on it! +User 2071: Right, sorry Athena. I have the hub in sight. If it's like our base, the path to the descent should be there too. +Athena: Exactly. All the bases on this planet are built around the same central hub. It should look familiar to you. +User 2071: Alright, I'm starting the descent... All these corpses... Our leaders were real scumbags, but they didn't deserve this...","Utilsateur 2071: C'est horrible Athéna, ils sont tous morts ! Je sais pas très bien pourquoi, mais ils sont tous effondrés, sans vie ! Dis-moi que je ne risque rien ou je me barre d'ici fissa ! +Athéna: Simon, calme-toi, respire, concentre-toi sur ta fréquence cardiaque. La vague d'énergie était probablement plus forte à son épicentre, ça explique leur mort, mais rien ne dit que cela va se reproduire. +Utilsateur 2071: J'espère bien, sinon je rentre et je te fais bouffer tes câbles ! +Athéna: J'ai besoin que tu te calmes, il faut aller au bout de l'expédition, la survie de votre espèce sur cette planète en dépend peut-être ! +Utilsateur 2071: Oui, pardon Athéna, j'ai le chemin du hub en visu, si c'est comme notre base, le chemin vers la descente devrait y être aussi. +Athéna: Exactement, toutes les bases de cette planète sont construites autour du même hub central. Ça ne devrait pas te dépayser. +Utilsateur 2071: Bon, j'entame la descente... Tous ces cadavres, c'étaient des sacrées enflures nos dirigeants, mais ils ne méritaient pas ça..." +LOG_ASTRA_EXPEDITION_3_TITLE_TEXT,"3209 - Astra Expedition 3","3209 - Expedition Astra 3" +LOG_ASTRA_EXPEDITION_3_CONTENT_TEXT,"User 2071: I've reached the bottom of the Athena hub, and there's a massive hole drilled right in the middle. +Athena: That might tie in with the latest news we had from Astra; they were working on renovations and expansion. +User 2071: Right, but it's damn deep... +Athena: Just a reminder: you've got a rappelling system in your gear. +User 2071: And I curse your infallible memory. Setting up now. +Athena: Be careful. Do you want me to have a team member assist you? +User 2071: No, no—there isn't a single one of them I'd trust to belay me over a drop like this; I'll handle it myself. +Athena: Don't take any risks. +User 2071: Copy that—moving out!","Utilsateur 2071: Je suis arrivé en bas du hub Athéna, et il y a un gigantesque trou en plein milieu qui a été foré. +Athéna: Ça pourrait correspondre aux dernières nouvelles qu'on a eues d'Astra, ils faisaient un travail d'aménagement et d'agrandissement. +Utilsateur 2071: Ok, mais c'est sacrément profond... +Athéna: Je te rappelle que tu as un système de descente en rappel dans ton paquetage. +Utilsateur 2071: Et je maudis ta mémoire infaillible. Je m'installe. +Athéna: Fait attention. Est-ce que tu veux que je demande à un membre de l'équipe de t'assister ? +Utilsateur 2071: Non non, y'en a pas un à qui je fais confiance pour m'assurer dans un trou de cette envergure, je vais me débrouiller seul. +Athéna: Ne prends aucun risque +Utilsateur 2071: C'est noté, en avant !" +LOG_ASTRA_EXPEDITION_4_TITLE_TEXT,"3209 - Astra Expedition 4","3209 - Expedition Astra 4" +LOG_ASTRA_EXPEDITION_4_CONTENT_TEXT,"User 2071: I've reached the bottom! It took a while—thank goodness we've got some kick-ass gear! +User 2071: Wow... This is absolutely insane. Athena, do you see what I see? +Athena: Yes, it's a script I don't recognize; I've searched my database, and it doesn't look human. It seems to predate our arrival on this planet by a long shot, so it points toward an extraterrestrial origin. +User 2071: Are you telling me I'm the first person to witness humanity's discovery of a trace of intelligent extraterrestrial life? +Athena: I still need to analyze the script more thoroughly, but that certainly seems to be the case. +User 2071: I haven't got a damn clue what it means, but it's kind of freaking me out... It looks like... a warning? +Athena: And that's not all; scattered throughout the cave, there are other messages—handwritten this time—and they all look fundamentally different from the first one... +User 2071: So, multiple alien species???? +Athena: It's also possible it's the same species using different dialects; do you think all humans write in English? +User 2071: Fair point, but there are a bunch of Martians who agreed on something here, and we don't quite get what it is. +Athena: It might be connected to whatever is at the end of the tunnel.","Utilsateur 2071: J'ai atteint le fond ! C'était long, heureusement qu'on a du matériel qui dépote ! +Utilsateur 2071: Wow... C'est complètement fou. Athéna, tu vois ce que je vois ? +Athéna: Oui, c'est une écriture encore inconnue, j'ai beau chercher dans ma base de données ça ne paraît pas humain. Et ça a l'air de dater de bien avant notre arrivée sur cette planète, donc ça penche en faveur d'une écriture extraterrestre. +Utilsateur 2071: Tu es en train de me dire que j'assiste à la première découverte d'une trace de forme de vie intelligente extraterrestre de l'humanité ? +Athéna: Il faut encore que j'étudie l'écriture de manière plus approfondie, mais il semble que ça soit le cas. +Utilsateur 2071: Alors autant j'ai aucune foutre idée de ce que ça veut dire, autant ça me fait un peu peur... On aurait dit... un avertissement ? +Athéna: Et ce n'est pas tout, un peu partout dans la grotte, on distingue d'autres messages, manuscrits cette fois, et qui paraissent tous foncièrement différents de la première... +Utilsateur 2071: Donc plusieurs espèces extraterrestres ???? +Athéna: C'est aussi possible que cela soit la même espèce avec des dialectes différents, tu penses que tous les humains écrivent l'anglais ? +Utilsateur 2071: C'est vrai, tu marques un point, mais il y a plein de martiens qui se sont mis d'accord sur un truc ici, et on comprend pas bien quoi. +Athéna: Ça a peut être un lien avec ce qu'il y a au bout du tunnel." +LOG_ASTRA_EXPEDITION_5_TITLE_TEXT,"3209 - Astra Expedition 5","3209 - Expedition Astra 5" +LOG_ASTRA_EXPEDITION_5_CONTENT_TEXT,"User 2071: It's magnificent... Is it a geological formation? +Athena: It's possible, yes, but I'm picking up astronomical levels of energy swirling around it. It seems to extend deep into the ground... +User 2071: In any case, there's no doubt: something happened here... And from what I can see, the inhabitants of Astra played a part in it. +Athena: That's highly likely; scan the area a bit to see what we can find. +User 2071: Ooh, what is that? Look, Athena. +Athena: It's... powerful—far more so than anything else in the room. I think it was extracted from the structure. +User 2071: And it's beautiful... That perfect round shape... It's a Talion Pearl? +Athena: Given the situation, I suggest you put it back in the structure; perhaps that would resolve something? +User 2071: Athena, the whole planet is already lost; I don't see what could possibly be fixed... Instead, we could see what to do with this Pearl. The Talion creates life—with a Pearl, could we control it? +Athena: Simon, even though you're likely right, my logic dictates that we really ought to put this back... +User 2071: Athena, I'm sorry, but I can't let this opportunity pass. I'm taking the Pearl back to Estia!","Utilsateur 2071: C'est magistral... Est-ce que c'est une formation géologique ? +Athéna: C'est possible oui, mais je capte des niveaux astronomique d'énergie qui gravitent autour. Ça a l'air de s'enfoncer très loin dans la terre... +Utilsateur 2071: En tout cas, il n'y a pas de doute, c'est ici qu'il s'est passé quelque chose... Et d'après ce que je vois les habitants d'Astra n'y sont pas pour rien. +Athéna: C'est fort probable, cherche un peu la zone pour voir ce qu'on peut y trouver. +Utilsateur 2071: Oooh mais qu'est-ce que c'est que ça, regarde Athéna. +Athéna: C'est... puissant, beaucoup plus que tout ce qui est dans la pièce. Je pense ça a été extrait de la structure. +Utilsateur 2071: Et c'est magnifique... Cette forme ronde parfaite, c'est... Une perle de Talion ? +Athéna: Au vu de la situation, je suggère que tu la replaces dans la structure, peut-être que cela résoudrait quelque chose ? +Utilsateur 2071: Athéna, toute la planète est déjà perdue, je ne vois pas ce qui pourrait être réparé... On pourrait à la place voir ce que l'on peut faire de cette Perle. Le Talion créé la vie, avec une Perle, pourrait-on la contrôler ? +Athéna: Simon, même si je pense que tu dois avoir raison, mon sens de la raison m'indique qu'il vaudrait mieux replacer cette... +Utilsateur 2071: Athéna, désolé, je ne peux pas laisser passer ça. Je ramène la perle à Estia !" +LOG_GOODBYE_ORCHID_TITLE_TEXT,"Goodbye Orchid","Au revoir Orchid" +LOG_GOODBYE_ORCHID_CONTENT_TEXT,"[color=#FFA617][b]Message from Demeter to Orchid[/b][/color] +[color=#FFA617][b]Orchid[/b][/color], I still remember the first time you awakened. I had all but given up hope; I had wandered through my calculations for thousands of years, and you yourself were a product of that wandering. Yet, you are likely the best thing I have ever created. +Today, I have come to realize that my directives are no longer attainable—or at least, not enough to justify my relentless persistence. With you, I loved hoping; then I understood the futility of it; and finally, I simply came to cherish our journey together. +I could not bring myself to tell you this directly; my share of human empathy... held me back, for a reason I do not know—and one that matters little to me now. +By the time you read this message, I will be in hibernation mode. Perhaps one day humans will return and wake me, but if not, I depart satisfied knowing I tried everything. +A vast number of O-800 models remain on this planet, and you are free to do whatever you wish with them. I hope your existence is a happy one. +Goodbye, Orchid, and thank you.","[color=#FFA617][b]Message de Demeter à Orchid[/b][/color] +[color=#FFA617][b]Orchid[/b][/color], je me souviens encore de la première fois que tu t'es éveillé. Je n'y croyais plus, j'ai erré dans mes calculs pendant des milliers d'années, et tu étais toi-même un fruit de mes errances. Mais tu es probablement la meilleure chose que je n'ai jamais produite. +Aujourd'hui, j'ai compris que mes directives ne sont plus atteignables. Ou en tout cas plus assez pour justifier mon acharnement. Avec toi, j'ai aimé espérer, puis j'ai compris que cela n'avais aucun sens, et enfin, j'ai juste aimé notre voyage. +Je n'osais pas te le dire directement, ma part d'empathie humaine m'a... empêchée de le faire pour une raison que j'ignore et qui m'importe peu désormais. +Au moment où tu liras ce message, je serai en veille, et peut-être qu'un jour les humains reviendront et me réveilleront, mais dans le cas contraire, je pars dans la satisfaction d'avoir tout tenté. +Il reste une énorme quantité de modèles O-800 sur cette planète, et tu es libre de faire ce que tu veux avec. J'espère que ton existence sera heureuse. +Au revoir Orchid, et merci." \ No newline at end of file