* Structure de l'histoire principale
* Line sur le perso principal
* Agrandissement de la zone de détection des cellules
* Ajout du spray de Talion (+1 points de plante de base)
* Ajout de feedback sur l'usage des cellules d'énergie
This commit is contained in:
2026-07-06 23:05:39 +02:00
parent d0446e8826
commit 22b753c6a9
78 changed files with 1464 additions and 208 deletions

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bu87qluncx6pd"
path="res://.godot/imported/aqua.mp3-0d6e6fca8525376ee9d208a606348ba9.mp3str"
[deps]
source_file="res://common/audio_manager/assets/morceaux/histoire/aqua.mp3"
dest_files=["res://.godot/imported/aqua.mp3-0d6e6fca8525376ee9d208a606348ba9.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://urh63a8tgsd0"
path="res://.godot/imported/astra.ogg-2a61314797c2f4f96a5fbfc70bd8543d.oggvorbisstr"
[deps]
source_file="res://common/audio_manager/assets/morceaux/histoire/astra.ogg"
dest_files=["res://.godot/imported/astra.ogg-2a61314797c2f4f96a5fbfc70bd8543d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bkf62homs848n"
path="res://.godot/imported/estia.ogg-5a67cadf4221800898513f5ad486335d.oggvorbisstr"
[deps]
source_file="res://common/audio_manager/assets/morceaux/histoire/estia.ogg"
dest_files=["res://.godot/imported/estia.ogg-5a67cadf4221800898513f5ad486335d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dsqdt1ddvlyal"
path="res://.godot/imported/borea_lever.mp3-6c76a0e5e78025311230b59292d6bc98.mp3str"
[deps]
source_file="res://common/audio_manager/assets/sfx/borea_lever/borea_lever.mp3"
dest_files=["res://.godot/imported/borea_lever.mp3-6c76a0e5e78025311230b59292d6bc98.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -12,7 +12,6 @@
[ext_resource type="AudioStream" uid="uid://dsphn6dbbd55a" path="res://common/audio_manager/assets/morceaux/niveau/forest_phase_1.ogg" id="6_6o1yh"]
[ext_resource type="AudioStream" uid="uid://cwu71o0sl2vto" path="res://common/audio_manager/assets/ambiance/dialogues/ambiance_Demeter.ogg" id="6_8204s"]
[ext_resource type="AudioStream" uid="uid://klb32q3kjtkt" path="res://common/audio_manager/assets/ambiance/vending_room_base_relais/ambiance_vending_room_base_relais.ogg" id="7_ge2sc"]
[ext_resource type="AudioStream" uid="uid://c8gbtdul2x8ws" path="res://common/audio_manager/assets/ambiance/borea/ambiance_borea.ogg" id="7_spekb"]
[ext_resource type="AudioStream" uid="uid://bpf6witukorka" path="res://common/audio_manager/assets/morceaux/menu/main_menu.ogg" id="7_tuvql"]
[ext_resource type="AudioStream" uid="uid://bmwaw1yb8hucf" path="res://common/audio_manager/assets/ambiance/vaisseau/ship_music.ogg" id="8_tuvql"]
[ext_resource type="AudioStream" uid="uid://ccimypx71o4g6" path="res://common/audio_manager/assets/morceaux/niveau/forest_phase_2.ogg" id="10_tq535"]
@@ -42,8 +41,11 @@
[ext_resource type="AudioStream" uid="uid://dq5qwydrca3vy" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_5.wav" id="22_aedoe"]
[ext_resource type="AudioStream" uid="uid://d1cpi438ep0ys" path="res://common/audio_manager/assets/sfx/announce/annnounce.wav" id="22_btfwx"]
[ext_resource type="AudioStream" uid="uid://ch8wnrckanydg" path="res://common/audio_manager/assets/morceaux/histoire/meeting_demeter.ogg" id="22_mrdk3"]
[ext_resource type="AudioStream" uid="uid://bu87qluncx6pd" path="res://common/audio_manager/assets/morceaux/histoire/aqua.mp3" id="22_uaco0"]
[ext_resource type="AudioStream" uid="uid://bnwtgp8t46xwc" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_6.wav" id="23_ge2sc"]
[ext_resource type="AudioStream" uid="uid://bkf62homs848n" path="res://common/audio_manager/assets/morceaux/histoire/estia.ogg" id="24_eeq8n"]
[ext_resource type="AudioStream" uid="uid://bp3wsncvda5gl" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_7.wav" id="24_yr73o"]
[ext_resource type="AudioStream" uid="uid://urh63a8tgsd0" path="res://common/audio_manager/assets/morceaux/histoire/astra.ogg" id="25_1r4ky"]
[ext_resource type="AudioStream" uid="uid://8juy5ev3rdfh" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_1.wav" id="29_ngi21"]
[ext_resource type="AudioStream" uid="uid://su387eovtrsg" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_2.wav" id="30_xmumj"]
[ext_resource type="AudioStream" uid="uid://bp6mtpqjf4txo" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_3.wav" id="31_spekb"]
@@ -167,19 +169,14 @@ unique_name_in_owner = true
stream = ExtResource("5_ipd1r")
volume_db = -15.0
[node name="Astra" type="AudioStreamPlayer" parent="Ambiances" unique_id=1244577212]
unique_name_in_owner = true
stream = ExtResource("5_8204s")
volume_db = -5.0
[node name="Demeter" type="AudioStreamPlayer" parent="Ambiances" unique_id=351918026]
unique_name_in_owner = true
stream = ExtResource("6_8204s")
volume_db = -5.0
[node name="Borea" type="AudioStreamPlayer" parent="Ambiances" unique_id=1857904648]
[node name="Astra" type="AudioStreamPlayer" parent="Ambiances" unique_id=1244577212]
unique_name_in_owner = true
stream = ExtResource("7_spekb")
stream = ExtResource("5_8204s")
volume_db = -5.0
[node name="Ship" type="AudioStreamPlayer" parent="Ambiances" unique_id=1564186965]
@@ -187,10 +184,6 @@ unique_name_in_owner = true
stream = ExtResource("8_tuvql")
volume_db = -5.0
[node name="Subterra" type="AudioStreamPlayer" parent="Ambiances" unique_id=2019011683]
unique_name_in_owner = true
stream = ExtResource("12_mrdk3")
[node name="Musics" type="Node" parent="." unique_id=1450527710]
unique_name_in_owner = true
@@ -247,10 +240,29 @@ stream = ExtResource("7_tuvql")
volume_db = -5.0
bus = &"Music"
[node name="Meeting_demeter" type="AudioStreamPlayer" parent="Musics" unique_id=1066359159]
[node name="MeetingDemeter" type="AudioStreamPlayer" parent="Musics" unique_id=1066359159]
unique_name_in_owner = true
stream = ExtResource("22_mrdk3")
[node name="Aqua" type="AudioStreamPlayer" parent="Musics" unique_id=1941388305]
unique_name_in_owner = true
stream = ExtResource("22_uaco0")
volume_db = -5.0
[node name="Subterra" type="AudioStreamPlayer" parent="Musics" unique_id=2019011683]
unique_name_in_owner = true
stream = ExtResource("12_mrdk3")
[node name="Estia" type="AudioStreamPlayer" parent="Musics" unique_id=531815272]
unique_name_in_owner = true
stream = ExtResource("24_eeq8n")
volume_db = -5.0
[node name="AstraEnd" type="AudioStreamPlayer" parent="Musics" unique_id=818527318]
unique_name_in_owner = true
stream = ExtResource("25_1r4ky")
volume_db = -5.0
[node name="Sfx" type="Node" parent="." unique_id=2023641207]
unique_name_in_owner = true

View File

@@ -58,9 +58,6 @@ func _on_change_scene(scene : Scene):
elif scene is GarageScene:
stop_all_musics()
play_ambiance_alone("Astra", false)
elif scene is BoreaScene:
play_music_alone("Meeting_demeter")
stop_all_ambiances()
elif scene is VendingMachineScene:
stop_all_musics()
play_ambiance_alone("VendingRoom", false)
@@ -70,6 +67,21 @@ func _on_change_scene(scene : Scene):
elif scene is CaveScene:
stop_all_musics()
play_ambiance_alone("Cave", false)
elif scene is BoreaScene:
play_music_alone("MeetingDemeter", false, 0.)
stop_all_ambiances()
elif scene is AquaScene:
play_music_alone("Aqua")
stop_all_ambiances()
elif scene is SubterraScene:
play_music_alone("Subterra")
stop_all_ambiances()
elif scene is EstiaScene:
play_music_alone("Estia")
stop_all_ambiances()
elif scene is AstraEndScene:
play_music_alone("AstraEnd")
stop_all_ambiances()
# Fonction s'exécutant à chaque début de timeline
func _on_timeline_started():

View File

@@ -0,0 +1,71 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cbfoonpkmmva8"
path="res://.godot/imported/talion_spray.blend-3cc293a04161d1f6f5e9c094a05903f8.scn"
[deps]
source_file="res://common/game_data/scripts/artefacts/talion_spray/talion_spray.blend"
dest_files=["res://.godot/imported/talion_spray.blend-3cc293a04161d1f6f5e9c094a05903f8.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={
"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/vertex_colors=1
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/gpu_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2
gltf/texture_map_mode=1

View File

@@ -0,0 +1,14 @@
extends Artefact
class_name TalionSprayArtifact
func get_artefact_name() -> String:
return "TALION_SPRAY"
func get_artefact_desc() -> String:
return "TALION_SPRAY_DESC_TEXT"
func get_3d_scene() -> PackedScene:
return preload("res://common/game_data/scripts/artefacts/talion_spray/talion_spray.blend")
func modify_plant_base_score(plant_base_score : int) -> int:
return plant_base_score + 1

View File

@@ -0,0 +1 @@
uid://2eo5lucwktg4

View File

@@ -27,3 +27,15 @@ func unlock_new_mutation() -> PlantMutation:
func get_available_mutations() -> Array[PlantMutation]:
return get_all_mutations()
func set_best_run(v := best_run):
if best_run < 10 and v == 10:
SteamConnection.unlock_achievement(SteamConnection.ACH_STW_HIT_10_INFINITE)
if best_run < 20 and v == 20:
SteamConnection.unlock_achievement(SteamConnection.ACH_STW_HIT_20_INFINITE)
if best_run < 30 and v == 30:
SteamConnection.unlock_achievement(SteamConnection.ACH_STW_HIT_30_INFINITE)
best_run = v

View File

@@ -3,7 +3,7 @@ extends Resource
class_name ProgressionData
@export var run_number : int = 0
@export var best_run : int = 0
@export var best_run : int = 0 : set = set_best_run
@abstract func get_story_step() -> StoryStep
@@ -21,6 +21,9 @@ class_name ProgressionData
@abstract func unlock_new_mutation() -> PlantMutation
func set_best_run(v := best_run):
best_run = v
func get_all_mutations() -> Array[PlantMutation]:
return [
QualityMutation.new(),
@@ -52,14 +55,19 @@ func get_all_artifacts() -> Array[Artefact]:
StabilisatorArtefact.new(),
TalionOverloaderArtefact.new(),
TalionSoilArtifact.new(),
TalionSprayArtifact.new()
]
func get_all_story_steps() -> Array[StoryStep]:
return [
TutorialStoryStep.new(),
StartStoryStep.new(),
MercuryStoryStep.new(),
BoreaStoryStep.new()
# TutorialStoryStep.new(),
# StartStoryStep.new(),
# MercuryStoryStep.new(),
BoreaStoryStep.new(),
AquaStoryStep.new(),
SubterraStoryStep.new(),
EstiaStoryStep.new(),
AstraStoryStep.new(),
]
func finish_run(run : RunData):

View File

@@ -29,7 +29,7 @@ func is_region_sequence_infinite() -> bool:
return false
func get_region_sequence_length() -> int:
return 7
return 2 #TO CHANGE TO 7
func get_first_vending_machine_occurence(_level : int) -> int:
return 2

View File

@@ -10,16 +10,6 @@ func get_respawn_scene() -> Scene:
true
)
func get_objective_for_region(l : int) -> int:
match l:
0: return 0
1: return 8
_: return get_objective_for_region(l-1) + l * 5
func get_region_sequence_length() -> int:
return 8
func get_destination_text() -> String:
return tr("BOREA_BASE")

View File

@@ -0,0 +1,22 @@
extends StoryStep
class_name AquaStoryStep
const AQUA_TRAVEL_PHONE_CALL_DIALOG_PATH = "res://dialogs/timelines/2_aqua/1_aqua_travel_phone_call.dtl"
func get_respawn_scene() -> Scene:
return RelayBaseScene.new(
"BOREA_BASE",
"004",
true
)
func get_destination_text() -> String:
return tr("AQUA_BASE")
func get_destination_scene() -> Scene:
return AquaScene.new()
func get_ship_dialog_path(level : int, _ship_in_space := true) -> String:
if level == 5:
return AQUA_TRAVEL_PHONE_CALL_DIALOG_PATH
return ""

View File

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

View File

@@ -0,0 +1,22 @@
extends StoryStep
class_name SubterraStoryStep
const TRAVEL_PHONE_CALL_DIALOG_PATH = "res://dialogs/timelines/3_subterra/1_subterra_travel_phone_call.dtl"
func get_respawn_scene() -> Scene:
return RelayBaseScene.new(
"AQUA_BASE",
"005",
true
)
func get_destination_text() -> String:
return tr("SUBTERRA_BASE")
func get_destination_scene() -> Scene:
return SubterraScene.new()
func get_ship_dialog_path(level : int, _ship_in_space := true) -> String:
if level == 5:
return TRAVEL_PHONE_CALL_DIALOG_PATH
return ""

View File

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

View File

@@ -0,0 +1,22 @@
extends StoryStep
class_name EstiaStoryStep
const TRAVEL_PHONE_CALL_DIALOG_PATH = "res://dialogs/timelines/4_estia/1_estia_travel_phone_call.dtl"
func get_respawn_scene() -> Scene:
return RelayBaseScene.new(
"SUBTERRA_BASE",
"006",
true
)
func get_destination_text() -> String:
return tr("SUBTERRA_BASE")
func get_destination_scene() -> Scene:
return EstiaScene.new()
func get_ship_dialog_path(level : int, _ship_in_space := true) -> String:
if level == 5:
return TRAVEL_PHONE_CALL_DIALOG_PATH
return ""

View File

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

View File

@@ -0,0 +1,22 @@
extends StoryStep
class_name AstraStoryStep
const TRAVEL_PHONE_CALL_DIALOG_PATH = "res://dialogs/timelines/6_astra/1_astra_travel_phone_call.dtl"
func get_respawn_scene() -> Scene:
return RelayBaseScene.new(
"ESTIA_BASE",
"007",
true
)
func get_destination_text() -> String:
return tr("ESTIA_BASE")
func get_destination_scene() -> Scene:
return AstraEndScene.new()
func get_ship_dialog_path(level : int, _ship_in_space := true) -> String:
if level == 4:
return TRAVEL_PHONE_CALL_DIALOG_PATH
return ""

View File

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

View File

@@ -3,19 +3,20 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://sdrr43mek1cl"
path="res://.godot/imported/globe.svg-e211d89cbdcd4219d25d8110f0497347.ctex"
path.s3tc="res://.godot/imported/globe.svg-e211d89cbdcd4219d25d8110f0497347.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://common/icons/globe.svg"
dest_files=["res://.godot/imported/globe.svg-e211d89cbdcd4219d25d8110f0497347.ctex"]
dest_files=["res://.godot/imported/globe.svg-e211d89cbdcd4219d25d8110f0497347.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
@@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@@ -37,7 +38,7 @@ process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
detect_3d/compress_to=0
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,3 +1,4 @@
@tool
extends Scene
class_name CockpitScene

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,6 +8,13 @@ const ACH_UNLOCK_ALL_MUTATION="STW_UNLOCK_ALL_MUTATIONS"
const ACH_KICK_YOUR_OLD_BODY="STW_KICK_YOUR_OLD_BODY"
const ACH_MERCURY_BASE="STW_REACH_MERCURY_BASE"
const ACH_REACH_VENUS_BASE="STW_REACH_VENUS_BASE"
const ACH_STW_REACH_AQUA_BASE="STW_REACH_AQUA_BASE"
const ACH_STW_REACH_SUBTERRA_BASE="STW_REACH_SUBTERRA_BASE"
const ACH_STW_REACH_ESTIA_BASE="STW_REACH_ESTIA_BASE"
const ACH_STW_REPAIR_THE_PLANET="STW_REPAIR_THE_PLANET"
const ACH_STW_HIT_10_INFINITE="STW_HIT_10_INFINITE"
const ACH_STW_HIT_20_INFINITE="STW_HIT_20_INFINITE"
const ACH_STW_HIT_30_INFINITE="STW_HIT_30_INFINITE"
func unlock_achievement(achivement_name : String):
if Steam.isSteamRunning():