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
@@ -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")
|
||||
|
||||
BIN
common/audio_manager/assets/sfx/door/door_opening.wav
Normal file
24
common/audio_manager/assets/sfx/door/door_opening.wav.import
Normal 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
|
||||
@@ -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
|
||||
BIN
common/audio_manager/assets/sfx/holo/holo_appear.wav
Normal file
24
common/audio_manager/assets/sfx/holo/holo_appear.wav.import
Normal 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
|
||||
BIN
common/audio_manager/assets/sfx/holo/holo_disappear.wav
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://dg52pvxfbowo5
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://bcc71agce2ewf
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://djyy1207gsj4d
|
||||
BIN
common/game_data/scripts/artefacts/talion_soil/talion_soil.blend
Normal 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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://blxufp4ue4b1i
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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")
|
||||
)
|
||||
|
||||
|
||||
33
common/game_data/scripts/story/astra_story_step.gd
Normal 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 ""
|
||||
1
common/game_data/scripts/story/astra_story_step.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dolti22admdm8
|
||||
31
common/game_data/scripts/story/beta_story_step.gd
Normal 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
|
||||
1
common/game_data/scripts/story/beta_story_step.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://da8kqgl0xnkpi
|
||||
35
common/game_data/scripts/story/mercury_story_step.gd
Normal 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 ""
|
||||
1
common/game_data/scripts/story/mercury_story_step.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cni314l8gb0qx
|
||||
67
common/game_data/scripts/story/story_step.gd
Normal 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
|
||||
1
common/game_data/scripts/story/story_step.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://djyuru5v3rgbb
|
||||
24
common/game_data/scripts/story/tutorial_story_step.gd
Normal 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
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://c5xggvi0aifed
|
||||
@@ -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
@@ -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 |
@@ -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
|
||||
1
common/icons/device-floppy.svg
Normal 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 |
43
common/icons/device-floppy.svg.import
Normal 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
@@ -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 |
@@ -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
|
||||
1
common/icons/hexagon-line.svg
Normal 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 |
43
common/icons/hexagon-line.svg.import
Normal 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
|
||||
32
common/icons/hexagon-lock.svg
Normal 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 |
43
common/icons/hexagon-lock.svg.import
Normal 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
@@ -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 |
43
common/icons/hexagon.svg.import
Normal 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
@@ -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 |
@@ -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
@@ -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 |
@@ -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
@@ -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 |
43
common/icons/tornado.svg.import
Normal 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
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -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")
|
||||
20
common/scene_manager/scripts/scenes/astra_scene.gd
Normal 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")
|
||||
1
common/scene_manager/scripts/scenes/astra_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://gyo84wyg8cy0
|
||||
11
common/scene_manager/scripts/scenes/borea_scene.gd
Normal 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
|
||||
1
common/scene_manager/scripts/scenes/borea_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://0lbebb57m1vb
|
||||
20
common/scene_manager/scripts/scenes/cockpit_scene.gd
Normal 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")
|
||||
1
common/scene_manager/scripts/scenes/cockpit_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://8topyewe3juk
|
||||
20
common/scene_manager/scripts/scenes/garage_scene.gd
Normal 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")
|
||||
1
common/scene_manager/scripts/scenes/garage_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://3m1wltyvx0hp
|
||||
8
common/scene_manager/scripts/scenes/intro_scene.gd
Normal 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"
|
||||
1
common/scene_manager/scripts/scenes/intro_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ca755sowjsqtp
|
||||
30
common/scene_manager/scripts/scenes/region_scene.gd
Normal 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()
|
||||
1
common/scene_manager/scripts/scenes/region_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://degjtx6n43ta4
|
||||
91
common/scene_manager/scripts/scenes/relay_base_scene.gd
Normal 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()
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
uid://cnpm8ciojdjxf
|
||||
11
common/scene_manager/scripts/scenes/title_scene.gd
Normal 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
|
||||
1
common/scene_manager/scripts/scenes/title_scene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dn1psyrjkcynd
|
||||
31
common/scene_manager/scripts/scenes/vending_machine_scene.gd
Normal 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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://b8gdowt2oavcy
|
||||
31
dialogs/characters/developer.dch
Normal 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
|
||||
}
|
||||
1
dialogs/characters/developer.dch.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b53b3ytelttnv
|
||||
21
dialogs/timelines/astra/mercury_arrival.dtl
Normal 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]
|
||||
1
dialogs/timelines/astra/mercury_arrival.dtl.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c4i2cbrabiaev
|
||||