Et toujours du dev pour la béta

* Evolution de l'histoire avec de nouveaux dialogues, une plus grande durée de vie du jeu, des nouvelles zones d'histoire...
* Suppression du mode infini
* Ajout d'un écran des mutations découvertes
* Ajout d'un nouveau mécanisme de respawn situé dans le vaissau
* Ajout de 2 nouveaux modificateurs de région
* Quatre nouveaux artefacts
* Visuel de la décontamination de la planète 3D en cours de la partie
* Ajout d'une annonce visuelle des scène du jeu
* Fix sur la mutation Généreux pour être en accord avec sa description
* Amélioration de l'effet de la mutation Purification
* Fix de la mutation sociale aux niveau supérieurs
* Ajout d'un effet visuel de réacteur sur le joueur 3D
* Fix sur l'annonce de nouveaux objets qui se déclenchaient à une nouvelle run
* Amélioration des animation et des informations données dans le vaisseau
* Correction mineure des traductions
This commit is contained in:
2026-04-28 23:41:36 +02:00
parent 7ae362a3a5
commit 91e266ec85
269 changed files with 4393 additions and 1699 deletions

View File

@@ -6,5 +6,5 @@
transparency = 1
depth_draw_mode = 1
shading_mode = 0
albedo_color = Color(1, 1, 1, 0.79607844)
albedo_color = Color(1, 1, 1, 0.5803922)
albedo_texture = ExtResource("1_buts1")

