diff --git a/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll
new file mode 100644
index 0000000..0812259
Binary files /dev/null and b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll differ
diff --git a/common/game_data/scripts/game_data.gd b/common/game_data/scripts/game_data.gd
index e90884e..83726de 100644
--- a/common/game_data/scripts/game_data.gd
+++ b/common/game_data/scripts/game_data.gd
@@ -25,6 +25,7 @@ signal current_region_data_updated(p : RegionData)
@export var ship_in_space = false
@export var tutorial_done = false
+@export var ship_tutorial_done = false
@export var incubator_used = []
@@ -34,11 +35,8 @@ signal current_region_data_updated(p : RegionData)
func start_run() -> RunData:
player_data.clear_inventory()
+ player_data.update_with_artefacts([])
current_run = RunData.new()
- current_run.artefacts_changed.connect(
- func(artefacts : Array[Artefact]):
- player_data._on_artefacts_updated(artefacts)
- )
current_run.current_run_point_changed.connect(
func(rp : RunPoint):
start_region(rp.region_parameter)
diff --git a/common/game_data/scripts/progression_data.gd b/common/game_data/scripts/progression_data.gd
index 7221757..5a0cc58 100644
--- a/common/game_data/scripts/progression_data.gd
+++ b/common/game_data/scripts/progression_data.gd
@@ -3,7 +3,6 @@ class_name ProgressionData
@export var available_mutations: Array[PlantMutation] = [
AncientMutation.new(),
- EphemeralMutation.new(),
FertileMutation.new(),
GenerousMutation.new(),
HurriedMutation.new(),
diff --git a/common/game_data/scripts/run/run_data.gd b/common/game_data/scripts/run/run_data.gd
index 1ed92fa..e0ef7c5 100644
--- a/common/game_data/scripts/run/run_data.gd
+++ b/common/game_data/scripts/run/run_data.gd
@@ -5,6 +5,8 @@ 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])
@@ -51,10 +53,23 @@ func generate_next_run_points(level = 0) -> Array[RunPoint]:
func generate_next_run_point(level = 0) -> RunPoint:
var region_parameter = RegionParameter.new()
+
+ var is_challenge = randf() < CHALLENGE_CHANCE
+ if is_challenge:
+ region_parameter.modifiers = [
+ generate_challenge_modifiers().pick_random(),
+ generate_benefic_modifiers().pick_random()
+ ] as Array[RegionModifier]
+ else:
+ region_parameter.modifiers = [
+ generate_normal_modifiers().pick_random()
+ ] as Array[RegionModifier]
+
+ if level%VENDING_MACHINE_OCCURENCE == 0:
+ region_parameter.modifiers.append(VendingMachineModifier.new())
+
region_parameter.level = level
- region_parameter.modifiers = get_bad_region_modifiers()
- region_parameter.modifiers.append_array(get_good_region_modifiers())
-
+
return RunPoint.new(
level,
region_parameter
@@ -85,26 +100,34 @@ func choose_next_run_point(run_point : RunPoint) -> RunPoint:
last_used_modifier_name = current_run_point.region_parameter.modifiers[0].get_modifier_name()
return current_run_point
-func get_good_region_modifiers() -> Array[RegionModifier]:
- return [VendingMachineModifier.new(),VendingMachineModifier.new()]
+#endregion
-func get_bad_region_modifiers() -> Array[RegionModifier]:
- var possible_modifiers : Array[RegionModifier] = [
+#region ------------------ Modifiers ------------------
+
+func generate_normal_modifiers() -> Array[RegionModifier]:
+ return [
AridModifier.new(),
HumidModifier.new(),
PoorModifier.new(),
- HarshModifier.new()
+ HarshModifier.new(),
+ ToxicModifier.new(),
+ SandyModifier.new(),
+
]
- possible_modifiers = possible_modifiers.filter(
- func (m): return m.get_modifier_name() != last_used_modifier_name
- )
+func generate_benefic_modifiers() -> Array[RegionModifier]:
+ return [
+ VendingMachineModifier.new(),
+ ResonnanceModifier.new()
+ ]
- var choosen_modifier : RegionModifier = possible_modifiers.pick_random()
- last_used_modifier_name = choosen_modifier.get_modifier_name()
-
- return [choosen_modifier]
+func generate_challenge_modifiers() -> Array[RegionModifier]:
+ return [
+ RockyModifier.new(),
+ RadioactiveModifier.new(),
+ ContaminatedModifier.new(),
+ ]
#endregion
@@ -112,6 +135,6 @@ func get_bad_region_modifiers() -> Array[RegionModifier]:
func add_artefacts(a: Artefact):
artefacts.append(a)
- artefacts_changed.emit(artefacts)
+ GameInfo.game_data.player_data.update_with_artefacts(artefacts)
#endregion
diff --git a/common/game_data/scripts/run/run_data_plant_info.gd b/common/game_data/scripts/run/run_data_plant_info.gd
index 0a9bdc3..d8f1e16 100644
--- a/common/game_data/scripts/run/run_data_plant_info.gd
+++ b/common/game_data/scripts/run/run_data_plant_info.gd
@@ -3,13 +3,12 @@ class_name RunDataPlantInfo
signal updated
-const DEFAULT_PLANT_AREA_RADIUS = 20
-const DEFAULT_PLANT_INFLUENCE_RADIUS = 100
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
var run_data : RunData
@@ -19,25 +18,57 @@ func _init(
run_data = _run_data
var region_modifiers : Array[RegionModifier]
-var artefacts : Array[Artefact] = []
-
-func get_plant_area_radius() -> int:
- return DEFAULT_PLANT_AREA_RADIUS
-
-func get_plant_influence_radius() -> int:
- return DEFAULT_PLANT_INFLUENCE_RADIUS
func get_growing_time() -> int:
- return DEFAULT_GROWING_TIME
+ var growing_time = DEFAULT_GROWING_TIME
+
+ for rm in get_region_modifiers():
+ growing_time = rm.modify_plant_growing_time(growing_time)
+
+ return max(0, growing_time)
func get_lifetime() -> int:
- return DEFAULT_LIFETIME
+ var lifetime = DEFAULT_LIFETIME
+
+ for rm in get_region_modifiers():
+ lifetime = rm.modify_plant_lifetime(lifetime)
+
+ return max(0, lifetime)
func get_base_score() -> int:
- return DEFAULT_BASE_SCORE
+ var base_score = DEFAULT_BASE_SCORE
+
+ for rm in get_region_modifiers():
+ base_score = rm.modify_plant_base_score(base_score)
+
+ return max(0, base_score)
func get_seed_number() -> int:
- return DEFAULT_SEED_NUMBER
+ var seed_number = DEFAULT_SEED_NUMBER
+
+ for rm in get_region_modifiers():
+ seed_number = rm.modify_plant_seed_number(seed_number)
+
+ return max(0, seed_number)
func get_seed_random_loose() -> int:
- return DEFAULT_SEED_RANDOM_LOOSE
+ var seed_random_loose = DEFAULT_SEED_RANDOM_LOOSE
+
+ for rm in get_region_modifiers():
+ seed_random_loose = rm.modify_plant_seed_random_loose(seed_random_loose)
+
+ return min(max(0, seed_random_loose),get_seed_number())
+
+func get_influence_radius() -> int:
+ var influence_radius = DEFAULT_PLANT_INFLUENCE_RADIUS
+
+ for rm in get_region_modifiers():
+ influence_radius = rm.modify_plant_influence_radius(influence_radius)
+
+ return max(0, influence_radius)
+
+
+func get_region_modifiers() -> Array[RegionModifier]:
+ if run_data.current_run_point and run_data.current_run_point.region_parameter:
+ return run_data.current_run_point.region_parameter.modifiers
+ return []
\ No newline at end of file
diff --git a/common/icons/biohazard.svg b/common/icons/biohazard.svg
new file mode 100644
index 0000000..e545146
--- /dev/null
+++ b/common/icons/biohazard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/biohazard.svg.import b/common/icons/biohazard.svg.import
new file mode 100644
index 0000000..8301d74
--- /dev/null
+++ b/common/icons/biohazard.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://caljk5xauct42"
+path="res://.godot/imported/biohazard.svg-6ba6923078e547162e6b4b8cb587956e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/biohazard.svg"
+dest_files=["res://.godot/imported/biohazard.svg-6ba6923078e547162e6b4b8cb587956e.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
diff --git a/common/icons/grain.svg b/common/icons/grain.svg
new file mode 100644
index 0000000..ba087c4
--- /dev/null
+++ b/common/icons/grain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/grain.svg.import b/common/icons/grain.svg.import
new file mode 100644
index 0000000..5a9f52d
--- /dev/null
+++ b/common/icons/grain.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dm87fciksxunm"
+path="res://.godot/imported/grain.svg-e272947e9d3765123e0cc00495d206dd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/grain.svg"
+dest_files=["res://.godot/imported/grain.svg-e272947e9d3765123e0cc00495d206dd.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
diff --git a/common/icons/mountain.svg b/common/icons/mountain.svg
new file mode 100644
index 0000000..aba3a6e
--- /dev/null
+++ b/common/icons/mountain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/mountain.svg.import b/common/icons/mountain.svg.import
new file mode 100644
index 0000000..3f58c47
--- /dev/null
+++ b/common/icons/mountain.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4o0itd0ofkcj"
+path="res://.godot/imported/mountain.svg-73c6f0a7455c030d9081009331506dc0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/mountain.svg"
+dest_files=["res://.godot/imported/mountain.svg-73c6f0a7455c030d9081009331506dc0.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
diff --git a/common/icons/radioactive.svg b/common/icons/radioactive.svg
new file mode 100644
index 0000000..9214c16
--- /dev/null
+++ b/common/icons/radioactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/radioactive.svg.import b/common/icons/radioactive.svg.import
new file mode 100644
index 0000000..3419a52
--- /dev/null
+++ b/common/icons/radioactive.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://baughrx6x5sx2"
+path="res://.godot/imported/radioactive.svg-826ebf1689bc47cf482da642b68adf02.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/radioactive.svg"
+dest_files=["res://.godot/imported/radioactive.svg-826ebf1689bc47cf482da642b68adf02.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
diff --git a/common/icons/virus.svg b/common/icons/virus.svg
new file mode 100644
index 0000000..8b0b8e8
--- /dev/null
+++ b/common/icons/virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/virus.svg.import b/common/icons/virus.svg.import
new file mode 100644
index 0000000..6ca0553
--- /dev/null
+++ b/common/icons/virus.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cual1pde6keom"
+path="res://.godot/imported/virus.svg-59f03f7d0b705bff456c355a03b2fd98.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/virus.svg"
+dest_files=["res://.godot/imported/virus.svg-59f03f7d0b705bff456c355a03b2fd98.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
diff --git a/common/icons/wave-sine.svg b/common/icons/wave-sine.svg
new file mode 100644
index 0000000..97bad01
--- /dev/null
+++ b/common/icons/wave-sine.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/wave-sine.svg.import b/common/icons/wave-sine.svg.import
new file mode 100644
index 0000000..6cf9c64
--- /dev/null
+++ b/common/icons/wave-sine.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c15ith3niu7sa"
+path="res://.godot/imported/wave-sine.svg-af18e7f57640d33da7bef035e7276303.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/wave-sine.svg"
+dest_files=["res://.godot/imported/wave-sine.svg-af18e7f57640d33da7bef035e7276303.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
diff --git a/entities/interactables/door/door.tscn b/entities/interactables/door/door.tscn
index 241bfd1..d6abcc3 100644
--- a/entities/interactables/door/door.tscn
+++ b/entities/interactables/door/door.tscn
@@ -113,12 +113,14 @@ fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(1, 0.5)
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_6w4e0"]
-radius = 38.0
-height = 80.0
+radius = 29.70824
+height = 62.292908
[node name="Door" type="Area2D" unique_id=2053096538]
+process_mode = 4
script = ExtResource("1_8kdwv")
icon = ExtResource("2_6w4e0")
+default_interact_text = "ENTER"
available = false
metadata/_custom_type_script = "uid://dyprcd68fjstf"
diff --git a/entities/plants/scripts/plant.gd b/entities/plants/scripts/plant.gd
index ff19c2b..45459d1 100644
--- a/entities/plants/scripts/plant.gd
+++ b/entities/plants/scripts/plant.gd
@@ -2,7 +2,6 @@ extends InspectableEntity
class_name Plant
const PLANT_AREA_RADIUS = 20
-const PLANT_INFLUENCE_RADIUS = 100
const HARVESTED_SEED_DISPLACEMENT_FACTOR = 100
const RANDOM_MAX_GROW_INTERVAL = Region.MIN_PASS_DAY_ANIMATION_TIME/2. - 0.1
@@ -76,7 +75,7 @@ func generate_collision_shape() -> CollisionShape2D:
return collision
func generate_influence_zone() -> PlantInfluenceZone:
- var zone = PlantInfluenceZone.new(PLANT_INFLUENCE_RADIUS)
+ var zone = PlantInfluenceZone.new(data.get_influence_radius())
add_child(zone)
diff --git a/entities/plants/scripts/plant_data.gd b/entities/plants/scripts/plant_data.gd
index 8f4d7ae..a0f07a0 100644
--- a/entities/plants/scripts/plant_data.gd
+++ b/entities/plants/scripts/plant_data.gd
@@ -113,6 +113,9 @@ func get_seed_random_loose():
return seed_random_loose
+func get_influence_radius():
+ return get_plant_info().get_influence_radius()
+
func get_random_seed_income():
return max(
get_seed_number() - randi_range(0, get_seed_random_loose()),
@@ -142,6 +145,7 @@ func get_score_buff() -> int:
buff = m.mutate_score_buff(self, buff)
return buff
+
func disappear():
disappeared.emit(self )
diff --git a/entities/plants/scripts/plant_influence_zone.gd b/entities/plants/scripts/plant_influence_zone.gd
index c6f870f..a9959c5 100644
--- a/entities/plants/scripts/plant_influence_zone.gd
+++ b/entities/plants/scripts/plant_influence_zone.gd
@@ -16,7 +16,7 @@ func _init(_radius = 100):
func _ready():
sprite = Circle.new()
# sprite.z_index = 100
- sprite.radius = 100
+ sprite.radius = radius
sprite.fill = false
sprite.width = 1
sprite.opacity = 0.5
diff --git a/entities/plants/scripts/plant_mutation.gd b/entities/plants/scripts/plant_mutation.gd
index 1848f7d..7f51577 100644
--- a/entities/plants/scripts/plant_mutation.gd
+++ b/entities/plants/scripts/plant_mutation.gd
@@ -110,4 +110,4 @@ static func get_rarity_color(rarity: int) -> Color:
Color("FFA617"),
]
- return rarity_colors[min(rarity, len(rarity_colors) - 1)]
\ No newline at end of file
+ return rarity_colors[min(rarity, len(rarity_colors) - 1)%len(rarity_colors)]
\ No newline at end of file
diff --git a/entities/plants/scripts/plant_mutation/ephemeral_mutation.gd b/entities/plants/scripts/plant_mutation/ephemeral_mutation.gd
deleted file mode 100644
index 6236d91..0000000
--- a/entities/plants/scripts/plant_mutation/ephemeral_mutation.gd
+++ /dev/null
@@ -1,33 +0,0 @@
-extends PlantMutation
-class_name EphemeralMutation
-
-func get_icon() -> Texture:
- return preload("res://common/icons/butterfly.svg")
-
-func get_mutation_id() -> String:
- return "EPHEMERAL"
-
-func get_mutation_name() -> String:
- return tr("EPHEMERAL")
-
-func get_mutation_description() -> String:
- return tr("EPHEMERAL_EFFECT_TEXT").format({
- "seed_number": level,
- "seed_icon": Text.bbcode_icon(Plant.SEED_ICON),
- "lifetime_change": get_lifetime_change(),
- "lifetime_icon": Text.bbcode_icon(Plant.LIFETIME_ICON),
- })
-
-func mutate_lifetime(_plant_data: PlantData, lifetime: int) -> int:
- return lifetime + get_lifetime_change()
-
-func mutate_seed_number(plant_data: PlantData, seed_number: int):
- if plant_data.get_state() == PlantData.State.MATURE:
- return seed_number + level + 1
- return seed_number
-
-func get_seed_increase() -> int:
- return floori((level + 1.0) / 2)
-
-func get_lifetime_change() -> int:
- return -1
diff --git a/entities/plants/scripts/plant_mutation/ephemeral_mutation.gd.uid b/entities/plants/scripts/plant_mutation/ephemeral_mutation.gd.uid
deleted file mode 100644
index b44f704..0000000
--- a/entities/plants/scripts/plant_mutation/ephemeral_mutation.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://bmo42h1p554nv
diff --git a/entities/player/inventory/scripts/inventory.gd b/entities/player/inventory/scripts/inventory.gd
index 39051e1..8c1f058 100644
--- a/entities/player/inventory/scripts/inventory.gd
+++ b/entities/player/inventory/scripts/inventory.gd
@@ -39,6 +39,7 @@ func add_item(item: Item) -> bool:
func add_tool(tool: Item) -> bool:
if not has_item_with_name(tool.get_item_name()):
tools.append(tool)
+ current_item_ind += 1
updated.emit(self)
tool_added.emit(tool)
return true
diff --git a/entities/player/inventory/scripts/items/seed.gd b/entities/player/inventory/scripts/items/seed.gd
index 598a34c..3644bd7 100644
--- a/entities/player/inventory/scripts/items/seed.gd
+++ b/entities/player/inventory/scripts/items/seed.gd
@@ -7,8 +7,6 @@ const SHOVEL_ICON = preload("res://common/icons/shovel.svg")
const GROWING_ICON = preload("res://common/icons/chevrons-up.svg")
const SCORE_ICON = preload("res://common/icons/growth.svg")
-const RARITY_POOL : Array[int] = [0,0,0,0,0,0,0,1,1,1]
-
@export var plant_name : String
@export var plant_mutations: Array[PlantMutation]
@export var random_seed : int
@@ -29,15 +27,15 @@ static func generate_from_parent(plant_data : PlantData) -> Seed:
mutate_mutations(plant_data)
)
else :
- return Seed.new(
+ return Seed.new(
plant_data.plant_name,
plant_data.mutations.duplicate_deep()
)
-static func generate_random() -> Seed:
+static func generate_random(rarity := 0) -> Seed:
var new_seed = Seed.new(
Random.generate_random_word(),
- [generate_first_mutation()]
+ [generate_first_mutation(rarity)]
)
return new_seed
@@ -134,8 +132,7 @@ func get_particles() -> Array[EffectParticles.Parameters]:
return param
-static func generate_first_mutation() -> PlantMutation:
- var rarity : int = RARITY_POOL.pick_random()
+static func generate_first_mutation(rarity := 0) -> PlantMutation:
var possible_mutation : PlantMutation = GameInfo.game_data.progression_data.available_mutations.filter(
func (m : PlantMutation): return m.get_base_rarity() <= rarity
diff --git a/entities/player/scripts/player_data.gd b/entities/player/scripts/player_data.gd
index 64a0fbc..c0e3420 100644
--- a/entities/player/scripts/player_data.gd
+++ b/entities/player/scripts/player_data.gd
@@ -20,7 +20,7 @@ func get_artefacts() -> Array[Artefact]:
return GameInfo.game_data.current_run.artefacts
return []
-func _on_artefacts_updated(artefacts : Array[Artefact]):
+func update_with_artefacts(artefacts : Array[Artefact]):
inventory.seeds_size = calculate_inventory_size(artefacts)
max_energy = calculate_max_energy(artefacts)
updated.emit()
diff --git a/gui/game/announce/announce.tscn b/gui/game/announce/announce.tscn
index 773dde4..e31e97c 100644
--- a/gui/game/announce/announce.tscn
+++ b/gui/game/announce/announce.tscn
@@ -145,6 +145,7 @@ _data = {
}
[node name="Announce" type="CanvasLayer" unique_id=1659074958]
+process_mode = 3
script = ExtResource("1_4evne")
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1463847780]
@@ -230,7 +231,7 @@ size = Vector2i(300, 300)
[node name="AnnouceObject" type="Node3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=986671004]
unique_name_in_owner = true
-transform = Transform3D(0.8788874, 0.4667406, 0.09817754, -0.45027143, 0.74415994, 0.4933552, 0.15722138, -0.47777224, 0.8642758, 0, 0, 0)
+transform = Transform3D(-0.51481193, -0.6680038, 0.5372555, -0.8508927, 0.32199714, -0.4149924, 0.104188256, -0.67080045, -0.73426664, 0, 0, 0)
[node name="Camera3D" type="Camera3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=1788331074]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1)
diff --git a/gui/game/announce/scripts/announce.gd b/gui/game/announce/scripts/announce.gd
index c8655d5..01664fe 100644
--- a/gui/game/announce/scripts/announce.gd
+++ b/gui/game/announce/scripts/announce.gd
@@ -77,10 +77,14 @@ func set_announce_object(object := announce_object):
if not visible:
%AnimationPlayer.play("appear")
+ Pointer.action_disabled = true
AudioManager.play_sfx("Ship_reveal")
elif object == null and visible:
%AnimationPlayer.play_backwards("appear")
-
+ get_tree().create_timer(0.2).timeout.connect( # Put a delay to not interfere with the ok button click
+ func():
+ Pointer.action_disabled = false
+ )
announce_object = object
func _on_ok_button_down():
diff --git a/gui/game/card/scripts/card.gd b/gui/game/card/scripts/card.gd
index 1fcb173..226b02f 100644
--- a/gui/game/card/scripts/card.gd
+++ b/gui/game/card/scripts/card.gd
@@ -15,7 +15,6 @@ const CARD_SECTION_SCENE : PackedScene = preload("res://gui/game/card/card_secti
# update()
func update():
- pass
%Title.text = info.title
%Subtitle.visible = info.subtitle != ""
%Subtitle.text = info.subtitle
diff --git a/gui/game/help/help.tscn b/gui/game/help/help.tscn
index a5fdba7..88a349d 100644
--- a/gui/game/help/help.tscn
+++ b/gui/game/help/help.tscn
@@ -7,13 +7,7 @@
[ext_resource type="Theme" uid="uid://5au2k3vf2po3" path="res://gui/ressources/menu.tres" id="5_mao3x"]
[ext_resource type="Texture2D" uid="uid://bhogi5kkltx51" path="res://gui/pause/assets/textures/rock_tutorial_image.png" id="6_bt3y5"]
[ext_resource type="Texture2D" uid="uid://3fwhxkd0ycga" path="res://gui/pause/assets/textures/talion_tutorial_image.png" id="7_jx4fu"]
-[ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="8_ajtcc"]
-[ext_resource type="Texture2D" uid="uid://d3ksdxepcjoot" path="res://common/icons/calendar-week.svg" id="9_i5c4s"]
-[ext_resource type="Texture2D" uid="uid://cgmxjom200bej" path="res://common/icons/chevrons-up.svg" id="10_0a2af"]
-[ext_resource type="Texture2D" uid="uid://dhy4ewvqvlxyi" path="res://common/icons/clock.svg" id="11_tiice"]
-[ext_resource type="Texture2D" uid="uid://c2qg7ikkylfv4" path="res://common/icons/seeds.svg" id="12_vb6ry"]
-[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="13_r8wgh"]
-[ext_resource type="Texture2D" uid="uid://cymrmhsihkj44" path="res://common/icons/recharge.svg" id="14_ccxsv"]
+[ext_resource type="PackedScene" uid="uid://bnx5hr2fd0p24" path="res://gui/game/help/icon_help_content.tscn" id="8_38kut"]
[sub_resource type="LabelSettings" id="LabelSettings_rcm5b"]
font = ExtResource("2_l61dv")
@@ -149,132 +143,5 @@ theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 8
theme_override_constants/margin_bottom = 8
-[node name="IconsGrid" type="VBoxContainer" parent="IconHelp/MarginContainer" unique_id=1344975233]
+[node name="IconsGrid" parent="IconHelp/MarginContainer" unique_id=9435995 instance=ExtResource("8_38kut")]
layout_mode = 2
-alignment = 1
-
-[node name="HBoxContainer" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=1388308447]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer" unique_id=848501211]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("8_ajtcc")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer" unique_id=913881976]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "PLANT_POINTS"
-vertical_alignment = 1
-
-[node name="HBoxContainer2" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=1039110967]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer2" unique_id=1533385173]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("9_i5c4s")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer2" unique_id=1539873337]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "DAYS"
-vertical_alignment = 1
-
-[node name="HBoxContainer3" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=1009856551]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer3" unique_id=483862285]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("10_0a2af")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer3" unique_id=1118498780]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "GROWING_TIME"
-vertical_alignment = 1
-
-[node name="HBoxContainer4" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=1195759820]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer4" unique_id=617759410]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("11_tiice")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer4" unique_id=44288020]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "LIFETIME"
-vertical_alignment = 1
-
-[node name="HBoxContainer5" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=1749624633]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer5" unique_id=1970160966]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("12_vb6ry")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer5" unique_id=1667196444]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "SEEDS"
-vertical_alignment = 1
-
-[node name="HBoxContainer6" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=65069381]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer6" unique_id=302101280]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("13_r8wgh")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer6" unique_id=1371041548]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "ORCHID_ENERGY"
-vertical_alignment = 1
-
-[node name="HBoxContainer7" type="HBoxContainer" parent="IconHelp/MarginContainer/IconsGrid" unique_id=1616445361]
-layout_mode = 2
-theme_override_constants/separation = 4
-
-[node name="TextureRect" type="TextureRect" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer7" unique_id=1012780398]
-custom_minimum_size = Vector2(25, 25)
-layout_mode = 2
-size_flags_horizontal = 4
-texture = ExtResource("14_ccxsv")
-expand_mode = 1
-stretch_mode = 5
-
-[node name="RichTextLabel" type="Label" parent="IconHelp/MarginContainer/IconsGrid/HBoxContainer7" unique_id=537891031]
-layout_mode = 2
-theme = ExtResource("5_mao3x")
-text = "RECHARGE_NUMBER"
-vertical_alignment = 1
diff --git a/gui/game/help/icon_help_content.tscn b/gui/game/help/icon_help_content.tscn
new file mode 100644
index 0000000..9158866
--- /dev/null
+++ b/gui/game/help/icon_help_content.tscn
@@ -0,0 +1,139 @@
+[gd_scene format=3 uid="uid://bnx5hr2fd0p24"]
+
+[ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="1_yxwcd"]
+[ext_resource type="Theme" uid="uid://5au2k3vf2po3" path="res://gui/ressources/menu.tres" id="2_wxnr5"]
+[ext_resource type="Texture2D" uid="uid://d3ksdxepcjoot" path="res://common/icons/calendar-week.svg" id="3_t30ml"]
+[ext_resource type="Texture2D" uid="uid://cgmxjom200bej" path="res://common/icons/chevrons-up.svg" id="4_d4ybk"]
+[ext_resource type="Texture2D" uid="uid://dhy4ewvqvlxyi" path="res://common/icons/clock.svg" id="5_3lk2g"]
+[ext_resource type="Texture2D" uid="uid://c2qg7ikkylfv4" path="res://common/icons/seeds.svg" id="6_tr36d"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="7_ubf5w"]
+[ext_resource type="Texture2D" uid="uid://cymrmhsihkj44" path="res://common/icons/recharge.svg" id="8_uvt1i"]
+
+[node name="IconsGrid" type="VBoxContainer" unique_id=9435995]
+alignment = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="." unique_id=1691095228]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer" unique_id=1901557678]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("1_yxwcd")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer" unique_id=859146346]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "PLANT_POINTS"
+vertical_alignment = 1
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="." unique_id=84698232]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer2" unique_id=1688869934]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("3_t30ml")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer2" unique_id=722562759]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "DAYS"
+vertical_alignment = 1
+
+[node name="HBoxContainer3" type="HBoxContainer" parent="." unique_id=1091557748]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer3" unique_id=206861703]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("4_d4ybk")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer3" unique_id=609696718]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "GROWING_TIME"
+vertical_alignment = 1
+
+[node name="HBoxContainer4" type="HBoxContainer" parent="." unique_id=1416063894]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer4" unique_id=1393253275]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("5_3lk2g")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer4" unique_id=365374836]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "LIFETIME"
+vertical_alignment = 1
+
+[node name="HBoxContainer5" type="HBoxContainer" parent="." unique_id=1410748673]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer5" unique_id=946072561]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("6_tr36d")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer5" unique_id=549789016]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "SEEDS"
+vertical_alignment = 1
+
+[node name="HBoxContainer6" type="HBoxContainer" parent="." unique_id=1258373211]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer6" unique_id=1789194571]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("7_ubf5w")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer6" unique_id=1037558845]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "ORCHID_ENERGY"
+vertical_alignment = 1
+
+[node name="HBoxContainer7" type="HBoxContainer" parent="." unique_id=1238098255]
+layout_mode = 2
+theme_override_constants/separation = 4
+
+[node name="TextureRect" type="TextureRect" parent="HBoxContainer7" unique_id=316858205]
+custom_minimum_size = Vector2(25, 25)
+layout_mode = 2
+size_flags_horizontal = 4
+texture = ExtResource("8_uvt1i")
+expand_mode = 1
+stretch_mode = 5
+
+[node name="RichTextLabel" type="Label" parent="HBoxContainer7" unique_id=248028380]
+layout_mode = 2
+theme = ExtResource("2_wxnr5")
+text = "RECHARGE_NUMBER"
+vertical_alignment = 1
diff --git a/gui/game/pass_day/pass_day.tscn b/gui/game/pass_day/pass_day.tscn
index 5a251fe..e696c51 100644
--- a/gui/game/pass_day/pass_day.tscn
+++ b/gui/game/pass_day/pass_day.tscn
@@ -42,10 +42,10 @@ tracks/0/path = NodePath("SubViewport/NightAnimationSprite:rotation")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
-"times": PackedFloat32Array(0, 0.26666668, 0.7, 1),
-"transitions": PackedFloat32Array(1, 1, 1, 1),
+"times": PackedFloat32Array(0, 1),
+"transitions": PackedFloat32Array(1, 1),
"update": 0,
-"values": [0.0, 3.141592653589793, 3.141592653589793, 6.265732014659643]
+"values": [0.0, 6.265732014659643]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_wafeq"]
@@ -56,6 +56,7 @@ _data = {
[node name="PassDay" type="CanvasLayer" unique_id=335255544]
layer = 3
+visible = false
script = ExtResource("1_0pm4g")
[node name="Blur" type="ColorRect" parent="." unique_id=546890405]
@@ -72,6 +73,7 @@ script = ExtResource("2_bhfpo")
[node name="PassDayInfo" type="VBoxContainer" parent="." unique_id=833110506]
unique_name_in_owner = true
+visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
diff --git a/gui/game/tutorial/scripts/tutorial.gd b/gui/game/tutorial/scripts/tutorial.gd
index c040c0d..dc12359 100644
--- a/gui/game/tutorial/scripts/tutorial.gd
+++ b/gui/game/tutorial/scripts/tutorial.gd
@@ -70,6 +70,7 @@ var indicators : Array[InGameIndicator]
(func ():
for e in region.entity_container.get_children():
if e is Plant:
+ display_plant_info_tutorial(e.card_info())
return true
return false)
),
@@ -95,6 +96,7 @@ func _ready():
show()
else:
hide()
+ %PlantInfoTutorial.hide()
func setup_gui():
for s in %Steps.get_children():
@@ -132,6 +134,16 @@ func finish_tutorial():
region.data.update()
succeded.emit()
+func display_plant_info_tutorial(with_card_info : CardInfo):
+ %PlantCard.info = with_card_info
+ AudioManager.play_sfx("Ship_reveal")
+ %PlantCard.update()
+ %PlantInfoTutorialAnimationPlayer.play("appear")
+
+func _on_ok_button_button_down():
+ %PlantInfoTutorialAnimationPlayer.play_backwards("appear")
+
+
class Step:
var text : String : get = get_text
diff --git a/gui/game/tutorial/tutorial.tscn b/gui/game/tutorial/tutorial.tscn
index a38640f..5d7402c 100644
--- a/gui/game/tutorial/tutorial.tscn
+++ b/gui/game/tutorial/tutorial.tscn
@@ -4,6 +4,20 @@
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="2_1wikm"]
[ext_resource type="Texture2D" uid="uid://1ynlp05wj0hm" path="res://common/icons/rocket.svg" id="3_8kuag"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="4_1wikm"]
+[ext_resource type="Shader" uid="uid://cuni3ggtw2uuy" path="res://common/vfx/materials/shaders/blur.gdshader" id="5_5i4hd"]
+[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="6_hgus1"]
+[ext_resource type="PackedScene" uid="uid://753270jjxmfg" path="res://gui/game/card/card.tscn" id="6_vg3tr"]
+[ext_resource type="Texture2D" uid="uid://bgi4rc50par30" path="res://common/icons/arrow-narrow-right.svg" id="7_6k6bq"]
+[ext_resource type="Texture2D" uid="uid://bd6qddv5ihkjr" path="res://common/icons/bucket.svg" id="7_ug5yk"]
+[ext_resource type="Script" uid="uid://dj2pv1hiwjfv0" path="res://gui/game/card/scripts/card_info.gd" id="8_hgus1"]
+[ext_resource type="Script" uid="uid://dgbh38j13g5kn" path="res://gui/game/card/scripts/card_section_info.gd" id="9_6k6bq"]
+[ext_resource type="Texture2D" uid="uid://b752eqq4cm7ve" path="res://common/icons/building-factory-2.svg" id="10_58nqq"]
+[ext_resource type="Script" uid="uid://b4tkium34c831" path="res://gui/game/card/scripts/card_stat_info.gd" id="11_ebkn5"]
+[ext_resource type="Texture2D" uid="uid://dg00xnpp6ixls" path="res://common/icons/server-2.svg" id="12_2pmxd"]
+[ext_resource type="Texture2D" uid="uid://baaujfw8piywi" path="res://common/icons/dna.svg" id="13_1lrfc"]
+[ext_resource type="Texture2D" uid="uid://bsvxhafoxwmw0" path="res://common/icons/cube-3d-sphere.svg" id="14_e6tpi"]
+[ext_resource type="Texture2D" uid="uid://7oh782g7ngop" path="res://common/icons/arrow-narrow-left.svg" id="17_58nqq"]
+[ext_resource type="Theme" uid="uid://5au2k3vf2po3" path="res://gui/ressources/menu.tres" id="18_6k6bq"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x7cwm"]
bg_color = Color(0.18, 0.18, 0.18, 0.48235294)
@@ -16,6 +30,122 @@ corner_radius_bottom_left = 20
font = ExtResource("4_1wikm")
font_size = 20
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_pu6eb"]
+shader = ExtResource("5_5i4hd")
+shader_parameter/strength = 8.00000037674012
+shader_parameter/mix_percentage = 0.3
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ebkn5"]
+
+[sub_resource type="Resource" id="Resource_ditr3"]
+script = ExtResource("9_6k6bq")
+title_text = "Mutations"
+title_icon = ExtResource("10_58nqq")
+text = "This is a mutation"
+metadata/_custom_type_script = "uid://dgbh38j13g5kn"
+
+[sub_resource type="Resource" id="Resource_ikhlb"]
+script = ExtResource("11_ebkn5")
+text = "8"
+icon = ExtResource("12_2pmxd")
+metadata/_custom_type_script = "uid://b4tkium34c831"
+
+[sub_resource type="Resource" id="Resource_puixe"]
+script = ExtResource("8_hgus1")
+title = "Hello"
+subtitle = "Mature"
+texture = ExtResource("13_1lrfc")
+important_stat_text = "8"
+important_stat_icon = ExtResource("7_ug5yk")
+stats = Array[ExtResource("11_ebkn5")]([SubResource("Resource_ikhlb")])
+sections = Array[ExtResource("9_6k6bq")]([SubResource("Resource_ditr3")])
+metadata/_custom_type_script = "uid://dj2pv1hiwjfv0"
+
+[sub_resource type="Animation" id="Animation_6k6bq"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [true]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("MarginContainer:theme_override_constants/separation")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [12]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath(".:modulate:a")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [1.0]
+}
+
+[sub_resource type="Animation" id="Animation_58nqq"]
+resource_name = "appear"
+length = 0.5
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 0.1),
+"transitions": PackedFloat32Array(1, 1),
+"update": 1,
+"values": [false, true]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("MarginContainer:theme_override_constants/separation")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0.06666666, 0.5),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [183, 12]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath(".:modulate:a")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0, 0.5),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [0.0, 1.0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_ebkn5"]
+_data = {
+&"RESET": SubResource("Animation_6k6bq"),
+&"appear": SubResource("Animation_58nqq")
+}
+
[node name="Tutorial" type="Control" unique_id=1210916048]
layout_mode = 3
anchors_preset = 15
@@ -68,3 +198,168 @@ label_settings = SubResource("LabelSettings_8kuag")
[node name="Steps" type="VBoxContainer" parent="MarginContainer/TutorialStepsPanelContainer/MarginContainer/VBoxContainer" unique_id=125170550]
unique_name_in_owner = true
layout_mode = 2
+
+[node name="PlantInfoTutorial" type="Control" parent="." unique_id=1586592931]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="BlurRect" type="ColorRect" parent="PlantInfoTutorial" unique_id=35513528]
+material = SubResource("ShaderMaterial_pu6eb")
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.037180007, 0.020800002, 0.13, 1)
+
+[node name="MarginContainer" type="VBoxContainer" parent="PlantInfoTutorial" unique_id=1757534024]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 12
+alignment = 1
+
+[node name="Title" type="Label" parent="PlantInfoTutorial/MarginContainer" unique_id=1842689362]
+layout_mode = 2
+text = "PLANTS_INFO"
+label_settings = ExtResource("6_hgus1")
+horizontal_alignment = 1
+
+[node name="Subtitle" type="Label" parent="PlantInfoTutorial/MarginContainer" unique_id=656340742]
+layout_mode = 2
+text = "OBTAIN_INFORMATION_ON_PLANTS_WHILE_HOVERING_PLANTS_BASE"
+horizontal_alignment = 1
+
+[node name="GridContainer" type="GridContainer" parent="PlantInfoTutorial/MarginContainer" unique_id=1124442982]
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 4
+columns = 3
+
+[node name="VBoxContainer" type="VBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer" unique_id=1598939949]
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="HBoxContainer" type="HBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer" unique_id=1972134386]
+layout_mode = 2
+alignment = 1
+
+[node name="Label" type="RichTextLabel" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer/HBoxContainer" unique_id=263525139]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+bbcode_enabled = true
+text = "PLANT_NAME_TEXT"
+fit_content = true
+scroll_active = false
+vertical_alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer/HBoxContainer" unique_id=1507687253]
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 8
+texture = ExtResource("7_6k6bq")
+stretch_mode = 5
+
+[node name="HBoxContainer3" type="HBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer" unique_id=483641916]
+layout_mode = 2
+alignment = 1
+
+[node name="Label2" type="RichTextLabel" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer/HBoxContainer3" unique_id=553756431]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+bbcode_enabled = true
+text = "PLANT_STATS_TEXT"
+fit_content = true
+scroll_active = false
+vertical_alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer/HBoxContainer3" unique_id=953954556]
+layout_mode = 2
+size_flags_vertical = 0
+texture = ExtResource("7_6k6bq")
+stretch_mode = 5
+
+[node name="VBoxContainer3" type="VBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer" unique_id=1226314631]
+layout_mode = 2
+
+[node name="HSeparator" type="HSeparator" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer3" unique_id=591048390]
+layout_mode = 2
+theme_override_constants/separation = 30
+theme_override_styles/separator = SubResource("StyleBoxEmpty_ebkn5")
+
+[node name="PlantCard" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer3" unique_id=1085885349 instance=ExtResource("6_vg3tr")]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(350, 0)
+layout_mode = 2
+info = SubResource("Resource_puixe")
+
+[node name="VBoxContainer2" type="VBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer" unique_id=906180848]
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="HSeparator" type="HSeparator" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2" unique_id=760754866]
+layout_mode = 2
+theme_override_constants/separation = 32
+theme_override_styles/separator = SubResource("StyleBoxEmpty_ebkn5")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2" unique_id=383033253]
+layout_mode = 2
+alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2/HBoxContainer" unique_id=475071884]
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 4
+texture = ExtResource("17_58nqq")
+stretch_mode = 5
+
+[node name="Label2" type="RichTextLabel" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2/HBoxContainer" unique_id=1479217505]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+bbcode_enabled = true
+text = "PLANT_SCORE_TEXT"
+fit_content = true
+scroll_active = false
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2" unique_id=2062134463]
+layout_mode = 2
+alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2/HBoxContainer2" unique_id=392813755]
+layout_mode = 2
+size_flags_vertical = 4
+texture = ExtResource("17_58nqq")
+stretch_mode = 5
+
+[node name="Label2" type="RichTextLabel" parent="PlantInfoTutorial/MarginContainer/GridContainer/VBoxContainer2/HBoxContainer2" unique_id=472790254]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+bbcode_enabled = true
+text = "PLANT_MUTATION_TEXT"
+fit_content = true
+scroll_active = false
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="OkButton" type="Button" parent="PlantInfoTutorial/MarginContainer" unique_id=1684351093]
+layout_mode = 2
+size_flags_horizontal = 4
+theme = ExtResource("18_6k6bq")
+text = "OK"
+
+[node name="PlantInfoTutorialAnimationPlayer" type="AnimationPlayer" parent="PlantInfoTutorial" unique_id=549667783]
+unique_name_in_owner = true
+libraries/ = SubResource("AnimationLibrary_ebkn5")
+
+[connection signal="button_down" from="PlantInfoTutorial/MarginContainer/OkButton" to="." method="_on_ok_button_button_down"]
diff --git a/gui/loose_screen/assets/cristal.blend b/gui/loose_screen/assets/cristal.blend
new file mode 100644
index 0000000..c55d230
Binary files /dev/null and b/gui/loose_screen/assets/cristal.blend differ
diff --git a/gui/loose_screen/assets/cristal.blend.import b/gui/loose_screen/assets/cristal.blend.import
new file mode 100644
index 0000000..12b75e7
--- /dev/null
+++ b/gui/loose_screen/assets/cristal.blend.import
@@ -0,0 +1,60 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://on4beh6lla76"
+path="res://.godot/imported/cristal.blend-116d25ad1da461c81fb8ef9157e2d1e7.scn"
+
+[deps]
+
+source_file="res://gui/loose_screen/assets/cristal.blend"
+dest_files=["res://.godot/imported/cristal.blend-116d25ad1da461c81fb8ef9157e2d1e7.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={}
+blender/nodes/visible=0
+blender/nodes/active_collection_only=false
+blender/nodes/punctual_lights=true
+blender/nodes/cameras=true
+blender/nodes/custom_properties=true
+blender/nodes/modifiers=1
+blender/meshes/colors=false
+blender/meshes/uvs=true
+blender/meshes/normals=true
+blender/meshes/export_geometry_nodes_instances=false
+blender/meshes/gpu_instances=false
+blender/meshes/tangents=true
+blender/meshes/skins=2
+blender/meshes/export_bones_deforming_mesh_only=false
+blender/materials/unpack_enabled=true
+blender/materials/export_materials=1
+blender/animation/limit_playback=true
+blender/animation/always_sample=true
+blender/animation/group_tracks=true
+gltf/naming_version=2
diff --git a/gui/loose_screen/assets/cristal.blend1 b/gui/loose_screen/assets/cristal.blend1
new file mode 100644
index 0000000..7ebac4a
Binary files /dev/null and b/gui/loose_screen/assets/cristal.blend1 differ
diff --git a/gui/loose_screen/assets/orchid_sleeping.png b/gui/loose_screen/assets/orchid_sleeping.png
new file mode 100644
index 0000000..6451cc2
Binary files /dev/null and b/gui/loose_screen/assets/orchid_sleeping.png differ
diff --git a/gui/loose_screen/assets/orchid_sleeping.png.import b/gui/loose_screen/assets/orchid_sleeping.png.import
new file mode 100644
index 0000000..8fde304
--- /dev/null
+++ b/gui/loose_screen/assets/orchid_sleeping.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2ebqci4tglk8"
+path="res://.godot/imported/orchid_sleeping.png-7f59ff571a5eb07fa1a91538a777423b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/loose_screen/assets/orchid_sleeping.png"
+dest_files=["res://.godot/imported/orchid_sleeping.png-7f59ff571a5eb07fa1a91538a777423b.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
diff --git a/gui/loose_screen/loose_screen.tscn b/gui/loose_screen/loose_screen.tscn
new file mode 100644
index 0000000..78ca5ea
--- /dev/null
+++ b/gui/loose_screen/loose_screen.tscn
@@ -0,0 +1,80 @@
+[gd_scene format=3 uid="uid://u6nw3vo6677a"]
+
+[ext_resource type="Shader" uid="uid://cuni3ggtw2uuy" path="res://common/vfx/materials/shaders/blur.gdshader" id="1_pf6ao"]
+[ext_resource type="Texture2D" uid="uid://c2ebqci4tglk8" path="res://gui/loose_screen/assets/orchid_sleeping.png" id="2_f8jil"]
+[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="3_4ae40"]
+[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="4_w6ode"]
+[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="5_276s3"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="6_60kfb"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_041t2"]
+shader = ExtResource("1_pf6ao")
+shader_parameter/strength = 5.00000023424012
+shader_parameter/mix_percentage = 0.3
+
+[sub_resource type="LabelSettings" id="LabelSettings_bn8hj"]
+font = ExtResource("4_w6ode")
+font_size = 50
+font_color = Color(1, 0.6509804, 0.09019608, 1)
+
+[node name="LooseScreen" type="CanvasLayer" unique_id=1502767186]
+
+[node name="BlurRect" type="ColorRect" parent="." unique_id=1208806322]
+material = SubResource("ShaderMaterial_041t2")
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.0352941, 0.0196078, 0.12549, 0.705882)
+
+[node name="GridContainer" type="GridContainer" parent="." unique_id=2014325082]
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -186.5
+offset_top = -249.0
+offset_right = 186.5
+offset_bottom = 249.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 4
+size_flags_vertical = 4
+columns = 2
+
+[node name="AnnounceContainer" type="VBoxContainer" parent="GridContainer" unique_id=717426101]
+layout_mode = 2
+theme_override_constants/separation = 12
+alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="GridContainer/AnnounceContainer" unique_id=849798296]
+custom_minimum_size = Vector2(0, 300)
+layout_mode = 2
+texture = ExtResource("2_f8jil")
+expand_mode = 3
+stretch_mode = 5
+
+[node name="AnnounceText" type="Label" parent="GridContainer/AnnounceContainer" unique_id=1321978462]
+unique_name_in_owner = true
+layout_mode = 2
+text = "Out of energy"
+label_settings = SubResource("LabelSettings_bn8hj")
+horizontal_alignment = 1
+
+[node name="AnnounceTitle" type="Label" parent="GridContainer/AnnounceContainer" unique_id=896530004]
+unique_name_in_owner = true
+layout_mode = 2
+text = "Orchid and the ship ran out of energy"
+label_settings = ExtResource("3_4ae40")
+horizontal_alignment = 1
+autowrap_mode = 3
+
+[node name="OkButton" type="Button" parent="GridContainer/AnnounceContainer" unique_id=1371634749]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 4
+theme = ExtResource("5_276s3")
+text = "Wake up again"
+icon = ExtResource("6_60kfb")
diff --git a/gui/pause/pause.tscn b/gui/pause/pause.tscn
index f409f99..0949554 100644
--- a/gui/pause/pause.tscn
+++ b/gui/pause/pause.tscn
@@ -21,6 +21,10 @@ shader_parameter/mix_percentage = 0.3
font = ExtResource("4_apjlw")
font_size = 30
+[sub_resource type="LabelSettings" id="LabelSettings_5hfp2"]
+font = ExtResource("4_apjlw")
+font_size = 20
+
[sub_resource type="Animation" id="Animation_58dya"]
length = 0.001
tracks/0/type = "value"
@@ -163,12 +167,22 @@ layout_mode = 2
text = "QUIT"
icon = ExtResource("7_yj6f1")
+[node name="SaveInfo" type="Label" parent="Container/MarginContainer" unique_id=144326561]
+layout_mode = 2
+size_flags_vertical = 8
+text = "THIS_GAME_USE_AUTOSAVE"
+label_settings = SubResource("LabelSettings_5hfp2")
+horizontal_alignment = 1
+vertical_alignment = 1
+
[node name="Settings" parent="." unique_id=758381952 instance=ExtResource("4_58dya")]
unique_name_in_owner = true
+visible = false
mouse_filter = 2
[node name="Controls" parent="." unique_id=358658336 instance=ExtResource("11_urlqn")]
unique_name_in_owner = true
+visible = false
mouse_filter = 2
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1779993260]
diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd
index b3e525b..e692ace 100644
--- a/gui/pointer/scripts/pointer.gd
+++ b/gui/pointer/scripts/pointer.gd
@@ -25,12 +25,14 @@ var can_use_item : bool = false
var press_time := 0.
var press_action_done := false
+var action_disabled := true
+
func _ready():
Input.set_custom_mouse_cursor(default_cursor)
%Action.visible = false
func _process(delta):
- if player:
+ if player and not action_disabled:
process_player_actions(delta)
else :
%ActionProgressBar.value = 0.
diff --git a/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png
new file mode 100644
index 0000000..0a6198b
Binary files /dev/null and b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png differ
diff --git a/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png.import b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png.import
new file mode 100644
index 0000000..4ac6faf
--- /dev/null
+++ b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7lw40nfj4lhl"
+path="res://.godot/imported/Capture d'écran 2026-04-17 112838.png-64ef83d52ce9df1c5c41e85939ab8a4a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png"
+dest_files=["res://.godot/imported/Capture d'écran 2026-04-17 112838.png-64ef83d52ce9df1c5c41e85939ab8a4a.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
diff --git a/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png
new file mode 100644
index 0000000..0529192
Binary files /dev/null and b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png differ
diff --git a/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png.import b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png.import
new file mode 100644
index 0000000..d12279f
--- /dev/null
+++ b/stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d17ru4hw8okj1"
+path="res://.godot/imported/Capture d'écran 2026-04-17 113002.png-0eb5866e63755f5d73921a67745288a0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png"
+dest_files=["res://.godot/imported/Capture d'écran 2026-04-17 113002.png-0eb5866e63755f5d73921a67745288a0.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
diff --git a/stages/3d_scenes/cockpit_scene/cockpit.tscn b/stages/3d_scenes/cockpit_scene/cockpit.tscn
index be3ae10..3f52723 100644
--- a/stages/3d_scenes/cockpit_scene/cockpit.tscn
+++ b/stages/3d_scenes/cockpit_scene/cockpit.tscn
@@ -11,6 +11,7 @@
[ext_resource type="PackedScene" uid="uid://cgw2ct7smispo" path="res://stages/3d_scenes/cockpit_scene/cockpit_elements/shelf.tscn" id="11_w4l7d"]
[ext_resource type="PackedScene" uid="uid://dd6k80rhux1do" path="res://stages/3d_scenes/cockpit_scene/cockpit_elements/plant_info_screen.tscn" id="12_pxmsf"]
[ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="13_a2cx2"]
+[ext_resource type="PackedScene" uid="uid://cd8j7v7qtybi8" path="res://stages/3d_scenes/cockpit_scene/ship_tutorial.tscn" id="13_u7lr8"]
[ext_resource type="PackedScene" uid="uid://blvetnnib2ks0" path="res://stages/3d_scenes/cockpit_scene/assets/3d/cockpit2.blend" id="17_omtjc"]
[sub_resource type="Animation" id="Animation_pxmsf"]
@@ -75,6 +76,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.04597473, -0.10369873, 0.3
shape = SubResource("BoxShape3D_ctvhk")
[node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("13_a2cx2")]
+unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 3.2830403)
[node name="CockpitModel" parent="." unique_id=825141342 instance=ExtResource("17_omtjc")]
@@ -111,3 +113,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1218804, -1.0799314, 2.621
[node name="PlantInfoScreen" parent="." unique_id=1881622243 instance=ExtResource("12_pxmsf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2386853, -0.047743827, 4.020312)
+
+[node name="ShipTutorial" parent="." unique_id=868547496 instance=ExtResource("13_u7lr8")]
+unique_name_in_owner = true
diff --git a/stages/3d_scenes/cockpit_scene/cockpit_elements/dashboard.tscn b/stages/3d_scenes/cockpit_scene/cockpit_elements/dashboard.tscn
index 9ec8700..676c868 100644
--- a/stages/3d_scenes/cockpit_scene/cockpit_elements/dashboard.tscn
+++ b/stages/3d_scenes/cockpit_scene/cockpit_elements/dashboard.tscn
@@ -104,6 +104,9 @@ _data = {
&"hover": SubResource("Animation_5d7hc")
}
+[sub_resource type="ViewportTexture" id="ViewportTexture_vks67"]
+viewport_path = NodePath("LeftScreen/LeftScreenAction/SubViewport")
+
[sub_resource type="Animation" id="Animation_2kujw"]
length = 0.001
tracks/0/type = "value"
@@ -143,8 +146,8 @@ _data = {
[sub_resource type="Resource" id="Resource_ne0dp"]
script = ExtResource("12_oix5e")
-items = Array[ExtResource("11_3cel1")]([null, null, null])
-n_tools = 1
+seeds = Array[ExtResource("11_3cel1")]([null])
+seeds_size = 1
metadata/_custom_type_script = "uid://fnu2d6wna4yc"
[node name="Dashboard" type="Node3D" unique_id=1374334508]
@@ -338,7 +341,7 @@ transform = Transform3D(1, -1.509958e-07, -8.742278e-08, 1.509958e-07, 1, -1.490
[node name="LeftScreenAction" type="Sprite3D" parent="LeftScreen" unique_id=442886447]
transform = Transform3D(-1, 5.3045827e-08, 1.509958e-07, 5.3045838e-08, 1.0000002, 1.5913756e-07, -1.5099579e-07, 1.5913761e-07, -1, 0.01, -0.04, -0.015)
pixel_size = 0.0015
-texture = SubResource("ViewportTexture_2ofl5")
+texture = SubResource("ViewportTexture_vks67")
[node name="SubViewport" type="SubViewport" parent="LeftScreen/LeftScreenAction" unique_id=1031174751]
transparent_bg = true
diff --git a/stages/3d_scenes/cockpit_scene/cockpit_elements/scripts/dashboard_run_point_screen.gd b/stages/3d_scenes/cockpit_scene/cockpit_elements/scripts/dashboard_run_point_screen.gd
index 0ed2466..3d0b724 100644
--- a/stages/3d_scenes/cockpit_scene/cockpit_elements/scripts/dashboard_run_point_screen.gd
+++ b/stages/3d_scenes/cockpit_scene/cockpit_elements/scripts/dashboard_run_point_screen.gd
@@ -18,6 +18,7 @@ func set_run_point(rp := run_point):
interactable = rp != null
if rp:
action_icon.texture = LAND_ICON
+ print(rp.region_parameter.get_region_name())
action_label.text = rp.region_parameter.get_region_name()
func card_info() -> CardInfo:
diff --git a/stages/3d_scenes/cockpit_scene/cockpit_scene.tscn b/stages/3d_scenes/cockpit_scene/cockpit_scene.tscn
index 0ed903c..5b2866d 100644
--- a/stages/3d_scenes/cockpit_scene/cockpit_scene.tscn
+++ b/stages/3d_scenes/cockpit_scene/cockpit_scene.tscn
@@ -12,8 +12,6 @@ shader_parameter/sky_color = Color(0.03, 0.05, 0.11, 1)
shader_parameter/star_base_color = Color(0.8, 1, 0.3, 1)
shader_parameter/star_hue_offset = 0.6
shader_parameter/star_intensity = 0.08
-shader_parameter/star_twinkle_speed = 0.8
-shader_parameter/star_twinkle_intensity = 0.2
shader_parameter/layer_scale = 20.0
shader_parameter/layer_scale_step = 10.0
shader_parameter/layers_count = 3
diff --git a/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd b/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd
index 7f04178..54f332c 100644
--- a/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd
+++ b/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd
@@ -33,9 +33,23 @@ func _ready():
%Exit.clicked.connect(_on_exit_clicked)
%Exit.interactable = can_exit()
+ if not GameInfo.game_data.ship_tutorial_done:
+ await get_tree().create_timer(1).timeout
+ await show_tutorial()
+
if GameInfo.game_data.game_mode == GameData.GameMode.STORY:
handle_dialogs()
+func show_tutorial():
+ AudioManager.play_sfx("Ship_reveal")
+ %ShipTutorial.appear()
+ Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
+ %Player3D.controlling_player=false
+ await %ShipTutorial.disappeared
+ Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
+ %Player3D.controlling_player=true
+ GameInfo.game_data.ship_tutorial_done = true
+
func handle_dialogs():
if not POST_TUTORIAL_DIALOG_PATH in GameInfo.game_data.dialogs_done:
await get_tree().create_timer(5).timeout
diff --git a/stages/3d_scenes/cockpit_scene/scripts/cockpit_scene.gd b/stages/3d_scenes/cockpit_scene/scripts/cockpit_scene.gd
index 0a9cc7d..d6b7d63 100644
--- a/stages/3d_scenes/cockpit_scene/scripts/cockpit_scene.gd
+++ b/stages/3d_scenes/cockpit_scene/scripts/cockpit_scene.gd
@@ -2,8 +2,6 @@ extends Node3D
class_name CockpitScene
func _ready():
- Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
-
if GameInfo.game_data.ship_in_space:
%TakeOffAnimationPlayer.play("TookOff")
diff --git a/stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd b/stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd
new file mode 100644
index 0000000..2424ff1
--- /dev/null
+++ b/stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd
@@ -0,0 +1,54 @@
+extends CanvasLayer
+class_name ShipTutorial
+
+const DEFAULT_SHIP_ACCELERATION = Vector2(1,0)
+
+signal disappeared
+
+var object_acceleration := Vector2(0,0)
+
+var rotating := false
+
+var prev_mouse_pos : Vector2
+var next_mouse_pos : Vector2
+
+func _ready():
+ hide()
+
+func appear():
+ %AnimationPlayer.play("appear")
+
+func _process(delta):
+ update_rotation(delta)
+
+func update_rotation(delta):
+ if visible:
+ next_mouse_pos = get_viewport().get_mouse_position()
+ if Input.is_action_just_pressed("action"):
+ rotating = true
+ prev_mouse_pos = get_viewport().get_mouse_position()
+ if Input.is_action_just_released("action"):
+ rotating = false
+ object_acceleration = Vector2(
+ float(next_mouse_pos.x - prev_mouse_pos.x),
+ float(next_mouse_pos.y - prev_mouse_pos.y)
+ )
+
+ var object_rotation = object_acceleration
+
+ if rotating:
+ object_rotation = Vector2(
+ float(next_mouse_pos.x - prev_mouse_pos.x),
+ float(next_mouse_pos.y - prev_mouse_pos.y)
+ )
+ prev_mouse_pos = next_mouse_pos
+ else :
+ object_acceleration = object_acceleration.lerp(DEFAULT_SHIP_ACCELERATION, 0.1)
+
+ %Ship.rotate(Vector3.UP, object_rotation.x * delta)
+ %Ship.rotate(Vector3.RIGHT, object_rotation.y * delta)
+
+
+func _on_ok_button_button_down():
+ %AnimationPlayer.play_backwards("appear")
+ disappeared.emit()
diff --git a/stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd.uid b/stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd.uid
new file mode 100644
index 0000000..591e005
--- /dev/null
+++ b/stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd.uid
@@ -0,0 +1 @@
+uid://cqc8vta5ffmwt
diff --git a/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn b/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn
new file mode 100644
index 0000000..bf20ad5
--- /dev/null
+++ b/stages/3d_scenes/cockpit_scene/ship_tutorial.tscn
@@ -0,0 +1,325 @@
+[gd_scene format=3 uid="uid://cd8j7v7qtybi8"]
+
+[ext_resource type="Script" uid="uid://cqc8vta5ffmwt" path="res://stages/3d_scenes/cockpit_scene/scripts/ship_tutorial.gd" id="1_1jkg7"]
+[ext_resource type="Shader" uid="uid://cuni3ggtw2uuy" path="res://common/vfx/materials/shaders/blur.gdshader" id="1_11pbi"]
+[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="2_1jkg7"]
+[ext_resource type="Texture2D" uid="uid://bi5jo6pf0acjb" path="res://common/icons/carambola.svg" id="3_ofwam"]
+[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="3_wyjs5"]
+[ext_resource type="PackedScene" uid="uid://blvetnnib2ks0" path="res://stages/3d_scenes/cockpit_scene/assets/3d/cockpit2.blend" id="4_ofwam"]
+[ext_resource type="Environment" uid="uid://bxyp24f85p0xf" path="res://gui/game/assets/gui_3d_environment.tres" id="5_2y716"]
+[ext_resource type="Texture2D" uid="uid://7lw40nfj4lhl" path="res://stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 112838.png" id="6_2y716"]
+[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="6_6olc8"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="7_cnkwc"]
+[ext_resource type="Texture2D" uid="uid://d17ru4hw8okj1" path="res://stages/3d_scenes/cockpit_scene/assets/textures/tutorial_screenshots/Capture d'écran 2026-04-17 113002.png" id="9_6olc8"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_wa8fb"]
+shader = ExtResource("1_11pbi")
+shader_parameter/strength = 8.00000037674012
+shader_parameter/mix_percentage = 0.3
+
+[sub_resource type="ViewportTexture" id="ViewportTexture_2y716"]
+viewport_path = NodePath("Particles/SubViewport")
+
+[sub_resource type="Curve" id="Curve_6olc8"]
+_limits = [-200.0, 200.0, 0.0, 1.0]
+_data = [Vector2(0, -200), 0.0, 560.0, 0, 0, Vector2(0.08235294, 92.384125), 1336.3082, 1336.3082, 0, 0, Vector2(0.34901965, 200), 0.0, 0.0, 0, 0, Vector2(0.854902, -200), 0.0, 0.0, 0, 0]
+point_count = 4
+
+[sub_resource type="Gradient" id="Gradient_cnkwc"]
+offsets = PackedFloat32Array(0, 0.8689956, 0.98253274)
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="LabelSettings" id="LabelSettings_n2u7g"]
+font = ExtResource("3_wyjs5")
+font_size = 50
+font_color = Color(1, 0.6509804, 0.09019608, 1)
+
+[sub_resource type="ViewportTexture" id="ViewportTexture_11pbi"]
+viewport_path = NodePath("ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport")
+
+[sub_resource type="Animation" id="Animation_2y716"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [true]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("ShipTutorialContainer:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Color(1, 1, 1, 1)]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Particles:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Color(1, 1, 1, 1)]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("ShipTutorialContainer:theme_override_constants/separation")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [12]
+}
+
+[sub_resource type="Animation" id="Animation_6olc8"]
+resource_name = "appear"
+length = 0.8
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 0.13333334),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [false, true]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("ShipTutorialContainer:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0.2, 0.73333335),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Particles:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0.2, 0.7),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("ShipTutorialContainer:theme_override_constants/separation")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0.26666665, 0.73333335),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [554, 8]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_cnkwc"]
+_data = {
+&"RESET": SubResource("Animation_2y716"),
+&"appear": SubResource("Animation_6olc8")
+}
+
+[node name="ShipTutorial" type="CanvasLayer" unique_id=868547496]
+script = ExtResource("1_1jkg7")
+
+[node name="BlurRect" type="ColorRect" parent="." unique_id=1582095070]
+material = SubResource("ShaderMaterial_wa8fb")
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.037180007, 0.020800002, 0.13, 1)
+
+[node name="Particles" type="TextureRect" parent="." unique_id=552383374]
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -179.0
+offset_top = -179.0
+offset_right = 179.0
+offset_bottom = 179.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = SubResource("ViewportTexture_2y716")
+expand_mode = 1
+
+[node name="SubViewport" type="SubViewport" parent="Particles" unique_id=205461032]
+transparent_bg = true
+size = Vector2i(1000, 1000)
+
+[node name="GPUParticles2D" type="CPUParticles2D" parent="Particles/SubViewport" unique_id=612988274]
+position = Vector2(500, 500)
+amount = 20
+texture = ExtResource("3_ofwam")
+preprocess = 1.0
+spread = 180.0
+gravity = Vector2(0, 0)
+initial_velocity_min = 2.0
+initial_velocity_max = 2.0
+linear_accel_min = 5.0
+linear_accel_max = 5.0
+linear_accel_curve = SubResource("Curve_6olc8")
+color_ramp = SubResource("Gradient_cnkwc")
+
+[node name="ShipTutorialContainer" type="VBoxContainer" parent="." unique_id=732188526]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 12
+alignment = 1
+
+[node name="ShipTutorialText" type="Label" parent="ShipTutorialContainer" unique_id=1403992763]
+unique_name_in_owner = true
+layout_mode = 2
+text = "SHIP_ACQUIRED"
+label_settings = SubResource("LabelSettings_n2u7g")
+horizontal_alignment = 1
+
+[node name="ShipTutorialTitle" type="Label" parent="ShipTutorialContainer" unique_id=2022459650]
+unique_name_in_owner = true
+layout_mode = 2
+text = "USE_THE_SHIP_TO_TRAVEL_ACROSS_THE_PLANET"
+label_settings = ExtResource("2_1jkg7")
+horizontal_alignment = 1
+
+[node name="GridContainer" type="GridContainer" parent="ShipTutorialContainer" unique_id=1001794244]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_constants/h_separation = 35
+columns = 3
+
+[node name="VBoxContainer" type="VBoxContainer" parent="ShipTutorialContainer/GridContainer" unique_id=1184100238]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+theme_override_constants/separation = 12
+alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="ShipTutorialContainer/GridContainer/VBoxContainer" unique_id=458438699]
+layout_mode = 2
+texture = ExtResource("6_2y716")
+expand_mode = 5
+stretch_mode = 5
+
+[node name="RichTextLabel" type="RichTextLabel" parent="ShipTutorialContainer/GridContainer/VBoxContainer" unique_id=1193611093]
+layout_mode = 2
+bbcode_enabled = true
+text = "JUMP_BETWEEN_REGION_TEXT"
+fit_content = true
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="ShipVisualiser" type="TextureRect" parent="ShipTutorialContainer/GridContainer" unique_id=692971472]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 4
+mouse_filter = 0
+texture = SubResource("ViewportTexture_11pbi")
+stretch_mode = 5
+
+[node name="SubViewport" type="SubViewport" parent="ShipTutorialContainer/GridContainer/ShipVisualiser" unique_id=1153633037]
+own_world_3d = true
+transparent_bg = true
+size = Vector2i(400, 400)
+
+[node name="Ship" type="Node3D" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport" unique_id=434320277]
+unique_name_in_owner = true
+transform = Transform3D(0.86598426, 0, -0.5000024, 0, 0.9999422, 0, 0.49997625, 0, 0.8660295, 0, 0, 0)
+
+[node name="cockpit2" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship" unique_id=1190034532 instance=ExtResource("4_ofwam")]
+
+[node name="Skeleton3D" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature" parent_id_path=PackedInt32Array(1190034532, 368440226) index="0" unique_id=1318180746]
+bones/0/rotation = Quaternion(-0.52081746, 0.47827742, 0.52081746, 0.47827742)
+bones/1/rotation = Quaternion(0.042539995, -1.4957005e-08, -9.944439e-10, 0.9990948)
+bones/2/rotation = Quaternion(0.52081746, 0.47827742, 0.52081746, -0.47827742)
+bones/3/rotation = Quaternion(0.042539995, 1.4957005e-08, 9.944439e-10, 0.9990948)
+
+[node name="WinkEnd_R" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="0" unique_id=1435098475]
+transform = Transform3D(7.145433e-10, -1, -7.4505806e-08, 2.9971538e-08, -4.4703484e-08, 1, -1, -7.1454553e-10, 2.9971538e-08, -12.358327, -1.0543112, -8.881784e-16)
+
+[node name="Wing_R" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="1" unique_id=891044283]
+transform = Transform3D(0, -0.9963807, -0.08500305, 0, -0.08500302, 0.9963807, -1, 0, 0, 0, 0, 0)
+
+[node name="WinkEnd_L" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="2" unique_id=908817672]
+transform = Transform3D(7.145433e-10, 1, 7.4505806e-08, -2.9971538e-08, -4.4703484e-08, 1, 1, -7.1454553e-10, 2.9971538e-08, 12.358327, -1.0543112, 0)
+
+[node name="Wing_L" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2/Armature/Skeleton3D" index="3" unique_id=74621525]
+transform = Transform3D(0, 0.9963807, 0.08500305, 0, -0.08500302, 0.9963807, 1, 0, 0, 0, 0, 0)
+
+[node name="AnimationPlayer" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2" index="6" unique_id=1861191625]
+autoplay = &"Fold"
+
+[node name="Camera3D" type="Camera3D" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport" unique_id=541588220]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 50)
+current = true
+fov = 30.0
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport" unique_id=1274670225]
+environment = ExtResource("5_2y716")
+
+[node name="VBoxContainer2" type="VBoxContainer" parent="ShipTutorialContainer/GridContainer" unique_id=1062837751]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+theme_override_constants/separation = 12
+alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="ShipTutorialContainer/GridContainer/VBoxContainer2" unique_id=227115375]
+layout_mode = 2
+texture = ExtResource("9_6olc8")
+expand_mode = 5
+stretch_mode = 5
+
+[node name="RichTextLabel" type="RichTextLabel" parent="ShipTutorialContainer/GridContainer/VBoxContainer2" unique_id=1438289614]
+layout_mode = 2
+bbcode_enabled = true
+text = "RECHARGE_YOUR_SHIP_WITH_PLANT_SCORE_TEXT"
+fit_content = true
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="OkButton" type="Button" parent="ShipTutorialContainer" unique_id=879779245]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 4
+theme = ExtResource("6_6olc8")
+text = "OK"
+icon = ExtResource("7_cnkwc")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1299060348]
+unique_name_in_owner = true
+libraries/ = SubResource("AnimationLibrary_cnkwc")
+
+[connection signal="button_down" from="ShipTutorialContainer/OkButton" to="." method="_on_ok_button_button_down"]
+
+[editable path="ShipTutorialContainer/GridContainer/ShipVisualiser/SubViewport/Ship/cockpit2"]
diff --git a/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend b/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend
index b1138c4..01776f2 100644
Binary files a/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend and b/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend differ
diff --git a/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend1 b/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend1
index fe21204..a850c41 100644
Binary files a/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend1 and b/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend1 differ
diff --git a/stages/3d_scenes/ship_garage/ship_garage.tscn b/stages/3d_scenes/ship_garage/ship_garage.tscn
index 1a9c45b..821b7f7 100644
--- a/stages/3d_scenes/ship_garage/ship_garage.tscn
+++ b/stages/3d_scenes/ship_garage/ship_garage.tscn
@@ -1,31 +1,14 @@
[gd_scene format=3 uid="uid://c830fmv54pyk1"]
[ext_resource type="Script" uid="uid://cx5dq0shygboa" path="res://stages/3d_scenes/ship_garage/scripts/ship_garage.gd" id="1_43lym"]
-[ext_resource type="Shader" uid="uid://bv2rghn44mrrf" path="res://stages/title_screen/resources/shaders/stars.gdshader" id="1_cpd4q"]
[ext_resource type="Texture2D" uid="uid://cww35xu1yqivp" path="res://stages/3d_scenes/cockpit_scene/assets/textures/sky.png" id="2_yl6nj"]
[ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="3_g14ji"]
[ext_resource type="PackedScene" uid="uid://bmkmhycmvtjfl" path="res://stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend" id="4_g14ji"]
[ext_resource type="PackedScene" uid="uid://blvetnnib2ks0" path="res://stages/3d_scenes/cockpit_scene/assets/3d/cockpit2.blend" id="5_43lym"]
[ext_resource type="PackedScene" uid="uid://csx7d5khjd6y5" path="res://entities/interactable_3d/phone/phone.tscn" id="7_dkh4e"]
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_43lym"]
-shader = ExtResource("1_cpd4q")
-shader_parameter/sky_color = Color(0.03, 0.05, 0.11, 1)
-shader_parameter/star_base_color = Color(0.8, 1, 0.3, 1)
-shader_parameter/star_hue_offset = 0.6
-shader_parameter/star_intensity = 0.08
-shader_parameter/star_twinkle_speed = 0.8
-shader_parameter/star_twinkle_intensity = 0.2
-shader_parameter/layer_scale = 20.0
-shader_parameter/layer_scale_step = 10.0
-shader_parameter/layers_count = 3
-
-[sub_resource type="Sky" id="Sky_dkh4e"]
-sky_material = SubResource("ShaderMaterial_43lym")
-
[sub_resource type="Environment" id="Environment_ovhgo"]
background_mode = 2
-sky = SubResource("Sky_dkh4e")
sky_custom_fov = 61.7
ambient_light_source = 3
ambient_light_color = Color(1, 1, 1, 1)
diff --git a/stages/3d_scenes/vending_machine_room/scripts/vending_machine_3d.gd b/stages/3d_scenes/vending_machine_room/scripts/vending_machine_3d.gd
index b9103c3..1a7aec8 100644
--- a/stages/3d_scenes/vending_machine_room/scripts/vending_machine_3d.gd
+++ b/stages/3d_scenes/vending_machine_room/scripts/vending_machine_3d.gd
@@ -186,7 +186,7 @@ func _on_pay_interactable_clicked():
fall_object_2()
state = State.FETCH
- get_tree().create_timer(1.).timeout.connect(
+ get_tree().create_timer(0.5).timeout.connect(
func ():
AudioManager.play_sfx("VendingMachineDrop")
)
diff --git a/stages/terrain/region/scripts/modifiers/contaminated_modifier.gd b/stages/terrain/region/scripts/modifiers/contaminated_modifier.gd
new file mode 100644
index 0000000..1f0a982
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/contaminated_modifier.gd
@@ -0,0 +1,20 @@
+extends RegionModifier
+class_name ContaminatedModifier
+
+func get_modifier_name() -> String:
+ return tr("CONTAMINATED")
+
+func get_description() -> String:
+ return tr("CONTAMINATED_MODIFIER_DESC_TEXT")
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/virus.svg")
+
+func get_card_section_color() -> Color:
+ return Color("8b2dffff")
+
+func modify_plant_seed_random_loose(plant_seed_random_loose : int) -> int:
+ return plant_seed_random_loose + 1
+
+func modify_plant_seed_number(plant_seed_number : int) -> int:
+ return plant_seed_number - 1
\ No newline at end of file
diff --git a/stages/terrain/region/scripts/modifiers/contaminated_modifier.gd.uid b/stages/terrain/region/scripts/modifiers/contaminated_modifier.gd.uid
new file mode 100644
index 0000000..65c4cc3
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/contaminated_modifier.gd.uid
@@ -0,0 +1 @@
+uid://i14hpayg3owb
diff --git a/stages/terrain/region/scripts/modifiers/radioactive_modifier.gd b/stages/terrain/region/scripts/modifiers/radioactive_modifier.gd
new file mode 100644
index 0000000..770bc71
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/radioactive_modifier.gd
@@ -0,0 +1,17 @@
+extends RegionModifier
+class_name RadioactiveModifier
+
+func get_modifier_name() -> String:
+ return tr("RADIOACTIVE")
+
+func get_description() -> String:
+ return tr("RADIOACTIVE_MODIFIER_DESC_TEXT")
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/radioactive.svg")
+
+func get_card_section_color() -> Color:
+ return Color("8b2dffff")
+
+func modify_plant_base_score(plant_base_score : int) -> int:
+ return plant_base_score - 1
\ No newline at end of file
diff --git a/stages/terrain/region/scripts/modifiers/radioactive_modifier.gd.uid b/stages/terrain/region/scripts/modifiers/radioactive_modifier.gd.uid
new file mode 100644
index 0000000..90cb939
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/radioactive_modifier.gd.uid
@@ -0,0 +1 @@
+uid://bqpi0ct8pryax
diff --git a/stages/terrain/region/scripts/modifiers/region_modifier.gd b/stages/terrain/region/scripts/modifiers/region_modifier.gd
index a6b9e68..281d592 100644
--- a/stages/terrain/region/scripts/modifiers/region_modifier.gd
+++ b/stages/terrain/region/scripts/modifiers/region_modifier.gd
@@ -55,6 +55,26 @@ func modify_cristal_threshold(cristal_threshold : float) -> float:
func modify_start_decontamination_zone_radius(start_decontamination_zone_radius : int) -> int:
return start_decontamination_zone_radius
+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 card_section() -> CardSectionInfo:
var section := CardSectionInfo.new(
diff --git a/stages/terrain/region/scripts/modifiers/resonnance_modifier.gd b/stages/terrain/region/scripts/modifiers/resonnance_modifier.gd
new file mode 100644
index 0000000..aa869c3
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/resonnance_modifier.gd
@@ -0,0 +1,19 @@
+extends RegionModifier
+class_name ResonnanceModifier
+
+func get_modifier_name() -> String:
+ return tr("RESONNANCE")
+
+func get_description() -> String:
+ return tr("RESONNANCE_MODIFIER_DESC_TEXT")
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/wave-sine.svg")
+
+func get_card_section_color() -> Color:
+ return Color("25c147")
+
+func modify_seed_rarity_pool(seed_rarity_pool : Array[int]) -> Array[int]:
+ for i in range(len(seed_rarity_pool)):
+ seed_rarity_pool[i] += 1
+ return seed_rarity_pool
\ No newline at end of file
diff --git a/stages/terrain/region/scripts/modifiers/resonnance_modifier.gd.uid b/stages/terrain/region/scripts/modifiers/resonnance_modifier.gd.uid
new file mode 100644
index 0000000..570933e
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/resonnance_modifier.gd.uid
@@ -0,0 +1 @@
+uid://dsowdgj1wspvb
diff --git a/stages/terrain/region/scripts/modifiers/rocky_modifier.gd b/stages/terrain/region/scripts/modifiers/rocky_modifier.gd
new file mode 100644
index 0000000..c8b003f
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/rocky_modifier.gd
@@ -0,0 +1,17 @@
+extends RegionModifier
+class_name RockyModifier
+
+func get_modifier_name() -> String:
+ return tr("ROCKY")
+
+func get_description() -> String:
+ return tr("ROCKY_MODIFIER_DESC_TEXT")
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/mountain.svg")
+
+func get_card_section_color() -> Color:
+ return Color("8b2dffff")
+
+func modify_cristal_threshold(cristal_threshold : float) -> float:
+ return cristal_threshold * 0.
\ No newline at end of file
diff --git a/stages/terrain/region/scripts/modifiers/rocky_modifier.gd.uid b/stages/terrain/region/scripts/modifiers/rocky_modifier.gd.uid
new file mode 100644
index 0000000..0671456
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/rocky_modifier.gd.uid
@@ -0,0 +1 @@
+uid://bmhfhct6wa218
diff --git a/stages/terrain/region/scripts/modifiers/sandy_modifier.gd b/stages/terrain/region/scripts/modifiers/sandy_modifier.gd
new file mode 100644
index 0000000..0e2a113
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/sandy_modifier.gd
@@ -0,0 +1,14 @@
+extends RegionModifier
+class_name SandyModifier
+
+func get_modifier_name() -> String:
+ return tr("SANDY")
+
+func get_description() -> String:
+ return tr("SANDY_MODIFIER_DESC_TEXT")
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/grain.svg")
+
+func modify_plant_influence_radius(plant_influence_radius : float) -> float:
+ return plant_influence_radius / 2
\ No newline at end of file
diff --git a/stages/terrain/region/scripts/modifiers/sandy_modifier.gd.uid b/stages/terrain/region/scripts/modifiers/sandy_modifier.gd.uid
new file mode 100644
index 0000000..dabec94
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/sandy_modifier.gd.uid
@@ -0,0 +1 @@
+uid://b0ca7k6lh57f
diff --git a/stages/terrain/region/scripts/modifiers/toxic_modifier.gd b/stages/terrain/region/scripts/modifiers/toxic_modifier.gd
new file mode 100644
index 0000000..9d4039b
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/toxic_modifier.gd
@@ -0,0 +1,14 @@
+extends RegionModifier
+class_name ToxicModifier
+
+func get_modifier_name() -> String:
+ return tr("TOXIC")
+
+func get_description() -> String:
+ return tr("TOXIC_MODIFIER_DESC_TEXT")
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/biohazard.svg")
+
+func modify_plant_lifetime(plant_lifetime : int) -> int:
+ return plant_lifetime - 1
\ No newline at end of file
diff --git a/stages/terrain/region/scripts/modifiers/toxic_modifier.gd.uid b/stages/terrain/region/scripts/modifiers/toxic_modifier.gd.uid
new file mode 100644
index 0000000..e1f6477
--- /dev/null
+++ b/stages/terrain/region/scripts/modifiers/toxic_modifier.gd.uid
@@ -0,0 +1 @@
+uid://8pqatifhi7fs
diff --git a/stages/terrain/region/scripts/region.gd b/stages/terrain/region/scripts/region.gd
index 44c1720..4d843b9 100644
--- a/stages/terrain/region/scripts/region.gd
+++ b/stages/terrain/region/scripts/region.gd
@@ -18,9 +18,6 @@ const CHUNK_UNLOAD_DISTANCE : int = 3
const MAX_GENERATION_THREAD = 1 # Crash when superior to 1
-@export var first_loot_number : int = 3
-@export var loot_item_number : Array[int] = [1,2]
-
var is_generated : bool : get = check_is_generated
var generated_value : float : get = get_generated_value
@@ -287,7 +284,7 @@ func dig_hole(game_pos: Vector2, size : int):
dig_rocks(hole_tiles,false,false)
func loot_talion(coord : Vector2i):
- var new_seed = Seed.generate_random()
+ var new_seed = Seed.generate_random(data.seed_rarity_pool.pick_random())
drop_item(
new_seed,
coord * TILE_SIZE,
diff --git a/stages/terrain/region/scripts/region_data.gd b/stages/terrain/region/scripts/region_data.gd
index b7f9747..17e18df 100644
--- a/stages/terrain/region/scripts/region_data.gd
+++ b/stages/terrain/region/scripts/region_data.gd
@@ -25,6 +25,7 @@ const PLAYER_ROCK_HOLE_RADIUS = 5
@export var decontamination_threshold : float
@export var cristal_threshold : float
@export var start_decontamination_hole_radius = 3
+@export var seed_rarity_pool : Array[int] = [0,0,0,0,0,0,0,1,1,1]
@export var day : int = 1
@export var entities_saved_data : Array[EntityData] = []
diff --git a/stages/terrain/region/scripts/region_parameter.gd b/stages/terrain/region/scripts/region_parameter.gd
index 914ee1e..1aaf9fc 100644
--- a/stages/terrain/region/scripts/region_parameter.gd
+++ b/stages/terrain/region/scripts/region_parameter.gd
@@ -6,6 +6,7 @@ const DEFAULT_DECONTAMINATION_THRESHOLD = 0.4
const DEFAULT_CRISTAL_THRESHOLD = 0.1
const DEFAULT_CHARGE = 8
const DEFAULT_START_DECONTAMINATION_ZONE_RADIUS = 3
+const DEFAULT_SEED_RARITY_POOL: Array[int] = [0,0,0,0,0,0,0,1,1,1]
@export var region_name : String
@export var region_flags : Array[String]
@@ -109,6 +110,10 @@ func get_start_decontamination_zone_radius() -> int:
return zone_radius
-func card_info() -> CardInfo:
- return null
- #TODO
\ No newline at end of file
+func get_seed_rarity_pool() -> int:
+ var seed_rarity_pool = DEFAULT_SEED_RARITY_POOL
+
+ for m in modifiers:
+ seed_rarity_pool = m.modify_seed_rarity_pool(seed_rarity_pool)
+
+ return seed_rarity_pool
\ No newline at end of file
diff --git a/stages/title_screen/resources/shaders/stars.gdshader b/stages/title_screen/resources/shaders/stars.gdshader
index 2d405c6..e4919a1 100644
--- a/stages/title_screen/resources/shaders/stars.gdshader
+++ b/stages/title_screen/resources/shaders/stars.gdshader
@@ -4,7 +4,7 @@ shader_type sky;
// Comment this if you don't want to use star twinke. However, if you do want to keep it,
// I suggest you to set the sky process mode to High-Quality Incremental or Real-Time,
// as star twinkling may greatly impact performance.
-#define USE_TWINKLE
+// #define USE_TWINKLE
group_uniforms sky;
uniform vec3 sky_color: source_color = vec3(0.03, 0.05, 0.11);
diff --git a/translation/game/gui.csv b/translation/game/gui.csv
index f147c68..0401928 100644
--- a/translation/game/gui.csv
+++ b/translation/game/gui.csv
@@ -19,6 +19,7 @@ CONTROLS,Controls,Contrôles
RESUME_GAME,Resume,Reprendre
RESTART,Restart,Recommencer
QUIT,Quit,Quitter
+THIS_GAME_USE_AUTOSAVE,This game use autosave,Ce jeu sauvegarde votre progression automatiquement
CHOOSE_GAME_MODE,Choose game mode,Choisissez le mode de jeu
STORY_MODE,Story Mode,Mode Histoire
INFINITE_MODE,Infinite Mode,Mode Infini
@@ -70,9 +71,7 @@ TOUGH,Tough,Solide
TOUGH_EFFECT_TEXT,Multiplies {score_icon} by [b]{score_multiplier}[/b] and add [b]{growing_time}[/b]{growing_icon},"Multiplie {score_icon} par [b]{score_multiplier}[/b] et ajoute [b]{growing_time}[/b]{growing_icon}"
FERTILE,Fertile,Fertile
FERTILE_EFFECT_TEXT,Add [b]{seed_buff}[/b]{seed_icon} to all nearby plant but [b]{score_change}[/b]{score_icon},Ajoute [b]{seed_buff}[/b]{seed_icon} à toutes les plantes autour mais [b]{score_change}[/b]{score_icon}
-EPHEMERAL,Ephemeral,Éphémère
-EPHEMERAL_EFFECT_TEXT,Add [b]{seed_number}[/b]{seed_icon} but [b]{lifetime_change}[/b]{lifetime_icon},"Ajoute [b]{seed_number}[/b]{seed_icon} mais [b]{lifetime_change}[/b]{lifetime_icon}"
-PURIFICATION,Purification,Épuration
+PURIFICATION,Purification,Purification
PURIFICATION_EFFECT_TEXT,"When mature, create fertile zone in a radius of [b]{purification_radius}[/b]","Une fois mature, créée une zone fertile dans un rayon de [b]{purification_radius}[/b]"
HURRIED,Hurried,Pressé
HURRIED_EFFECT_TEXT,"[b]{growing_time_change}[/b]{growing_time_icon}","[b]{growing_time_change}[/b]{growing_time_icon}"
@@ -110,7 +109,7 @@ PICKAXE,Pickaxe,Pioche
PICKAXE_DESC_TEXT,Can dig rock and precious materials,Peut creuser la roche et des matériaux précieux
DIG,Dig,Creuser
OPEN,Open,Ouvrir
- %s_SEED,%s Seed,Graine de %s
+%s_SEED,%s Seed,Graine de %s
PLANT_%s_MUST_BE_USED_IN_DECONTAMINATED_ZONE,Plant [b]%s[/b]. Must be used in the fertile zone.,Plante [b]%s[/b]. Doit être utilisée dans la zone fertile.
PLANT_%s,Plant [b]%s[/b],Planter [b]%s[/b]
MOVE_WITH_RIGHT_CLICK_OR_WASD,"Move with right click or WASD","Déplace-toi avec le clic droit ou ZQSD"
@@ -125,6 +124,12 @@ DIG_A_TALION_VEIN_WITH_SHOVEL,Dig a [b]Talion Vein[/b] with the [b]Pickaxe[/b],C
PLANT_SEED_IN_FERTILE_ZONE,Plant a [b]Seed[/b] in the [b]Fertile Zone[/b],Planter une [b]Graine[/b] dans la [b]Zone Fertile[/b]
GAIN_FIRST_PLANT_POINT,Earn your first [b]Plant Point[/b] while waiting for a plant to [b]Mature[/b] (recharging will pass days),Gagnez votre premier [b]Point de Plante[/b] en attendant qu'une plante soit [b]Mature[/b] (se recharger fera passer les jours)
HARVEST_A_MATURE_PLANT,Harvest a [b]Mature Plant[/b] using your [b]Fork[/b],Récoltez une [b]Plante Mature[/b] en utilisant votre [b]Fourche[/b]
+PLANT_NAME_TEXT,"[b]Plant name and state[/b] Each plant species has a unique name and can have 2 states: juvenile and mature","[b]Nom et état de la plante[/b] Chaque espèce de plantes a un nom unique et chaque plante peut avoir deux états : juvénile et mature"
+PLANT_STATS_TEXT,"[b]Plant stats[/b] Here you can see your plant's age, the day of maturation, the lifetime, and the seed number that the plant can produce","[b]Statistiques[/b] Ici, vous pouvez voir l'âge de votre plante, le jour de maturation, le temps de vie et le nombre de graine que la plante donne"
+PLANT_MUTATION_TEXT,"[b]Mutations[/b] Each species has mutations that alter the plant's behavior. These mutations are transmissible to the plant's seeds, where they can change or evolve superior levels","[b]Mutations[/b] Chaque espèce possède des mutations qui modifient le comportement de la plante. Ces mutations se transmettent aux graines, et peuvent changer ou évoluer aux niveaux supérieurs"
+PLANTS_INFO,"Plants info","Information des plantes"
+OBTAIN_INFORMATION_ON_PLANTS_WHILE_HOVERING_PLANTS_BASE,"Obtain information on plants while hovering over the plant base","Obtenez des informations sur les plantes en survolant leur base"
+PLANT_SCORE_TEXT,"[b]Score[/b] By default, each plant get 1 score when mature","[b]Score[/b] Par défaut, chaque plante gagne 1 de score à la maturation"
%d_PLANT_POINT,%d Plant Point,%d Point de plante
%d_PLANT_POINTS,%d Plant Points,%d Points de plante
SCORE_%d,Score %d,Score %d
@@ -197,6 +202,10 @@ LAND_SHIP,Land Ship,Atterrir
TAKE_OFF,Take Off,Décoller
NO_MORE_ENERGY,No more energy,Plus assez d'énergie
NO_RECHARGE_LEFT,"No recharge left, give up to try again","Pas de recharge restante, abandonnez pour recommencer"
+SHIP_ACQUIRED,Ship Acquired,Vaisseau Acquis
+USE_THE_SHIP_TO_TRAVEL_ACROSS_THE_PLANET,"Use the ship to travel across the planet","Utilisez le vaisseau pour voyager sur la planète"
+JUMP_BETWEEN_REGION_TEXT,"[b]Jump between regions[/b] Use the ship dashboard to choose the next region between two choices","[b]Changez de région[/b] Utilisez le tableau de bord pour changer de région parmi deux choix"
+RECHARGE_YOUR_SHIP_WITH_PLANT_SCORE_TEXT,"[b]Recharge your ship with plant score[/b] The Internode has fuel for only one jump; recharge it with plants on the planet","[b]Rechargez votre vaisseau avec les scores de plantes[/b] L'Internode a du carburant pour un seul changement, rechargez le avec en plantant sur la planète"
SHIP_IS_READY_TO_TAKE_OFF,Ship is ready to take off,Le vaisseau est prêt à partir
TUTORIAL_FINISHED,Tutorial finished,Tutoriel terminé
CHOOSE_NEXT_STOP,Choose next stop,Choisissez le prochain arrêt
@@ -229,8 +238,20 @@ HUMID,Humid,Humide
HUMID_MODIFIER_DESC_TEXT,Reduce the number of [b]Recharge[/b],Réduit le nombre de [b]Recharge[/b]
POOR,Poor,Pauvre
POOR_MODIFIER_DESC_TEXT,Reduce the number of [b]Talion Veins[/b],Réduit le nombre de [b]Veine de Talion[/b]
+ROCKY,Rocky,Rocheux
+ROCKY_MODIFIER_DESC_TEXT,There is no [b]Talion Veins[/b] in the area,Aucune [b]Veine de Talion[/b] dans la zone
+TOXIC,Toxic,Toxique
+TOXIC_MODIFIER_DESC_TEXT,Reduce all plant lifetime by 1,Réduit la durée de vie de toutes les plantes de 1
+SANDY,Sandy,Sableux
+SANDY_MODIFIER_DESC_TEXT,Reduce plants influence radius,Réduit le rayon d'influence des plantes
+RADIOACTIVE,Radioactive,Radioactif
+RADIOACTIVE_MODIFIER_DESC_TEXT,Reduce the plant's base score by 1,Réduit le score de base des plantes de 1
+CONTAMINATED,Contaminated,Contaminée
+CONTAMINATED_MODIFIER_DESC_TEXT,Decrease all plants seeds production and increase the possible seed loss,Diminue la production de graine et augmente la perte possible de graine pour toutes les plantes
VENDING_MACHINES,Vending Machines,Distributeurs
VENDING_MACHINES_MODIFIER_DESC_TEXT,A room with old vending machine is in the area,Une pièce avec de vieux distributeurs se trouve dans la zone
+RESONNANCE,Resonnance,Résonnance
+RESONNANCE_MODIFIER_DESC_TEXT,Mutation level from [b]Talion Veins[/b] seeds is increased,Le niveau de mutation des graines issues de [b]Veine de Talion[/b] est augmenté
PASS_THE_MYSTERIOUS_DOOR,Go through the mysterious door,Franchissez la porte mystérieuse
NEXT_STOP,Next Stop,Prochain arrêt
ORBIT,Orbit,Orbite