Equilibrage, amélioration du tutoriel et de la clarté des éléments de gameplay

* Rajout d'une région supplémentaire pour finir le jeu, et renommage de la dernière map en "Base Borea"
* Amélioration de la clarté du détecteur
* Les objectifs du tutoriel et les indications de jeu apparaissent désormais en haut de l'écran
* Changement des étapes du tutoriel
* Amélioration de la lisibilité du voyage dans le vaisseau (avec un décompte de distance jusqu'à la fin du jeu)
* Changement de la génération de map : la zone fertile est désormais uniquement au centre de la carte, les chunks sont également plus petits
* Changement des objectifs à réaliser ainsi que des recharges, seule 8 par région désormais
* Les modificateurs de région n'évoluent plus
This commit is contained in:
2026-03-21 18:59:39 +01:00
parent 03fbf72ee9
commit 4a46492598
26 changed files with 470 additions and 271 deletions

View File

@@ -49,7 +49,7 @@ func start_tutorial():
current_region_data = RegionData.new(
RegionParameter.new(
0,
tr("TUTORIAL"),
tr("ASTRA_BASE"),
["tutorial"],
[],
randi()

View File

@@ -3,10 +3,8 @@ class_name RunData
enum State {STARTED, IN_PROGRESS, FINISHED}
const RUN_POINT_POSITION_DERIVATION = 100
const DIFFICULTY_INCREASE_BY_LEVEL = 3
const RUN_POINTS_NEXT_NUMBER : int = 2
const RUN_POINT_MAX_LEVEL = 4 # TODO
const RUN_POINT_MAX_LEVEL = 5 # TODO
signal current_run_point_changed
@@ -26,6 +24,11 @@ func generate_next_run_points(level = 0) -> Array[RunPoint]:
next_run_points = []
if level == RUN_POINT_MAX_LEVEL:
return [
generate_borea_base_run_point()
]
for i in range(RUN_POINTS_NEXT_NUMBER):
next_run_points.append(
generate_next_run_point(level)
@@ -38,13 +41,24 @@ func generate_next_run_point(level = 0) -> RunPoint:
var region_parameter = RegionParameter.new()
region_parameter.level = level
region_parameter.region_flags = get_region_flags(region_parameter)
region_parameter.modifiers = get_region_modifiers(level + 1)
region_parameter.modifiers = get_region_modifiers()
return RunPoint.new(
level,
region_parameter
)
func generate_borea_base_run_point() -> RunPoint:
var region_parameter = RegionParameter.new()
region_parameter.level = RUN_POINT_MAX_LEVEL
region_parameter.region_flags = get_region_flags(region_parameter)
region_parameter.region_name = tr("BOREA_BASE")
return RunPoint.new(
RUN_POINT_MAX_LEVEL,
region_parameter
)
#endregion
func get_state() -> State:
@@ -78,12 +92,12 @@ func get_region_flags(region_parameter : RegionParameter) -> Array[String]:
return flags
func get_region_modifiers(level : int) -> Array[RegionModifier]:
func get_region_modifiers() -> Array[RegionModifier]:
var possible_modifiers : Array[RegionModifier] = [
AridModifier.new(level),
HumidModifier.new(level),
PoorModifier.new(level),
HarshModifier.new(level)
AridModifier.new(),
HumidModifier.new(),
PoorModifier.new(),
HarshModifier.new()
]
possible_modifiers = possible_modifiers.filter(

View File

@@ -58,7 +58,7 @@ const AVAILABLE_LANGUAGES_LABEL = [
#region ------------------ Game ------------------
const MAX_ZOOM = 1.8
const MIN_ZOOM = 0.9
const MIN_ZOOM = 0.8
# Not in settings pannel
@export var zoom : float = 1. :

View File

@@ -38,6 +38,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -2,8 +2,12 @@
extends Node2D
class_name DetectorSignal
const SIGNAL_DURATION = 1
const PARTICLES_DISTANCE = 100
const SIGNAL_DURATION = 1.2
const PARTICLES_DISTANCE = 180
const ICON_SIZE = 40
const POINT_ICON_SIZE = 30
const POINT_ICON_SHIFT = 0.2
const POINT_ICON = preload("res://common/icons/caret-down.svg")
const DEFAULT_ICON = preload("res://common/icons/north-star.svg")
const ENERGY_ICON = preload("res://common/icons/bolt.svg")
const DOOR_ICON = preload("res://common/icons/logout.svg")
@@ -21,15 +25,17 @@ func _init(region : Region, pos : Vector2):
signals.append(
DetectorSignalIndividual.new(
(pos - e.global_position).normalized().angle(),
ENERGY_ICON
ENERGY_ICON,
Color("ffa617ff")
)
)
if e is Door and e.available:
signals.append(
DetectorSignalIndividual.new(
(pos - e.global_position).normalized().angle(),
DOOR_ICON
)
DOOR_ICON,
Color("ffa617ff")
),
)
if e is Plant:
signals.append(
@@ -49,11 +55,26 @@ func _draw():
5.
)
for s in signals:
draw_texture(
draw_texture_rect(
s.icon,
Vector2.ZERO - DEFAULT_ICON.get_size()/2 + Vector2.LEFT.rotated(s.angle) * started_time/SIGNAL_DURATION * PARTICLES_DISTANCE,
Rect2(
Vector2.ZERO - (Vector2.ONE * ICON_SIZE)/2 + Vector2.LEFT.rotated(s.angle) * started_time/SIGNAL_DURATION * PARTICLES_DISTANCE,
Vector2.ONE * ICON_SIZE
),
false,
Color(s.color.r,s.color.g,s.color.b,1-started_time/SIGNAL_DURATION)
)
draw_set_transform(Vector2.ZERO,s.angle + PI/2, Vector2.ONE)
draw_texture_rect(
POINT_ICON,
Rect2(
Vector2.ZERO - (Vector2.ONE * POINT_ICON_SIZE)/2 + Vector2.DOWN * (started_time/SIGNAL_DURATION + POINT_ICON_SHIFT) * PARTICLES_DISTANCE,
Vector2.ONE * POINT_ICON_SIZE
),
false,
Color(1.,1.,1.,1-started_time/SIGNAL_DURATION)
)
draw_set_transform(Vector2.ZERO,0., Vector2.ONE)
func _process(delta):
if started_time < SIGNAL_DURATION:
@@ -65,11 +86,14 @@ func _process(delta):
class DetectorSignalIndividual:
var angle : float
var icon : Texture
var color : Color
func _init(
_angle : float = 0.,
_icon : Texture = DEFAULT_ICON
_icon : Texture = DEFAULT_ICON,
_color : Color = Color.WHITE,
):
angle = _angle
icon = _icon
color = _color

View File

@@ -4,10 +4,8 @@
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="2_nq5i2"]
[ext_resource type="PackedScene" uid="uid://edxmvtvtipwq" path="res://gui/game/alert/alert.tscn" id="2_ykapk"]
[ext_resource type="PackedScene" uid="uid://brfsapvj2quxm" path="res://gui/game/energy_info/energy_info.tscn" id="4_2wykm"]
[ext_resource type="PackedScene" uid="uid://fnv0qhkh40mv" path="res://gui/game/announce/announce.tscn" id="4_h6540"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="6_2wykm"]
[ext_resource type="PackedScene" uid="uid://df0eop555wfj5" path="res://gui/game/objective_progress_bar/objective_progress_bar.tscn" id="6_dr1y2"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="6_h6540"]
[ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="6_id0t5"]
[ext_resource type="Texture2D" uid="uid://b43thuq8piv18" path="res://common/icons/skull.svg" id="7_dr1y2"]
[ext_resource type="PackedScene" uid="uid://clicjf8ts51h8" path="res://gui/game/inventory_gui/inventory_gui.tscn" id="9_id0t5"]
@@ -36,6 +34,43 @@ fill_to = Vector2(1.5, 0.5)
font = ExtResource("6_2wykm")
font_size = 40
[sub_resource type="Animation" id="Animation_rcm5b"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("%ObjectiveLabel/..:theme_override_constants/margin_top")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_ajf5p"]
resource_name = "bump"
length = 0.4
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("%ObjectiveLabel/..:theme_override_constants/margin_top")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.23333333, 0.4),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [0, 20, 0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_jomh8"]
_data = {
&"RESET": SubResource("Animation_rcm5b"),
&"bump": SubResource("Animation_ajf5p")
}
[sub_resource type="LabelSettings" id="LabelSettings_rcm5b"]
font = ExtResource("6_2wykm")
font_size = 20
@@ -68,9 +103,6 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="Announce" parent="." unique_id=94658910 instance=ExtResource("4_h6540")]
unique_name_in_owner = true
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=2054297293]
anchors_preset = 15
anchor_right = 1.0
@@ -89,7 +121,7 @@ mouse_filter = 2
layout_mode = 2
size_flags_horizontal = 4
mouse_filter = 2
theme_override_constants/separation = 0
theme_override_constants/separation = 10
[node name="ObjectiveProgressBar" parent="MarginContainer/VBoxContainer" unique_id=2043451865 instance=ExtResource("6_dr1y2")]
unique_name_in_owner = true
@@ -114,26 +146,56 @@ text = "0 Plant Point"
label_settings = SubResource("LabelSettings_id0t5")
horizontal_alignment = 1
[node name="RechargesLeftLabel" type="Label" parent="MarginContainer/VBoxContainer" unique_id=1254074923]
[node name="ObjectiveContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer" unique_id=946367772]
layout_mode = 2
mouse_filter = 2
theme_override_constants/margin_left = 0
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0
[node name="ObjectiveLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/ObjectiveContainer" unique_id=2044989003]
unique_name_in_owner = true
custom_minimum_size = Vector2(600, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 0
theme_override_colors/default_color = Color(1, 0.6509804, 0.09019608, 1)
theme_override_colors/font_shadow_color = Color(0.0627451, 0.05882353, 0.16862746, 1)
theme_override_constants/shadow_outline_size = 8
theme_override_constants/shadow_offset_x = 0
theme_override_constants/shadow_offset_y = 0
theme_override_fonts/normal_font = ExtResource("6_2wykm")
theme_override_fonts/bold_font = ExtResource("6_2wykm")
theme_override_fonts/bold_italics_font = ExtResource("6_2wykm")
theme_override_fonts/italics_font = ExtResource("6_2wykm")
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
bbcode_enabled = true
text = "Action en cours Action en cours Action en cours Action en cours Action en cours "
fit_content = true
horizontal_alignment = 1
[node name="ObjectiveAnimationPlayer" type="AnimationPlayer" parent="MarginContainer/VBoxContainer/ObjectiveContainer/ObjectiveLabel" unique_id=31675045]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_jomh8")
[node name="GiveUpButton" type="Button" parent="MarginContainer/VBoxContainer" unique_id=1128310884]
unique_name_in_owner = true
layout_mode = 2
text = "9 charges left"
label_settings = ExtResource("6_h6540")
horizontal_alignment = 1
size_flags_horizontal = 4
size_flags_vertical = 8
text = "GIVE_UP"
icon = ExtResource("7_dr1y2")
[node name="Inventory" parent="MarginContainer" unique_id=1178590658 instance=ExtResource("9_id0t5")]
layout_mode = 2
size_flags_horizontal = 1
size_flags_vertical = 8
[node name="GiveUpButton" type="Button" parent="MarginContainer" unique_id=1128310884]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 8
size_flags_vertical = 8
text = "GIVE_UP"
icon = ExtResource("7_dr1y2")
[node name="Help" type="VBoxContainer" parent="MarginContainer" unique_id=645268912]
layout_mode = 2
size_flags_horizontal = 8

View File

@@ -11,8 +11,8 @@
[sub_resource type="ShaderMaterial" id="ShaderMaterial_27lg1"]
shader = ExtResource("1_v570a")
shader_parameter/strength = 5.45500025585262
shader_parameter/mix_percentage = 0.02400000114
shader_parameter/strength = 0.0
shader_parameter/mix_percentage = 0.0
[sub_resource type="ViewportTexture" id="ViewportTexture_h2bel"]
viewport_path = NodePath("NightAnimation/SubViewport")
@@ -55,12 +55,12 @@ _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]
unique_name_in_owner = true
physics_interpolation_mode = 0
visible = false
material = SubResource("ShaderMaterial_27lg1")
anchors_preset = 15
anchor_right = 1.0
@@ -72,6 +72,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
@@ -139,3 +140,7 @@ theme_override_constants/margin_bottom = 15
[node name="EnergyPassDayInfo" parent="MarginContainer" unique_id=2044341204 instance=ExtResource("2_feyaf")]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/margin_left = 15
theme_override_constants/margin_top = 15
theme_override_constants/margin_right = 15
theme_override_constants/margin_bottom = 15

View File

@@ -10,16 +10,15 @@ var score_mirror :
score_mirror = v
score_update(true)
var objective_text : String = "" : set = set_objective_text
func _ready():
GameInfo.game_data.current_region_data.updated.connect(_on_region_updated)
GameInfo.game_data.player_data.updated.connect(_on_player_updated)
GameInfo.game_data.current_region_data.pass_day_ended.connect(_on_region_pass_day_ended)
%ObjectiveProgressBar.visible = not "tutorial" in GameInfo.game_data.current_region_data.flags
%SimplePlantPointScore.visible = "tutorial" in GameInfo.game_data.current_region_data.flags
charge_update(GameInfo.game_data.current_region_data)
state_update(GameInfo.game_data.current_region_data)
player_update(GameInfo.game_data.player_data, false)
%EnergyInfo.reset_size()
@@ -28,6 +27,7 @@ func _ready():
score_mirror = GameInfo.game_data.current_region_data.get_score()
for p : PlantData in GameInfo.game_data.current_region_data.plants:
score_by_plant[str(p.random_seed)] = p.get_score()
set_objective_text()
func _on_player_updated(player_data : PlayerData):
player_update(player_data)
@@ -48,8 +48,6 @@ func player_update(player_data : PlayerData, with_animation = true):
else:
%NoEnergyVignette.modulate.a = 1. if player_data.energy == 0 else 0.
func _on_region_updated(region_data : RegionData):
await get_tree().create_timer(0.1).timeout
if score_mirror != region_data.get_score():
@@ -70,23 +68,19 @@ func _on_region_updated(region_data : RegionData):
score_mirror -= score_by_plant[key]
score_by_plant.erase(key)
charge_update(region_data)
state_update(region_data)
func _on_give_up_pressed():
GameInfo.game_data.give_up()
SceneManager.change_to_scene_id('ASTRA')
func charge_update(region_data : RegionData):
%RechargesLeftLabel.text = tr("%d_CHARGE_LEFT") % (region_data.charges)
func score_update(with_animation = true):
var objective_progression : float
var objective = GameInfo.game_data.current_region_data.objective
if GameInfo.game_data.current_region_data.state == RegionData.State.SUCCEEDED:
objective_progression = 1.
%ObjectiveProgressBar.text = tr("FULL")
%ObjectiveProgressBar.text = tr("FULL") + " %d" % [score_mirror]
else:
var objective = GameInfo.game_data.current_region_data.objective
objective_progression = (float(score_mirror) / max(float(objective), 1))
%ObjectiveProgressBar.text = "%d/%d" % [score_mirror, objective]
@@ -107,17 +101,11 @@ func score_update(with_animation = true):
func state_update(region_data : RegionData):
if region_data.state == RegionData.State.SUCCEEDED:
%Alert.text = "SHIP_IS_READY_TO_TAKE_OFF"
objective_text = "SHIP_IS_READY_TO_TAKE_OFF"
if "tutorial" in region_data.flags:
%Alert.text = "TUTORIAL_FINISHED"
%Alert.modulate = Color("ffa617ff")
%Alert.appear()
objective_text = "PASS_THE_MYSTERIOUS_DOOR"
elif region_data.state == RegionData.State.FAILED:
%Alert.text = "NO_RECHARGE_LEFT"
%Alert.modulate = Color("FF006E")
%Alert.appear()
else:
%Alert.disappear()
objective_text = "NO_RECHARGE_LEFT"
%GiveUpButton.visible = region_data.state == RegionData.State.FAILED
func plant_changing_score(plant_data: PlantData, amount : int):
@@ -167,16 +155,16 @@ func spawn_score_particle(
sprite_particle.queue_free()
func set_objective_text(v : String = objective_text):
objective_text = v
if is_node_ready():
if (objective_text != "" and objective_text != %ObjectiveLabel.text):
%ObjectiveAnimationPlayer.play("bump")
AudioManager.play_sfx("Screen_interaction")
%ObjectiveLabel.text = v
func _on_player_action_tried_without_energy():
$AnimationPlayer.play("no_energy_left")
func _on_player_upgraded():
$EffectAnimation.play("upgrade")
func _on_region_pass_day_ended(region:Region):
if region.data.charges == 1:
%Announce.announce(
tr("LAST_RECHARGE"),
tr("%d_GARDEN_SCORE_LEFT") % [region.data.objective - region.garden.get_score()],
Announce.RED_COLOR
)
$EffectAnimation.play("upgrade")

View File

@@ -8,6 +8,7 @@ signal succeded
var indicators : Array[InGameIndicator]
@export var player : Player
@export var region : Region
@export var game_gui : GameGui
@onready var steps : Array[Step] = [
Step.new(
@@ -15,6 +16,11 @@ var indicators : Array[InGameIndicator]
(func ():
return player.global_position.distance_to(region.data.player_spawn) > 30)
),
Step.new(
"CHANGE_ZOOM_WITH_Z_X",
(func ():
return GameInfo.settings_data.zoom != 1.)
),
Step.new(
"SELECT_ITEM_WITH_SCROLL_CLICK_OR_NUMBER",
(func ():
@@ -23,13 +29,18 @@ var indicators : Array[InGameIndicator]
Step.new(
"LEFT_CLICK_TO_USE_ITEMS",
(func ():
return player.data.inventory.get_item() and Input.is_action_just_pressed("action"))
return player.instruction is Player.ItemActionInstruction)
),
Step.new(
"USE_YOUR_DETECTOR_TO_FIND_THE_BATTERY",
(func ():
return player.position.distance_to(Vector2.ZERO) < 600)
),
Step.new(
"RECHARGE_IN_THE_RECHARGE_STATION",
(func ():
return region and region.data and region.data.charges != 10)
),
Step.new(
"DIG_A_TALION_VEIN_WITH_SHOVEL",
(func ():
@@ -60,11 +71,6 @@ var indicators : Array[InGameIndicator]
return true
return false)
),
Step.new(
"RECHARGE_TO_PASS_DAYS",
(func ():
return region and region.data and region.data.charges != 10)
),
Step.new(
"GAIN_FIRST_PLANT_POINT",
(func ():
@@ -112,6 +118,7 @@ func _process(_d):
return
step_gui.suceeded = step.succeeded
if not step.succeeded:
game_gui.objective_text = step.text
success = false
if success:
finish_tutorial()

View File

@@ -159,6 +159,7 @@ func bounce(
direction : Vector2 = Vector2.UP,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_BOUNCE,
):
setup_default_values()
start_anim()
await add_tween(
"position",

View File

@@ -6,46 +6,17 @@
[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="1_vlkbw"]
[ext_resource type="PackedScene" uid="uid://cdvegfgvp7053" path="res://stages/3d_scenes/cockpit_scene/assets/3d/furnitures/screen_1.blend" id="2_awdc5"]
[ext_resource type="Texture2D" uid="uid://cgmxjom200bej" path="res://common/icons/chevrons-up.svg" id="2_vlkbw"]
[ext_resource type="Script" uid="uid://ccb06rayqowp3" path="res://stages/terrain/region/scripts/modifiers/region_modifier.gd" id="3_xy0a5"]
[ext_resource type="Script" uid="uid://ddk7j5b8p51dk" path="res://stages/terrain/region/scripts/region_parameter.gd" id="4_2d2u0"]
[ext_resource type="Script" uid="uid://3o33x8mesgrn" path="res://stages/terrain/region/scripts/modifiers/arid_modifier.gd" id="4_v8ur5"]
[ext_resource type="Script" uid="uid://b4eimt3v08jhc" path="res://common/game_data/scripts/run/run_point.gd" id="5_v8ur5"]
[ext_resource type="Texture2D" uid="uid://l2xplg72hs6j" path="res://common/icons/map-pin.svg" id="6_qbi61"]
[ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="7_2ofl5"]
[ext_resource type="PackedScene" uid="uid://cs5gir1u8jbrg" path="res://stages/3d_scenes/cockpit_scene/holo_content.tscn" id="7_f7ho8"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="8_f5peh"]
[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="9_2kujw"]
[ext_resource type="PackedScene" uid="uid://cm5b7w7j6527f" path="res://stages/title_screen/planet_3d.tscn" id="12_stoj6"]
[ext_resource type="Texture2D" uid="uid://bsgmxvuphn73c" path="res://common/icons/arrow-narrow-down.svg" id="13_5d7hc"]
[ext_resource type="PackedScene" uid="uid://crbjmwumboelw" path="res://gui/game/inventory_gui/inventory_3d.tscn" id="17_inbnt"]
[ext_resource type="Script" uid="uid://bq7admu4ahs5r" path="res://entities/player/inventory/scripts/item.gd" id="18_qm808"]
[ext_resource type="Script" uid="uid://fnu2d6wna4yc" path="res://entities/player/inventory/scripts/inventory.gd" id="19_kh1yg"]
[sub_resource type="Resource" id="Resource_f7ho8"]
script = ExtResource("4_v8ur5")
metadata/_custom_type_script = "uid://3o33x8mesgrn"
[sub_resource type="Resource" id="Resource_inbnt"]
script = ExtResource("4_2d2u0")
region_name = "Uwoqos"
region_seed = 1461307588
modifiers = Array[ExtResource("3_xy0a5")]([SubResource("Resource_f7ho8")])
[sub_resource type="Resource" id="Resource_qm808"]
script = ExtResource("5_v8ur5")
region_parameter = SubResource("Resource_inbnt")
position = 0.00886304526180577
metadata/_custom_type_script = "uid://b4eimt3v08jhc"
[sub_resource type="ViewportTexture" id="ViewportTexture_cvt2p"]
viewport_path = NodePath("DestinationScreen/SubViewport")
[sub_resource type="FastNoiseLite" id="FastNoiseLite_gbmux"]
frequency = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5d7hc"]
transparency = 1
shading_mode = 0
albedo_color = Color(0.8566341, 0.5852838, 1.1551381e-06, 0.6431373)
viewport_path = NodePath("Holo/SubViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_5d7hc"]
viewport_path = NodePath("StatusScreen/SubViewport")
@@ -205,77 +176,46 @@ metadata/_custom_type_script = "uid://fnu2d6wna4yc"
[node name="Dashboard" type="Node3D" unique_id=1374334508]
script = ExtResource("1_2q8cl")
main_screen_icon = ExtResource("2_vlkbw")
main_screen_label = "Take Off"
destination_label = "South"
destination_title_label = "DESTINATION"
left_destination = SubResource("Resource_qm808")
right_destination = SubResource("Resource_qm808")
main_screen_text = null
stop_name = null
stop_title = null
destination_title = "TO_BOREA_BASE"
[node name="DestinationScreen" type="Sprite3D" parent="." unique_id=1067303692]
[node name="Holo" type="Sprite3D" parent="." unique_id=1067303692]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 0.76403993, 0.9382038)
pixel_size = 0.002
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 0.83082896, 0.33655214)
pixel_size = 0.004
texture = SubResource("ViewportTexture_cvt2p")
[node name="Planet3dHolo" parent="DestinationScreen" unique_id=866166298 instance=ExtResource("12_stoj6")]
transform = Transform3D(-0.1, 0, 8.742278e-09, 0, 0.09999998, 0, -8.742278e-09, 0, -0.1, -1.8938096e-10, 0.24558258, 0.0021662712)
radius = 1.0
details = 32
noise = SubResource("FastNoiseLite_gbmux")
height = 0.625
terrain_material = SubResource("StandardMaterial3D_5d7hc")
water_level = 0.0
water_detail = 32
[node name="Planet3dHoloArrow" type="Sprite3D" parent="DestinationScreen/Planet3dHolo" unique_id=254165077]
unique_name_in_owner = true
transform = Transform3D(9.996528, -0.1669313, -0.20388591, 0.1532331, 9.977292, -0.65587914, 0.21437156, 0.65252686, 9.976385, 0, 1.6, -1.3)
pixel_size = 0.001
billboard = 1
double_sided = false
texture = ExtResource("6_qbi61")
[node name="SubViewport" type="SubViewport" parent="DestinationScreen" unique_id=471832787]
[node name="SubViewport" type="SubViewport" parent="Holo" unique_id=471832787]
transparent_bg = true
size = Vector2i(300, 70)
size = Vector2i(365, 68)
[node name="VBoxContainer" type="VBoxContainer" parent="DestinationScreen/SubViewport" unique_id=599842808]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
[node name="HoloContent" parent="Holo/SubViewport" unique_id=668915500 instance=ExtResource("7_f7ho8")]
unique_name_in_owner = true
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -162.0
offset_top = -28.0
offset_right = 162.0
offset_bottom = 28.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_constants/separation = -10
alignment = 1
[node name="DestinationTitleLabel" type="Label" parent="DestinationScreen/SubViewport/VBoxContainer" unique_id=1315386326]
unique_name_in_owner = true
layout_mode = 2
text = "DESTINATION"
label_settings = ExtResource("1_sp2xx")
horizontal_alignment = 1
vertical_alignment = 1
[node name="DestinationLabel" type="Label" parent="DestinationScreen/SubViewport/VBoxContainer" unique_id=348899780]
unique_name_in_owner = true
layout_mode = 2
text = "South"
label_settings = ExtResource("1_sp2xx")
horizontal_alignment = 1
vertical_alignment = 1
stop_name = ""
[node name="StatusScreen" type="Sprite3D" parent="." unique_id=1257606535]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 0.8631269, 0.18221188)
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 1.0703605, 0.35432142)
modulate = Color(1, 0, 0.43137255, 1)
pixel_size = 0.003
texture = SubResource("ViewportTexture_5d7hc")
[node name="SubViewport" type="SubViewport" parent="StatusScreen" unique_id=1357189828]
transparent_bg = true
size = Vector2i(500, 70)
size = Vector2i(435, 98)
[node name="VBoxContainer" type="VBoxContainer" parent="StatusScreen/SubViewport" unique_id=2076282975]
anchors_preset = 15
@@ -291,9 +231,11 @@ alignment = 1
[node name="StatusLabel" type="Label" parent="StatusScreen/SubViewport/VBoxContainer" unique_id=86551380]
unique_name_in_owner = true
layout_mode = 2
text = "Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla "
label_settings = ExtResource("1_sp2xx")
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 3
[node name="MainScreen" type="Area3D" parent="." unique_id=874806978 node_paths=PackedStringArray("hover_animation_player")]
unique_name_in_owner = true
@@ -367,7 +309,7 @@ texture = SubResource("ViewportTexture_2ofl5")
[node name="SubViewport" type="SubViewport" parent="RightScreen/RightScreenAction" unique_id=837587699]
transparent_bg = true
size = Vector2i(150, 150)
size = Vector2i(150, 180)
[node name="VBoxContainer" type="VBoxContainer" parent="RightScreen/RightScreenAction/SubViewport" unique_id=536772063]
anchors_preset = 15
@@ -391,10 +333,11 @@ stretch_mode = 5
[node name="RightScreenActionLabel" type="Label" parent="RightScreen/RightScreenAction/SubViewport/VBoxContainer" unique_id=2019588267]
unique_name_in_owner = true
layout_mode = 2
text = "Uwoqos"
text = "Uwoqos Uwoqos "
label_settings = ExtResource("1_sp2xx")
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 3
[node name="RightScreenStats" type="Sprite3D" parent="RightScreen" unique_id=282782621]
unique_name_in_owner = true
@@ -524,7 +467,7 @@ texture = SubResource("ViewportTexture_2kujw")
[node name="SubViewport" type="SubViewport" parent="LeftScreen/LeftScreenAction" unique_id=1596245800]
transparent_bg = true
size = Vector2i(150, 150)
size = Vector2i(150, 180)
[node name="VBoxContainer" type="VBoxContainer" parent="LeftScreen/LeftScreenAction/SubViewport" unique_id=306736368]
anchors_preset = 15
@@ -548,10 +491,11 @@ stretch_mode = 5
[node name="LeftScreenActionLabel" type="Label" parent="LeftScreen/LeftScreenAction/SubViewport/VBoxContainer" unique_id=1631525309]
unique_name_in_owner = true
layout_mode = 2
text = "Ujuqyt"
text = "Ujuqyt Ujuqyt"
label_settings = ExtResource("1_sp2xx")
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 3
[node name="LeftScreenStats" type="Sprite3D" parent="LeftScreen" unique_id=2023558675]
unique_name_in_owner = true

View File

@@ -0,0 +1,81 @@
[gd_scene format=3 uid="uid://cs5gir1u8jbrg"]
[ext_resource type="Script" uid="uid://d1t0br6cacipb" path="res://stages/3d_scenes/cockpit_scene/scripts/holo_content.gd" id="1_30o21"]
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="1_bw0fn"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="1_wkgid"]
[sub_resource type="LabelSettings" id="LabelSettings_30o21"]
font = ExtResource("1_wkgid")
font_size = 37
[sub_resource type="LabelSettings" id="LabelSettings_xsjq0"]
font = ExtResource("1_wkgid")
font_size = 12
[sub_resource type="StyleBoxLine" id="StyleBoxLine_f7ho8"]
color = Color(1, 1, 1, 1)
thickness = 2
vertical = true
[sub_resource type="LabelSettings" id="LabelSettings_rc8f3"]
font = ExtResource("1_wkgid")
font_size = 20
[sub_resource type="LabelSettings" id="LabelSettings_m4m7o"]
font = ExtResource("1_wkgid")
font_size = 15
[node name="HoloContent" type="HBoxContainer" unique_id=668915500]
offset_right = 40.0
offset_bottom = 40.0
alignment = 1
script = ExtResource("1_30o21")
distance = 0
stop_name = "Blatava"
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1324145322]
layout_mode = 2
theme_override_constants/separation = -2
alignment = 1
[node name="DistanceLabel" type="Label" parent="VBoxContainer" unique_id=414512188]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
text = "0"
label_settings = SubResource("LabelSettings_30o21")
[node name="DistanceTitleLabel" type="Label" parent="VBoxContainer" unique_id=216163419]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
text = "Jusqu'à la Base Boréa"
label_settings = SubResource("LabelSettings_xsjq0")
[node name="VSeparator" type="VSeparator" parent="." unique_id=124655802]
layout_mode = 2
theme = ExtResource("1_bw0fn")
theme_override_styles/separator = SubResource("StyleBoxLine_f7ho8")
[node name="DetailsContainer" type="VBoxContainer" parent="." unique_id=597548757]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_constants/separation = 2
alignment = 1
[node name="NextStopTitleLabel" type="Label" parent="DetailsContainer" unique_id=578206390]
unique_name_in_owner = true
layout_mode = 2
text = "Prochain arrêt"
label_settings = SubResource("LabelSettings_rc8f3")
horizontal_alignment = 1
vertical_alignment = 1
[node name="NextStopLabel" type="Label" parent="DetailsContainer" unique_id=1819876983]
unique_name_in_owner = true
layout_mode = 2
text = "Blatava"
label_settings = SubResource("LabelSettings_m4m7o")
horizontal_alignment = 1
vertical_alignment = 1

View File

@@ -30,6 +30,7 @@ func _ready():
dashboard.left_screen_activated.connect(_on_left_screen_activated)
dashboard.right_screen_activated.connect(_on_right_screen_activated)
%Exit.clicked.connect(_on_exit_clicked)
%Exit.interactable = can_exit()
handle_dialogs()
@@ -58,20 +59,26 @@ func move_to_choosen_run_point():
GameInfo.game_data.current_run.choose_next_run_point(choosen_run_point)
%Gauge3D.progress = 0.
func can_exit() -> bool:
return (
not GameInfo.game_data.ship_in_space
and GameInfo.game_data.current_region_data != null
and not "tutorial" in GameInfo.game_data.current_region_data.flags
)
func _on_main_screen_activated():
if GameInfo.game_data.ship_in_space:
if GameInfo.game_data.current_run and choosen_run_point:
move_to_choosen_run_point()
land.emit()
%Exit.interactable = GameInfo.game_data.current_region_data != null
GameInfo.game_data.ship_in_space = false
else :
take_off.emit()
%Exit.interactable = false
GameInfo.game_data.ship_in_space = true
if GameInfo.game_data.current_run == null:
GameInfo.game_data.start_run()
GameInfo.game_data.player_data.energy = GameInfo.game_data.player_data.max_energy
%Exit.interactable = can_exit()
update_dashboard()
func _on_left_screen_activated():
@@ -88,12 +95,19 @@ func _on_right_screen_activated():
func _on_exit_clicked():
AudioManager.play_sfx("Ship_exit")
if not GameInfo.game_data.ship_in_space and GameInfo.game_data.current_region_data != null:
if (can_exit()):
SceneManager.change_to_scene_id('REGION')
func update_dashboard():
var current_region_data = GameInfo.game_data.current_region_data
if current_region_data and not "tutorial" in current_region_data.flags:
dashboard.destination_distance = RunData.RUN_POINT_MAX_LEVEL * 1000 - current_region_data.region_level * 1000
else :
dashboard.destination_distance = (RunData.RUN_POINT_MAX_LEVEL + 1) * 1000
dashboard.destination_title = "TO_BOREA_BASE"
var current_run = GameInfo.game_data.current_run
var can_take_off : bool = (
@@ -106,43 +120,40 @@ func update_dashboard():
if GameInfo.game_data.ship_in_space:
dashboard.main_screen_icon = LAND_ICON
dashboard.main_screen_label = tr("LAND_SHIP")
dashboard.main_screen_interactable = choosen_run_point != null or GameInfo.game_data.current_run == null
dashboard.main_screen_text = tr("LAND_SHIP")
dashboard.main_screen_interactable = choosen_run_point != null
dashboard.destination_visible = choosen_run_point != null
if choosen_run_point:
dashboard.destination_title_label = tr("DESTINATION")
dashboard.destination_longitude = float(choosen_run_point.level) / RunData.RUN_POINT_MAX_LEVEL
dashboard.destination_label = choosen_run_point.region_parameter.region_name
dashboard.stop_title = tr("NEXT_STOP")
dashboard.stop_name = choosen_run_point.region_parameter.region_name
dashboard.status_text = ""
else:
dashboard.status_text = tr("CHOOSE_DESTINATION")
dashboard.stop_title = tr("LOCATION")
dashboard.stop_name = tr("ORBIT")
dashboard.status_text = tr("CHOOSE_NEXT_STOP")
dashboard.stop_name = ""
if GameInfo.game_data.current_run:
var next_run_points = GameInfo.game_data.current_run.next_run_points
if len(next_run_points) > 0:
dashboard.left_destination = next_run_points[0]
dashboard.left_stop = next_run_points[0]
else:
dashboard.left_destination = null
dashboard.left_stop = null
if len(next_run_points) > 1:
dashboard.right_destination = next_run_points[1]
dashboard.right_stop = next_run_points[1]
else:
dashboard.right_destination = null
dashboard.right_stop = null
else :
dashboard.destination_visible = false
dashboard.main_screen_icon = TAKE_OFF_ICON
dashboard.main_screen_label = tr("TAKE_OFF")
dashboard.main_screen_text = tr("TAKE_OFF")
dashboard.main_screen_interactable = can_take_off
dashboard.left_destination = null
dashboard.right_destination = null
dashboard.left_stop = null
dashboard.right_stop = null
dashboard.destination_visible = current_region_data != null
if current_region_data:
dashboard.destination_title_label = tr("LOCATION")
dashboard.destination_label = current_region_data.region_name
dashboard.destination_longitude = float(current_region_data.region_level) / RunData.RUN_POINT_MAX_LEVEL
dashboard.stop_title = tr("LOCATION")
dashboard.stop_name = current_region_data.region_name
dashboard.status_text = "" if can_take_off else tr("NO_MORE_ENERGY")

View File

@@ -13,19 +13,18 @@ signal right_screen_activated
signal left_screen_activated
@export var main_screen_icon : Texture : set = set_main_screen_icon
@export var main_screen_label : String : set = set_main_screen_label
@export var main_screen_text : String : set = set_main_screen_label
@export var main_screen_interactable : bool : set = set_main_screen_interactable
@export var destination_label : String : set = set_destination_label
@export var destination_title_label : String : set = set_destination_title_label
@export var destination_visible : bool : set = set_destination_visible
@export var destination_longitude : float : set = set_destination_longitude
@export var stop_name : String : set = set_stop_label
@export var stop_title : String : set = set_stop_title_label
@export var destination_distance : int
@export var destination_title : String : set = set_destination_title
@export var status_text : String : set = set_status_text
@export var left_destination : RunPoint = null : set = set_left_destination
@export var right_destination : RunPoint = null : set = set_right_destination
@export var left_stop : RunPoint = null : set = set_left_stop
@export var right_stop : RunPoint = null : set = set_right_stop
func _ready():
%MainScreen.clicked.connect(func(): main_screen_activated.emit())
@@ -35,24 +34,30 @@ func _ready():
set_main_screen_icon()
set_main_screen_label()
set_main_screen_interactable()
set_destination_label()
set_destination_title_label()
set_destination_visible()
set_destination_longitude()
set_stop_label()
set_stop_title_label()
set_destination_title()
set_status_text()
set_left_destination()
set_right_destination()
set_left_stop()
set_right_stop()
%HoloContent.distance = destination_distance
if not Engine.is_editor_hint() and GameInfo.game_data.player_data:
%Inventory3D.update(GameInfo.game_data.player_data.inventory)
func _process(_d):
if %HoloContent.distance < destination_distance:
%HoloContent.distance = ceili(lerp(float(%HoloContent.distance), float(destination_distance), 0.05))
else:
%HoloContent.distance = floori(lerp(float(%HoloContent.distance), float(destination_distance), 0.05))
func set_main_screen_icon(v : Texture = main_screen_icon):
main_screen_icon = v
if is_node_ready():
%MainScreenIcon.texture = v
func set_main_screen_label(v : String = main_screen_label):
main_screen_label = v
func set_main_screen_label(v : String = main_screen_text):
main_screen_text = v
if is_node_ready():
%MainScreenLabel.text = v
@@ -62,74 +67,66 @@ func set_main_screen_interactable(v : bool = main_screen_interactable):
%MainScreenSprite.visible = v
%MainScreen.interactable = v
func set_destination_label(v := destination_label):
destination_label = v
func set_stop_label(v := stop_name):
stop_name = v
if is_node_ready():
%DestinationLabel.text = v
%HoloContent.stop_name = v
func set_destination_title_label(v := destination_title_label):
destination_title_label = v
func set_stop_title_label(v := stop_title):
stop_title = v
if is_node_ready():
%DestinationTitleLabel.text = v
%HoloContent.stop_title = v
func set_destination_visible(v := destination_visible):
destination_visible = v
func set_destination_title(v := destination_title):
destination_title = v
if is_node_ready():
%DestinationScreen.visible = v
func set_destination_longitude(v := destination_longitude):
destination_longitude = v
if is_node_ready():
%Planet3dHoloArrow.position = (
Vector3.DOWN * (PLANET_3D_HOLO_RADIUS * 2 * destination_longitude - PLANET_3D_HOLO_RADIUS - PLANET_3D_HOLO_ARROW_SIZE)
+ Vector3.FORWARD * PLANET_3D_HOLO_RADIUS
)
%HoloContent.distance_title = v
func set_status_text(v := status_text):
status_text = v
if is_node_ready():
%StatusLabel.text = v
func set_left_destination(v := left_destination):
left_destination = v
func set_left_stop(v := left_stop):
left_stop = v
if is_node_ready():
%LeftScreenAction.visible = left_destination != null
%LeftScreen.interactable = left_destination != null
%LeftScreenStats.visible = left_destination != null
%LeftScreenInfos.visible = left_destination and len(left_destination.region_parameter.modifiers) > 0
if left_destination:
%LeftScreenAction.visible = left_stop != null
%LeftScreen.interactable = left_stop != null
%LeftScreenStats.visible = left_stop != null
%LeftScreenInfos.visible = left_stop and len(left_stop.region_parameter.modifiers) > 0
if left_stop:
%LeftScreenActionIcon.texture = LAND_ICON
%LeftScreenActionLabel.text = left_destination.region_parameter.get_region_name()
%LeftScreenActionLabel.text = left_stop.region_parameter.get_region_name()
%LeftScreenStat1Icon.texture = GROWTH_ICON
%LeftScreenStat1Label.text = str(left_destination.region_parameter.get_objective())
%LeftScreenStat1Label.text = str(left_stop.region_parameter.get_objective())
%LeftScreenStat2Icon.texture = CHARGE_ICON
%LeftScreenStat2Label.text = str(left_destination.region_parameter.get_charge())
%LeftScreenStat2Label.text = str(left_stop.region_parameter.get_charge())
if len(left_destination.region_parameter.modifiers) > 0:
var modifier : RegionModifier = left_destination.region_parameter.modifiers[0]
if len(left_stop.region_parameter.modifiers) > 0:
var modifier : RegionModifier = left_stop.region_parameter.modifiers[0]
%LeftScreenInfoTitle.text = "%s %d" % [ modifier.get_modifier_name(), modifier.level ]
%LeftScreenInfoText.text = modifier.get_description()
func set_right_destination(v := right_destination):
right_destination = v
func set_right_stop(v := right_stop):
right_stop = v
if is_node_ready():
%RightScreenAction.visible = right_destination != null
%RightScreen.interactable = right_destination != null
%RightScreenStats.visible = right_destination != null
%RightScreenInfos.visible = right_destination and len(right_destination.region_parameter.modifiers) > 0
if right_destination:
%RightScreenAction.visible = right_stop != null
%RightScreen.interactable = right_stop != null
%RightScreenStats.visible = right_stop != null
%RightScreenInfos.visible = right_stop and len(right_stop.region_parameter.modifiers) > 0
if right_stop:
%RightScreenActionIcon.texture = LAND_ICON
%RightScreenActionLabel.text = right_destination.region_parameter.get_region_name()
%RightScreenActionLabel.text = right_stop.region_parameter.get_region_name()
%RightScreenStat1Icon.texture = GROWTH_ICON
%RightScreenStat1Label.text = str(right_destination.region_parameter.get_objective())
%RightScreenStat1Label.text = str(right_stop.region_parameter.get_objective())
%RightScreenStat2Icon.texture = CHARGE_ICON
%RightScreenStat2Label.text = str(right_destination.region_parameter.get_charge())
%RightScreenStat2Label.text = str(right_stop.region_parameter.get_charge())
if len(right_destination.region_parameter.modifiers) > 0:
var modifier : RegionModifier = right_destination.region_parameter.modifiers[0]
if len(right_stop.region_parameter.modifiers) > 0:
var modifier : RegionModifier = right_stop.region_parameter.modifiers[0]
%RightScreenInfoTitle.text = "%s %d" % [ modifier.get_modifier_name(), modifier.level ]
%RightScreenInfoText.text = modifier.get_description()

View File

@@ -0,0 +1,39 @@
@tool
extends HBoxContainer
@export var distance : int = 20000 : set = set_distance
@export var distance_title : String = "TO_BOREA_BASE" : set = set_distance_title
@export var stop_name : String = "" : set = set_stop_name
@export var stop_title : String = "NEXT_STOP" : set = set_stop_title
func _ready():
set_distance()
set_stop_name()
set_stop_title()
func set_distance(v : int = distance):
distance = v
if is_node_ready():
var str_distance = str(distance)
var nb_len = len(str_distance)
var shift = 0
for i in range(nb_len):
if i%3 == 0:
shift += 1
str_distance = str_distance.insert(len(str_distance) - i - 2 - shift," ")
%DistanceLabel.text = str_distance
func set_stop_name(v : String = stop_name):
stop_name = v
if is_node_ready():
%NextStopLabel.text = tr(str(v))
func set_stop_title(v : String = stop_title):
stop_title = v
if is_node_ready():
%NextStopTitleLabel.text = tr(str(v))
func set_distance_title(v : String = distance_title):
distance_title = v
if is_node_ready():
%DistanceTitleLabel.text = tr(str(v))

View File

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

View File

@@ -115,14 +115,16 @@ camera = NodePath("../../Camera")
[node name="PassDay" parent="." unique_id=1144772570 instance=ExtResource("3_ktnx3")]
unique_name_in_owner = true
visible = false
[node name="RegionGui" type="CanvasLayer" parent="." unique_id=2024485651]
layer = 2
[node name="Tutorial" parent="RegionGui" unique_id=762436685 node_paths=PackedStringArray("player", "region") instance=ExtResource("2_2f6js")]
[node name="Tutorial" parent="RegionGui" unique_id=762436685 node_paths=PackedStringArray("player", "region", "game_gui") instance=ExtResource("2_2f6js")]
unique_name_in_owner = true
player = NodePath("../../Entities/Player")
region = NodePath("../..")
game_gui = NodePath("../../GameGui")
[node name="GameGui" parent="." unique_id=1970837239 instance=ExtResource("4_qdnee")]

View File

@@ -5,12 +5,13 @@ const GENERATION_NUMBER = 4
const NOISE_IMAGE_SIZE := 150
const MAX_DECONTAMINATION_DISTANCE=2
const MAX_TALION_DISTANCE=3
const MAX_DECONTAMINATION_DISTANCE=0
const MAX_TALION_DISTANCE=2
const RANDOM_PADDING_NOISE_FREQUENCY := 0.01
const ROCK_NOISE_FREQUENCY := 0.01
const DECONTAMINATION_NOISE_FREQUENCY := 0.01
const ROCK_NOISE_FREQUENCY := 0.005
const CRISTAL_NOISE_FREQUENCY := 0.008
const DECONTAMINATION_NOISE_FREQUENCY := 0.008
const CHUNK_RANDOM_PADDING := 2
@@ -71,7 +72,7 @@ func setup_position():
func generate():
rock_noise_image = generate_noise(region_data.region_seed + 1, ROCK_NOISE_FREQUENCY)
decontamination_noise_image = generate_noise(region_data.region_seed + 2, DECONTAMINATION_NOISE_FREQUENCY)
cristal_noise_image = generate_noise(region_data.region_seed + 3, ROCK_NOISE_FREQUENCY)
cristal_noise_image = generate_noise(region_data.region_seed + 3, CRISTAL_NOISE_FREQUENCY)
random_padding_noise = generate_noise(region_data.region_seed + 10, RANDOM_PADDING_NOISE_FREQUENCY)
all_tiles = calculate_all_tiles()
@@ -169,7 +170,7 @@ func generate_noise(
var noise: FastNoiseLite = FastNoiseLite.new()
noise.seed = noise_seed
noise.noise_type = FastNoiseLite.TYPE_SIMPLEX
noise.frequency = 0.01
noise.frequency = frequency
noise.fractal_type = FastNoiseLite.FRACTAL_NONE
noise.fractal_weighted_strength = 1.0
noise.offset = Vector3(

View File

@@ -8,7 +8,7 @@ func get_description() -> String:
return tr("ARID_MODIFIER_DESC_TEXT")
func modify_decontamination_threshold(decontamination_threshold : float) -> float:
return decontamination_threshold * (1. - 0.2*level)
return decontamination_threshold * (0.5)
func modify_start_decontamination_zone_radius(start_decontamination_zone_radius : int) -> int:
return max(1,roundi(start_decontamination_zone_radius * (1. - 0.2*level)))
return max(1,roundi(start_decontamination_zone_radius * (0.5)))

View File

@@ -8,4 +8,4 @@ func get_description() -> String:
return tr("HARSH_MODIFIER_DESC_TEXT")
func modify_objective(objective : int) -> int:
return roundi(objective * (1. + 0.2*level))
return roundi(objective * 1.5)

View File

@@ -8,4 +8,4 @@ func get_description() -> String:
return tr("HUMID_MODIFIER_DESC_TEXT")
func modify_charge(charge : int) -> int:
return charge - level
return charge - 2

View File

@@ -8,4 +8,4 @@ func get_description() -> String:
return tr("POOR_MODIFIER_DESC_TEXT")
func modify_cristal_threshold(cristal_threshold : float) -> float:
return cristal_threshold * (1. - 0.2*level)
return cristal_threshold * 0.5

View File

@@ -10,10 +10,10 @@ const TILE_SCALE = 1
const TILE_SIZE : int = roundi(TILE_SET.tile_size.x * TILE_SCALE)
const SPAWN_OBJECT_RANDOM_MOVEMENT = 200
const CHUNK_TILE_SIZE : int = 20
const CHUNK_TILE_SIZE : int = 10
const CHUNK_SIZE = CHUNK_TILE_SIZE * TILE_SIZE
const CHUNK_LOAD_DISTANCE : int = 1
const CHUNK_UNLOAD_DISTANCE : int = 2
const CHUNK_LOAD_DISTANCE : int = 2
const CHUNK_UNLOAD_DISTANCE : int = 3
const MAX_GENERATION_THREAD = 1 # Crash when superior to 1

View File

@@ -2,9 +2,9 @@ extends Resource
class_name RegionParameter
const DEFAULT_ROCK_THRESHOLD = 0.3
const DEFAULT_DECONTAMINATION_THRESHOLD = 0.15
const DEFAULT_CRISTAL_THRESHOLD = 0.06
const DEFAULT_CHARGE = 10
const DEFAULT_DECONTAMINATION_THRESHOLD = 0.4
const DEFAULT_CRISTAL_THRESHOLD = 0.1
const DEFAULT_CHARGE = 8
const DEFAULT_START_DECONTAMINATION_ZONE_RADIUS = 3
@export var region_name : String
@@ -14,7 +14,14 @@ const DEFAULT_START_DECONTAMINATION_ZONE_RADIUS = 3
@export var modifiers : Array[RegionModifier]
static func get_objective_by_level(l : int) -> int:
return 10 + 5 * l
match l:
0: return 5
1: return 8
2: return 10
3: return 15
4: return 20
5: return 30
_: return get_objective_by_level(l-1) + (l-3) * 5
func _init(
_level = 0,

View File

@@ -23,6 +23,12 @@ rock_tiles_data = SubResource("Resource_ame7t")
decontamination_tiles_data = SubResource("Resource_0rtv3")
metadata/_custom_type_script = "uid://cx30nvq8b34lj"
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ct7cr"]
frequency = 0.0071
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_0rtv3"]
noise = SubResource("FastNoiseLite_ct7cr")
[node name="TestChunk" type="Node2D" unique_id=990498648]
[node name="Chunk" type="Node2D" parent="." unique_id=709095052]
@@ -50,3 +56,6 @@ script = ExtResource("1_mhr83")
region_data = SubResource("Resource_tiw8g")
chunk_coord = Vector2i(1, 1)
metadata/_custom_type_script = "uid://d2ixbaa2uqlv4"
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1962434767]
texture = SubResource("NoiseTexture2D_0rtv3")

View File

@@ -84,7 +84,7 @@ PURE_EFFECT_TEXT,Multiplies {score_icon} by [b]{score_multiplier}[/b] if the all
GENEROUS,Generous,Généreux
GENEROUS_EFFECT_TEXT,"When mature, add [b]{score_buff}[/b]{score_icon} to all nearby plants, but no longer make point","Si mature, ajoute [b]{score_buff}[/b]{score_icon} à toutes les plantes à proximité, mais ne génère plus de points"
PROTECTIVE,Protective,Protecteur
PROTECTIVE_EFFECT_TEXT,"Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} to all nearby plants","Ajoute [b]{lifetime_buff}[/b]{score_icon} à toutes les plantes à proximité, mais ne génère plus de points"
PROTECTIVE_EFFECT_TEXT,"Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} to all nearby plants","Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} à toutes les plantes à proximité"
COST_%d_ENERGY,Cost %d energy,Coûte %d d'énergie
ONE_TIME_USE,Single use,Usage unique
BUILD_%s,Build %s,Construit %s
@@ -111,15 +111,16 @@ OPEN,Open,Ouvrir
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"
CHANGE_ZOOM_WITH_Z_X,"Change the zoom with Z and X","Changez le zoom avec W et X"
SELECT_ITEM_WITH_SCROLL_CLICK_OR_NUMBER,"Select an item in your toolbar with the mouse wheel or by clicking on it","Sélectionne un item dans ta barre d'outil en utilisant la molette ou en cliquant dessus"
LEFT_CLICK_TO_USE_ITEMS,"Use an item with left click","Utilise un item avec le clic gauche"
DROP_SEED_WITH_KEY,"Drop current item with Q","Lâche l'item sélectionné avec A"
USE_YOUR_DETECTOR_TO_FIND_THE_BATTERY,Use your [b]Detector[/b] to find the [b]Recharge station[/b],Utilise ton [b]Détecteur[/b] pour trouver la [b]Station de recharge[/b]
RECHARGE_IN_THE_RECHARGE_STATION,Recharge on the [b]Recharge station[/b] to pass the day,Se recharger sur la [b]Station de recharge[/b] pour passer la journée
TAKE_A_SEED_BY_CLICKING_ON_IT,Take a [b]Seed[/b] by clicking on it,Prend une [b]Graine[/b] en cliquant dessus
DIG_A_TALION_VEIN_WITH_SHOVEL,Dig a [b]Talion Vein[/b] with the [b]Shovel[/b],Creuser un [b]Filon de Talion[/b] avec la [b]Pelle[/b]
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]
RECHARGE_TO_PASS_DAYS,Recharge on the [b]Recharge station[/b] to pass the day,Se recharger sur la [b]Station de recharge[/b] pour passer la journée
GAIN_FIRST_PLANT_POINT,Earn your first [b]Plant Point[/b] while waiting for a plant to [b]Mature[/b],Gagnez votre premier [b]Point de Plante[/b] en attendant qu'une plante soit [b]Mature[/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]Shovel[/b],Récoltez une [b]Plante Mature[/b] en utilisant votre [b]Pelle[/b]
%d_PLANT_POINT,%d Plant Point,%d Point de plante
%d_PLANT_POINTS,%d Plant Points,%d Points de plante
@@ -192,11 +193,11 @@ LOCATION,Location,Location
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,Pas de recharge restante
NO_RECHARGE_LEFT,"No recharge left, give up to try again","Pas de recharge restante, abandonnez pour recommencer"
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_DESTINATION,Choose destination,Choisissez la destination
THANKS_FOR_PLAYING,Thanks for playing to the demo!,Merci davoir joué à la démo !
CHOOSE_NEXT_STOP,Choose next stop,Choisissez le prochain arrêt
THANKS_FOR_PLAYING,Thanks for playing to the demo!,Merci d'avoir joué à la démo !
JOIN_OUR_INSTAGRAM,Join our Instagram,Rejoins-nous sur Instagram
WHISHLIST_THE_GAME,Whishlist the game on Steam,Ajoutez le jeu à votre liste de souhait
ART,Art,Art
@@ -212,7 +213,9 @@ ASTRA_FACTORY,Astra Factory,Usine Astra
ASTRA_FACTORY_TEXT,Production factory of Astra base,Usine de production de la base Astra
MYSTERIOUS_DOOR,Mysterious Door,Porte mystérieuse
MYSTERIOUS_DOOR_TEXT,"This door has a space ship logo on it... What could it be ?","Cette porte à un logo de vaisseau marqué dessus... Que peut-il y avoir à l'intérieur ?"
ASTRA_BASE,Astra Base,Base Astra
BOREA_BASE,Borea Base,Base Boréa
TO_BOREA_BASE,To Borea Base,Jusqu'à la Base Boréa
BOREA_BASE_DESC_TEXT,Base where demeter is located,La base où se trouve Demeter
ARID,Arid,Aride
ARID_MODIFIER_DESC_TEXT,Reduce base [b]Fertile Zone[/b] in this region,Réduit la [b]Zone Fertile[/b] de base de la région
@@ -221,4 +224,7 @@ HARSH_MODIFIER_DESC_TEXT,Increases the [b]Plant Points[/b] needed,Augmente le no
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]
POOR_MODIFIER_DESC_TEXT,Reduce the number of [b]Talion Veins[/b],Réduit le nombre de [b]Veine de Talion[/b]
PASS_THE_MYSTERIOUS_DOOR,Go through the mysterious door,Franchissez la porte mystérieuse
NEXT_STOP,Next Stop,Prochain arrêt
ORBIT,Orbit,Orbite
1 keys en fr
84 GENEROUS Generous Généreux
85 GENEROUS_EFFECT_TEXT When mature, add [b]{score_buff}[/b]{score_icon} to all nearby plants, but no longer make point Si mature, ajoute [b]{score_buff}[/b]{score_icon} à toutes les plantes à proximité, mais ne génère plus de points
86 PROTECTIVE Protective Protecteur
87 PROTECTIVE_EFFECT_TEXT Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} to all nearby plants Ajoute [b]{lifetime_buff}[/b]{score_icon} à toutes les plantes à proximité, mais ne génère plus de points Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} à toutes les plantes à proximité
88 COST_%d_ENERGY Cost %d energy Coûte %d d'énergie
89 ONE_TIME_USE Single use Usage unique
90 BUILD_%s Build %s Construit %s
111 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.
112 PLANT_%s Plant [b]%s[/b] Planter [b]%s[/b]
113 MOVE_WITH_RIGHT_CLICK_OR_WASD Move with right click or WASD Déplace-toi avec le clic droit ou ZQSD
114 CHANGE_ZOOM_WITH_Z_X Change the zoom with Z and X Changez le zoom avec W et X
115 SELECT_ITEM_WITH_SCROLL_CLICK_OR_NUMBER Select an item in your toolbar with the mouse wheel or by clicking on it Sélectionne un item dans ta barre d'outil en utilisant la molette ou en cliquant dessus
116 LEFT_CLICK_TO_USE_ITEMS Use an item with left click Utilise un item avec le clic gauche
117 DROP_SEED_WITH_KEY Drop current item with Q Lâche l'item sélectionné avec A
118 USE_YOUR_DETECTOR_TO_FIND_THE_BATTERY Use your [b]Detector[/b] to find the [b]Recharge station[/b] Utilise ton [b]Détecteur[/b] pour trouver la [b]Station de recharge[/b]
119 RECHARGE_IN_THE_RECHARGE_STATION Recharge on the [b]Recharge station[/b] to pass the day Se recharger sur la [b]Station de recharge[/b] pour passer la journée
120 TAKE_A_SEED_BY_CLICKING_ON_IT Take a [b]Seed[/b] by clicking on it Prend une [b]Graine[/b] en cliquant dessus
121 DIG_A_TALION_VEIN_WITH_SHOVEL Dig a [b]Talion Vein[/b] with the [b]Shovel[/b] Creuser un [b]Filon de Talion[/b] avec la [b]Pelle[/b]
122 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]
123 RECHARGE_TO_PASS_DAYS GAIN_FIRST_PLANT_POINT Recharge on the [b]Recharge station[/b] to pass the day Earn your first [b]Plant Point[/b] while waiting for a plant to [b]Mature[/b] (recharging will pass days) Se recharger sur la [b]Station de recharge[/b] pour passer la journée Gagnez votre premier [b]Point de Plante[/b] en attendant qu'une plante soit [b]Mature[/b] (se recharger fera passer les jours)
GAIN_FIRST_PLANT_POINT Earn your first [b]Plant Point[/b] while waiting for a plant to [b]Mature[/b] Gagnez votre premier [b]Point de Plante[/b] en attendant qu'une plante soit [b]Mature[/b]
124 HARVEST_A_MATURE_PLANT Harvest a [b]Mature Plant[/b] using your [b]Shovel[/b] Récoltez une [b]Plante Mature[/b] en utilisant votre [b]Pelle[/b]
125 %d_PLANT_POINT %d Plant Point %d Point de plante
126 %d_PLANT_POINTS %d Plant Points %d Points de plante
193 LAND_SHIP Land Ship Atterrir
194 TAKE_OFF Take Off Décoller
195 NO_MORE_ENERGY No more energy Plus assez d'énergie
196 NO_RECHARGE_LEFT No recharge left No recharge left, give up to try again Pas de recharge restante Pas de recharge restante, abandonnez pour recommencer
197 SHIP_IS_READY_TO_TAKE_OFF Ship is ready to take off Le vaisseau est prêt à partir
198 TUTORIAL_FINISHED Tutorial finished Tutoriel terminé
199 CHOOSE_DESTINATION CHOOSE_NEXT_STOP Choose destination Choose next stop Choisissez la destination Choisissez le prochain arrêt
200 THANKS_FOR_PLAYING Thanks for playing to the demo! Thanks for playing to the demo! Merci d’avoir joué à la démo ! Merci d'avoir joué à la démo !
201 JOIN_OUR_INSTAGRAM Join our Instagram Rejoins-nous sur Instagram
202 WHISHLIST_THE_GAME Whishlist the game on Steam Ajoutez le jeu à votre liste de souhait
203 ART Art Art
213 ASTRA_FACTORY_TEXT Production factory of Astra base Usine de production de la base Astra
214 MYSTERIOUS_DOOR Mysterious Door Porte mystérieuse
215 MYSTERIOUS_DOOR_TEXT This door has a space ship logo on it... What could it be ? Cette porte à un logo de vaisseau marqué dessus... Que peut-il y avoir à l'intérieur ?
216 ASTRA_BASE Astra Base Base Astra
217 BOREA_BASE Borea Base Base Boréa
218 TO_BOREA_BASE To Borea Base Jusqu'à la Base Boréa
219 BOREA_BASE_DESC_TEXT Base where demeter is located La base où se trouve Demeter
220 ARID Arid Aride
221 ARID_MODIFIER_DESC_TEXT Reduce base [b]Fertile Zone[/b] in this region Réduit la [b]Zone Fertile[/b] de base de la région
224 HUMID Humid Humide
225 HUMID_MODIFIER_DESC_TEXT Reduce the number of [b]Recharge[/b] Réduit le nombre de [b]Recharge[/b]
226 POOR Poor Pauvre
227 POOR_MODIFIER_DESC_TEXT Reduce the number of [b]Talion Veins[/b] Réduit le nombre de [b]Veine de Talion[/b]
228 PASS_THE_MYSTERIOUS_DOOR Go through the mysterious door Franchissez la porte mystérieuse
229 NEXT_STOP Next Stop Prochain arrêt
230 ORBIT Orbit Orbite