Ajout de la cinématique de début et refonte du système audio

Et toujours un peu de correction de bug par ci par là
This commit is contained in:
2026-02-11 21:11:32 +01:00
parent 4b8e59ee56
commit c992950789
54 changed files with 1186 additions and 882 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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")])

View File

@@ -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"

View File

@@ -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"

View File

@@ -5,3 +5,4 @@ class_name Scene
@export_file_path() var scene_path : String
@export var mouse_captured := false
@export var need_terrain_generated := false
@export var need_to_be_saved = true

View File

@@ -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)

View File

@@ -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"]
- Ok but wait I have more questions !
demeter: Sorry, we'll speak after this ! I'll send you an elevator !

View File

@@ -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.

View File

@@ -0,0 +1 @@
uid://kmojqxt5i18n

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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

View File

@@ -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")]

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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",

View File

@@ -1,4 +1,4 @@
extends Node
func _ready():
SceneManager.change_scene("TITLE", false)
SceneManager.change_to_scene_id("TITLE", false)

View File

@@ -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

Binary file not shown.

View File

@@ -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

Binary file not shown.

Binary file not shown.

View File

@@ -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

Binary file not shown.

View File

@@ -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")

View File

@@ -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")]

View File

@@ -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

View File

@@ -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():
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

View File

@@ -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())

View File

@@ -0,0 +1 @@
uid://bs6p88em81674

View File

@@ -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"]

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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
func pass_intro():
Dialogic.end_timeline()
GameInfo.game_data.start_region(
RegionParameter.new(
10,
3,
"Tutorial",
true,
)
)
SceneManager.change_scene("REGION")
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()

View File

@@ -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")

View File

@@ -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]

View File

@@ -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()