Binary file not shown.

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ds4rc2k28kgqx"
path="res://.godot/imported/door_opening.wav-be6526627aa980fb5ae3856a6fd75ee7.sample"
[deps]
source_file="res://common/audio_manager/assets/sfx/door/door_opening.wav"
dest_files=["res://.godot/imported/door_opening.wav-be6526627aa980fb5ae3856a6fd75ee7.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bnkb51nb5ie5p"
path="res://.godot/imported/stereogenicstudio-swish-swoosh-woosh-sfx-47-357152.mp3-86fb2f54172f11e0773d82cd7c4bb72f.mp3str"
[deps]
source_file="res://common/audio_manager/assets/sfx/door/stereogenicstudio-swish-swoosh-woosh-sfx-47-357152.mp3"
dest_files=["res://.godot/imported/stereogenicstudio-swish-swoosh-woosh-sfx-47-357152.mp3-86fb2f54172f11e0773d82cd7c4bb72f.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://53ixfbcd5qwu"
path="res://.godot/imported/holo_appear.wav-157b4aed0c2dfe9acb01d26d2102c36f.sample"
[deps]
source_file="res://common/audio_manager/assets/sfx/holo/holo_appear.wav"
dest_files=["res://.godot/imported/holo_appear.wav-157b4aed0c2dfe9acb01d26d2102c36f.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dsijqgnnadgem"
path="res://.godot/imported/holo_disappear.wav-c62aa0f12d34e0637ee622cc84f8a5ef.sample"
[deps]
source_file="res://common/audio_manager/assets/sfx/holo/holo_disappear.wav"
dest_files=["res://.godot/imported/holo_disappear.wav-c62aa0f12d34e0637ee622cc84f8a5ef.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -27,11 +27,11 @@
[ext_resource type="AudioStream" uid="uid://cs4y6sinpth8e" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_1.wav" id="18_j8acj"]
[ext_resource type="AudioStream" uid="uid://llxrlwfccywb" path="res://common/audio_manager/assets/sfx/dig/dig_3.wav" id="18_nlfrr"]
[ext_resource type="AudioStream" uid="uid://c5nfoa6v3r5f7" path="res://common/audio_manager/assets/sfx/harvest/harvest_6.wav" id="18_o4guq"]
[ext_resource type="AudioStream" uid="uid://bnkb51nb5ie5p" path="res://common/audio_manager/assets/sfx/door/stereogenicstudio-swish-swoosh-woosh-sfx-47-357152.mp3" id="18_yjs51"]
[ext_resource type="AudioStream" uid="uid://cbre45rky1f4v" path="res://common/audio_manager/assets/sfx/vending_machine/dragon-studio-power-off-386180.mp3" id="19_aedoe"]
[ext_resource type="AudioStream" uid="uid://bbhkivgarlhqm" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_2.wav" id="19_yjs51"]
[ext_resource type="AudioStream" uid="uid://ccfubsk6135qy" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_3.wav" id="20_4ojdh"]
[ext_resource type="AudioStream" uid="uid://bjind1iji0gt7" path="res://common/audio_manager/assets/sfx/pick_up/pick_up_1.wav" id="20_pu6t4"]
[ext_resource type="AudioStream" uid="uid://ds4rc2k28kgqx" path="res://common/audio_manager/assets/sfx/door/door_opening.wav" id="20_yr73o"]
[ext_resource type="AudioStream" uid="uid://cqa0gvgpoa7pd" path="res://common/audio_manager/assets/sfx/pick_up/pick_up_2.wav" id="21_dk5s6"]
[ext_resource type="AudioStream" uid="uid://cbm4r5bf7py11" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_4.wav" id="21_ehr7m"]
[ext_resource type="AudioStream" uid="uid://dq5qwydrca3vy" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_5.wav" id="22_aedoe"]
@@ -62,6 +62,8 @@
[ext_resource type="AudioStream" uid="uid://sgwvpxiul5x5" path="res://common/audio_manager/assets/sfx/ship_exit/ship_exit.wav" id="48_j8acj"]
[ext_resource type="AudioStream" uid="uid://ca0wonha334cl" path="res://common/audio_manager/assets/sfx/teleportation/teleport.wav" id="50_rlnfe"]
[ext_resource type="AudioStream" uid="uid://cv5avkd3qekt7" path="res://common/audio_manager/assets/sfx/movement/movement.wav" id="51_iyxkn"]
[ext_resource type="AudioStream" uid="uid://53ixfbcd5qwu" path="res://common/audio_manager/assets/sfx/holo/holo_appear.wav" id="63_aedoe"]
[ext_resource type="AudioStream" uid="uid://dsijqgnnadgem" path="res://common/audio_manager/assets/sfx/holo/holo_disappear.wav" id="64_ge2sc"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_6o1yh"]
streams_count = 3
@@ -198,8 +200,7 @@ volume_db = -14.149
pitch_scale = 0.75
[node name="DoorOpen" type="AudioStreamPlayer" parent="Sfx" unique_id=1440910292]
stream = ExtResource("18_yjs51")
volume_db = -15.565
stream = ExtResource("20_yr73o")
pitch_scale = 1.5
[node name="Recharge1" type="AudioStreamPlayer" parent="Sfx" unique_id=357905012]
@@ -256,6 +257,10 @@ stream = ExtResource("28_3dfjn")
[node name="PlantPoint" type="AudioStreamPlayer" parent="Sfx" unique_id=2044025024]
stream = SubResource("AudioStreamRandomizer_qog4c")
[node name="Reveal" type="AudioStreamPlayer" parent="Sfx" unique_id=1597352608]
stream = ExtResource("37_3dfjn")
volume_db = -3.0
[node name="Ship_reveal" type="AudioStreamPlayer" parent="Sfx" unique_id=1121632306]
stream = ExtResource("37_3dfjn")
volume_db = -3.0
@@ -291,3 +296,11 @@ volume_db = -7.0
[node name="Teleportation" type="AudioStreamPlayer" parent="Sfx" unique_id=369599456]
stream = ExtResource("50_rlnfe")
volume_db = -6.0
[node name="HoloAppear" type="AudioStreamPlayer" parent="Sfx" unique_id=637436824]
stream = ExtResource("63_aedoe")
volume_db = -6.0
[node name="HoloDisappear" type="AudioStreamPlayer" parent="Sfx" unique_id=1756615928]
stream = ExtResource("64_ge2sc")
volume_db = -6.0

View File

@@ -4,7 +4,7 @@ class_name AudioManagerInstance
const MIN_VOLUME = -60.
const MAX_VOLUME = 24.
const DEFAULT_FADE_TIME : float = 5.0
const DEFAULT_FADE_TIME : float = 3.0
const REGION_FIRST_PHASE = [
"RegionForestPhase1",
@@ -35,32 +35,35 @@ var default_volumes := {}
func _on_change_scene(scene : Scene):
stop_all_ambiances()
match scene.scene_id:
"TITLE":
if (scene is TitleScene):
play_music_alone("Title", false, 1.0)
"INTRO":
elif scene is IntroScene:
stop_all_musics()
"REGION":
elif scene is RegionScene:
play_ambiance("Exterior", false)
var region_level = GameInfo.game_data.current_region_data.region_level
var first_phase = REGION_FIRST_PHASE[region_level % len(REGION_FIRST_PHASE)]
var loop_phase = REGION_LOOP_PHASE[region_level % len(REGION_LOOP_PHASE)]
var level = GameInfo.game_data.current_run.level
var first_phase = REGION_FIRST_PHASE[level % len(REGION_FIRST_PHASE)]
var loop_phase = REGION_LOOP_PHASE[level % len(REGION_LOOP_PHASE)]
play_music_alone(first_phase)
queue_music(loop_phase, first_phase)
"COCKPIT":
elif scene is CockpitScene:
stop_all_musics()
play_ambiance_alone("Ship", true, 1.0)
"ASTRA":
elif scene is AstraScene:
stop_all_musics()
play_ambiance_alone("Astra", false)
"GARAGE":
elif scene is GarageScene:
stop_all_musics()
play_ambiance_alone("Astra", false)
"BOREA":
elif scene is BoreaScene:
stop_all_musics()
play_ambiance_alone("Borea", false)
"VENDING_MACHINE_ROOM":
elif scene is VendingMachineScene:
stop_all_musics()
play_ambiance_alone("Borea", false)
elif scene is RelayBaseScene:
stop_all_musics()
play_ambiance_alone("Borea", false)
# Fonction s'exécutant à chaque début de timeline
func _on_timeline_started():

View File

@@ -18,6 +18,33 @@ func modify_player_max_energy(v : int) -> int:
func modify_player_inventory_size(v : int) -> int:
return v
func modify_seed_rarity_pool(seed_rarity_pool : Array[int]) -> Array[int]:
return seed_rarity_pool
func modify_plant_growing_time(plant_growing_time : int) -> int:
return plant_growing_time
func modify_plant_lifetime(plant_lifetime : int) -> int:
return plant_lifetime
func modify_plant_seed_number(plant_seed_number : int) -> int:
return plant_seed_number
func modify_plant_base_score(plant_base_score : int) -> int:
return plant_base_score
func modify_plant_seed_random_loose(plant_seed_random_loose : int) -> int:
return plant_seed_random_loose
func modify_plant_influence_radius(plant_influence_radius : float) -> float:
return plant_influence_radius
func modify_mutation_probability(plant_mutation_probability) -> float:
return plant_mutation_probability
func modify_mutation_max_number(plant_mutation_max_number) -> int:
return plant_mutation_max_number
func card_info() -> CardInfo:
var info = CardInfo.new(
get_artefact_name(),

View File

@@ -0,0 +1,68 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://xwjwwmhd4b7t"
path="res://.godot/imported/stabilisator.blend-3a4d21b03376590b925002fb56f41279.scn"
[deps]
source_file="res://common/game_data/scripts/artefacts/stabilisator/stabilisator.blend"
dest_files=["res://.godot/imported/stabilisator.blend-3a4d21b03376590b925002fb56f41279.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

View File

@@ -0,0 +1,15 @@
@tool
extends Artefact
class_name StabilisatorArtefact
func get_artefact_name() -> String:
return "STABILISATOR"
func get_artefact_desc() -> String:
return "STABILISATOR_DESC_TEXT"
func get_3d_scene() -> PackedScene:
return preload("res://common/game_data/scripts/artefacts/stabilisator/stabilisator.blend")
func modify_plant_lifetime(plant_lifetime : int) -> int:
return plant_lifetime + 1

View File

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

View File

@@ -0,0 +1,68 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bb4675xxby4li"
path="res://.godot/imported/talion_overloader.blend-8cbf53dd089d03a7feecf8f09620bb83.scn"
[deps]
source_file="res://common/game_data/scripts/artefacts/talion_overloader/talion_overloader.blend"
dest_files=["res://.godot/imported/talion_overloader.blend-8cbf53dd089d03a7feecf8f09620bb83.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

View File

@@ -0,0 +1,15 @@
@tool
extends Artefact
class_name TalionOverloaderArtefact
func get_artefact_name() -> String:
return "TALION_OVERLOADER"
func get_artefact_desc() -> String:
return "TALION_OVERLOADER_DESC_TEXT"
func get_3d_scene() -> PackedScene:
return preload("res://common/game_data/scripts/artefacts/talion_overloader/talion_overloader.blend")
func modify_mutation_max_number(plant_mutation_max_number) -> int:
return plant_mutation_max_number + 1

View File

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

View File

@@ -0,0 +1,68 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bv12sx67hij1s"
path="res://.godot/imported/talion_relay.blend-7f1bb942cac95750ceb5345d8092e7ac.scn"
[deps]
source_file="res://common/game_data/scripts/artefacts/talion_relay/talion_relay.blend"
dest_files=["res://.godot/imported/talion_relay.blend-7f1bb942cac95750ceb5345d8092e7ac.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

View File

@@ -0,0 +1,15 @@
@tool
extends Artefact
class_name TalionRelayArtifact
func get_artefact_name() -> String:
return "TALION_RELAY"
func get_artefact_desc() -> String:
return "TALION_RELAY_DESC_TEXT"
func get_3d_scene() -> PackedScene:
return preload("res://common/game_data/scripts/artefacts/talion_relay/talion_relay.blend")
func modify_mutation_probability(plant_mutation_probability) -> float:
return plant_mutation_probability * 1.5

View File

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

View File

@@ -0,0 +1,68 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bpvk3ldu7pkyv"
path="res://.godot/imported/talion_soil.blend-37ee0f905ace3681bafa4c72e1bfb134.scn"
[deps]
source_file="res://common/game_data/scripts/artefacts/talion_soil/talion_soil.blend"
dest_files=["res://.godot/imported/talion_soil.blend-37ee0f905ace3681bafa4c72e1bfb134.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

View File

@@ -0,0 +1,15 @@
@tool
extends Artefact
class_name TalionSoilArtifact
func get_artefact_name() -> String:
return "TALION_SOIL"
func get_artefact_desc() -> String:
return "TALION_SOIL_DESC_TEXT"
func get_3d_scene() -> PackedScene:
return preload("res://common/game_data/scripts/artefacts/talion_soil/talion_soil.blend")
func modify_plant_influence_radius(plant_influence_radius : float) -> float:
return plant_influence_radius * 1.4

View File

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

View File

@@ -1,13 +1,15 @@
extends Resource
class_name GameData
enum GameMode {STORY,INFINITE}
enum GameMode {STORY}
signal current_run_updated(r : RunData)
signal current_region_data_updated(p : RegionData)
@export var player_data : PlayerData = PlayerData.new()
@export var progression_data : ProgressionData = ProgressionData.new()
@export var current_run : RunData = start_run() :
set(v):
current_run = v
@@ -18,29 +20,31 @@ signal current_region_data_updated(p : RegionData)
current_region_data = v
current_region_data_updated.emit(v)
@export var progression_data : ProgressionData = ProgressionData.new()
@export var last_game_scene : Scene = null
@export var ship_in_space = false
@export var tutorial_done = false
@export var ship_tutorial_done = false
@export var incubator_used = []
@export var dead_orchid_position : Vector3
@export var dead_orchid_rotation : Vector3
@export var item_announced = []
@export var game_mode : GameMode = GameMode.STORY
@export var dialogs_done : Array[String] = [] #Chemin des dialogues démarrés
@export var dialogs_done : Array[String] = [] #Chemin des dialogues terminés
func start_run() -> RunData:
player_data.clear_inventory()
player_data.update_with_artefacts([])
current_run = RunData.new()
current_run.story_step = progression_data.story_step.duplicate_deep()
current_run.generate_next_run_points()
current_run.current_run_point_changed.connect(
func(rp : RunPoint):
start_region(rp.region_parameter)
)
ship_in_space = false
return current_run
func reset_player():
@@ -52,19 +56,14 @@ func reset_all():
func start_region(region_param : RegionParameter):
current_region_data = RegionData.new(region_param)
GameInfo.save_game_data()
func give_up():
current_region_data = null
current_run = null
start_run()
SceneManager.change_to_scene(progression_data.story_step.get_respawn_scene())
func start_tutorial():
current_region_data = RegionData.new(
RegionParameter.new(
0,
tr("ASTRA_BASE"),
["tutorial"],
[],
randi()
)
)
func finish_story_step():
progression_data.next_story_step()
current_region_data = null
start_run()

View File

@@ -1,7 +1,26 @@
extends Resource
class_name ProgressionData
@export var available_mutations: Array[PlantMutation] = [
@export var planted_mutation_ids: Array[String] = []
@export var story_step_i := 0
@export var ship_tutorial_done = false
var all_mutations: Array[PlantMutation] : get = get_all_mutations
var available_mutations: Array[PlantMutation] : get = get_all_mutations
var available_artefacts: Array[Artefact] : get = get_all_artifacts
var story_step : StoryStep : get = get_story_step
func get_story_step() -> StoryStep:
return get_all_story_steps()[story_step_i]
func next_story_step() -> void:
get_story_step()._on_finish()
if story_step_i + 1 < len(get_all_story_steps()):
story_step_i += 1
func get_all_mutations() -> Array[PlantMutation]:
return [
AncientMutation.new(),
FertileMutation.new(),
GenerousMutation.new(),
@@ -19,9 +38,20 @@ class_name ProgressionData
VivaciousMutation.new(),
]
@export var available_artefacts: Array[Artefact] = [
func get_all_artifacts() -> Array[Artefact]:
return [
PileArtefact.new(),
SeedCaseArtefact.new()
SeedCaseArtefact.new(),
StabilisatorArtefact.new(),
TalionOverloaderArtefact.new(),
TalionSoilArtifact.new(),
]
@export var max_mutations_by_plant : int = 2
func get_all_story_steps() -> Array[StoryStep]:
return [
TutorialStoryStep.new(),
AstraStoryStep.new(),
MercuryStoryStep.new(),
BetaStoryStep.new()
]

View File

@@ -1,60 +1,50 @@
extends Resource
class_name RunData
enum State {STARTED, IN_PROGRESS, FINISHED}
const RUN_POINTS_NEXT_NUMBER : int = 2
const RUN_POINT_MAX_LEVEL = 5 # TODO
const VENDING_MACHINE_OCCURENCE = 3
const CHALLENGE_CHANCE = 0.25
signal current_run_point_changed(rp : RunPoint)
signal artefacts_changed(artefact : Array[Artefact])
var run_seed = randi()
@export var next_run_points : Array[RunPoint] = generate_next_run_points()
@export var level = 0
@export var story_step : StoryStep
@export var next_run_points : Array[RunPoint]
@export var current_run_point : RunPoint = null :
set(v):
current_run_point = v
current_run_point_changed.emit(v)
@export var visited_run_points : Array[RunPoint] = []
@export var last_used_modifier_name = ""
@export var artefacts : Array[Artefact] = []
var plant_info = RunDataPlantInfo.new(self)
func get_state() -> State:
if not current_run_point:
return State.STARTED
elif current_run_point.level == RUN_POINT_MAX_LEVEL:
return State.FINISHED
else :
return State.IN_PROGRESS
func is_finished() -> bool:
return story_step.is_run_finished(level)
func get_progress() -> int:
return story_step.get_run_progress(level)
#region ------------------ Run Points ------------------
func generate_next_run_points(level = 0) -> Array[RunPoint]:
func generate_next_run_points() -> Array[RunPoint]:
next_run_points = []
if level == RUN_POINT_MAX_LEVEL and GameInfo.game_data.game_mode == GameData.GameMode.STORY:
return [
generate_borea_base_run_point()
]
for i in range(RUN_POINTS_NEXT_NUMBER):
for i in range(story_step.get_run_point_number(level+1)):
next_run_points.append(
generate_next_run_point(level)
generate_next_run_point()
)
return next_run_points
func generate_next_run_point(level = 0) -> RunPoint:
func generate_next_run_point() -> RunPoint:
var region_parameter = RegionParameter.new()
var is_challenge = randf() < CHALLENGE_CHANCE
var next_level = level+1
if story_step.need_gameplay_modifier(next_level):
var is_challenge = randf() < story_step.get_challenge_chance(next_level)
if is_challenge:
region_parameter.modifiers = [
generate_challenge_modifiers().pick_random(),
@@ -65,39 +55,31 @@ func generate_next_run_point(level = 0) -> RunPoint:
generate_normal_modifiers().pick_random()
] as Array[RegionModifier]
if level%VENDING_MACHINE_OCCURENCE == 0:
var first_vending = story_step.get_first_vending_machine_occurence(next_level)
var vending_occurence = story_step.get_vending_machine_occurence(next_level)
if vending_occurence > 0:
if (level - first_vending)%vending_occurence == 0:
region_parameter.modifiers.append(VendingMachineModifier.new())
region_parameter.level = level
region_parameter.modifiers.append_array(
story_step.get_story_modifiers_for_region(next_level)
)
region_parameter.objective = story_step.get_objective_for_region(next_level)
return RunPoint.new(
level,
region_parameter
)
func generate_borea_base_run_point() -> RunPoint:
var region_parameter = RegionParameter.new()
region_parameter.level = RUN_POINT_MAX_LEVEL
region_parameter.region_name = tr("BOREA_BASE")
return RunPoint.new(
RUN_POINT_MAX_LEVEL,
region_parameter
)
func get_next_run_points() -> Array[RunPoint]:
if current_run_point and current_run_point.level == RUN_POINT_MAX_LEVEL:
return []
return next_run_points
func choose_next_run_point(run_point : RunPoint) -> RunPoint:
if current_run_point:
visited_run_points.append(current_run_point)
func choose_next_run_point(run_point : RunPoint = null) -> RunPoint:
if run_point == null:
run_point = generate_next_run_point()
level += 1
current_run_point = run_point
GameInfo.game_data.start_region(run_point.region_parameter)
next_run_points = generate_next_run_points(current_run_point.level + 1)
if len(current_run_point.region_parameter.modifiers):
last_used_modifier_name = current_run_point.region_parameter.modifiers[0].get_modifier_name()
next_run_points = generate_next_run_points()
return current_run_point
#endregion
@@ -118,7 +100,8 @@ func generate_normal_modifiers() -> Array[RegionModifier]:
func generate_benefic_modifiers() -> Array[RegionModifier]:
return [
VendingMachineModifier.new(),
ResonnanceModifier.new()
ResonnanceModifier.new(),
InstableModifier.new(),
]
@@ -127,6 +110,7 @@ func generate_challenge_modifiers() -> Array[RegionModifier]:
RockyModifier.new(),
RadioactiveModifier.new(),
ContaminatedModifier.new(),
StormModifier.new(),
]
#endregion

View File

@@ -1,14 +1,14 @@
extends Node
class_name RunDataPlantInfo
signal updated
const DEFAULT_GROWING_TIME = 2
const DEFAULT_LIFETIME = 6
const DEFAULT_BASE_SCORE = 1
const DEFAULT_SEED_NUMBER = 2
const DEFAULT_SEED_RANDOM_LOOSE = 1
const DEFAULT_PLANT_INFLUENCE_RADIUS = 100
const DEFAULT_MUTATION_PROBABILITY = 0.3
const DEFAULT_MUTATION_MAX_NUMBER = 2
var run_data : RunData
@@ -25,6 +25,9 @@ func get_growing_time() -> int:
for rm in get_region_modifiers():
growing_time = rm.modify_plant_growing_time(growing_time)
for a in run_data.artefacts:
growing_time = a.modify_plant_growing_time(growing_time)
return max(0, growing_time)
func get_lifetime() -> int:
@@ -33,6 +36,9 @@ func get_lifetime() -> int:
for rm in get_region_modifiers():
lifetime = rm.modify_plant_lifetime(lifetime)
for a in run_data.artefacts:
lifetime = a.modify_plant_lifetime(lifetime)
return max(0, lifetime)
func get_base_score() -> int:
@@ -41,6 +47,9 @@ func get_base_score() -> int:
for rm in get_region_modifiers():
base_score = rm.modify_plant_base_score(base_score)
for a in run_data.artefacts:
base_score = a.modify_plant_base_score(base_score)
return max(0, base_score)
func get_seed_number() -> int:
@@ -49,6 +58,9 @@ func get_seed_number() -> int:
for rm in get_region_modifiers():
seed_number = rm.modify_plant_seed_number(seed_number)
for a in run_data.artefacts:
seed_number = a.modify_plant_seed_number(seed_number)
return max(0, seed_number)
func get_seed_random_loose() -> int:
@@ -57,6 +69,9 @@ func get_seed_random_loose() -> int:
for rm in get_region_modifiers():
seed_random_loose = rm.modify_plant_seed_random_loose(seed_random_loose)
for a in run_data.artefacts:
seed_random_loose = a.modify_plant_seed_random_loose(seed_random_loose)
return min(max(0, seed_random_loose),get_seed_number())
func get_influence_radius() -> int:
@@ -65,8 +80,32 @@ func get_influence_radius() -> int:
for rm in get_region_modifiers():
influence_radius = rm.modify_plant_influence_radius(influence_radius)
for a in run_data.artefacts:
influence_radius = a.modify_plant_influence_radius(influence_radius)
return max(0, influence_radius)
func get_mutation_probability() -> float:
var mutation_probability = DEFAULT_MUTATION_PROBABILITY
for rm in get_region_modifiers():
mutation_probability = rm.modify_mutation_probability(mutation_probability)
for a in run_data.artefacts:
mutation_probability = a.modify_mutation_probability(mutation_probability)
return max(0., mutation_probability)
func get_mutation_max_number() -> int:
var mutation_max_number = DEFAULT_MUTATION_MAX_NUMBER
for rm in get_region_modifiers():
mutation_max_number = rm.modify_mutation_max_number(mutation_max_number)
for a in run_data.artefacts:
mutation_max_number = a.modify_mutation_max_number(mutation_max_number)
return max(0., mutation_max_number)
func get_region_modifiers() -> Array[RegionModifier]:
if run_data.current_run_point and run_data.current_run_point.region_parameter:

View File

@@ -7,25 +7,21 @@ const TYPE_ICON = preload("res://common/icons/map-pin.svg")
const OBJECTIVE_ICON = preload("res://common/icons/growth.svg")
const CHARGE_ICON = preload("res://common/icons/bolt.svg")
@export var level : int = 0 # X pos along the planet, and difficulty
@export var region_parameter : RegionParameter = RegionParameter.new() :
set(v):
region_parameter = v
@export var position : float = 0
func _init(
_level : int = 0,
_region_parameter : RegionParameter = RegionParameter.new(),
_position : float = randf_range(0.,1.),
):
level = _level
region_parameter = _region_parameter
region_parameter.level = level
position = _position
func card_info() -> CardInfo:
var info = CardInfo.new(
region_parameter.region_name,
region_parameter.get_region_name(),
tr("REGION_TO_VISIT")
)

View File

@@ -0,0 +1,33 @@
extends StoryStep
class_name AstraStoryStep
const MERCURY_ARRIVAL_DIALOG_PATH="res://dialogs/timelines/astra/mercury_arrival.dtl"
func get_respawn_scene() -> Scene:
return AstraScene.new()
func get_destination_text() -> String:
return tr("RELAY_BASE_X") % tr("MERCURY")
func get_destination_scene() -> Scene:
return RelayBaseScene.new(
"MERCURY",
"001"
)
func get_region_sequence_length() -> int:
return 4
func get_first_vending_machine_occurence(_level : int) -> int:
return 0
func get_vending_machine_occurence(_level : int) -> int:
return 0
func get_challenge_chance(_level : int) -> float:
return 0.
func get_ship_dialog_path(level : int, ship_in_space := true) -> String:
if ship_in_space and level == get_region_sequence_length() - 1:
return MERCURY_ARRIVAL_DIALOG_PATH
return ""

View File

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

View File

@@ -0,0 +1,31 @@
extends StoryStep
class_name BetaStoryStep
const VENUS_DEPARTURE_DIALOG_PATH = "res://dialogs/timelines/beta/venus_departure.dtl"
func get_respawn_scene() -> Scene:
return RelayBaseScene.new(
"VENUS",
"002",
true
)
func get_objective_for_region(l : int) -> int:
match l:
0: return 8
1: return 15
_: return get_objective_for_region(l-1) + l * 5
func get_region_sequence_length() -> int:
return 10
func get_destination_text() -> String:
return tr("SECRET_SCENE")
func get_destination_scene() -> Scene:
return BoreaScene.new()
func get_ship_dialog_path(_level : int, _ship_in_space := true) -> String:
return VENUS_DEPARTURE_DIALOG_PATH

View File

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

View File

@@ -0,0 +1,35 @@
extends StoryStep
class_name MercuryStoryStep
const MERCURY_DEPARTURE_DIALOG_PATH = "res://dialogs/timelines/mercury/mercury_departure.dtl"
const VENUS_ARRIVAL_DIALOG_PATH = "res://dialogs/timelines/mercury/venus_arrival.dtl"
func get_respawn_scene() -> Scene:
return RelayBaseScene.new(
"MERCURY",
"001",
true
)
func get_destination_text() -> String:
return tr("RELAY_BASE_X") % tr("VENUS")
func get_destination_scene() -> Scene:
return RelayBaseScene.new(
"VENUS",
"002"
)
func get_first_vending_machine_occurence(_level : int) -> int:
return 0
func get_vending_machine_occurence(_level : int) -> int:
return 2
func get_ship_dialog_path(level : int, ship_in_space := true) -> String:
if level == 0:
return MERCURY_DEPARTURE_DIALOG_PATH
if ship_in_space and level == get_region_sequence_length() - 1:
return VENUS_ARRIVAL_DIALOG_PATH
return ""

View File

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

View File

@@ -0,0 +1,67 @@
@abstract
extends Resource
class_name StoryStep
#region ------------------ Story ------------------
@abstract func get_respawn_scene() -> Scene
@abstract func get_destination_text() -> String
func get_destination_scene() -> Scene:
return BoreaScene.new()
func get_run_progress(level : int) -> int:
return get_region_sequence_length() - level
func get_ship_dialog_path(_level : int, _ship_in_space := true) -> String:
return ""
#region ------------------ Run ------------------
func is_run_finished(level : int) -> bool:
return level == get_region_sequence_length()
func get_region_sequence_length() -> int:
return 6
func get_first_vending_machine_occurence(_level : int) -> int:
return 2
func get_vending_machine_occurence(_level : int) -> int:
return 4
func get_challenge_chance(_level : int) -> float:
return 0.3
func get_run_point_number(level : int) -> int:
if is_run_finished(level):
return 1
return 2
func get_objective_for_region(level : int) -> int:
match level:
0: return 1
1: return 8
2: return 10
3: return 15
4: return 20
5: return 30
_: return get_objective_for_region(level-1) + (level-3) * 5
func get_story_modifiers_for_region(level : int) -> Array[RegionModifier]:
var modifiers : Array[RegionModifier] = []
if is_run_finished(level):
var dest_mod = DestinationModifier.new()
dest_mod.destination_scene = get_destination_scene()
modifiers.append(dest_mod)
return modifiers
func need_gameplay_modifier(level : int):
if is_run_finished(level):
return false
return true
func _on_finish():
GameInfo.game_data.incubator_used = []
GameInfo.game_data.dead_orchid_position = Vector3.ZERO
GameInfo.game_data.dead_orchid_rotation = Vector3.ZERO

View File

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

View File

@@ -0,0 +1,24 @@
extends StoryStep
class_name TutorialStoryStep
const INTRO_DIALOG = "res://dialogs/timelines/tutorial/demeter_intro.dtl"
func get_respawn_scene() -> Scene:
return AstraScene.new()
func get_destination_text() -> String:
return ""
func get_region_sequence_length() -> int:
return 1
func get_destination_scene() -> Scene: return null
func get_story_modifiers_for_region(_n : int) -> Array[RegionModifier]:
return [
TutorialModifier.new()
]
func _on_finish():
pass

View File

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

View File

@@ -17,16 +17,16 @@ var settings_data : SettingsData
var current_dialog_path : String
func load_game_data() -> GameData:
game_data = null
if ResourceLoader.exists(SAVE_GAME_LOCATION):
game_loaded = true
game_data = ResourceLoader.load(SAVE_GAME_LOCATION).duplicate_deep()
else :
game_data = GameData.new()
save_game_data()
return game_data
func start_game_data():
game_data = GameData.new()
save_game_data()
func save_game_data():
if game_data:
ResourceSaver.save(game_data, SAVE_GAME_LOCATION)
@@ -44,10 +44,6 @@ func save_settings():
if settings_data:
ResourceSaver.save(settings_data, SAVE_SETTINGS_LOCATION)
func restart_game_data():
game_data = GameData.new()
save_game_data()
func _init():
load_game_data()
load_settings_data()

1
common/icons/atom.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-atom"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M12 12v.01" /><path d="M19.071 4.929c-1.562 -1.562 -6 .337 -9.9 4.243c-3.905 3.905 -5.804 8.337 -4.242 9.9c1.562 1.561 6 -.338 9.9 -4.244c3.905 -3.905 5.804 -8.337 4.242 -9.9" /><path d="M4.929 4.929c-1.562 1.562 .337 6 4.243 9.9c3.905 3.905 8.337 5.804 9.9 4.242c1.561 -1.562 -.338 -6 -4.244 -9.9c-3.905 -3.905 -8.337 -5.804 -9.9 -4.242" /></svg>

After

Width:  |  Height:  |  Size: 647 B

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dmsls8siudy1u"
path="res://.godot/imported/growing.png-1974f3b5dd8b515f2458ee84afbec1aa.ctex"
uid="uid://n5ohgm4odri5"
path="res://.godot/imported/atom.svg-203f467e4f45f7544a18f8b0644aa19a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/plants/assets/sprites/champ/growing.png"
dest_files=["res://.godot/imported/growing.png-1974f3b5dd8b515f2458ee84afbec1aa.ctex"]
source_file="res://common/icons/atom.svg"
dest_files=["res://.godot/imported/atom.svg-203f467e4f45f7544a18f8b0644aa19a.ctex"]
[params]
@@ -38,3 +38,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff" class="icon icon-tabler icons-tabler-filled icon-tabler-device-floppy"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M16 3a1 1 0 0 1 .707 .293l4 4a1 1 0 0 1 .293 .707v10a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12a3 3 0 0 1 3 -3h1v4a1 1 0 0 0 .883 .993l.117 .007h6a1 1 0 0 0 1 -1v-4zm-4 8a2.995 2.995 0 0 0 -2.995 2.898a1 1 0 0 0 -.005 .102a3 3 0 1 0 3 -3m1 -8v3h-4v-3z" /></svg>

After

Width:  |  Height:  |  Size: 487 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3k7rl7nbp7yx"
path="res://.godot/imported/device-floppy.svg-5df3820d4d7726a3946e4ca79c467896.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/device-floppy.svg"
dest_files=["res://.godot/imported/device-floppy.svg-5df3820d4d7726a3946e4ca79c467896.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

1
common/icons/globe.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff" class="icon icon-tabler icons-tabler-filled icon-tabler-globe"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M11 4a5 5 0 1 1 -4.995 5.217l-.005 -.217l.005 -.217a5 5 0 0 1 4.995 -4.783z" /><path d="M14.133 1.502a1 1 0 0 1 1.365 -.369a9.015 9.015 0 1 1 -10.404 14.622a1 1 0 1 1 1.312 -1.51a7.015 7.015 0 1 0 8.096 -11.378a1 1 0 0 1 -.369 -1.365z" /><path d="M11 16a1 1 0 0 1 .993 .883l.007 .117v4a1 1 0 0 1 -1.993 .117l-.007 -.117v-4a1 1 0 0 1 1 -1z" /><path d="M15 20a1 1 0 0 1 .117 1.993l-.117 .007h-8a1 1 0 0 1 -.117 -1.993l.117 -.007h8z" /></svg>

After

Width:  |  Height:  |  Size: 661 B

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://crc4aop6ajiau"
path="res://.godot/imported/mature.png-44f597dc7980e7657c7418444db3823d.ctex"
uid="uid://sdrr43mek1cl"
path="res://.godot/imported/globe.svg-e211d89cbdcd4219d25d8110f0497347.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/plants/assets/sprites/champ/mature.png"
dest_files=["res://.godot/imported/mature.png-44f597dc7980e7657c7418444db3823d.ctex"]
source_file="res://common/icons/globe.svg"
dest_files=["res://.godot/imported/globe.svg-e211d89cbdcd4219d25d8110f0497347.ctex"]
[params]
@@ -38,3 +38,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-hexagon"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M19.875 6.27a2.225 2.225 0 0 1 1.125 1.948v7.284c0 .809 -.443 1.555 -1.158 1.948l-6.75 4.27a2.269 2.269 0 0 1 -2.184 0l-6.75 -4.27a2.225 2.225 0 0 1 -1.158 -1.948v-7.285c0 -.809 .443 -1.554 1.158 -1.947l6.75 -3.98a2.33 2.33 0 0 1 2.25 0l6.75 3.98h-.033" /></svg>

After

Width:  |  Height:  |  Size: 565 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://m0x75rx85b0k"
path="res://.godot/imported/hexagon-line.svg-15ab5b27660e96366bed1c81835a7ce9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/hexagon-line.svg"
dest_files=["res://.godot/imported/hexagon-line.svg-15ab5b27660e96366bed1c81835a7ce9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="#ffffff"
class="icon icon-tabler icons-tabler-filled icon-tabler-hexagon"
version="1.1"
id="svg2"
xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs2" /><path
stroke="none"
d="M0 0h24v24H0z"
fill="none"
id="path1" /><path
id="path2"
d="M 12.03125 1 A 3.33 3.33 0 0 0 10.423828 1.4140625 L 3.6503906 5.4101562 A 3.21 3.21 0 0 0 2 8.2167969 L 2 15.501953 A 3.226 3.226 0 0 0 3.6777344 18.328125 L 10.373047 22.564453 C 11.407046 23.134453 12.592267 23.135656 13.572266 22.597656 L 20.376953 18.294922 C 21.356952 17.757922 22 16.676952 22 15.501953 L 22 8.21875 L 21.994141 8.0136719 A 3.223 3.223 0 0 0 20.710938 5.6230469 L 20.603516 5.5488281 L 20.597656 5.5429688 A 1.074 1.074 0 0 0 20.416016 5.4082031 L 13.640625 1.4140625 A 3.33 3.33 0 0 0 12.03125 1 z M 12 5.7734375 A 3 3 0 0 1 14.994141 8.5976562 L 15 8.7734375 L 15 9.7734375 A 2 2 0 0 1 16.994141 11.623047 L 17 11.773438 L 17 14.773438 A 2 2 0 0 1 15.150391 16.769531 L 15 16.773438 L 9 16.773438 A 2 2 0 0 1 7.0039062 14.923828 L 7 14.773438 L 7 11.773438 A 2 2 0 0 1 8.8496094 9.7792969 L 9 9.7734375 L 9 8.7734375 A 3 3 0 0 1 12 5.7734375 z M 12 7.7734375 A 1 1 0 0 0 11.005859 8.65625 L 11 8.7734375 L 11 9.7734375 L 13 9.7734375 L 13 8.7734375 A 1 1 0 0 0 12 7.7734375 z M 9 11.773438 L 9 14.773438 L 15 14.773438 L 15 11.773438 L 9 11.773438 z " /><g
style="fill:#ffffff"
id="g2"
transform="translate(-30.793409,-1.0034133)"><path
stroke="none"
d="M 0,0 H 24 V 24 H 0 Z"
fill="none"
id="path1-6" /><path
d="m 9.0004403,11.999507 v 3 H 15.00044 v -3 z"
style=""
id="path6" /><path
d="M 12.00044,7.999507 A 1,1 0 0 0 11.0063,8.8823196 l -0.0059,0.1171875 v 1 h 2 v -1 a 1,1 0 0 0 -1,-1.0000001 z"
style=""
id="path5" /></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cul11ab04vf8i"
path="res://.godot/imported/hexagon-lock.svg-7bf497f4529e47638207a0a00b360c9a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/hexagon-lock.svg"
dest_files=["res://.godot/imported/hexagon-lock.svg-7bf497f4529e47638207a0a00b360c9a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

1
common/icons/hexagon.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff" class="icon icon-tabler icons-tabler-filled icon-tabler-hexagon"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M10.425 1.414l-6.775 3.996a3.21 3.21 0 0 0 -1.65 2.807v7.285a3.226 3.226 0 0 0 1.678 2.826l6.695 4.237c1.034 .57 2.22 .57 3.2 .032l6.804 -4.302c.98 -.537 1.623 -1.618 1.623 -2.793v-7.284l-.005 -.204a3.223 3.223 0 0 0 -1.284 -2.39l-.107 -.075l-.007 -.007a1.074 1.074 0 0 0 -.181 -.133l-6.776 -3.995a3.33 3.33 0 0 0 -3.216 0z" /></svg>

After

Width:  |  Height:  |  Size: 557 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgt4n1xwn4dc2"
path="res://.godot/imported/hexagon.svg-116e9b9fafdb9986d61b02877aeb42f7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/hexagon.svg"
dest_files=["res://.godot/imported/hexagon.svg-116e9b9fafdb9986d61b02877aeb42f7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

1
common/icons/lock.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff" class="icon icon-tabler icons-tabler-filled icon-tabler-lock"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M12 2a5 5 0 0 1 5 5v3a3 3 0 0 1 3 3v6a3 3 0 0 1 -3 3h-10a3 3 0 0 1 -3 -3v-6a3 3 0 0 1 3 -3v-3a5 5 0 0 1 5 -5m0 12a2 2 0 0 0 -1.995 1.85l-.005 .15a2 2 0 1 0 2 -2m0 -10a3 3 0 0 0 -3 3v3h6v-3a3 3 0 0 0 -3 -3" /></svg>

After

Width:  |  Height:  |  Size: 435 B

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bupl1y0cfj21q"
path="res://.godot/imported/mature.png-a98b30ab80fe074a42994ef9926caee8.ctex"
uid="uid://2d2vv0sj6lq5"
path="res://.godot/imported/lock.svg-60e6fe68b0308af207c28dcac632b24d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/plants/assets/sprites/chardi/mature.png"
dest_files=["res://.godot/imported/mature.png-a98b30ab80fe074a42994ef9926caee8.ctex"]
source_file="res://common/icons/lock.svg"
dest_files=["res://.godot/imported/lock.svg-60e6fe68b0308af207c28dcac632b24d.ctex"]
[params]
@@ -38,3 +38,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

1
common/icons/route.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-route"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M3 19a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /><path d="M19 7a2 2 0 1 0 0 -4a2 2 0 0 0 0 4" /><path d="M11 19h5.5a3.5 3.5 0 0 0 0 -7h-8a3.5 3.5 0 0 1 0 -7h4.5" /></svg>

After

Width:  |  Height:  |  Size: 460 B

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c7mp7tkkkk6o5"
path="res://.godot/imported/growing.png-c0d45a498c8bfc90776eb09d341d1579.ctex"
uid="uid://bvk6wcfh00b16"
path="res://.godot/imported/route.svg-25a68768f285f5083e93f62aae40bb89.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/plants/assets/sprites/chardi/growing.png"
dest_files=["res://.godot/imported/growing.png-c0d45a498c8bfc90776eb09d341d1579.ctex"]
source_file="res://common/icons/route.svg"
dest_files=["res://.godot/imported/route.svg-25a68768f285f5083e93f62aae40bb89.ctex"]
[params]
@@ -38,3 +38,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

1
common/icons/tornado.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tornado"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M21 4l-18 0" /><path d="M13 16l-6 0" /><path d="M11 20l4 0" /><path d="M6 8l14 0" /><path d="M4 12l12 0" /></svg>

After

Width:  |  Height:  |  Size: 416 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://nmuoxgwcvdd2"
path="res://.godot/imported/tornado.svg-b6c4302162b03c085319c8d635902c33.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/tornado.svg"
dest_files=["res://.godot/imported/tornado.svg-b6c4302162b03c085319c8d635902c33.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -1,17 +1,174 @@
[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"]
[ext_resource type="Resource" uid="uid://bvksiaiocwob5" path="res://common/scene_manager/scenes/cockpit.tres" id="3_e28ni"]
[ext_resource type="Resource" uid="uid://bvgdq43fpl1xs" path="res://common/scene_manager/scenes/intro.tres" id="4_msho1"]
[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"]
[ext_resource type="Resource" uid="uid://b3ebbo88ptrrc" path="res://common/scene_manager/scenes/garage.tres" id="9_msho1"]
[ext_resource type="Resource" uid="uid://cvrs6qsq7mpa5" path="res://common/scene_manager/scenes/borea.tres" id="10_ytog4"]
[ext_resource type="Resource" uid="uid://cjoo5et437kr3" path="res://common/scene_manager/scenes/vending_machine_room.tres" id="11_chs32"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="3_y08yd"]
[ext_resource type="Texture2D" uid="uid://d3k7rl7nbp7yx" path="res://common/icons/device-floppy.svg" id="12_hksyt"]
[sub_resource type="LabelSettings" id="LabelSettings_udn24"]
font = ExtResource("3_y08yd")
font_size = 50
[sub_resource type="Animation" id="Animation_hksyt"]
length = 0.001
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("VBoxContainer/IconContainer:theme_override_constants/margin_left")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("VBoxContainer/TitleContainer:theme_override_constants/margin_left")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("ColorRect:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0.5]
}
[sub_resource type="Animation" id="Animation_1chpl"]
resource_name = "announce"
length = 1.2
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("VBoxContainer/IconContainer:theme_override_constants/margin_left")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(1, 0, 0),
"points": PackedFloat32Array(2000, 0, 0, 0, 0, 0, -0.9666667, 17.742292, 0.9666667, -17.742292, -2013.7502, 0, -13.750244, 0, 0),
"times": PackedFloat32Array(0, 0.6, 1.2)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("VBoxContainer/TitleContainer:theme_override_constants/margin_left")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(1, 0, 0),
"points": PackedFloat32Array(-2000, 0, 0, 0, 0, 0, -0.93333334, 0, 0.93333334, 0, 2000, 0, 0, 0, 0),
"times": PackedFloat32Array(0, 0.56666666, 1.2)
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 1.1333334, 1.2),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, true, false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("ColorRect:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.25833333, 0.82500005, 1.2),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [0.0, 0.5, 0.5, 0.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_e3yhc"]
_data = {
&"RESET": SubResource("Animation_hksyt"),
&"announce": SubResource("Animation_1chpl")
}
[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"), ExtResource("8_e28ni"), ExtResource("9_msho1"), ExtResource("10_ytog4"), ExtResource("11_chs32")])
[node name="SceneAnnounce" type="CanvasLayer" parent="." unique_id=2098705893]
unique_name_in_owner = true
layer = 10
visible = false
[node name="ColorRect" type="ColorRect" parent="SceneAnnounce" unique_id=1450779057]
modulate = Color(1, 1, 1, 0.5)
custom_minimum_size = Vector2(0, 250)
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_top = -125.0
offset_bottom = 125.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
color = Color(0.0627451, 0.05882353, 0.16862746, 1)
[node name="VBoxContainer" type="VBoxContainer" parent="SceneAnnounce" unique_id=954249153]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="IconContainer" type="MarginContainer" parent="SceneAnnounce/VBoxContainer" unique_id=877483857]
layout_mode = 2
mouse_filter = 2
theme_override_constants/margin_left = 0
[node name="SceneIcon" type="TextureRect" parent="SceneAnnounce/VBoxContainer/IconContainer" unique_id=659833821]
unique_name_in_owner = true
custom_minimum_size = Vector2(80, 80)
layout_mode = 2
texture = ExtResource("12_hksyt")
expand_mode = 3
stretch_mode = 5
[node name="TitleContainer" type="MarginContainer" parent="SceneAnnounce/VBoxContainer" unique_id=2021413473]
layout_mode = 2
mouse_filter = 2
theme_override_constants/margin_left = 0
[node name="SceneTitle" type="Label" parent="SceneAnnounce/VBoxContainer/TitleContainer" unique_id=1280778170]
unique_name_in_owner = true
layout_mode = 2
text = "Ship"
label_settings = SubResource("LabelSettings_udn24")
horizontal_alignment = 1
vertical_alignment = 1
[node name="SceneAnnounceAnimationPlayer" type="AnimationPlayer" parent="SceneAnnounce" unique_id=186313985]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_e3yhc")

View File

@@ -1,10 +0,0 @@
[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,10 +0,0 @@
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://cvrs6qsq7mpa5"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_7m46k"]
[resource]
script = ExtResource("1_7m46k")
scene_id = "BOREA"
scene_path = "res://stages/3d_scenes/borea_base/borea_base.tscn"
mouse_captured = true
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,10 +0,0 @@
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://bvksiaiocwob5"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_tkiq8"]
[resource]
script = ExtResource("1_tkiq8")
scene_id = "COCKPIT"
scene_path = "res://stages/3d_scenes/cockpit_scene/cockpit_scene.tscn"
mouse_captured = true
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,10 +0,0 @@
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://b3ebbo88ptrrc"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_v8prw"]
[resource]
script = ExtResource("1_v8prw")
scene_id = "GARAGE"
scene_path = "res://stages/3d_scenes/ship_garage/ship_garage.tscn"
mouse_captured = true
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,9 +0,0 @@
[gd_resource type="Resource" script_class="Scene" load_steps=2 format=3 uid="uid://bvgdq43fpl1xs"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_6ws88"]
[resource]
script = ExtResource("1_6ws88")
scene_id = "INTRO"
scene_path = "res://stages/intro/intro.tscn"
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,10 +0,0 @@
[gd_resource type="Resource" script_class="Scene" load_steps=2 format=3 uid="uid://boqgwjyxyb45r"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_10qbh"]
[resource]
script = ExtResource("1_10qbh")
scene_id = "REGION"
scene_path = "res://stages/terrain/region/region.tscn"
need_terrain_generated = true
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,9 +0,0 @@
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://c27wenetitwm"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_smjh0"]
[resource]
script = ExtResource("1_smjh0")
scene_id = "REGION_SELECTION"
scene_path = "res://stages/region_selection/region_selection.tscn"
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,10 +0,0 @@
[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"]
[resource]
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

@@ -1,10 +0,0 @@
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://cjoo5et437kr3"]
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_2xhcl"]
[resource]
script = ExtResource("1_2xhcl")
scene_id = "VENDING_MACHINE_ROOM"
scene_path = "res://stages/3d_scenes/vending_machine_room/vending_machine_room.tscn"
mouse_captured = true
metadata/_custom_type_script = "uid://1ejbvr3431ac"

View File

@@ -1,8 +1,39 @@
@abstract
extends Resource
class_name Scene
@export var scene_id : String
@export_file_path() var scene_path : String
@export var mouse_captured := false
@export var need_terrain_generated := false
@export var need_to_be_saved = true
const DEFAULT_SCENE_ICON = preload("res://common/icons/globe.svg")
var scene_id : String : get = get_scene_id
var scene_path : String : get = get_scene_path
var mouse_captured : bool : get = is_mouse_captured
var need_terrain_generated :bool : get = is_terrain_generated
var need_to_be_saved : bool : get = is_needed_to_be_saved
var need_to_announce : bool : get = is_needed_to_be_announced
var icon : Texture : get = get_scene_icon
func get_scene_id() -> String:
return ""
@abstract func get_scene_path() -> String
func is_mouse_captured() -> bool:
return false
func is_terrain_generated() -> bool:
return false
func is_needed_to_be_saved() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return false
func get_scene_title() -> String:
return tr(get_scene_id())
func get_scene_icon() -> Texture:
return DEFAULT_SCENE_ICON
func _on_generated(_generated_scene : Node):
pass

View File

@@ -1,7 +1,5 @@
extends Node
@export var scenes : Array[Scene]
signal scene_loaded(scene : Scene)
signal scene_node_ready(scene : Scene)
@@ -11,25 +9,8 @@ var generating_node = false
var next_scene_node : Node
@onready var current_scene_node : Node = get_tree().root.get_children().back()
func search_scenes(scene_id : String) -> Scene:
var scene_pos : int = scenes.find_custom(
func (s : Scene):
return s.scene_id == scene_id
)
if scene_pos == -1:
return null
else :
return scenes[scene_pos]
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
if not loading_scene:
change_to_scene(scene, with_loading)
func _ready():
%SceneAnnounce.hide()
func change_to_scene(scene : Scene, with_loading = true):
if loading_scene or generating_node:
@@ -94,6 +75,16 @@ func _process(_delta):
if next_scene_node.is_generated:
generating_node = false
scene_node_ready.emit()
announce_scene(actual_scene)
actual_scene._on_generated(next_scene_node)
elif next_scene_node.is_node_ready():
generating_node = false
scene_node_ready.emit(actual_scene)
announce_scene(actual_scene)
actual_scene._on_generated(next_scene_node)
func announce_scene(scene : Scene):
if scene.need_to_announce:
%SceneTitle.text = scene.get_scene_title()
%SceneIcon.texture = scene.get_scene_icon()
%SceneAnnounceAnimationPlayer.play("announce")

View File

@@ -0,0 +1,20 @@
extends Scene
class_name AstraScene
func get_scene_id() -> String:
return "ASTRA"
func get_scene_path() -> String:
return "res://stages/3d_scenes/astra_base/astra_base.tscn"
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func get_scene_title() -> String:
return tr("ASTRA_FACTORY")
func get_scene_icon() -> Texture:
return preload("res://common/icons/building-factory-2.svg")

View File

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

View File

@@ -0,0 +1,11 @@
extends Scene
class_name BoreaScene
func get_scene_id() -> String:
return "BOREA_BASE"
func get_scene_path() -> String:
return "res://stages/3d_scenes/borea_base/borea_base.tscn"
func is_mouse_captured() -> bool:
return true

View File

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

View File

@@ -0,0 +1,20 @@
extends Scene
class_name CockpitScene
func get_scene_id() -> String:
return "COCKPIT"
func get_scene_path() -> String:
return "res://stages/3d_scenes/cockpit_scene/cockpit_scene.tscn"
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func get_scene_title() -> String:
return tr("INTERNODE")
func get_scene_icon() -> Texture:
return preload("res://common/icons/rocket.svg")

View File

@@ -0,0 +1 @@
uid://8topyewe3juk

View File

@@ -0,0 +1,20 @@
extends Scene
class_name GarageScene
func get_scene_id() -> String:
return "GARAGE"
func get_scene_path() -> String:
return "res://stages/3d_scenes/ship_garage/ship_garage.tscn"
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func get_scene_title() -> String:
return tr("ASTRA_SHIP_GARAGE")
func get_scene_icon() -> Texture:
return preload("res://common/icons/rocket.svg")

View File

@@ -0,0 +1 @@
uid://3m1wltyvx0hp

View File

@@ -0,0 +1,8 @@
extends Scene
class_name IntroScene
func get_scene_id() -> String:
return "INTRO"
func get_scene_path() -> String:
return "res://stages/intro/intro.tscn"

View File

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

View File

@@ -0,0 +1,30 @@
extends Scene
class_name RegionScene
@export var region_data : RegionData
func _init(
_rd : RegionData = null
):
region_data = _rd
func get_scene_id() -> String:
return "REGION"
func get_scene_path() -> String:
return "res://stages/terrain/region/region.tscn"
func is_terrain_generated() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func get_scene_title() -> String:
if region_data:
return region_data.region_name
return ""
func _on_generated(generated_scene : Node):
var region : Region = generated_scene as Region
region.finish_generation()

View File

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

View File

@@ -0,0 +1,91 @@
extends Scene
class_name RelayBaseScene
@export var base_name : String
@export var base_number : String
@export var is_spawning : bool
const DEAD_ORCHID_SCENE = preload("res://entities/player_3d/dead_orchid.tscn")
func _init(
_base_name : String = "",
_base_number : String = "",
_is_spawning : bool = false,
):
base_name = _base_name
base_number = _base_number
is_spawning = _is_spawning
func get_scene_path() -> String:
return "res://stages/3d_scenes/relay_base/relay_base.tscn"
func get_scene_title() -> String:
return tr("RELAY_BASE_X") % tr(base_name)
func get_scene_icon() -> Texture:
return preload("res://common/icons/route.svg")
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func _on_generated(generated_scene : Node):
var relay_base := generated_scene as RelayBase
relay_base.base_name = base_name
relay_base.base_number = base_number
if is_spawning:
AudioManager.play_sfx("Respawn")
spawn_player(relay_base)
spawn_dead_orchid(relay_base)
relay_base.exit_scene = CockpitScene.new()
else:
relay_base.exit_scene = RegionScene.new(GameInfo.game_data.current_region_data)
handle_orchid_save(relay_base)
func spawn_player(relay_base : RelayBase):
var incubators := relay_base.get_incubators()
var possible_incubators : Array[Incubator] = []
var choosen_incubator : Incubator = null
for i in range(len(incubators)):
var incubator = incubators[i]
if i in GameInfo.game_data.incubator_used:
incubator.used = true
else:
possible_incubators.append(incubator)
if len(possible_incubators):
choosen_incubator = possible_incubators.pick_random()
GameInfo.game_data.incubator_used.append(
incubators.find(choosen_incubator)
)
else:
choosen_incubator = incubators.pick_random()
choosen_incubator.used = true
relay_base.player.global_position = choosen_incubator.global_position + Vector3.UP
relay_base.player.rotation.y = choosen_incubator.rotation.y
func spawn_dead_orchid(relay_base : RelayBase):
var dead_orchid := DEAD_ORCHID_SCENE.instantiate() as Node3D
relay_base.add_child(dead_orchid)
if GameInfo.game_data.dead_orchid_position == Vector3.ZERO:
dead_orchid.global_position = relay_base.orchid_saver.global_position + Vector3.UP * 0.5
dead_orchid.rotation.y = -90
else:
dead_orchid.position = GameInfo.game_data.dead_orchid_position
dead_orchid.rotation = GameInfo.game_data.dead_orchid_rotation
relay_base.orchid_saver.active = false
relay_base.dead_orchid = dead_orchid
func handle_orchid_save(relay_base : RelayBase):
relay_base.orchid_saved.connect(
func ():
GameInfo.game_data.finish_story_step()
var new_story_step = GameInfo.game_data.progression_data.get_story_step()
SceneManager.change_to_scene(
new_story_step.get_respawn_scene()
)
)

View File

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

View File

@@ -0,0 +1,11 @@
extends Scene
class_name TitleScene
func get_scene_id() -> String:
return "TITTLE"
func get_scene_path() -> String:
return "res://stages/title_screen/title_screen.tscn"
func is_needed_to_be_saved() -> bool:
return false

View File

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

View File

@@ -0,0 +1,31 @@
extends Scene
class_name VendingMachineScene
@export var vending_machine_room_seed = 0
func _init(
_vmrs : int = 0
):
vending_machine_room_seed = _vmrs
func get_scene_id() -> String:
return "VENDING_MACHINE"
func get_scene_path() -> String:
return "res://stages/3d_scenes/vending_machine_room/vending_machine_room.tscn"
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func get_scene_title() -> String:
return tr("VENDING_MACHINE_ROOM")
func get_scene_icon() -> Texture:
return preload("res://common/icons/building-store.svg")
func _on_generated(generated_scene : Node):
var vending_machine_room : VendingMachineRoom = generated_scene as VendingMachineRoom
vending_machine_room.setup_room(vending_machine_room_seed)

View File

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

View File

@@ -0,0 +1,31 @@
{
"@path": "res://addons/dialogic/Resources/character.gd",
"@subpath": NodePath(""),
&"_translation_id": "e4",
&"color": Color(1, 1, 1, 1),
&"custom_info": {
"prefix": "",
"sound_mood_default": "",
"sound_moods": {},
"style": "",
"suffix": ""
},
&"default_portrait": "Default",
&"description": "",
&"display_name": "Developer",
&"mirror": false,
&"nicknames": [""],
&"offset": Vector2(0, 0),
&"portraits": {
"Default": {
"export_overrides": {
"image": "\"\""
},
"mirror": false,
"offset": Vector2(0, 0),
"scale": 1,
"scene": ""
}
},
&"scale": 1.0
}

View File

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

View File

@@ -0,0 +1,21 @@
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
join demeter center [animation="Bounce In" length="1.0"]
demeter: I'm detecting the Mercury base from your ship's sensors. I hope the Internode is okay... #id:b0
- It's fine for now. #id:b1
- Are you kidding? The battery is draining faster and faster, it's unbearable. #id:b2
demeter: It's already impressive that nothing has exploded on the ship yet. #id:b3
demeter: ... #id:b4
demeter: Can we just pretend I didn't say anything? I really don't want to wipe your memory again. #id:b5
- ... #id:b6
demeter: Oh, I'm doing what I can. #id:b7
- The ship could explode? #id:b8
demeter: Not explode, but its reactor uses experimental technology from the Talion, and it could easily reach a critical instability threshold and create a deflagration that would jeopardize all of its systems. #id:b9
- Wipe my memory? #id:ba
demeter: Let's just say you're not my first attempt... I don't want to discourage you as my previous attempts did... #id:bb
demeter: Anyway, there's enough in the base to repair the Internode, and I even found some O-800 models, I mean models identical to yours. #id:bc
demeter: I'd like you to find the base and synchronize your data with it. That will allow you to come back here if you run out of energy. #id:bd
demeter: The entrance shouldn't be hard to find, use your detector. #id:be
demeter: See you Orchid ! #id:bf
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
[wait time="2.0"]
[end_timeline]

View File

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

Some files were not shown because too many files have changed in this diff Show More