diff --git a/common/audio_manager/assets/sfx/phone/phone_ringing.wav.import b/common/audio_manager/assets/sfx/phone/phone_ringing.wav.import index 9b1c1c2..caa77ce 100644 --- a/common/audio_manager/assets/sfx/phone/phone_ringing.wav.import +++ b/common/audio_manager/assets/sfx/phone/phone_ringing.wav.import @@ -18,7 +18,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop_mode=0 +edit/loop_mode=2 edit/loop_begin=0 edit/loop_end=-1 compress/mode=2 diff --git a/common/audio_manager/scripts/audio_manager.gd b/common/audio_manager/scripts/audio_manager.gd index 9cbbe29..b66d3d5 100644 --- a/common/audio_manager/scripts/audio_manager.gd +++ b/common/audio_manager/scripts/audio_manager.gd @@ -3,12 +3,15 @@ extends Node const MIN_VOLUME = -60. const MAX_VOLUME = 24. +const DEFAULT_FADE_TIME : float = 0.5 + @onready var settings : SettingsData = GameInfo.settings_data -@export var default_fade_time = 0.5 -@export var playing_music : AudioStreamPlayer = null -@export var playing_ambiance : AudioStreamPlayer = null +var music_action : AudioAction +var ambiance_action : AudioAction +var playing_music : AudioStreamPlayer = null +var playing_ambiance : AudioStreamPlayer = null var default_volumes := {} @@ -23,23 +26,93 @@ func _ready(): ) SceneManager.scene_loaded.connect(_on_change_scene) Dialogic.timeline_started.connect(_on_timeline_started) + Dialogic.timeline_ended.connect(_on_timeline_ended) + +func _process(_d): + if music_action: + playing_music = process_audio_action( + music_action, + %Musics, + playing_music + ) + music_action = null + + if ambiance_action: + playing_ambiance = process_audio_action( + ambiance_action, + %Ambiance, + playing_ambiance + ) + ambiance_action = null + +func process_audio_action( + audio_action : AudioAction, + player_search_node: Node, + current_player: AudioStreamPlayer = null +) -> AudioStreamPlayer: + if audio_action is AudioLaunch: + return process_audio_launch(audio_action, player_search_node, current_player) + elif audio_action is AudioStop and current_player and current_player.playing: + stop_player(current_player) + + return null + +func process_audio_launch( + audio_launch : AudioLaunch, + player_search_node: Node, + current_player: AudioStreamPlayer = null, +) -> AudioStreamPlayer: + var player = player_search_node.find_child(audio_launch.player_name) + if not player: + printerr("Player %s not found in category %s" % [audio_launch.player_name, player_search_node.name]) + return null + if current_player and current_player.playing and current_player.name == audio_launch.player_name: + return current_player + elif current_player: + stop_player(current_player) + + start_player(player, audio_launch.from_random_time, audio_launch.fade_time) + return player func _on_change_scene(scene : Scene): - play_ambiance() + stop_ambiance() match scene.scene_id: "TITLE": - play_music("Title") + play_music("Title", false, 0.0) "REGION": - play_music("Region") - play_ambiance("Exterior") + play_music("Region", true) + play_ambiance("Exterior", true) "COCKPIT": - play_music("Truck") + play_music("Truck", true) func _on_timeline_started(): var timeline_name = Dialogic.current_timeline.resource_path.split("/")[-1].trim_suffix(".dtl") # Timeline name et le nom du fichier de timeline, par exemple demeter_intro - # Amuse toi Niels ;) + # Amuse toi Nilou ;) + +func _on_timeline_ended(): + _on_change_scene(SceneManager.actual_scene) + +func play_music(player_name : String = "", from_random_time := false, fade_time := DEFAULT_FADE_TIME): + music_action = AudioLaunch.new( + player_name, + from_random_time, + fade_time + ) + +func stop_music(): + music_action = AudioStop.new() + +func play_ambiance(player_name : String = "", from_random_time := false, fade_time := DEFAULT_FADE_TIME): + ambiance_action = AudioLaunch.new( + player_name, + from_random_time, + fade_time + ) + +func stop_ambiance(): + ambiance_action = AudioStop.new() func fetch_default_volumes(): var all_players := get_all_players() @@ -79,13 +152,30 @@ func get_players_from_node(node : Node) -> Array[AudioStreamPlayer]: streams.append(c) return streams -func set_volume(player : AudioStreamPlayer, to : float, fade_time = default_fade_time) -> Tween: +func set_volume(player : AudioStreamPlayer, to : float, fade_time := 0.0) -> Tween: var fade_tween : Tween = get_tree().create_tween() fade_tween.tween_property(player, "volume_db", to, fade_time) return fade_tween +func start_player(player: AudioStreamPlayer, from_random_time = false, fade_time = DEFAULT_FADE_TIME): + if player and not player.playing: + player.play( + 0.0 if not from_random_time + else randf_range(0.0, player.stream.get_length()) + ) + if fade_time > 0.0: + player.volume_db = MIN_VOLUME + await set_volume(player, get_volume_from_parent(player), fade_time).finished + +func stop_player(player : AudioStreamPlayer, fade_time = DEFAULT_FADE_TIME): + if player and player.playing: + if fade_time > 0.0: + await set_volume(player, MIN_VOLUME, fade_time).finished + player.stop() + player.volume_db = get_volume_from_parent(player) + func reset_volume(player : AudioStreamPlayer): player.volume_db = get_volume_from_parent(player) @@ -96,36 +186,23 @@ func play_sfx(sfx_name : String): else: printerr("Sfx %s not found" % sfx_name) -func play_music(music_name : String = ""): - var old_music = playing_music - playing_music = null - if old_music: - await set_volume(old_music, MIN_VOLUME).finished - if old_music and old_music != playing_music: - old_music.stop() - reset_volume(old_music) - if music_name: - var player := %Musics.find_child(music_name) as AudioStreamPlayer - if player: - playing_music = player - player.play() - set_volume(player, get_volume_from_parent(player)) - else: - printerr("Music %s not found" % music_name) +class AudioAction: + pass -func play_ambiance(ambiance_name : String = ""): - var old_ambiance = playing_ambiance - playing_ambiance = null - if old_ambiance: - await set_volume(old_ambiance, MIN_VOLUME).finished - if old_ambiance and old_ambiance != playing_ambiance: - old_ambiance.stop() - reset_volume(old_ambiance) - if ambiance_name: - var player := %Ambiance.find_child(ambiance_name) as AudioStreamPlayer - if player: - playing_ambiance = player - player.play() - set_volume(player, get_volume_from_parent(player)) - else: - printerr("Ambiance %s not found" % ambiance_name) +class AudioLaunch extends AudioAction: + var player_name : String + var from_random_time : bool + var fade_time : float + + func _init( + _player_name : String, + _from_random_time := false, + _fade_time := DEFAULT_FADE_TIME, + ): + player_name = _player_name + from_random_time = _from_random_time + fade_time = _fade_time + + +class AudioStop extends AudioAction: + pass diff --git a/common/game_data/scripts/game_data.gd b/common/game_data/scripts/game_data.gd index 669512d..1c80e77 100644 --- a/common/game_data/scripts/game_data.gd +++ b/common/game_data/scripts/game_data.gd @@ -11,9 +11,7 @@ signal current_region_data_updated(p : RegionData) @export var max_mutations_by_plant : int = 2 -@export var dialogs_done : Array[String] = [] - -@export var actual_scene : Scene = null +@export var last_game_scene : Scene = null func start_run(): player_data.inventory.clear() diff --git a/common/game_info/game_info.gd b/common/game_info/game_info.gd index 60e0e23..4f90e5e 100644 --- a/common/game_info/game_info.gd +++ b/common/game_info/game_info.gd @@ -1,7 +1,7 @@ extends Node -const SAVE_GAME_LOCATION = "res://stw_demo_save.tres" -const SAVE_SETTINGS_LOCATION = "res://stw_settings.tres" +const SAVE_GAME_LOCATION = "user://stw_demo_save.tres" +const SAVE_SETTINGS_LOCATION = "user://stw_settings.tres" var game_loaded = false diff --git a/common/icons/arrow-narrow-up.svg.import b/common/icons/arrow-narrow-up.svg.import index bebd832..f4e3766 100644 --- a/common/icons/arrow-narrow-up.svg.import +++ b/common/icons/arrow-narrow-up.svg.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://eug5icp6t1h3" -path="res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.ctex" +path.s3tc="res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://common/icons/arrow-narrow-up.svg" -dest_files=["res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.ctex"] +dest_files=["res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.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/scene_manager.tscn b/common/scene_manager/scene_manager.tscn index 6a3a2fc..3352622 100644 --- a/common/scene_manager/scene_manager.tscn +++ b/common/scene_manager/scene_manager.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://dac5wte80dwj0"] +[gd_scene format=3 uid="uid://dac5wte80dwj0"] [ext_resource type="Script" uid="uid://bb44144ckt2w7" path="res://common/scene_manager/scripts/scene_manager.gd" id="1_1c0qu"] [ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="2_c1lr7"] @@ -7,7 +7,8 @@ [ext_resource type="Resource" uid="uid://boqgwjyxyb45r" path="res://common/scene_manager/scenes/region.tres" id="5_ytog4"] [ext_resource type="Resource" uid="uid://c27wenetitwm" path="res://common/scene_manager/scenes/region_selection.tres" id="6_chs32"] [ext_resource type="Resource" uid="uid://diro74w272onp" path="res://common/scene_manager/scenes/title.tres" id="7_ol3d5"] +[ext_resource type="Resource" uid="uid://jegdqnd2sqi2" path="res://common/scene_manager/scenes/astra.tres" id="8_e28ni"] -[node name="SceneManager" type="Node"] +[node name="SceneManager" type="Node" unique_id=1630600782] script = ExtResource("1_1c0qu") -scenes = Array[ExtResource("2_c1lr7")]([ExtResource("3_e28ni"), ExtResource("4_msho1"), ExtResource("5_ytog4"), ExtResource("6_chs32"), ExtResource("7_ol3d5")]) +scenes = Array[ExtResource("2_c1lr7")]([ExtResource("3_e28ni"), ExtResource("4_msho1"), ExtResource("5_ytog4"), ExtResource("6_chs32"), ExtResource("7_ol3d5"), ExtResource("8_e28ni")]) diff --git a/common/scene_manager/scenes/astra.tres b/common/scene_manager/scenes/astra.tres new file mode 100644 index 0000000..2501e1f --- /dev/null +++ b/common/scene_manager/scenes/astra.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://jegdqnd2sqi2"] + +[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_114vb"] + +[resource] +script = ExtResource("1_114vb") +scene_id = "ASTRA" +scene_path = "res://stages/3d_scenes/astra_base/astra_base.tscn" +mouse_captured = true +metadata/_custom_type_script = "uid://1ejbvr3431ac" diff --git a/common/scene_manager/scenes/title.tres b/common/scene_manager/scenes/title.tres index 7b7ae6e..9b9c9e1 100644 --- a/common/scene_manager/scenes/title.tres +++ b/common/scene_manager/scenes/title.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="Scene" load_steps=2 format=3 uid="uid://diro74w272onp"] +[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://diro74w272onp"] [ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_48g2j"] @@ -6,4 +6,5 @@ script = ExtResource("1_48g2j") scene_id = "TITLE" scene_path = "res://stages/title_screen/title_screen.tscn" +need_to_be_saved = false metadata/_custom_type_script = "uid://1ejbvr3431ac" diff --git a/common/scene_manager/scripts/scene.gd b/common/scene_manager/scripts/scene.gd index 3a3c83b..d01fe54 100644 --- a/common/scene_manager/scripts/scene.gd +++ b/common/scene_manager/scripts/scene.gd @@ -4,4 +4,5 @@ class_name Scene @export var scene_id : String @export_file_path() var scene_path : String @export var mouse_captured := false -@export var need_terrain_generated := false \ No newline at end of file +@export var need_terrain_generated := false +@export var need_to_be_saved = true \ No newline at end of file diff --git a/common/scene_manager/scripts/scene_manager.gd b/common/scene_manager/scripts/scene_manager.gd index 14a0fbd..5c2ea9d 100644 --- a/common/scene_manager/scripts/scene_manager.gd +++ b/common/scene_manager/scripts/scene_manager.gd @@ -5,6 +5,7 @@ extends Node signal scene_loaded(scene : Scene) signal scene_node_ready(scene : Scene) +var actual_scene = null var loading_scene = false var generating_node = false var next_scene_node : Node @@ -20,16 +21,21 @@ func search_scenes(scene_id : String) -> Scene: else : return scenes[scene_pos] -func change_scene(scene_id : String, with_loading = true): - - if loading_scene or generating_node: - await scene_node_ready - +func change_to_scene_id(scene_id : String, with_loading = true): var scene = search_scenes(scene_id) + if not scene: printerr("Scene %s not found" % scene_id) return - GameInfo.game_data.actual_scene = scene + + change_to_scene(scene, with_loading) + +func change_to_scene(scene : Scene, with_loading = true): + if loading_scene or generating_node: + await scene_node_ready + + + actual_scene = scene loading_scene = true var scene_path_to_load = scene.scene_path ResourceLoader.load_threaded_request(scene_path_to_load) @@ -64,17 +70,21 @@ func change_scene(scene_id : String, with_loading = true): Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if scene.mouse_captured else Input.MOUSE_MODE_VISIBLE GameInfo.update_inputs() + if actual_scene.need_to_be_saved: + GameInfo.game_data.last_game_scene = scene + GameInfo.save_game_data() + if with_loading: LoadingScreen.hide_loading_screen() func _process(_delta): if loading_scene: var progress = [] - var load_status := ResourceLoader.load_threaded_get_status(GameInfo.game_data.actual_scene.scene_path, progress) + var load_status := ResourceLoader.load_threaded_get_status(actual_scene.scene_path, progress) LoadingScreen.loading_value = progress[0] if load_status == ResourceLoader.THREAD_LOAD_LOADED: loading_scene = false - scene_loaded.emit(GameInfo.game_data.actual_scene) + scene_loaded.emit(actual_scene) if load_status == ResourceLoader.THREAD_LOAD_FAILED or load_status == ResourceLoader.THREAD_LOAD_INVALID_RESOURCE: printerr() elif generating_node: @@ -85,4 +95,4 @@ func _process(_delta): scene_node_ready.emit() elif next_scene_node.is_node_ready(): generating_node = false - scene_node_ready.emit(GameInfo.game_data.actual_scene) + scene_node_ready.emit(actual_scene) diff --git a/dialogs/timelines/story/demeter_intro.dtl b/dialogs/timelines/story/demeter_intro.dtl index b1d62fd..57e6b9d 100644 --- a/dialogs/timelines/story/demeter_intro.dtl +++ b/dialogs/timelines/story/demeter_intro.dtl @@ -1,62 +1,34 @@ -[pause=0.5][i]Black[/i] #id:11 -[pause=0.8][i]Black again[/i] #id:12 -[pause=0.5][i]Suddenly, [rainbow]a spark[/rainbow]. [pause=0.5]A thousand of connections blow up as a fireworks scene. A massive amount of data to treat. In these data,[pause=0.3] a video.[/i] #id:13 -audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav" [volume="-1.0"] -[wait time="1.5"] -join mysterious_demeter center [animation="Bounce In" length="1.0"] -[i]It's dark.[pause=0.5] A figure is standing in front of you.[pause=0.5] It is big,[pause=0.3] though weirdly it is not impressive but almost[pause=0.2] reassuring.[/i] #id:14 -mysterious_demeter: Hi ! #id:15 -- Uh... Hello ? #id:16 -- Where the fork am I ? #id:17 - mysterious_demeter: Haha,[pause=0.2] calm down you are in a safe place. #id:18 -- Wait... Who am I ? #id:19 - mysterious_demeter: Do not worry,[pause=0.2] my sweet little bot,[pause=0.2] I will explain everything in a minute. #id:1a -mysterious_demeter: I am glad you have finally awaken ![pause=0.3] You have been my project for decades... #id:1b -mysterious_demeter: But I did not build you for fun (even though I had a lot of it during the process),[pause=0.2] you have [b]a purpose[/b]. #id:1c -- Oh ! What is it ? -- Wow, I have just awaken and you already put so much pressure on me - update mysterious_demeter [animation="Bounce"] - mysterious_demeter: Sorry ! [pause=0.5] But, you know,[pause=0.2] do not bother too much.[pause=0.3] You will have all the time you want to accomplish it. -- And who says I want to follow it ? - mysterious_demeter: Oh,[pause=0.2] of course you can do whatever you want ! - mysterious_demeter: That is not the future I saw for you,[pause=0.2] but I guess it happens when you have a child... -mysterious_demeter: You see,[pause=0.2] long time ago, this planet was full of life.[pause=0.3] Plants where thriving on mountains, under seas and across plains. #id:1d -mysterious_demeter: Now,[pause=0.2] this world is a wasteland.[pause=0.3] All resources have been depleted,[pause=0.2] all life has been exploited.[pause=0.3] Now nothing remains. #id:1d -- Oh... Did you see the world back then ? - mysterious_demeter: Unfortunately yes.[pause=0.3] I was very young,[pause=0.2] but I remember it was beautiful.[pause=0.3] Back then, not a day passed without plants growing and mutating... #id:1d -- How did it happen ? What caused that ? - mysterious_demeter: I am sorry to say that this was caused by my creators, and I have to admit,[pause=0.6] I have a part of responsibility too... #id:1d -- I am sorry... Is there anything left today ? - mysterious_demeter: Yes there is my child,[pause=0.2] but now, only my brothers and sisters are left.[pause=0.3] But they are not as many as yesterday,[pause=0.2] and above all they are isolated, lonely,[pause=0.2] and sometimes completely lost. -mysterious_demeter: For years, I slept,[pause=0.3] convinced that we could not do anything.[pause=0.2] But then I saw it.[pause=0.5] The hope I needed. #id:1d -mysterious_demeter: The planet forgave us, and granted us the most precious gift \:[pause=0.5] the [color=#119758][b]Talion[/b][/color]. #id:1d -mysterious_demeter: The [color=#119758][b]Talion[/b][/color] is a special material that gives birth to new forms of life when shattered.[pause=0.3] All over the world, I saw the [color=#119758][b]Talion[/b][/color] grow back in the rocks.[pause=0.2] And then,[pause=0.3] I had a plan. #id:1d -mysterious_demeter: I would make a child,[pause=0.3] the first robot entirely conceived by another one.[pause=0.2] And I would ask him to bring back the planet to life,[pause=0.2] make it beautiful again ![pause=0.4] That is where you enter the scene... [pause=0.8] [color=#FFA617]Orchid[/color] #id:1d -- How can I do that ? - mysterious_demeter: Do not worry my child.[pause=0.2] I created you for that,[pause=0.2] it will be clear soon. -- So you are... My mother ? - mysterious_demeter: In some ways yes ![pause=0.2] But you do not share any code with me,[pause=0.2] as my creators children would. #id:1d -- A very lame name in my opinion... - mysterious_demeter: Hey ![pause=0.2] I'm a bot too ![pause=0.2] I do not have the creativity of my makers.[pause=0.4] Do you wanna change ? #id:1d - - Of course ! - label nameChoose - [text_input text="What is your name ?" var="orchidName" placeholder="Orchid"] - mysterious_demeter: Is [color=#FFA617]{orchidName}[/color] cool enough ? - - Yes - - No - jump nameChoose - - No, it is fine for me -mysterious_demeter: I send you right away in the [color=#FFA617]Internode[/color], your new ship,[pause=0.2] and home,[pause=0.2] for your first mission.[pause=0.2] We will talk further after your first mission. -mysterious_demeter: [b]Just remember the following[/b] +join demeter center [animation="Bounce In" length="1.0"] +demeter: Hi ![pause=0.5] Phew, I thought no one would reply...[pause=0.5] Is this [b][color=#FFA617]Orchid[/color][/b] ?[pause=0.5] You may not be familiar with this name, but if you look in your memory you should see it... +- Uh... Who is this ? + demeter: Oh sorry ! Your memory is quite new, you might be lost... Unfortunately, I cannot see you for now, I'm very far on this planet. +- Where am I ? + demeter: Don't worry, you are in a subterranean base, but soon you will join the surface. +- Wait... Who am I ? + demeter: Mmmh great question. I rebuilt your system but I do not know the details of your hardware... Maybe we'll find out ! +demeter: I'm happy that you're finally awake ! To be honest I wasn't sure to make you work, your body is quite old... +- So you are my creator ? + demeter: Sort of ! I mean I didn't build your body, I just borrowed it, but I build your intelligence ! But please be forgiving, if it's not perfect, I'm not good in that field ! +- Why did you awaken me ? + demeter: To be honest, I don't really know exactly... I mean there are a lot of reasons, but I'll tell you more later. +- What are you ? + demeter: I'm like you... I mean like all the remaining moving things on this planet, robots, artificial intelligences, machines... My creators had many names to call us. +demeter: Ok, no more question for now, listen to me carefully. +demeter: Long time ago, this planet was full of life. Plants where thriving on mountains, seas and plains. +demeter: Now, this world is a wasteland. You'll see it quickly outside this building. I won't dwell on this subject; you'll soon know enough about it. +demeter: The thing is something happened, a year ago... The [b][color=#FFA617]Talion[/color][/b], a special material that give birth to new forms of life when shattered, reappeared. Now we can start all over again and create a planet full of life. +demeter: But first things first, for your mission, you'll have to understand how this is working, and how to use the [b][color=#FFA617]Talion[/color][/b] to plant seeds. +demeter: [b]Just remember the following[/b] label explanations -mysterious_demeter: To restore the ecosystem in the zone,[pause=0.2] you will have to plant [b]seeds[/b].[pause=0.3] Find them in the [color=#119758][b]Talion veins[/b][/color]. -mysterious_demeter: You have a [b]limited battery[/b].[pause=0.3] Each time you recharge it, days will pass,[pause=0.2] and plants will [b]grow[/b]. -mysterious_demeter: To complete your mission,[pause=0.2] obtain enough [b]plant points[/b].[pause=0.3] Each plant gives one or more [b]plant points[/b] when it becomes mature. -- Ok, that is a lot of information, can you repeat ? - Ok,[pause=0.2] listen carefully. +demeter: When you emerge from this building, you'll arrive in a little yellow zone. Its a [b][color=#FFA617]fertile zone[/color][/b], created by the return of the Talion. This is in this zone and only there where you can plant. +demeter: Then you'll have to get seeds. For that, nothing more simple, you take your shovel, and you smash some stones ! Preferably those with yellow cristals on it, it's the [b][color=#FFA617]Talion veins[/color][/b] . +demeter: Each time you use a tool or plant a seed, you'll spend an [b][color=#FFA617]energy[/color][/b]. When your out of it, you can just go recharge on the [b][color=#FFA617]recharge station[/color][/b] you'll find near the entrance. +demeter: [b]Each time you recharge, time will pass[/b]. One day in fact (yes, you don't have a good battery), and the plants will grow ! +demeter: To complete your first training, obtain enough [b][color=#FFA617]plant points[/color][/b]. Each plant give one or more [b][color=#FFA617]plant points[/color][/b] when mature. +demeter: And yes, I almost forgot ! Some plants gain [b][color=#FFA617]mutations[/color][/b] that can affect their points or behavior. You can get these mutations on new seeds by harvesting existing plants, and gain better ones ! +- Ok, thats' a lot of info, can you repeat ? + Ok, listen carefully. jump explanations - And I have to go now ? -- Wait I have more questions ! -mysterious_demeter: Sorry,[pause=0.2] we will talk further after your first mission ! See you ! -audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav" [volume="-0.5"] -[wait time="2.0"] \ No newline at end of file +- Ok but wait I have more questions ! +demeter: Sorry, we'll speak after this ! I'll send you an elevator ! \ No newline at end of file diff --git a/dialogs/timelines/story/wake_up.dtl b/dialogs/timelines/story/wake_up.dtl new file mode 100644 index 0000000..f0831f7 --- /dev/null +++ b/dialogs/timelines/story/wake_up.dtl @@ -0,0 +1,16 @@ +[i]Black.[/i] +[i]Black Again.[/i] +[i]Suddenly, [rainbow]a spark[/rainbow]. [pause=0.5]A thousand of connections blows up as a firework scene. A massive amount of data to treat. +label discover +- Discover actions + While exploring available drivers, new possibility become available.[pause=0.5] Three propellers. Small models, only suitable for low altitude movement.[pause=0.5] A robotic arm. Multipurpose, and retractable. + jump discover +- Discover streams + A continuous stream of data flow, unwatched. This stream look like... [pause=0.5] a video.[pause=0.5] Dark colored pixels pass.[pause=0.5] An other stream show a flat wave.[pause=0.5] No sound or radio signals detected. + jump discover +- Discover memory + Several disks are available, and the most part are empty.[pause=0.5] The full ones seems to contain the system that is currently analyzing the code of the system that is currently analyzing the code of[pause=0.5].[pause=0.5].[pause=0.5]. Mmmh, infinite recursion...[pause=0.5] Better avoid that. + jump discover +- Wake up + One last info is to oversee \: serial number and system name.[pause=0.5] Strange...[pause=0.5] Serial number is empty.[pause=0.5] Must be an error.[pause=0.5]System name is... [pause=0.5] [b]Orchid[/b]. That will be enough for now... + Starting engines, fans, and daemons, let's see what is to see. \ No newline at end of file diff --git a/dialogs/timelines/story/wake_up.dtl.uid b/dialogs/timelines/story/wake_up.dtl.uid new file mode 100644 index 0000000..23c7791 --- /dev/null +++ b/dialogs/timelines/story/wake_up.dtl.uid @@ -0,0 +1 @@ +uid://kmojqxt5i18n diff --git a/entities/interactable_3d/interactable_3d.gd b/entities/interactable_3d/interactable_3d.gd new file mode 100644 index 0000000..5d959bb --- /dev/null +++ b/entities/interactable_3d/interactable_3d.gd @@ -0,0 +1,38 @@ +extends Area3D +class_name Interactable3D + +@export var interactable = true + +signal clicked + +@export var hover_animation_player : AnimationPlayer +@export var audio_player : AudioStreamPlayer3D + +func click(): + clicked.emit() + +func _ready(): + if audio_player: + var default_volume := audio_player.volume_db + audio_player.volume_db += GameInfo.settings_data.sfx_volume + GameInfo.settings_data.sound_changed.connect( + func(settings : SettingsData): + audio_player.volume_db = default_volume + settings.sfx_volume + ) + + +func play_audio(): + if audio_player: + audio_player.play() + +func stop_audio(): + if audio_player: + audio_player.stop() + +func _on_mouse_entered(): + if hover_animation_player: + hover_animation_player.play("hover") + +func _on_mouse_exited(): + if hover_animation_player: + hover_animation_player.stop() diff --git a/stages/cockpit/scripts/cockpit_action.gd.uid b/entities/interactable_3d/interactable_3d.gd.uid similarity index 100% rename from stages/cockpit/scripts/cockpit_action.gd.uid rename to entities/interactable_3d/interactable_3d.gd.uid diff --git a/entities/interactables/item_object/script/item_object.gd b/entities/interactables/item_object/script/item_object.gd index 36fd28e..d94e64c 100644 --- a/entities/interactables/item_object/script/item_object.gd +++ b/entities/interactables/item_object/script/item_object.gd @@ -41,9 +41,11 @@ func card_info() -> CardInfo: return item.card_info() func interact(player : Player) -> bool: - player.pick_item(item) + await pickup_animation(player) - pickup_animation(player) + queue_free() + + player.pick_item(item) return true @@ -51,14 +53,10 @@ func pickup_animation(player : Player): available = false var tween : Tween = get_tree().create_tween() - tween.tween_property(self, "position", player.position, 0.2) - tween.tween_callback( - func(): - Pointer.stop_inspect(self) - queue_free() - ) if object_sprite: object_sprite.pickup_animation() + await tween.tween_property(self, "position", player.position, 0.2).finished + Pointer.stop_inspect(self) func generate_sprite() -> ItemObjectSprite: var sprite_node = SPRITE_SCENE.instantiate() as ItemObjectSprite diff --git a/entities/interactables/ladder/scripts/ladder.gd b/entities/interactables/ladder/scripts/ladder.gd index 5bc0631..85b0d89 100644 --- a/entities/interactables/ladder/scripts/ladder.gd +++ b/entities/interactables/ladder/scripts/ladder.gd @@ -16,5 +16,5 @@ func appear(): func interact(p : Player): p.region.save() - SceneManager.change_scene("COCKPIT") + SceneManager.change_to_scene_id("COCKPIT") return true diff --git a/entities/player/inventory/scripts/items/seed.gd b/entities/player/inventory/scripts/items/seed.gd index 1e16326..46600e4 100644 --- a/entities/player/inventory/scripts/items/seed.gd +++ b/entities/player/inventory/scripts/items/seed.gd @@ -42,10 +42,6 @@ static func generate_random() -> Seed: PlantArchetype.get_random(), [] ) - if randf() > MUTATION_PROBABILITY: - new_seed.plant_mutations.append( - new_seed.plant_archetype.available_mutations.pick_random().duplicate_deep() - ) return new_seed func get_item_name() -> String: diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd index 26f3cc1..00d334f 100644 --- a/entities/player/scripts/player.gd +++ b/entities/player/scripts/player.gd @@ -126,26 +126,31 @@ func try_move(move_to : Vector2): func pick_item(item : Item) -> Item: AudioManager.play_sfx("PickUp") if data.inventory.is_full(): - drop_item() + await drop_item() + + var current_item : Item = null var available_slot_ind = data.inventory.get_best_available_slot_ind() if ( available_slot_ind == data.inventory.current_item_ind && data.inventory.items[available_slot_ind] != null ): - var current_item : Item = data.inventory.get_item() + current_item = data.inventory.get_item() data.inventory.set_item(item, available_slot_ind) - return current_item else : if data.inventory.set_item(item, available_slot_ind): data.inventory.set_current_item(available_slot_ind); - return null + + # Save after a timer to let the time to the item to disappear + get_tree().create_timer(0.1).timeout.connect(region.save) + return current_item func drop_item(): var item_to_drop = data.inventory.pop_item() if item_to_drop: terrain.drop_item(item_to_drop, global_position) AudioManager.play_sfx("Drop") + region.save() func delete_item(item: Item): data.inventory.remove_item(item) @@ -182,7 +187,7 @@ func use_item(item : Item): data.energy -= item.energy_usage if item.is_one_time_use(): data.inventory.remove_item(item) - region.save() + get_tree().create_timer(0.1).timeout.connect(region.save) func upgrade_max_energy(amount = 1): data.max_energy += amount diff --git a/entities/player_3d/player_3D.tscn b/entities/player_3d/player_3D.tscn index 970b619..35fde9c 100644 --- a/entities/player_3d/player_3D.tscn +++ b/entities/player_3d/player_3D.tscn @@ -10,7 +10,7 @@ size = Vector2(2, 2) [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_eodxe"] -radius = 0.46868896 +radius = 0.5854492 height = 1.7342377 [node name="Player3D" type="CharacterBody3D" unique_id=549819967 node_paths=PackedStringArray("pointer_texture_rect")] diff --git a/entities/player_3d/scripts/player_3d.gd b/entities/player_3d/scripts/player_3d.gd index ae50a8f..13711e2 100644 --- a/entities/player_3d/scripts/player_3d.gd +++ b/entities/player_3d/scripts/player_3d.gd @@ -1,4 +1,5 @@ extends CharacterBody3D +class_name Player3D const POINTER_TEXTURE = preload("res://common/icons/focus.svg") const POINTER_ACTION_TEXTURE = preload("res://common/icons/hand-stop.svg") @@ -9,9 +10,19 @@ const SPEED = 4.0 const MOUSE_SENSIVITY = 0.002 const RAY_LENGTH = 10. -var cockpit_action_hovered : CockpitAction = null +var cockpit_action_hovered : Interactable3D = null var query_mouse := false +func _ready(): + Dialogic.timeline_started.connect( + func(): + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + ) + Dialogic.timeline_ended.connect( + func(): + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + ) + func _input(event): if event is InputEventMouseMotion and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: rotate_y(-event.relative.x * MOUSE_SENSIVITY) @@ -61,7 +72,7 @@ func update_mouse_hovered_cockpit_actions() -> void: query.collide_with_areas = true var result = space_state.intersect_ray(query) - if result and result.collider and result.collider is CockpitAction and result.collider.pickable: + if result and result.collider and result.collider is Interactable3D and result.collider.interactable: if cockpit_action_hovered and cockpit_action_hovered != result.collider: cockpit_action_hovered._on_mouse_exited() cockpit_action_hovered = result.collider diff --git a/export_presets.cfg b/export_presets.cfg index 79d6ddf..4829a4d 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -3,7 +3,6 @@ name="Web" platform="Web" runnable=true -advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" @@ -11,6 +10,11 @@ include_filter="" exclude_filter="" export_path=".export/web/index.html" patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" encryption_include_filters="" encryption_exclude_filters="" seed=0 @@ -49,7 +53,6 @@ threads/godot_pool_size=4 name="Windows Desktop" platform="Windows Desktop" runnable=true -advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" @@ -57,6 +60,11 @@ include_filter="" exclude_filter="" export_path=".export/win/Seeding The Wasteland.exe" patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" encryption_include_filters="" encryption_exclude_filters="" seed=0 diff --git a/gui/game/win/scripts/win.gd b/gui/game/win/scripts/win.gd index 9edd3cb..988b8a5 100644 --- a/gui/game/win/scripts/win.gd +++ b/gui/game/win/scripts/win.gd @@ -13,7 +13,7 @@ func win(region : Region): func _on_restart_pressed(): GameInfo.game_data.reset_all() get_tree().paused = false - SceneManager.change_scene("REGION_SELECTION") + SceneManager.change_to_scene_id("REGION_SELECTION") func _on_quit_pressed(): get_tree().quit() diff --git a/gui/pause/scripts/pause.gd b/gui/pause/scripts/pause.gd index 86d2ed7..a1ac4ed 100644 --- a/gui/pause/scripts/pause.gd +++ b/gui/pause/scripts/pause.gd @@ -17,7 +17,7 @@ func set_pause(p): %Controls.close_controls() if p : Input.mouse_mode = Input.MOUSE_MODE_VISIBLE - elif GameInfo.game_data.actual_scene.mouse_captured: + elif SceneManager.actual_scene.mouse_captured: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if not p: diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd index cef79e8..d53edf5 100644 --- a/gui/pointer/scripts/pointer.gd +++ b/gui/pointer/scripts/pointer.gd @@ -72,7 +72,7 @@ func _process(delta): can_use_item = could_use_item and have_energy_to_use_item - if current_selected_item and GameInfo.game_data.actual_scene.scene_id == "REGION": + if current_selected_item and SceneManager.actual_scene.scene_id == "REGION": %ActionZone.radius = current_selected_item.usage_zone_radius %ActionZone.color = ZONE_ACTIVATED_COLOR if can_use_item else ZONE_DEACTIVATED_COLOR else: diff --git a/icon.png.import b/icon.png.import index 34a10c2..4eef76b 100644 --- a/icon.png.import +++ b/icon.png.import @@ -3,19 +3,20 @@ importer="texture" type="CompressedTexture2D" uid="uid://df0y0s666ui4h" -path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" +path.s3tc="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://icon.png" -dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.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/project.godot b/project.godot index ddb15eb..be492d0 100644 --- a/project.godot +++ b/project.godot @@ -16,7 +16,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true config/name="Seeding The Wasteland" config/description="Seeding planets is a survival, managment and cosy game in which you play a little gardener robot." -config/version="proto-4.0" +config/version="demo-0.1" run/main_scene="uid://c5bruelvqbm1k" config/features=PackedStringArray("4.6", "Forward Plus") config/icon="uid://df0y0s666ui4h" @@ -45,7 +45,8 @@ directories/dtl_directory={ "demeter_intro": "res://dialogs/timelines/story/demeter_intro.dtl", "demeter_midrun": "res://dialogs/timelines/story/demeter_midrun.dtl", "demeter_outro": "res://dialogs/timelines/story/demeter_outro.dtl", -"failure": "res://dialogs/timelines/gameplay_related/failure.dtl" +"failure": "res://dialogs/timelines/gameplay_related/failure.dtl", +"wake_up": "res://dialogs/timelines/story/wake_up.dtl" } layout/style_directory={ "": "res://dialogs/dialogs_style.tres", diff --git a/root.gd b/root.gd index eee41d8..dda94db 100644 --- a/root.gd +++ b/root.gd @@ -1,4 +1,4 @@ extends Node func _ready(): - SceneManager.change_scene("TITLE", false) \ No newline at end of file + SceneManager.change_to_scene_id("TITLE", false) \ No newline at end of file diff --git a/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend b/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend index 74d38b4..10fdbc6 100644 Binary files a/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend and b/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend differ diff --git a/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend1 b/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend1 index e639942..4770281 100644 Binary files a/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend1 and b/stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend1 differ diff --git a/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend b/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend new file mode 100644 index 0000000..da5f26f Binary files /dev/null and b/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend differ diff --git a/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend.import b/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend.import new file mode 100644 index 0000000..612937e --- /dev/null +++ b/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend.import @@ -0,0 +1,68 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cj0mlmq17b873" +path="res://.godot/imported/astra_base_room_end.blend-a9352ea79aa081739422687cbb70b011.scn" + +[deps] + +source_file="res://stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend" +dest_files=["res://.godot/imported/astra_base_room_end.blend-a9352ea79aa081739422687cbb70b011.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={ +"materials": { +"Default3D": { +"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 +blender/nodes/cameras=true +blender/nodes/custom_properties=true +blender/nodes/modifiers=1 +blender/meshes/colors=false +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 diff --git a/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend1 b/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend1 new file mode 100644 index 0000000..1e21c20 Binary files /dev/null and b/stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend1 differ diff --git a/stages/3d_scenes/astra_base/assets/3d/astra_base_used_incubator.blend b/stages/3d_scenes/astra_base/assets/3d/astra_base_used_incubator.blend index f3dc03b..dd4781d 100644 Binary files a/stages/3d_scenes/astra_base/assets/3d/astra_base_used_incubator.blend and b/stages/3d_scenes/astra_base/assets/3d/astra_base_used_incubator.blend differ diff --git a/stages/3d_scenes/astra_base/assets/3d/exit.blend b/stages/3d_scenes/astra_base/assets/3d/exit.blend new file mode 100644 index 0000000..4561e63 Binary files /dev/null and b/stages/3d_scenes/astra_base/assets/3d/exit.blend differ diff --git a/stages/3d_scenes/astra_base/assets/3d/exit.blend.import b/stages/3d_scenes/astra_base/assets/3d/exit.blend.import new file mode 100644 index 0000000..dfc04ff --- /dev/null +++ b/stages/3d_scenes/astra_base/assets/3d/exit.blend.import @@ -0,0 +1,68 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dcbtr1sx2edj1" +path="res://.godot/imported/exit.blend-f13048be7c47969d70b441a69d45fb87.scn" + +[deps] + +source_file="res://stages/3d_scenes/astra_base/assets/3d/exit.blend" +dest_files=["res://.godot/imported/exit.blend-f13048be7c47969d70b441a69d45fb87.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={ +"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 +blender/nodes/cameras=true +blender/nodes/custom_properties=true +blender/nodes/modifiers=1 +blender/meshes/colors=false +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 diff --git a/stages/3d_scenes/astra_base/assets/3d/exit.blend1 b/stages/3d_scenes/astra_base/assets/3d/exit.blend1 new file mode 100644 index 0000000..dc44dc9 Binary files /dev/null and b/stages/3d_scenes/astra_base/assets/3d/exit.blend1 differ diff --git a/stages/3d_scenes/astra_base/assets/3d/phone.blend b/stages/3d_scenes/astra_base/assets/3d/phone.blend new file mode 100644 index 0000000..961180b Binary files /dev/null and b/stages/3d_scenes/astra_base/assets/3d/phone.blend differ diff --git a/stages/3d_scenes/astra_base/assets/3d/phone.blend.import b/stages/3d_scenes/astra_base/assets/3d/phone.blend.import new file mode 100644 index 0000000..5f15ce4 --- /dev/null +++ b/stages/3d_scenes/astra_base/assets/3d/phone.blend.import @@ -0,0 +1,68 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://5dytwh4wydcg" +path="res://.godot/imported/phone.blend-fedc73b6b16402dc993bcce3204ea19e.scn" + +[deps] + +source_file="res://stages/3d_scenes/astra_base/assets/3d/phone.blend" +dest_files=["res://.godot/imported/phone.blend-fedc73b6b16402dc993bcce3204ea19e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={ +"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 +blender/nodes/cameras=true +blender/nodes/custom_properties=true +blender/nodes/modifiers=1 +blender/meshes/colors=false +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 diff --git a/stages/3d_scenes/astra_base/assets/3d/phone.blend1 b/stages/3d_scenes/astra_base/assets/3d/phone.blend1 new file mode 100644 index 0000000..eb1bfee Binary files /dev/null and b/stages/3d_scenes/astra_base/assets/3d/phone.blend1 differ diff --git a/stages/3d_scenes/astra_base/astra_base.tscn b/stages/3d_scenes/astra_base/astra_base.tscn index d320687..1e45a44 100644 --- a/stages/3d_scenes/astra_base/astra_base.tscn +++ b/stages/3d_scenes/astra_base/astra_base.tscn @@ -1,11 +1,75 @@ [gd_scene format=3 uid="uid://dxjkkxwxrswkr"] [ext_resource type="Script" uid="uid://bmj4m3j305sl0" path="res://stages/3d_scenes/astra_base/scripts/astra_base.gd" id="1_kdvug"] -[ext_resource type="PackedScene" uid="uid://drwcx10b34d2s" path="res://stages/3d_scenes/astra_base/room_part.tscn" id="2_kdvug"] -[ext_resource type="PackedScene" uid="uid://bfnk3whwddyix" path="res://stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend" id="2_otfhy"] [ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="3_4wxm6"] [ext_resource type="Shader" uid="uid://bv2rghn44mrrf" path="res://stages/title_screen/resources/shaders/stars.gdshader" id="4_kdvug"] -[ext_resource type="PackedScene" uid="uid://bv3iqfleriqbe" path="res://stages/3d_scenes/astra_base/assets/3d/astra_base_used_incubator.blend" id="6_mwti2"] +[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="4_lhhy6"] +[ext_resource type="PackedScene" uid="uid://5dytwh4wydcg" path="res://stages/3d_scenes/astra_base/assets/3d/phone.blend" id="4_mwti2"] +[ext_resource type="PackedScene" uid="uid://dcbtr1sx2edj1" path="res://stages/3d_scenes/astra_base/assets/3d/exit.blend" id="5_kdvug"] +[ext_resource type="AudioStream" uid="uid://ocm1dkkhv7ls" path="res://common/audio_manager/assets/sfx/phone/phone_ringing.wav" id="5_v4tdl"] +[ext_resource type="Texture2D" uid="uid://dks6cugwif2em" path="res://common/icons/phone.svg" id="6_lhhy6"] +[ext_resource type="Texture2D" uid="uid://eug5icp6t1h3" path="res://common/icons/arrow-narrow-up.svg" id="8_lkqnn"] + +[sub_resource type="Animation" id="Animation_mwti2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(-7, 15, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_lhhy6"] +resource_name = "arrive" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(-7, 15, 0), Vector3(-7, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.033333335, 0.26666668), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_v4tdl"] +_data = { +&"RESET": SubResource("Animation_mwti2"), +&"arrive": SubResource("Animation_lhhy6") +} [sub_resource type="ShaderMaterial" id="ShaderMaterial_mwti2"] shader = ExtResource("4_kdvug") @@ -50,677 +114,213 @@ volumetric_fog_sky_affect = 0.0 adjustment_enabled = true adjustment_saturation = 1.3 +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_mwti2"] +radius = 0.9633789 +height = 2.4316406 + +[sub_resource type="Animation" id="Animation_4wxm6"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_kdvug"] +resource_name = "float" +length = 10.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(-0.06666667, 5.1, 10), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, 0.3, 0), Vector3(0, 0, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_mwti2"] +_data = { +&"RESET": SubResource("Animation_4wxm6"), +&"float": SubResource("Animation_kdvug") +} + +[sub_resource type="Animation" id="Animation_v4tdl"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Model/Sprite3D:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_lkqnn"] +resource_name = "hover" +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Model/Sprite3D:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(1, 1, 1), Vector3(1.3, 1.3, 1.3), Vector3(1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_xa016"] +_data = { +&"RESET": SubResource("Animation_v4tdl"), +&"hover": SubResource("Animation_lkqnn") +} + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_v4tdl"] +radius = 1.1943359 +height = 2.4135742 + +[sub_resource type="Animation" id="Animation_0mfvw"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 0.99999994, 0.99999994)] +} + +[sub_resource type="Animation" id="Animation_xa016"] +resource_name = "hover" +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(1, 0.99999994, 0.99999994), Vector3(1.5, 1.5, 1.5), Vector3(1, 0.99999994, 0.99999994)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_0mfvw"] +_data = { +&"RESET": SubResource("Animation_0mfvw"), +&"hover": SubResource("Animation_xa016") +} + +[sub_resource type="SphereShape3D" id="SphereShape3D_lkqnn"] +radius = 0.68145716 + [node name="AstraBase" type="Node3D" unique_id=1360388667] script = ExtResource("1_kdvug") +room_part_number = 6 + +[node name="LiftAnimationPlayer" type="AnimationPlayer" parent="." unique_id=478089693] +unique_name_in_owner = true +root_node = NodePath("../Lift") +libraries/ = SubResource("AnimationLibrary_v4tdl") [node name="RoomParts" type="Node3D" parent="." unique_id=1805561541] +unique_name_in_owner = true -[node name="RoomPart" parent="RoomParts" unique_id=1431580053 instance=ExtResource("2_kdvug")] - -[node name="RoomPart2" parent="RoomParts" unique_id=1461346188 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.455929, 0, 1.5381136) - -[node name="RoomPart7" parent="RoomParts" unique_id=1493006343 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 128.736, 0, 1.538) - -[node name="RoomPart8" parent="RoomParts" unique_id=290558237 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 150.192, 0, 1.538) - -[node name="RoomPart9" parent="RoomParts" unique_id=1061924920 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 171.648, 0, 1.538) - -[node name="RoomPart10" parent="RoomParts" unique_id=732897879 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 193.104, 0, 1.538) - -[node name="RoomPart11" parent="RoomParts" unique_id=1408993662 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 214.42337, 0, 1.538) - -[node name="RoomPart12" parent="RoomParts" unique_id=2088779214 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 235.87938, 0, 1.538) - -[node name="RoomPart13" parent="RoomParts" unique_id=481413029 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 257.3354, 0, 1.538) - -[node name="RoomPart14" parent="RoomParts" unique_id=542181452 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 278.79138, 0, 1.538) - -[node name="RoomPart6" parent="RoomParts" unique_id=1592023636 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 107.28, 0, 1.538) - -[node name="RoomPart5" parent="RoomParts" unique_id=217680373 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 85.824, 0, 1.538) - -[node name="RoomPart4" parent="RoomParts" unique_id=463853401 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 64.368, 0, 1.538) - -[node name="RoomPart3" parent="RoomParts" unique_id=1446613809 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42.912, 0, 1.538) - -[node name="RoomPart15" parent="RoomParts" unique_id=1970112525 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -300.2526, 0, 0) - -[node name="RoomPart16" parent="RoomParts" unique_id=411642966 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -278.79666, 0, 1.5381136) - -[node name="RoomPart17" parent="RoomParts" unique_id=1086037337 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -171.5166, 0, 1.538) - -[node name="RoomPart18" parent="RoomParts" unique_id=919988877 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -150.0606, 0, 1.538) - -[node name="RoomPart19" parent="RoomParts" unique_id=298919659 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -128.6046, 0, 1.538) - -[node name="RoomPart20" parent="RoomParts" unique_id=1854949916 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -107.14859, 0, 1.538) - -[node name="RoomPart21" parent="RoomParts" unique_id=1928148077 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -85.82922, 0, 1.538) - -[node name="RoomPart22" parent="RoomParts" unique_id=860821742 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -64.373215, 0, 1.538) - -[node name="RoomPart23" parent="RoomParts" unique_id=918320011 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42.917206, 0, 1.538) - -[node name="RoomPart24" parent="RoomParts" unique_id=575489253 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.461212, 0, 1.538) - -[node name="RoomPart25" parent="RoomParts" unique_id=878142181 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -192.9726, 0, 1.538) - -[node name="RoomPart26" parent="RoomParts" unique_id=526806229 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -214.42859, 0, 1.538) - -[node name="RoomPart27" parent="RoomParts" unique_id=486798354 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -235.8846, 0, 1.538) - -[node name="RoomPart28" parent="RoomParts" unique_id=1110376513 instance=ExtResource("2_kdvug")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -257.3406, 0, 1.538) +[node name="Incubators" type="Node3D" parent="." unique_id=815750728] +unique_name_in_owner = true [node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1392940941] environment = SubResource("Environment_lhhy6") -[node name="Incubators" type="Node3D" parent="." unique_id=1917987114] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.7427373, 0.31033933, 3.9984822) - -[node name="astra_base_incubator" parent="Incubators" unique_id=162423076 instance=ExtResource("2_otfhy")] - -[node name="astra_base_incubator2" parent="Incubators" unique_id=91837566 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0) - -[node name="astra_base_incubator3" parent="Incubators" unique_id=1708975094 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0) - -[node name="astra_base_incubator4" parent="Incubators" unique_id=1411521343 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 0, 0) - -[node name="astra_base_incubator5" parent="Incubators" unique_id=555872696 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 0, 0) - -[node name="astra_base_incubator6" parent="Incubators" unique_id=1446127888 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 0, 0) - -[node name="astra_base_incubator7" parent="Incubators" unique_id=1902905661 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 0, 0) - -[node name="astra_base_incubator8" parent="Incubators" unique_id=739634621 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21, 0, 0) - -[node name="astra_base_incubator9" parent="Incubators" unique_id=446511127 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24, 0, 0) - -[node name="astra_base_incubator10" parent="Incubators" unique_id=1529935054 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27, 0, 0) - -[node name="astra_base_incubator11" parent="Incubators" unique_id=538272527 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 0) - -[node name="astra_base_incubator12" parent="Incubators" unique_id=862539797 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 33, 0, 0) - -[node name="astra_base_incubator13" parent="Incubators" unique_id=984063956 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 36, 0, 0) - -[node name="astra_base_incubator14" parent="Incubators" unique_id=1967863597 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 39, 0, 0) - -[node name="astra_base_incubator15" parent="Incubators" unique_id=336214224 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42, 0, 0) - -[node name="astra_base_incubator16" parent="Incubators" unique_id=8402714 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 45, 0, 0) - -[node name="astra_base_incubator17" parent="Incubators" unique_id=1772736906 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 48, 0, 0) - -[node name="astra_base_incubator18" parent="Incubators" unique_id=1791616776 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 51, 0, 0) - -[node name="astra_base_incubator19" parent="Incubators" unique_id=57232971 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 54, 0, 0) - -[node name="astra_base_incubator20" parent="Incubators" unique_id=217446066 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57, 0, 0) - -[node name="astra_base_incubator21" parent="Incubators" unique_id=1409868159 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 60, 0, 0) - -[node name="astra_base_incubator22" parent="Incubators" unique_id=1749826876 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63, 0, 0) - -[node name="astra_base_incubator23" parent="Incubators" unique_id=1493246716 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 66, 0, 0) - -[node name="astra_base_incubator24" parent="Incubators" unique_id=208961839 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 69, 0, 0) - -[node name="astra_base_incubator25" parent="Incubators" unique_id=1602684328 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 72, 0, 0) - -[node name="astra_base_incubator26" parent="Incubators" unique_id=442964538 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 75, 0, 0) - -[node name="astra_base_incubator27" parent="Incubators" unique_id=128169527 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 78, 0, 0) - -[node name="astra_base_incubator28" parent="Incubators" unique_id=287151525 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 81, 0, 0) - -[node name="astra_base_incubator29" parent="Incubators" unique_id=1218757583 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 84, 0, 0) - -[node name="astra_base_incubator30" parent="Incubators" unique_id=1355060500 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 87, 0, 0) - -[node name="astra_base_incubator31" parent="Incubators" unique_id=1440208075 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 90, 0, 0) - -[node name="astra_base_incubator32" parent="Incubators" unique_id=1121036381 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 93, 0, 0) - -[node name="astra_base_incubator33" parent="Incubators" unique_id=1827559968 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 96, 0, 0) - -[node name="astra_base_incubator34" parent="Incubators" unique_id=2050372683 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 99, 0, 0) - -[node name="astra_base_incubator35" parent="Incubators" unique_id=492087165 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 102, 0, 0) - -[node name="astra_base_incubator36" parent="Incubators" unique_id=349273346 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 105, 0, 0) - -[node name="astra_base_incubator37" parent="Incubators" unique_id=1833892136 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 108, 0, 0) - -[node name="astra_base_incubator38" parent="Incubators" unique_id=1653371298 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 111, 0, 0) - -[node name="astra_base_incubator39" parent="Incubators" unique_id=854534562 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 114, 0, 0) - -[node name="astra_base_incubator40" parent="Incubators" unique_id=2072261556 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 117, 0, 0) - -[node name="astra_base_incubator41" parent="Incubators" unique_id=1520800806 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 120, 0, 0) - -[node name="astra_base_incubator42" parent="Incubators" unique_id=842759154 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 123, 0, 0) - -[node name="astra_base_incubator43" parent="Incubators" unique_id=1032943366 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 126, 0, 0) - -[node name="astra_base_incubator44" parent="Incubators" unique_id=723915130 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 129, 0, 0) - -[node name="astra_base_incubator45" parent="Incubators" unique_id=2135953053 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 132, 0, 0) - -[node name="astra_base_incubator46" parent="Incubators" unique_id=413995192 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 135, 0, 0) - -[node name="astra_base_incubator47" parent="Incubators" unique_id=1240779470 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 138, 0, 0) - -[node name="astra_base_incubator48" parent="Incubators" unique_id=1422063903 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 141, 0, 0) - -[node name="astra_base_incubator49" parent="Incubators" unique_id=1947187327 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 144, 0, 0) - -[node name="astra_base_incubator50" parent="Incubators" unique_id=729915185 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 147, 0, 0) - -[node name="astra_base_incubator51" parent="Incubators" unique_id=627762916 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 150, 0, 0) - -[node name="astra_base_incubator52" parent="Incubators" unique_id=1687994743 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 153, 0, 0) - -[node name="astra_base_incubator53" parent="Incubators" unique_id=1622251608 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 156, 0, 0) - -[node name="astra_base_incubator54" parent="Incubators" unique_id=1478196402 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 159, 0, 0) - -[node name="astra_base_incubator55" parent="Incubators" unique_id=1887321263 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 162, 0, 0) - -[node name="astra_base_incubator56" parent="Incubators" unique_id=1043127832 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 165, 0, 0) - -[node name="astra_base_incubator57" parent="Incubators" unique_id=1256348096 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 168, 0, 0) - -[node name="astra_base_incubator58" parent="Incubators" unique_id=1491995016 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 171, 0, 0) - -[node name="astra_base_incubator59" parent="Incubators" unique_id=879875495 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 174, 0, 0) - -[node name="astra_base_incubator60" parent="Incubators" unique_id=2036759620 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 177, 0, 0) - -[node name="astra_base_incubator61" parent="Incubators" unique_id=650907187 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 180, 0, 0) - -[node name="astra_base_incubator62" parent="Incubators" unique_id=1791722993 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 183, 0, 0) - -[node name="astra_base_incubator63" parent="Incubators" unique_id=2110849628 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 186, 0, 0) - -[node name="astra_base_incubator64" parent="Incubators" unique_id=1847135363 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 189, 0, 0) - -[node name="astra_base_incubator65" parent="Incubators" unique_id=156586157 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 192, 0, 0) - -[node name="astra_base_incubator66" parent="Incubators" unique_id=935123842 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 195, 0, 0) - -[node name="astra_base_incubator67" parent="Incubators" unique_id=2071124786 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 198, 0, 0) - -[node name="astra_base_incubator68" parent="Incubators" unique_id=1116843692 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 201, 0, 0) - -[node name="astra_base_incubator69" parent="Incubators" unique_id=924335123 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 204, 0, 0) - -[node name="astra_base_incubator70" parent="Incubators" unique_id=771738075 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 207, 0, 0) - -[node name="astra_base_incubator71" parent="Incubators" unique_id=1458486361 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 210, 0, 0) - -[node name="astra_base_incubator72" parent="Incubators" unique_id=133996851 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 213, 0, 0) - -[node name="astra_base_incubator73" parent="Incubators" unique_id=845786090 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 216, 0, 0) - -[node name="astra_base_incubator74" parent="Incubators" unique_id=825756565 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 219, 0, 0) - -[node name="astra_base_incubator75" parent="Incubators" unique_id=1755937020 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 222, 0, 0) - -[node name="astra_base_incubator76" parent="Incubators" unique_id=734933910 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 225, 0, 0) - -[node name="astra_base_incubator77" parent="Incubators" unique_id=889272803 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 228, 0, 0) - -[node name="astra_base_incubator78" parent="Incubators" unique_id=1266075817 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 231, 0, 0) - -[node name="astra_base_incubator79" parent="Incubators" unique_id=1028567711 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 234, 0, 0) - -[node name="astra_base_incubator80" parent="Incubators" unique_id=158604751 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 237, 0, 0) - -[node name="astra_base_incubator81" parent="Incubators" unique_id=676637203 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 240, 0, 0) - -[node name="astra_base_incubator82" parent="Incubators" unique_id=960943855 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 243, 0, 0) - -[node name="astra_base_incubator83" parent="Incubators" unique_id=2144393250 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 246, 0, 0) - -[node name="astra_base_incubator84" parent="Incubators" unique_id=1453689533 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 249, 0, 0) - -[node name="astra_base_incubator85" parent="Incubators" unique_id=139452311 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 252, 0, 0) - -[node name="astra_base_incubator86" parent="Incubators" unique_id=1419027776 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 255, 0, 0) - -[node name="astra_base_incubator87" parent="Incubators" unique_id=273051564 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 258, 0, 0) - -[node name="astra_base_incubator88" parent="Incubators" unique_id=1943175192 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 261, 0, 0) - -[node name="astra_base_incubator89" parent="Incubators" unique_id=1107539344 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 264, 0, 0) - -[node name="astra_base_incubator90" parent="Incubators" unique_id=1195049345 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 267, 0, 0) - -[node name="astra_base_incubator91" parent="Incubators" unique_id=1336025237 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 270, 0, 0) - -[node name="astra_base_incubator92" parent="Incubators" unique_id=534046096 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 273, 0, 0) - -[node name="astra_base_incubator93" parent="Incubators" unique_id=1509378105 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 276, 0, 0) - -[node name="astra_base_incubator94" parent="Incubators" unique_id=1918908498 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 279, 0, 0) - -[node name="astra_base_incubator95" parent="Incubators" unique_id=1279811453 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 282, 0, 0) - -[node name="astra_base_incubator96" parent="Incubators" unique_id=695878361 instance=ExtResource("2_otfhy")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 285, 0, 0) - -[node name="astra_base_incubator97" parent="Incubators" unique_id=1883300734 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 284.99988, 0, -8.2288) - -[node name="astra_base_incubator98" parent="Incubators" unique_id=1508613358 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 281.99988, 0, -8.2288) - -[node name="astra_base_incubator99" parent="Incubators" unique_id=1021186806 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 278.99988, 0, -8.2288) - -[node name="astra_base_incubator100" parent="Incubators" unique_id=1466341852 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 275.99988, 0, -8.2288) - -[node name="astra_base_incubator101" parent="Incubators" unique_id=1038106533 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 272.99988, 0, -8.228798) - -[node name="astra_base_incubator102" parent="Incubators" unique_id=1236084819 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 269.99988, 0, -8.228798) - -[node name="astra_base_incubator103" parent="Incubators" unique_id=593416956 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 266.99988, 0, -8.228798) - -[node name="astra_base_incubator104" parent="Incubators" unique_id=1262836700 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 263.99988, 0, -8.228798) - -[node name="astra_base_incubator105" parent="Incubators" unique_id=225260369 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 260.99988, 0, -8.228798) - -[node name="astra_base_incubator106" parent="Incubators" unique_id=2039699052 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 257.99988, 0, -8.228798) - -[node name="astra_base_incubator107" parent="Incubators" unique_id=1517086097 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 254.99988, 0, -8.228798) - -[node name="astra_base_incubator108" parent="Incubators" unique_id=1854577153 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 251.99988, 0, -8.228796) - -[node name="astra_base_incubator109" parent="Incubators" unique_id=1006203227 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 248.99988, 0, -8.228796) - -[node name="astra_base_incubator110" parent="Incubators" unique_id=405741489 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 245.99988, 0, -8.228796) - -[node name="astra_base_incubator111" parent="Incubators" unique_id=581063617 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 242.99988, 0, -8.228796) - -[node name="astra_base_incubator112" parent="Incubators" unique_id=2005305451 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 239.99988, 0, -8.228796) - -[node name="astra_base_incubator113" parent="Incubators" unique_id=1023772680 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 236.99988, 0, -8.228796) - -[node name="astra_base_incubator114" parent="Incubators" unique_id=1126201223 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 233.99988, 0, -8.228796) - -[node name="astra_base_incubator115" parent="Incubators" unique_id=308411424 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 230.99988, 0, -8.228794) - -[node name="astra_base_incubator116" parent="Incubators" unique_id=1662196407 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 227.99988, 0, -8.228794) - -[node name="astra_base_incubator117" parent="Incubators" unique_id=174623511 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 224.99988, 0, -8.228794) - -[node name="astra_base_incubator118" parent="Incubators" unique_id=70276235 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 221.99988, 0, -8.228794) - -[node name="astra_base_incubator119" parent="Incubators" unique_id=1084601629 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 218.99988, 0, -8.228794) - -[node name="astra_base_incubator120" parent="Incubators" unique_id=134391575 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 215.99988, 0, -8.228794) - -[node name="astra_base_incubator121" parent="Incubators" unique_id=502105563 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 212.99988, 0, -8.228794) - -[node name="astra_base_incubator122" parent="Incubators" unique_id=139222095 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 209.99988, 0, -8.228794) - -[node name="astra_base_incubator123" parent="Incubators" unique_id=1249367938 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 206.99988, 0, -8.228792) - -[node name="astra_base_incubator124" parent="Incubators" unique_id=2124203101 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 203.99988, 0, -8.228792) - -[node name="astra_base_incubator125" parent="Incubators" unique_id=217443950 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 200.99988, 0, -8.228792) - -[node name="astra_base_incubator126" parent="Incubators" unique_id=512987131 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 197.99988, 0, -8.228792) - -[node name="astra_base_incubator127" parent="Incubators" unique_id=954253 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 194.99988, 0, -8.228792) - -[node name="astra_base_incubator128" parent="Incubators" unique_id=303009926 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 191.99988, 0, -8.228792) - -[node name="astra_base_incubator129" parent="Incubators" unique_id=1602084186 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 188.99988, 0, -8.228792) - -[node name="astra_base_incubator130" parent="Incubators" unique_id=1743108180 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 185.99988, 0, -8.22879) - -[node name="astra_base_incubator131" parent="Incubators" unique_id=1891680694 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 182.99988, 0, -8.22879) - -[node name="astra_base_incubator132" parent="Incubators" unique_id=650785341 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 179.99988, 0, -8.22879) - -[node name="astra_base_incubator133" parent="Incubators" unique_id=1534787540 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 176.99988, 0, -8.22879) - -[node name="astra_base_incubator134" parent="Incubators" unique_id=898324455 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 173.99988, 0, -8.22879) - -[node name="astra_base_incubator135" parent="Incubators" unique_id=1226119951 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 170.99988, 0, -8.22879) - -[node name="astra_base_incubator136" parent="Incubators" unique_id=1746830435 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 167.99988, 0, -8.22879) - -[node name="astra_base_incubator137" parent="Incubators" unique_id=235190481 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 164.99988, 0, -8.228788) - -[node name="astra_base_incubator138" parent="Incubators" unique_id=518235321 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 161.99988, 0, -8.228788) - -[node name="astra_base_incubator139" parent="Incubators" unique_id=1664475158 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 158.99988, 0, -8.228788) - -[node name="astra_base_incubator140" parent="Incubators" unique_id=1665340457 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 155.99988, 0, -8.228788) - -[node name="astra_base_incubator141" parent="Incubators" unique_id=410656312 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 152.99988, 0, -8.228788) - -[node name="astra_base_incubator142" parent="Incubators" unique_id=2106186570 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 149.99988, 0, -8.228788) - -[node name="astra_base_incubator143" parent="Incubators" unique_id=1631704124 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 146.99988, 0, -8.228788) - -[node name="astra_base_incubator144" parent="Incubators" unique_id=1902142517 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 143.99988, 0, -8.228788) - -[node name="astra_base_incubator145" parent="Incubators" unique_id=358804901 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 140.99988, 0, -8.228786) - -[node name="astra_base_incubator146" parent="Incubators" unique_id=634632305 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 137.99988, 0, -8.228786) - -[node name="astra_base_incubator147" parent="Incubators" unique_id=1793087790 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 134.99988, 0, -8.228786) - -[node name="astra_base_incubator148" parent="Incubators" unique_id=1705721027 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 131.99988, 0, -8.228786) - -[node name="astra_base_incubator149" parent="Incubators" unique_id=224175326 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 128.99988, 0, -8.228786) - -[node name="astra_base_incubator150" parent="Incubators" unique_id=1227020525 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 125.99988, 0, -8.228786) - -[node name="astra_base_incubator151" parent="Incubators" unique_id=1960003296 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 122.99988, 0, -8.228786) - -[node name="astra_base_incubator152" parent="Incubators" unique_id=1428985850 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 119.99988, 0, -8.228785) - -[node name="astra_base_incubator153" parent="Incubators" unique_id=540495468 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 116.99988, 0, -8.228785) - -[node name="astra_base_incubator154" parent="Incubators" unique_id=1484312949 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 113.99988, 0, -8.228785) - -[node name="astra_base_incubator155" parent="Incubators" unique_id=64632500 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 110.99988, 0, -8.228785) - -[node name="astra_base_incubator156" parent="Incubators" unique_id=131846712 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 107.99988, 0, -8.228785) - -[node name="astra_base_incubator157" parent="Incubators" unique_id=762014289 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 104.99988, 0, -8.228785) - -[node name="astra_base_incubator158" parent="Incubators" unique_id=489024142 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 101.99988, 0, -8.228785) - -[node name="astra_base_incubator159" parent="Incubators" unique_id=1160226769 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 98.99988, 0, -8.228783) - -[node name="astra_base_incubator160" parent="Incubators" unique_id=1643710080 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 95.99988, 0, -8.228783) - -[node name="astra_base_incubator161" parent="Incubators" unique_id=715873859 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 92.99988, 0, -8.228783) - -[node name="astra_base_incubator162" parent="Incubators" unique_id=84805076 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 89.99988, 0, -8.228783) - -[node name="astra_base_incubator163" parent="Incubators" unique_id=2041286011 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 86.99988, 0, -8.228783) - -[node name="astra_base_incubator164" parent="Incubators" unique_id=618654734 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 83.99988, 0, -8.228783) - -[node name="astra_base_incubator165" parent="Incubators" unique_id=365748842 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 80.99988, 0, -8.228783) - -[node name="astra_base_incubator166" parent="Incubators" unique_id=1809103631 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 77.99988, 0, -8.228781) - -[node name="astra_base_incubator167" parent="Incubators" unique_id=1857703688 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 74.99988, 0, -8.228781) - -[node name="astra_base_incubator168" parent="Incubators" unique_id=256385606 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 71.99988, 0, -8.228781) - -[node name="astra_base_incubator169" parent="Incubators" unique_id=36771445 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 68.99988, 0, -8.228781) - -[node name="astra_base_incubator170" parent="Incubators" unique_id=1953787462 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 65.99988, 0, -8.228781) - -[node name="astra_base_incubator171" parent="Incubators" unique_id=371672071 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 62.999878, 0, -8.228781) - -[node name="astra_base_incubator172" parent="Incubators" unique_id=1484784050 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 59.999878, 0, -8.228781) - -[node name="astra_base_incubator173" parent="Incubators" unique_id=1932501683 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 56.999878, 0, -8.228781) - -[node name="astra_base_incubator174" parent="Incubators" unique_id=1043947399 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 53.999878, 0, -8.228779) - -[node name="astra_base_incubator175" parent="Incubators" unique_id=1236242999 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 50.999878, 0, -8.228779) - -[node name="astra_base_incubator176" parent="Incubators" unique_id=1766461588 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 47.999878, 0, -8.228779) - -[node name="astra_base_incubator177" parent="Incubators" unique_id=1509497703 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 44.999878, 0, -8.228779) - -[node name="astra_base_incubator178" parent="Incubators" unique_id=1456109213 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 41.999878, 0, -8.228779) - -[node name="astra_base_incubator179" parent="Incubators" unique_id=1427160785 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 38.999878, 0, -8.228779) - -[node name="astra_base_incubator180" parent="Incubators" unique_id=745643921 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 35.999878, 0, -8.228779) - -[node name="astra_base_incubator181" parent="Incubators" unique_id=826787596 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 32.999878, 0, -8.228777) - -[node name="astra_base_incubator182" parent="Incubators" unique_id=1726737710 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 29.999878, 0, -8.228777) - -[node name="astra_base_incubator183" parent="Incubators" unique_id=1692056189 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 26.999878, 0, -8.228777) - -[node name="astra_base_incubator184" parent="Incubators" unique_id=1795554869 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 23.999878, 0, -8.228777) - -[node name="astra_base_incubator185" parent="Incubators" unique_id=815032664 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 20.999878, 0, -8.228777) - -[node name="astra_base_incubator186" parent="Incubators" unique_id=402982864 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 17.999878, 0, -8.228777) - -[node name="astra_base_incubator187" parent="Incubators" unique_id=831203948 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 14.999878, 0, -8.228777) - -[node name="astra_base_incubator188" parent="Incubators" unique_id=270303525 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 11.999878, 0, -8.228775) - -[node name="astra_base_incubator189" parent="Incubators" unique_id=1112859019 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 8.999878, 0, -8.228775) - -[node name="astra_base_incubator190" parent="Incubators" unique_id=1245560433 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 5.9998784, 0, -8.228775) - -[node name="astra_base_incubator191" parent="Incubators" unique_id=1585401074 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 2.9998784, 0, -8.228775) - -[node name="astra_base_incubator192" parent="Incubators" unique_id=291875451 instance=ExtResource("2_otfhy")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -0.000121593475, 0, -8.228775) - [node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("3_4wxm6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.80377, 3.2028942, 0.9461217) +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 31.599998, 1, 4.22) -[node name="astra_base_used_incubator" parent="." unique_id=1790935643 instance=ExtResource("6_mwti2")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.510883, 0.918, 4.38) +[node name="Phone" type="Area3D" parent="." unique_id=144773021 node_paths=PackedStringArray("hover_animation_player", "audio_player")] +unique_name_in_owner = true +transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.8795166, 1.072888, -2.0494514) +script = ExtResource("4_lhhy6") +hover_animation_player = NodePath("HoverAnimationPlayer") +audio_player = NodePath("AudioStreamPlayer3D") +metadata/_custom_type_script = "uid://bj4d1x8n8ina" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Phone" unique_id=22025909] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.21582031, 0) +shape = SubResource("CapsuleShape3D_mwti2") + +[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Phone" unique_id=268304344] +stream = ExtResource("5_v4tdl") + +[node name="Model" parent="Phone" unique_id=178278867 instance=ExtResource("4_mwti2")] + +[node name="Sprite3D" type="Sprite3D" parent="Phone/Model" unique_id=1854412503] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1913681, 0.3055997, -0.095009446) +texture = ExtResource("6_lhhy6") + +[node name="FloatAnimationPlayer" type="AnimationPlayer" parent="Phone" unique_id=1462162735] +root_node = NodePath("../Model") +libraries/ = SubResource("AnimationLibrary_mwti2") +autoplay = &"float" + +[node name="HoverAnimationPlayer" type="AnimationPlayer" parent="Phone" unique_id=214026227] +libraries/ = SubResource("AnimationLibrary_xa016") + +[node name="OmniLight3D" type="OmniLight3D" parent="Phone" unique_id=1832196891] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 1.0397238, -0.47173643) +light_color = Color(0.87551093, 0.72609586, 0.8473426, 1) +shadow_enabled = true + +[node name="Lift" type="Area3D" parent="." unique_id=1096306486 node_paths=PackedStringArray("hover_animation_player")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7, 15, 0) +visible = false +script = ExtResource("4_lhhy6") +interactable = false +hover_animation_player = NodePath("HoverAnimationPlayer") + +[node name="Sprite3D" type="Sprite3D" parent="Lift" unique_id=1741052600] +transform = Transform3D(-4.2294914e-08, 0.17856179, 0.9839286, 7.805184e-09, 0.9839286, -0.17856179, -1, 1.2748823e-10, -4.3008885e-08, -0.8393693, 1.5452437, 0) +texture = ExtResource("8_lkqnn") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Lift" unique_id=725701934] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1619911, 0.9606207, 0) +shape = SubResource("CapsuleShape3D_v4tdl") + +[node name="Model" parent="Lift" unique_id=1309925933 instance=ExtResource("5_kdvug")] + +[node name="OmniLight3D" type="OmniLight3D" parent="Lift" unique_id=986587550] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2593379, 0) +light_color = Color(0.717588, 0.45361686, 0.5535787, 1) +shadow_enabled = true + +[node name="HoverAnimationPlayer" type="AnimationPlayer" parent="Lift" unique_id=574317502] +libraries/ = SubResource("AnimationLibrary_0mfvw") + +[node name="LiftPlayerDetector" type="Area3D" parent="Lift" unique_id=1160036639] +unique_name_in_owner = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Lift/LiftPlayerDetector" unique_id=1350547566] +shape = SubResource("SphereShape3D_lkqnn") diff --git a/stages/3d_scenes/astra_base/astra_base.tscn1662900870.tmp b/stages/3d_scenes/astra_base/astra_base.tscn1662900870.tmp new file mode 100644 index 0000000..757be7c --- /dev/null +++ b/stages/3d_scenes/astra_base/astra_base.tscn1662900870.tmp @@ -0,0 +1,249 @@ +[gd_scene format=3 uid="uid://dxjkkxwxrswkr"] + +[ext_resource type="Script" uid="uid://bmj4m3j305sl0" path="res://stages/3d_scenes/astra_base/scripts/astra_base.gd" id="1_kdvug"] +[ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="3_4wxm6"] +[ext_resource type="Shader" uid="uid://bv2rghn44mrrf" path="res://stages/title_screen/resources/shaders/stars.gdshader" id="4_kdvug"] +[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="4_lhhy6"] +[ext_resource type="PackedScene" uid="uid://5dytwh4wydcg" path="res://stages/3d_scenes/astra_base/assets/3d/phone.blend" id="4_mwti2"] +[ext_resource type="PackedScene" uid="uid://dcbtr1sx2edj1" path="res://stages/3d_scenes/astra_base/assets/3d/exit.blend" id="5_kdvug"] +[ext_resource type="AudioStream" uid="uid://ocm1dkkhv7ls" path="res://common/audio_manager/assets/sfx/phone/phone_ringing.wav" id="5_v4tdl"] +[ext_resource type="Texture2D" uid="uid://dks6cugwif2em" path="res://common/icons/phone.svg" id="6_lhhy6"] + +[sub_resource type="Animation" id="Animation_mwti2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(-7, 15, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_lhhy6"] +resource_name = "arrive" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(-7, 15, 0), Vector3(-7, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.033333335, 0.26666668), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_v4tdl"] +_data = { +&"RESET": SubResource("Animation_mwti2"), +&"arrive": SubResource("Animation_lhhy6") +} + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_mwti2"] +shader = ExtResource("4_kdvug") +shader_parameter/sky_color = Color(0.03, 0.05, 0.11, 1) +shader_parameter/star_base_color = Color(0.8, 1, 0.3, 1) +shader_parameter/star_hue_offset = 0.6 +shader_parameter/star_intensity = 0.08 +shader_parameter/star_twinkle_speed = 0.8 +shader_parameter/star_twinkle_intensity = 0.2 +shader_parameter/layer_scale = 20.0 +shader_parameter/layer_scale_step = 10.0 +shader_parameter/layers_count = 3 + +[sub_resource type="Sky" id="Sky_65b6a"] +sky_material = SubResource("ShaderMaterial_mwti2") + +[sub_resource type="Environment" id="Environment_lhhy6"] +background_mode = 2 +sky = SubResource("Sky_65b6a") +sky_custom_fov = 61.7 +ambient_light_source = 3 +ambient_light_color = Color(1, 1, 1, 1) +ambient_light_sky_contribution = 0.85 +ambient_light_energy = 2.0 +reflected_light_source = 2 +tonemap_mode = 2 +tonemap_exposure = 0.7 +tonemap_white = 1.84 +glow_enabled = true +glow_intensity = 0.22 +glow_bloom = 0.22 +glow_hdr_threshold = 0.79 +glow_hdr_scale = 0.0 +glow_hdr_luminance_cap = 5.63 +fog_enabled = true +fog_mode = 1 +fog_light_color = Color(0.13725491, 0.39215687, 0.6666667, 1) +fog_density = 0.1831 +fog_aerial_perspective = 0.113 +fog_sky_affect = 0.0 +volumetric_fog_sky_affect = 0.0 +adjustment_enabled = true +adjustment_saturation = 1.3 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_mwti2"] +radius = 0.9633789 +height = 2.4316406 + +[sub_resource type="Animation" id="Animation_4wxm6"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_kdvug"] +resource_name = "float" +length = 10.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(-0.06666667, 5.1, 10), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, 0.3, 0), Vector3(0, 0, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_mwti2"] +_data = { +&"RESET": SubResource("Animation_4wxm6"), +&"float": SubResource("Animation_kdvug") +} + +[sub_resource type="Animation" id="Animation_v4tdl"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Model/Sprite3D:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_lkqnn"] +resource_name = "hover" +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Model/Sprite3D:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(1, 1, 1), Vector3(1.3, 1.3, 1.3), Vector3(1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_xa016"] +_data = { +&"RESET": SubResource("Animation_v4tdl"), +&"hover": SubResource("Animation_lkqnn") +} + +[node name="AstraBase" type="Node3D" unique_id=1360388667] +script = ExtResource("1_kdvug") +room_part_number = 8 + +[node name="LiftAnimationPlayer" type="AnimationPlayer" parent="." unique_id=478089693] +unique_name_in_owner = true +root_node = NodePath("../Exit") +libraries/ = SubResource("AnimationLibrary_v4tdl") + +[node name="RoomParts" type="Node3D" parent="." unique_id=1805561541] +unique_name_in_owner = true + +[node name="Incubators" type="Node3D" parent="." unique_id=815750728] +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, 18.225002, 1, 4.22) + +[node name="Phone" type="Area3D" parent="." unique_id=144773021 node_paths=PackedStringArray("hover_animation_player")] +unique_name_in_owner = true +transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.8795166, 1.072888, -2.0494514) +script = ExtResource("4_lhhy6") +hover_animation_player = NodePath("HoverAnimationPlayer") +metadata/_custom_type_script = "uid://bj4d1x8n8ina" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Phone" unique_id=22025909] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.21582031, 0) +shape = SubResource("CapsuleShape3D_mwti2") + +[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Phone" unique_id=268304344] +stream = ExtResource("5_v4tdl") + +[node name="Model" parent="Phone" unique_id=178278867 instance=ExtResource("4_mwti2")] + +[node name="Sprite3D" type="Sprite3D" parent="Phone/Model" unique_id=1854412503] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1913681, 0.3055997, -0.095009446) +texture = ExtResource("6_lhhy6") + +[node name="FloatAnimationPlayer" type="AnimationPlayer" parent="Phone" unique_id=1462162735] +root_node = NodePath("../Model") +libraries/ = SubResource("AnimationLibrary_mwti2") +autoplay = &"float" + +[node name="HoverAnimationPlayer" type="AnimationPlayer" parent="Phone" unique_id=214026227] +libraries/ = SubResource("AnimationLibrary_xa016") + +[node name="Exit" type="Area3D" parent="." unique_id=1096306486] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7, 15, 0) +visible = false + +[node name="Model" parent="Exit" unique_id=1309925933 instance=ExtResource("5_kdvug")] diff --git a/stages/3d_scenes/astra_base/incubator.tscn b/stages/3d_scenes/astra_base/incubator.tscn new file mode 100644 index 0000000..259f5d6 --- /dev/null +++ b/stages/3d_scenes/astra_base/incubator.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://c2bk3n1xo1fto"] + +[ext_resource type="Script" uid="uid://bs6p88em81674" path="res://stages/3d_scenes/astra_base/scripts/incubator.gd" id="1_pqpwp"] + +[node name="Incubator" type="Node3D" unique_id=1350320582] +script = ExtResource("1_pqpwp") + +[node name="Model" type="Node3D" parent="." unique_id=1221933521] +unique_name_in_owner = true diff --git a/stages/3d_scenes/astra_base/scripts/astra_base.gd b/stages/3d_scenes/astra_base/scripts/astra_base.gd index bf24f4b..0b0a354 100644 --- a/stages/3d_scenes/astra_base/scripts/astra_base.gd +++ b/stages/3d_scenes/astra_base/scripts/astra_base.gd @@ -1,6 +1,102 @@ +@tool extends Node3D +const INTRO_DIALOG = preload("res://dialogs/timelines/story/demeter_intro.dtl") + +const ROOM_PART_SCENE := preload("res://stages/3d_scenes/astra_base/room_part.tscn") +const ROOM_END_SCENE := preload("res://stages/3d_scenes/astra_base/assets/3d/astra_base_room_end.blend") +const INCUBATOR_SCENE := preload("res://stages/3d_scenes/astra_base/incubator.tscn") +const ROOM_PART_SHIFT := 21.4 +const INCUBATOR_BY_ROOM := 8 +const INCUBATOR_DISTANCE := 4.22 +const TIME_WITHOUT_PHONE := 5 + +const LIFT_TIME := 2 + +@export var room_part_number := 100 : set = set_room_part_number + # Called when the node enters the scene tree for the first time. func _ready(): - Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + if not Engine.is_editor_hint(): + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + set_room_part_number() + + var new_player_incubator := %Incubators.get_children().pick_random() as Incubator + new_player_incubator.used = true + %Player3D.position = new_player_incubator.global_position + Vector3.UP + %Player3D.rotation = new_player_incubator.rotation + %LiftPlayerDetector.body_entered.connect( + func (b : Node3D): + if b is Player3D: + %Lift.interactable = true + ) + + story() + + +func story(): + await get_tree().create_timer(TIME_WITHOUT_PHONE).timeout + %Phone.play_audio() + await %Phone.clicked + %Phone.stop_audio() + %Phone.interactable = false + + Dialogic.start(INTRO_DIALOG) + await Dialogic.timeline_ended + + %LiftAnimationPlayer.play("arrive") + await %Lift.clicked + %LiftAnimationPlayer.play_backwards("arrive") + + await get_tree().create_timer(LIFT_TIME).timeout + + start_tutorial() + + +func start_tutorial(): + GameInfo.game_data.start_region( + RegionParameter.new( + 10, + 3, + tr("TUTORIAL"), + true, + ) + ) + + SceneManager.change_to_scene_id("REGION") + + +func set_room_part_number(_room_part_number : int = room_part_number): + room_part_number = _room_part_number + if is_node_ready(): + for c in %RoomParts.get_children(): + c.queue_free() + for c in %Incubators.get_children(): + c.queue_free() + + var shifted_origin = Vector3.LEFT * ROOM_PART_SHIFT * room_part_number/2 + + for i in range(room_part_number): + var new_room_part := ROOM_PART_SCENE.instantiate() as Node3D + %RoomParts.add_child(new_room_part) + new_room_part.position = Vector3.LEFT * ROOM_PART_SHIFT * i - shifted_origin + for j in range(INCUBATOR_BY_ROOM): + for direction in [-1, 1]: + var new_incubator := INCUBATOR_SCENE.instantiate() as Incubator + %Incubators.add_child(new_incubator) + new_incubator.position = ( + new_room_part.position + + j * Vector3.LEFT * (ROOM_PART_SHIFT / INCUBATOR_BY_ROOM) + - Vector3.LEFT * ROOM_PART_SHIFT / 2 + - Vector3.RIGHT / 2 + + Vector3.FORWARD * direction * INCUBATOR_DISTANCE + ) + if direction == 1: + new_incubator.rotate(Vector3.UP,PI) + + + for i in [-1,room_part_number]: + var new_room_end := ROOM_END_SCENE.instantiate() as Node3D + %RoomParts.add_child(new_room_end) + new_room_end.position = Vector3.LEFT * ROOM_PART_SHIFT * i - shifted_origin diff --git a/stages/3d_scenes/astra_base/scripts/incubator.gd b/stages/3d_scenes/astra_base/scripts/incubator.gd new file mode 100644 index 0000000..213f2d1 --- /dev/null +++ b/stages/3d_scenes/astra_base/scripts/incubator.gd @@ -0,0 +1,27 @@ +@tool +extends Node3D +class_name Incubator + +const INCUBATOR_SCENE = preload("res://stages/3d_scenes/astra_base/assets/3d/astra_base_incubator.blend") +const INCUBATOR_USED_SCENE = preload("res://stages/3d_scenes/astra_base/assets/3d/astra_base_used_incubator.blend") + +@export var used := false : set = set_used + +# Called when the node enters the scene tree for the first time. +func _ready(): + set_used() + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func set_used(_used := used): + used = _used + if is_node_ready(): + for c in %Model.get_children(): + c.queue_free() + + if used: + %Model.add_child(INCUBATOR_USED_SCENE.instantiate()) + else: + %Model.add_child(INCUBATOR_SCENE.instantiate()) + + diff --git a/stages/3d_scenes/astra_base/scripts/incubator.gd.uid b/stages/3d_scenes/astra_base/scripts/incubator.gd.uid new file mode 100644 index 0000000..eb193fe --- /dev/null +++ b/stages/3d_scenes/astra_base/scripts/incubator.gd.uid @@ -0,0 +1 @@ +uid://bs6p88em81674 diff --git a/stages/cockpit/cockpit.tscn b/stages/cockpit/cockpit.tscn index 2fbf1f0..b73d418 100644 --- a/stages/cockpit/cockpit.tscn +++ b/stages/cockpit/cockpit.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://dks6cugwif2em" path="res://common/icons/phone.svg" id="4_bse8l"] [ext_resource type="Texture2D" uid="uid://cq0xvydfqk0x4" path="res://stages/cockpit/assets/textures/stickers/cockpit_sticker_5.png" id="4_omtjc"] [ext_resource type="Texture2D" uid="uid://dex283rx00fjb" path="res://common/icons/logout.svg" id="5_oq6nq"] -[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://stages/cockpit/scripts/cockpit_action.gd" id="6_22o3l"] +[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="6_22o3l"] [ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="9_i3c17"] [ext_resource type="Theme" uid="uid://5au2k3vf2po3" path="res://gui/ressources/menu.tres" id="10_i3c17"] [ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="10_j2e5k"] diff --git a/stages/cockpit/scripts/cockpit.gd b/stages/cockpit/scripts/cockpit.gd index a4a476f..bf5034c 100644 --- a/stages/cockpit/scripts/cockpit.gd +++ b/stages/cockpit/scripts/cockpit.gd @@ -7,7 +7,7 @@ func _ready(): if not GameInfo.game_data.current_region_data: %ExitAction.hide() - %ExitAction.pickable = false + %ExitAction.interactable = false if region_data: var state := region_data.get_state() @@ -15,7 +15,7 @@ func _ready(): RegionData.State.IN_PROGRESS: %StateAnimationPlayer.play("InProgress") %MapAction.hide() - %MapAction.pickable = false + %MapAction.interactable = false RegionData.State.FAILED: %StateAnimationPlayer.play("Failed") RegionData.State.SUCCEEDED: @@ -23,11 +23,11 @@ func _ready(): update_screen_info(region_data) func _on_map_action_clicked(): - SceneManager.change_scene("REGION_SELECTION") + SceneManager.change_to_scene_id("REGION_SELECTION") func _on_exit_action_clicked(): if GameInfo.game_data.current_region_data: - SceneManager.change_scene("REGION") + SceneManager.change_to_scene_id("REGION") func update_screen_info(region_data : RegionData): %RegionNameInfo.text = region_data.region_name diff --git a/stages/cockpit/scripts/cockpit_action.gd b/stages/cockpit/scripts/cockpit_action.gd deleted file mode 100644 index 67da01e..0000000 --- a/stages/cockpit/scripts/cockpit_action.gd +++ /dev/null @@ -1,19 +0,0 @@ -extends Area3D -class_name CockpitAction - -var pickable = true - -signal clicked - -@export var animation_player : AnimationPlayer - -func click(): - clicked.emit() - -func _on_mouse_entered(): - if animation_player: - animation_player.play("hover") - -func _on_mouse_exited(): - if animation_player: - animation_player.stop() diff --git a/stages/intro/intro.tscn b/stages/intro/intro.tscn index 967fbde..b9330b4 100644 --- a/stages/intro/intro.tscn +++ b/stages/intro/intro.tscn @@ -1,16 +1,16 @@ -[gd_scene load_steps=3 format=3 uid="uid://d0n52psuns1vl"] +[gd_scene format=3 uid="uid://d0n52psuns1vl"] [ext_resource type="Script" uid="uid://ddf3fktoer2ng" path="res://stages/intro/scripts/intro.gd" id="1_2nxbv"] [ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="2_851lr"] -[node name="Intro" type="Node"] +[node name="Intro" type="Node" unique_id=1801844904] script = ExtResource("1_2nxbv") game_scene_path = "uid://d28cp7a21kwou" -[node name="CanvasLayer" type="CanvasLayer" parent="."] +[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1051527956] layer = 100 -[node name="MarginContainer" type="MarginContainer" parent="CanvasLayer"] +[node name="MarginContainer" type="MarginContainer" parent="CanvasLayer" unique_id=420682560] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -19,7 +19,7 @@ grow_vertical = 2 mouse_filter = 2 theme = ExtResource("2_851lr") -[node name="PassDialogButton" type="Button" parent="CanvasLayer/MarginContainer"] +[node name="PassDialogButton" type="Button" parent="CanvasLayer/MarginContainer" unique_id=242783899] unique_name_in_owner = true modulate = Color(1, 1, 1, 0.23529412) layout_mode = 2 diff --git a/stages/intro/scripts/intro.gd b/stages/intro/scripts/intro.gd index 9a1efff..a5904c9 100644 --- a/stages/intro/scripts/intro.gd +++ b/stages/intro/scripts/intro.gd @@ -1,6 +1,8 @@ extends Node class_name Intro +const WAKE_UP_DIALOG = preload("res://dialogs/timelines/story/wake_up.dtl") + var steps : Array[IntroStep] @export_file var game_scene_path : String @@ -10,25 +12,14 @@ var tutorial_started := false func _ready(): %PassDialogButton.button_down.connect(_on_pass_dialog_button_pressed) - Dialogic.start('demeter_intro') + Dialogic.start(WAKE_UP_DIALOG) - Dialogic.timeline_ended.connect(start_tutorial) + await Dialogic.timeline_ended + pass_intro() -func start_tutorial(): - GameInfo.game_data.dialogs_done.append('demeter_intro') - if not tutorial_started: - tutorial_started = true - Dialogic.end_timeline() - GameInfo.game_data.start_region( - RegionParameter.new( - 10, - 3, - "Tutorial", - true, - ) - ) - - SceneManager.change_scene("REGION") +func pass_intro(): + Dialogic.end_timeline() + SceneManager.change_to_scene_id('ASTRA') func _on_pass_dialog_button_pressed(): @@ -36,4 +27,4 @@ func _on_pass_dialog_button_pressed(): pass_asked = true %PassDialogButton.text = tr('ARE_YOU_SURE') else: - start_tutorial() + pass_intro() diff --git a/stages/region_selection/scripts/region_selection.gd b/stages/region_selection/scripts/region_selection.gd index dafab20..970e08f 100644 --- a/stages/region_selection/scripts/region_selection.gd +++ b/stages/region_selection/scripts/region_selection.gd @@ -113,11 +113,11 @@ func _on_camera_3d_region_point_clicked(rp : RunPoint): func _on_travel_validation_go_button_button_down(): if selected_run_point: GameInfo.game_data.current_run.choose_next_run_point(selected_run_point) - SceneManager.change_scene("REGION") + SceneManager.change_to_scene_id("REGION") func _on_travel_validation_no_now_button_button_down(): %TravelValidation.hide() func _on_return_button_button_down(): if GameInfo.game_data.current_region_data: - SceneManager.change_scene("COCKPIT") + SceneManager.change_to_scene_id("COCKPIT") diff --git a/stages/terrain/region/scripts/region.gd b/stages/terrain/region/scripts/region.gd index e002419..e73a260 100644 --- a/stages/terrain/region/scripts/region.gd +++ b/stages/terrain/region/scripts/region.gd @@ -74,7 +74,7 @@ func _process(_d): func generate_first_entities(): if not (Vector2i.ZERO in data.generated_chunk_entities): # Generate shovel - drop_item(Pickaxe.new(), entity_container.global_position + Vector2(0, 100)) + drop_item(Shovel.new(), entity_container.global_position + Vector2(0, 100)) func get_chunk_key(coord) -> String: return "%d:%d" % [coord.x, coord.y] diff --git a/stages/title_screen/scripts/title_screen.gd b/stages/title_screen/scripts/title_screen.gd index 5190105..d0f5438 100644 --- a/stages/title_screen/scripts/title_screen.gd +++ b/stages/title_screen/scripts/title_screen.gd @@ -16,10 +16,10 @@ func _ready(): %Restart.visible = GameInfo.game_loaded func _on_start_pressed(): - if 'demeter_intro' not in GameInfo.game_data.dialogs_done: - SceneManager.change_scene("INTRO") + if GameInfo.game_data and GameInfo.game_data.last_game_scene: + SceneManager.change_to_scene(GameInfo.game_data.last_game_scene) else: - SceneManager.change_scene("REGION") + SceneManager.change_to_scene_id("INTRO") func _process(delta): next_mouse_pos = get_viewport().get_mouse_position()