- Rééquilibrage du mode histoire (vers le haut, le jeu sera un poil plus dur)
- Ajout d'effet pour dissuader le joueur d'aller hors map (avec peut être un easter egg ???)
- Réparation des noms de régions avec le mode twitch et ajout de nombreux noms de régions de la communauté
- Buff de la mutation solide (plus qu'un jour de maturation en plus)
- Quelques coquilles dans les textes (il doit en rester)
- Ajout de la mention de la région choisie dans le dashboard du cockpit
- Distributeurs plus clairs (surtout la notion de choix d'artefact)
This commit is contained in:
2026-07-22 00:14:46 +02:00
parent d103cd22f2
commit bb0424d67e
49 changed files with 513 additions and 165 deletions
@@ -83,6 +83,8 @@ static func basic_objective_for_region(level : int) -> int:
3: return 20
4: return 30
5: return 45
6: return 65
7: return 90
_: return basic_objective_for_region(level-1) + (level-2) * 5
static func difficult_objective_for_region(level : int) -> int:
@@ -32,7 +32,7 @@ func get_region_sequence_length(_difficulty_setting : int) -> int:
return 5
func get_objective_multiplier() -> float:
return 0.6
return 0.8
func is_run_point_dangerous(_level : int, _difficulty_setting : int) -> bool:
return false
@@ -47,7 +47,7 @@ func get_challenge_chance(_level : int, _difficulty_setting : int) -> float:
return 0.
func get_ship_dialog_path(level : int, difficulty_setting : int ,ship_in_space := true) -> String:
if ship_in_space and level + 1 == get_cave_occurence(level, difficulty_setting):
if ship_in_space and level == get_cave_occurence(level, difficulty_setting):
return CAVE_DIALOG_PATH
if ship_in_space and is_run_finished(level + 1, difficulty_setting):
return MERCURY_ARRIVAL_DIALOG_PATH
@@ -36,7 +36,7 @@ func get_region_sequence_length(_difficulty_setting : int) -> int:
return 6
func get_objective_multiplier() -> float:
return 0.8
return 1
func get_ship_dialog_path(level : int, difficulty_setting : int, ship_in_space := true) -> String:
if level == 0:
@@ -25,6 +25,9 @@ func get_destination_text() -> String:
func get_destination_scene() -> Scene:
return BoreaScene.new()
func get_objective_multiplier() -> float:
return 1.2
func get_player_max_energy(difficulty_setting := 1) -> int:
if difficulty_setting == 0:
return 4 + COSY_ENERGY_ADDITION
@@ -34,7 +34,7 @@ func get_player_max_inventory(_difficulty_setting) -> int:
return 4
func get_objective_multiplier() -> float:
return 1.2
return 1.4
func get_ship_dialog_path(level : int, _difficulty_setting : int, _ship_in_space := true) -> String:
if level == 5:
@@ -35,7 +35,7 @@ func get_player_max_inventory(_difficulty_setting : int) -> int:
return 5
func get_objective_multiplier() -> float:
return 1.4
return 1.6
func get_ship_dialog_path(level : int, _difficulty_setting : int, _ship_in_space := true) -> String:
if level == 5:
@@ -35,7 +35,7 @@ func get_player_max_inventory(_difficulty_setting : int) -> int:
return 5
func get_objective_multiplier() -> float:
return 1.6
return 1.8
func get_ship_dialog_path(level : int, _difficulty_setting : int, _ship_in_space := true) -> String:
if level == 5:
@@ -0,0 +1,17 @@
extends Scene
class_name BackroomsScene
func get_scene_id() -> String:
return "BACKROOMS"
func get_scene_path() -> String:
return "res://stages/3d_scenes/backrooms/backrooms.tscn"
func get_scene_title() -> String:
return "???"
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_saved() -> bool:
return false
@@ -0,0 +1 @@
uid://dvfjj4bhdy55b
@@ -16,6 +16,7 @@ const ACH_STW_HIT_10_INFINITE="STW_HIT_10_INFINITE"
const ACH_STW_HIT_20_INFINITE="STW_HIT_20_INFINITE"
const ACH_STW_HIT_30_INFINITE="STW_HIT_30_INFINITE"
const ACH_STW_ALL_CASES="STW_ALL_CASES"
const ACH_STW_TOO_FAR="STW_TOO_FAR"
func unlock_achievement(achivement_name : String):
if Steam.isSteamRunning():
+133
View File
@@ -6,6 +6,7 @@ const MAX_WORD_LEN = 8
const VOWEL = ["a","e","i","o","u","y"]
const CONSONANTS = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]
#region ------------------ Plant Name ------------------
static func generate_random_word(_random_seed = randi()) -> String:
if (
@@ -64,3 +65,135 @@ static func replace_character(word : String):
word[character_id] = character
return word
#region ------------------ Region Name ------------------
const RANDOM_REGION_NAME_POOL = [
"Pinouille",
"Hyugo",
"Dedana",
"Snowy",
"Eros",
"Snoop",
"Warmfuzzy",
"Sheepish",
"Nebula",
"Luna",
"Catapult",
"Kepler",
"Fabricius",
"Sagan",
"Lovelace",
"Torvalds",
"Turing",
"Asimov",
"Herbert",
"Wells",
"Pesquet",
"Tereshkova",
"Poiro",
"O'Malley",
"Dream",
"Cumulus",
"Pyrka",
"Pacho",
"Birdopia",
"Obsaya",
"Looping",
"Jarvis",
"Orion",
"Isitt",
"Pomoa",
"Ezeron",
"Ebis",
"Ecloya",
"Vlamedun",
"Faishostruc",
"Slazor",
"Plulune",
"Fledu",
"Jiclot",
"Greyun",
"Uasland",
"Ebimeron",
"Fosmule",
"Ushium",
"Nesnar",
"Broysau",
"Shiesal",
"Eblie",
"Ostraria",
"Scev",
"Nochuedan",
"Woshania",
"Eblor",
"Ochil",
"Speles",
"Oscesh",
"Estor",
"Lagronus",
"Relmania",
"Bobbeon",
"Peclite",
"Eivis",
"Drugantu",
"Latunides",
"Qisos",
"Bosos",
"Yesta",
"Nodeuria",
"Thosone",
"Zinuna",
"Viurus",
"Natis",
"Laduphus",
"Cebbaphus",
"Pungea",
"Vebos",
"Nebos",
"Dremili",
"Seganides",
"Icania",
"Aboulara",
"Guzadus",
"Dulmea",
"Kueli",
"Deothe",
"Gonides",
"Monvelib",
"Baccutum",
"Cimemia",
"Ricia",
"Nechov",
"Huphus",
"Maliat",
"Deaphus",
]
const RANDOM_REGION_TYPE_POOL = [
"REGION_TYPE_VALLEY",
"REGION_TYPE_HIGHLANDS",
"REGION_TYPE_HEIGHTS",
"REGION_TYPE_MOUNTAIN",
"REGION_TYPE_PEAKS",
"REGION_TYPE_HILLS",
"REGION_TYPE_PASS",
"REGION_TYPE_PLAIN",
"REGION_TYPE_CANAL",
"REGION_TYPE_FLATLANDS",
"REGION_TYPE_LABYRINTH",
"REGION_TYPE_REGION",
"REGION_TYPE_BARRIER",
"REGION_TYPE_CROWN",
"REGION_TYPE_SUMMIT",
"REGION_TYPE_PANORAMA",
"REGION_TYPE_EXPANSE",
"REGION_TYPE_GROUNDS",
"REGION_TYPE_PLATEAU",
"REGION_TYPE_FOOTHILLS",
"REGION_TYPE_CANYON",
"REGION_TYPE_RIDGE",
"REGION_TYPE_LANDSCAPE",
]
@@ -0,0 +1,38 @@
// Stolent here : https://godotshaders.com/shader/glitch-double-vision/
shader_type canvas_item;
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_nearest;
uniform float pixel_size : hint_range(1.0, 10.0) = 3.0;
uniform float vhs_intensity : hint_range(0.0, 10.0) = 3.0;
uniform float opacity : hint_range(0.0, 1.0) = 0.5;
uniform float double_vision_split : hint_range(0.0, 0.05) = 0.01;
float random(vec2 uv) {
return fract(sin(dot(uv, vec2(12.9898, 78.233))) * 43758.5453123);
}
void fragment() {
vec4 original_color = texture(SCREEN_TEXTURE, SCREEN_UV);
vec2 screen_res = vec2(textureSize(SCREEN_TEXTURE, 0));
vec2 grid_uv = round(SCREEN_UV * (screen_res / pixel_size)) / (screen_res / pixel_size);
float time_step = floor(TIME * 15.0);
float glitch = (random(vec2(time_step, floor(grid_uv.y * 30.0))) - 0.5) * 0.005 * vhs_intensity;
vec2 uv = grid_uv;
uv.x += glitch;
vec2 uv_red = uv + vec2(double_vision_split, 0.0);
vec2 uv_blue = uv - vec2(double_vision_split, 0.0);
vec4 tex_red = texture(SCREEN_TEXTURE, uv_red);
vec4 tex_blue = texture(SCREEN_TEXTURE, uv_blue);
vec3 red_vision = vec3(tex_red.r, 0.0, 0.0);
vec3 blue_vision = vec3(0.0, tex_blue.g, tex_blue.b);
vec3 vhs_color = red_vision + blue_vision;
vec3 final_color = mix(original_color.rgb, vhs_color, opacity);
COLOR = vec4(final_color, 1.0);
}
@@ -0,0 +1 @@
uid://ckowuw2qsgrks
@@ -26,7 +26,7 @@ mysterious_demeter: I'm glad you're finally awake! To be honest, I wasn't sure I
mysterious_demeter: I'm like you. A robot, an artificial intelligence, a machine... Our creators gave us several names. #id:136
mysterious_demeter: Okay, no more questions for now—listen closely. #id:137
mysterious_demeter: A long time ago, this planet was full of life. Plants thrived in the mountains, beneath the seas, and across the plains. #id:138
mysterious_demeter: A long time ago, our planet, Tau, was full of life. Plants thrived in the mountains, beneath the seas, and across the plains. #id:138
mysterious_demeter: But now, this world is a wasteland. You'll see when you step out of the base. #id:139
mysterious_demeter: Something happened last year... the [color=#FFA617][b]Talion[/b][/color]—a unique material capable of spawning new life forms when shattered—has reappeared. #id:13a
mysterious_demeter: Now, with the help of this material, we can bring this planet back to life. #id:13b
@@ -15,7 +15,7 @@ demeter: You are surely wondering where we are now... #id:143
audio "res://common/audio_manager/assets/sfx/dialogs/voices/great_2.wav"
- Yes, among a lot of other questions ! So where am I ? #id:145
audio "res://common/audio_manager/assets/sfx/dialogs/voices/hmm_2.wav"
demeter: Actually, you are in one of fivehuman bases on this planet, [color=#FFA617][b]Astra[/b][/color]. This room is connected to the one where you were activated, but I had to make you travel across the surface to test your abilities. #id:146
demeter: Actually, you are in one of five human bases on this planet, [color=#FFA617][b]Astra[/b][/color]. This room is connected to the one where you were activated, but I had to make you travel across the surface to test your abilities. #id:146
- Wait, can you explain what I did up there? #id:147
audio "res://common/audio_manager/assets/sfx/dialogs/voices/hmm_2.wav"
demeter: You started replanting this planet, and in doing so, you generated plant energy that will be very useful to us... It's a long-term task; I hope you enjoy it! #id:148
@@ -7,7 +7,7 @@ demeter: I'm detecting the [color=#FFA617][b]Mercury base[/b][/color] from your
audio "res://common/audio_manager/assets/sfx/dialogs/voices/hm-hm_1.wav"
- Are you kidding? The battery is draining faster and faster, it's unbearable. #id:162
audio "res://common/audio_manager/assets/sfx/dialogs/voices/ohhh_2.wav"
demeter: It's already impressive that nothing has exploded on the ship yet. #id:163
demeter: ... #id:164
demeter: Can we just pretend I didn't say anything? I really don't want to wipe your memory again. #id:165
@@ -21,7 +21,7 @@ demeter: Can we just pretend I didn't say anything? I really don't want to wipe
- Wipe my memory? #id:16a
audio "res://common/audio_manager/assets/sfx/dialogs/voices/sorry_1.wav"
demeter: Let's just say you're not my first attempt... I don't want to discourage you as my previous attempts did... #id:16b
demeter: Anyway, there's enough in the base to repair the Internode, and I even found some O-800 models, I mean models identical to yours. #id:16c
demeter: I'd like you to find the base and synchronize your data with it. That will allow you to come back here if you run out of energy. #id:16d
demeter: See you [color=#FFA617][b]Orchid[/b][/color] ! #id:16e
@@ -1,6 +1,6 @@
- Hello, Demeter! #id:1c9
...
... #id:2aa
- Demeter? #id:1cb
@@ -8,7 +8,7 @@ label energy_choice #id:238
jump energy_choice
- Start experimental Talion generator #id:23d
Injecting [color=#FFA617][b]Talion[/b][/color] into generator; starting up. #id:23e
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/freesound_community-generator-synthetic-63166.mp3"
Energy flow unstable. 20% chance of incident #id:23f
@@ -25,7 +25,7 @@ func mutate_growing_time(_plant_data: PlantData, growing_time: int) -> int:
return growing_time + maxi(0, get_growing_time_increase())
func get_growing_time_increase()->int:
return 2
return 1
func get_score_multiplier()->float:
return 0.5 * level
+28 -1
View File
@@ -8,6 +8,8 @@
[ext_resource type="Script" uid="uid://b1mmtgmi5oq86" path="res://entities/player/scripts/player_sprite.gd" id="5_fkugw"]
[ext_resource type="Texture2D" uid="uid://51255tpyl6vj" path="res://common/icons/no-bolt.svg" id="7_26q78"]
[ext_resource type="AudioStream" uid="uid://cv5avkd3qekt7" path="res://common/audio_manager/assets/sfx/movement/movement.wav" id="7_qiwj3"]
[ext_resource type="PackedScene" uid="uid://edxmvtvtipwq" path="res://gui/game/alert/alert.tscn" id="9_bectd"]
[ext_resource type="Shader" uid="uid://ckowuw2qsgrks" path="res://common/vfx/materials/shaders/glitch.gdshader" id="10_wvtmh"]
[sub_resource type="CircleShape2D" id="CircleShape2D_sglur"]
radius = 13.0
@@ -284,6 +286,13 @@ _data = {
&"float": SubResource("Animation_8fjmc")
}
[sub_resource type="ShaderMaterial" id="ShaderMaterial_bectd"]
shader = ExtResource("10_wvtmh")
shader_parameter/pixel_size = 3.000000095
shader_parameter/vhs_intensity = 1.0000000475
shader_parameter/opacity = 0.5
shader_parameter/double_vision_split = 0.0030000001425
[node name="Player" type="CharacterBody2D" unique_id=447849413]
script = ExtResource("1_abrql")
@@ -317,7 +326,7 @@ position = Vector2(0.99999994, -17)
scale = Vector2(0.221, 0.221)
sprite_frames = SubResource("SpriteFrames_a1qjk")
animation = &"left"
frame_progress = 0.2383069
frame_progress = 0.9704077
offset = Vector2(0, -150)
script = ExtResource("5_fkugw")
wanted_orientation = 7
@@ -371,3 +380,21 @@ debug_use_custom = true
debug_path_custom_color = Color(0.5882353, 0.7019608, 0.85882354, 0.3019608)
debug_path_custom_point_size = 0.0
debug_path_custom_line_width = 1.0
[node name="LowSignalAlertCanvasLayer" type="CanvasLayer" parent="." unique_id=1137781278]
layer = 30
[node name="GlitchEffect" type="ColorRect" parent="LowSignalAlertCanvasLayer" unique_id=1835706901]
unique_name_in_owner = true
visible = false
material = SubResource("ShaderMaterial_bectd")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="LowSignalAlert" parent="LowSignalAlertCanvasLayer" unique_id=496897031 instance=ExtResource("9_bectd")]
unique_name_in_owner = true
title = "LOW_SIGNAL"
text = "RETURN_NEAR_PLANTATION_ZONE"
+26
View File
@@ -8,6 +8,9 @@ const TURN_ANIMATION_MINIMUM_THRESHOLD = 0.2
const SPEED = 350
const JUST_DROPPED_ITEM_UPDATE_INTERVAL = 1.
const LOW_SIGNAL_ALERT_DISTANCE = 500
const BACKROOM_DISTANCE = 2000
signal player_updated(player: Player)
signal upgraded
@@ -30,11 +33,22 @@ var instruction : Instruction = null :
if instruction and is_node_ready():
instruction.spawn_indicator(self)
var show_low_signal : bool = false :
set(v):
if is_node_ready():
%GlitchEffect.visible = show_low_signal
if v and not show_low_signal:
%LowSignalAlert.appear()
elif not v and show_low_signal:
%LowSignalAlert.disappear()
show_low_signal = v
var just_dropped_item_objects : Array = []
var last_just_dropped_item_objects_updated := 0.
var last_instruction_done := 0.
var elapsed_time := 0.
var backrooms_loaded := false
@onready var preview_zone : ActionZone = await setup_action_zone(Vector2.ZERO, null)
@onready var action_zone : ActionZone = await setup_action_zone(Vector2.ZERO, null)
@@ -122,6 +136,7 @@ func _process(delta):
take_surrounding_seeds()
move_and_slide()
handle_off_map()
func _on_data_changed(pd : PlayerData):
%NoEnergyLeftIcon.visible = pd.energy == 0
@@ -130,6 +145,17 @@ func _on_inventory_updated(_inventory: Inventory):
setup_preview_zone(data.inventory.get_item())
emit_signal("player_updated", self)
func handle_off_map():
show_low_signal = global_position.length() > Region.REGION_LIMIT + LOW_SIGNAL_ALERT_DISTANCE
if global_position.length() > Region.REGION_LIMIT + BACKROOM_DISTANCE and not backrooms_loaded:
SteamConnection.unlock_achievement("ACH_STW_TOO_FAR")
backrooms_loaded = true
region.data.player_position = region.data.player_spawn
AudioManager.stop_all_ambiances()
AudioManager.stop_all_musics()
SceneManager.change_to_scene(BackroomsScene.new())
func update_just_dropped_item_objects():
last_just_dropped_item_objects_updated = elapsed_time
var overlapping_areas = (%InteractArea2D as Area2D).get_overlapping_areas()
+35 -28
View File
@@ -19,7 +19,7 @@ length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("NoRechargeLeftBaneer:custom_minimum_size")
tracks/0/path = NodePath("Baneer:custom_minimum_size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
@@ -31,26 +31,26 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/Label:modulate")
tracks/1/path = NodePath(".:visible")
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, 0)]
"update": 1,
"values": [false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:visible")
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": [false]
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_bmajk"]
@@ -71,26 +71,26 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/Label:modulate")
tracks/1/path = NodePath("Baneer:custom_minimum_size")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.06666667, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
"values": [Vector2(0, 0), Vector2(0, 50)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("NoRechargeLeftBaneer:custom_minimum_size")
tracks/2/interp = 1
tracks/2/path = NodePath(".:modulate:a")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.06666667, 0.5),
"times": PackedFloat32Array(0.06666667, 0.23333333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(0, 50)]
"values": [0.0, 1.0]
}
[sub_resource type="Animation" id="Animation_tr7ge"]
@@ -99,7 +99,7 @@ length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("NoRechargeLeftBaneer:custom_minimum_size")
tracks/0/path = NodePath("Baneer:custom_minimum_size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
@@ -111,7 +111,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/Label:modulate")
tracks/1/path = NodePath("TitleLabel:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -139,7 +139,7 @@ length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("NoRechargeLeftBaneer:custom_minimum_size")
tracks/0/path = NodePath("Baneer:custom_minimum_size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
@@ -151,7 +151,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/Label:modulate")
tracks/1/path = NodePath("TitleLabel:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -183,31 +183,38 @@ _data = {
[node name="Alert" type="VBoxContainer" unique_id=496897031]
visible = false
anchors_preset = 10
modulate = Color(1, 0.6509804, 0.09019608, 0)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme = ExtResource("1_bmajk")
theme_override_constants/separation = 0
theme_override_constants/separation = 19
alignment = 1
script = ExtResource("2_tr7ge")
text = "Hello"
[node name="NoRechargeLeftBaneer" type="TextureRect" parent="." unique_id=23924313]
[node name="TitleLabel" type="Label" parent="." unique_id=1564390461]
unique_name_in_owner = true
layout_mode = 2
label_settings = ExtResource("2_jqcc2")
horizontal_alignment = 1
[node name="Baneer" type="TextureRect" parent="." unique_id=23924313]
layout_mode = 2
texture = SubResource("GradientTexture2D_j7f85")
expand_mode = 1
stretch_mode = 1
[node name="TextLabel" type="Label" parent="." unique_id=1261954978]
unique_name_in_owner = true
layout_mode = 2
horizontal_alignment = 1
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=813474581]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer" unique_id=1564390461]
unique_name_in_owner = true
modulate = Color(1, 1, 1, 0)
layout_mode = 2
text = "Hello"
label_settings = ExtResource("2_jqcc2")
horizontal_alignment = 2
[node name="AppearAnimationPlayer" type="AnimationPlayer" parent="." unique_id=1593798240]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_jqcc2")
+11 -1
View File
@@ -2,11 +2,21 @@
extends VBoxContainer
class_name Alert
@export var title = "" :
set(t):
title = t
if is_node_ready():
%TitleLabel.text = t
@export var text = "" :
set(t):
text = t
if is_node_ready():
%Label.text = t
%TextLabel.text = t
func _ready():
title = title
text = text
func appear(
with_anim : bool = not visible
+19 -12
View File
@@ -32,23 +32,30 @@ func _ready():
GameInfo.game_data.item_announced.append(i.name)
)
if (
GameInfo.game_data.max_energy_announced != GameInfo.game_data.player_data.max_energy
):
if GameInfo.game_data.max_energy_announced < GameInfo.game_data.player_data.max_energy:
announce_objects.append(AnnounceModel.new(
tr("UPGRADED_MAX_ENERGY_TO_%d") % GameInfo.game_data.player_data.max_energy
))
GameInfo.game_data.max_energy_announced = GameInfo.game_data.player_data.max_energy
var player_max_energy = GameInfo.game_data.progression_data.get_story_step().get_player_max_energy(
GameInfo.game_data.current_run.difficulty_setting
)
var player_max_inventory = GameInfo.game_data.progression_data.get_story_step().get_player_max_inventory(
GameInfo.game_data.current_run.difficulty_setting
)
if (
GameInfo.game_data.max_inventory_announced != GameInfo.game_data.player_data.inventory.seeds_size
GameInfo.game_data.max_energy_announced != player_max_energy
):
if GameInfo.game_data.max_inventory_announced < GameInfo.game_data.player_data.inventory.seeds_size:
if GameInfo.game_data.max_energy_announced < player_max_energy:
announce_objects.append(AnnounceModel.new(
tr("UPGRADED_INVENTORY_SIZE_TO_%d") % GameInfo.game_data.player_data.inventory.seeds_size
tr("UPGRADED_MAX_ENERGY_TO_%d") % player_max_energy
))
GameInfo.game_data.max_inventory_announced = GameInfo.game_data.player_data.inventory.seeds_size
GameInfo.game_data.max_energy_announced = player_max_energy
if (
GameInfo.game_data.max_inventory_announced != player_max_inventory
):
if GameInfo.game_data.max_inventory_announced < player_max_inventory:
announce_objects.append(AnnounceModel.new(
tr("UPGRADED_INVENTORY_SIZE_TO_%d") % player_max_inventory
))
GameInfo.game_data.max_inventory_announced = player_max_inventory
-5
View File
@@ -2,7 +2,6 @@
[ext_resource type="Script" uid="uid://cqao7n800qy40" path="res://gui/game/scripts/game_gui.gd" id="1_udau0"]
[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="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"]
@@ -111,10 +110,6 @@ grow_vertical = 2
mouse_filter = 2
texture = SubResource("GradientTexture2D_p6blc")
[node name="Alert" parent="." unique_id=496897031 instance=ExtResource("2_ykapk")]
unique_name_in_owner = true
modulate = Color(1, 0, 0.43137252, 1)
[node name="ScoreParticles" type="Control" parent="." unique_id=842190807]
unique_name_in_owner = true
layout_mode = 3
+2 -2
View File
@@ -16,7 +16,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true
config/name="Seeding The Wasteland"
config/description="Seeding planets is a survival, managment and cosy game in which you play a little gardener robot."
config/version="0.1.0"
config/version="0.1.1"
run/main_scene="uid://c5bruelvqbm1k"
config/features=PackedStringArray("4.7", "Forward Plus")
boot_splash/bg_color=Color(0.0627451, 0.05882353, 0.16862746, 1)
@@ -119,7 +119,7 @@ translation/add_separator=false
variables={
"estia_dialog_choice": 0
}
translation/id_counter=681
translation/id_counter=682
translation/locales=[]
history/visited_event_history_enabled=true
audio/type_sound_bus="Sfx"
+18 -1
View File
@@ -3,6 +3,8 @@
[ext_resource type="Script" uid="uid://cwvmwpcuvo4mq" path="res://stages/3d_scenes/backrooms/scripts/backrooms.gd" id="1_5hv6p"]
[ext_resource type="PackedScene" uid="uid://iu6snlm18qqj" path="res://stages/3d_scenes/backrooms/resources/backroom.blend" id="2_xnw3x"]
[ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="3_7gjj1"]
[ext_resource type="AudioStream" uid="uid://cr0m1m31ityxl" path="res://stages/3d_scenes/backrooms/resources/freesound_community-neonlight_highpitch-7058.mp3" id="4_7gjj1"]
[ext_resource type="PackedScene" uid="uid://b2tn4biidxwdo" path="res://entities/player_3d/dead_orchid.tscn" id="5_msdly"]
[sub_resource type="Environment" id="Environment_y4ueh"]
background_energy_multiplier = 1.01
@@ -24,7 +26,7 @@ environment = SubResource("Environment_y4ueh")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0022678375, -0.0022674203, 0.00014042854)
[node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("3_7gjj1")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.18744713, 1.1111141, 4.915328)
transform = Transform3D(0.98413754, 0, -0.17740725, 0, 1, 0, 0.17740725, 0, 0.98413754, -0.18744713, 1.1111141, -67.26987)
[node name="Outline" parent="Player3D/Camera3D" parent_id_path=PackedInt32Array(549819967, 2091917091) index="0" unique_id=1477584785]
visible = false
@@ -32,4 +34,19 @@ visible = false
[node name="InteractTutorial" parent="Player3D/CanvasLayer/3dTutorial" parent_id_path=PackedInt32Array(549819967, 259323543) index="1" unique_id=1117243867]
visible = false
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=705358424]
stream = ExtResource("4_7gjj1")
volume_db = 0.479
autoplay = true
bus = &"Ambiance"
[node name="DeadOrchid" parent="." unique_id=1056532235 instance=ExtResource("5_msdly")]
transform = Transform3D(0.1392759, 0.34471768, 0.9283167, -0.05114577, 0.9387064, -0.3409023, -0.9889319, 0, 0.14837003, 4.0246277, 0.4754955, -96.991806)
[node name="DeadOrchid2" parent="." unique_id=1647290799 instance=ExtResource("5_msdly")]
transform = Transform3D(0.1392759, 0.34471768, 0.9283167, -0.05114577, 0.9387064, -0.3409023, -0.9889319, 0, 0.14837003, 36.75826, 0.4754955, -55.182575)
[node name="DeadOrchid3" parent="." unique_id=1088417260 instance=ExtResource("5_msdly")]
transform = Transform3D(0.1392759, 0.34471768, 0.9283167, -0.05114577, 0.9387064, -0.3409023, -0.9889319, 0, 0.14837003, 5.560206, 0.4754955, -123.28887)
[editable path="Player3D"]
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://cr0m1m31ityxl"
path="res://.godot/imported/freesound_community-neonlight_highpitch-7058.mp3-271ea6e3bc4882988338869dcd4c4fb0.mp3str"
[deps]
source_file="res://stages/3d_scenes/backrooms/resources/freesound_community-neonlight_highpitch-7058.mp3"
dest_files=["res://.godot/imported/freesound_community-neonlight_highpitch-7058.mp3-271ea6e3bc4882988338869dcd4c4fb0.mp3str"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4
@@ -100,7 +100,7 @@ tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(1, 1, 1), Vector3(1.2, 1.2, 1.2), Vector3(1, 1, 1)]
"values": [Vector3(1, 1, 1), Vector3(1.1, 1.1, 1.1), Vector3(1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2ofl5"]
@@ -147,7 +147,7 @@ tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(1, 1.0000002, 1), Vector3(1.2, 1.2, 1.2), Vector3(1, 1.0000002, 1)]
"values": [Vector3(1, 1.0000002, 1), Vector3(1.1, 1.1, 1.1), Vector3(1, 1.0000002, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_h8fs1"]
@@ -191,7 +191,7 @@ tracks/0/keys = {
"times": PackedFloat32Array(0.033333335, 0.53333336, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(1, 1.0000002, 1), Vector3(1.2, 1.2, 1.2), Vector3(1, 1.0000002, 1)]
"values": [Vector3(1, 1.0000002, 1), Vector3(1.1, 1.1, 1.1), Vector3(1, 1.0000002, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_cvt2p"]
@@ -208,7 +208,6 @@ metadata/_custom_type_script = "uid://fnu2d6wna4yc"
[node name="Dashboard" type="Node3D" unique_id=1374334508]
script = ExtResource("1_vks67")
destination_text = null
[node name="Background" type="Sprite3D" parent="." unique_id=747271324]
transform = Transform3D(-1, 0, 8.742278e-08, 5.2901907e-08, 0.79612875, 0.6051273, -6.9599785e-08, 0.6051273, -0.79612875, 0, 0.85765254, 1.1502768)
@@ -286,7 +285,7 @@ vertical_alignment = 1
[node name="DestinationScreen" type="Sprite3D" parent="." unique_id=1472417379]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 1.4130048, 1.044728)
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 1.5415668, 0.71455646)
pixel_size = 0.003
texture = SubResource("ViewportTexture_y1ysr")
@@ -337,8 +336,8 @@ metadata/_custom_type_script = "uid://bj4d1x8n8ina"
shape = SubResource("SphereShape3D_vlkbw")
[node name="MainScreenSprite" type="Sprite3D" parent="MainScreen" unique_id=1081515212]
transform = Transform3D(-1, 8.0014914e-08, 5.4146472e-08, 7.923836e-08, 0.35859588, 0.9334929, 5.5276644e-08, 0.9334929, -0.35859588, 0, 0, 0)
pixel_size = 0.003
transform = Transform3D(-1, 8.0014914e-08, 5.4146472e-08, 7.923836e-08, 0.35859588, 0.9334929, 5.5276644e-08, 0.9334929, -0.35859588, 0, -0.0066892505, 0)
pixel_size = 0.002
texture = SubResource("ViewportTexture_qbi61")
[node name="SubViewport" type="SubViewport" parent="MainScreen/MainScreenSprite" unique_id=1101534363]
@@ -30,11 +30,12 @@ func set_state(s := state):
interactable = true
State.READY_TO_LAND:
icon.texture = LAND_ICON
label.text = tr("LAND_SHIP")
label.text = tr("LAND_SHIP_IN_%S") % run_point.region_parameter.get_region_name()
interactable = true
inspectable = true
State.WAITING_CHOICE:
icon.texture = WAITING_ICON
label.text = ""
label.text = "CHOOSE_A_REGION"
State.LANDED:
icon.texture = RUN_POINT_ICON
label.text = "" if not run_point else run_point.region_parameter.get_region_name()
@@ -65,6 +65,7 @@ func update_dialogs():
if len(phone_dialogs):
await get_tree().create_timer(randf_range(0.5,3.)).timeout
ring_phone()
@@ -104,9 +105,8 @@ func _on_main_screen_activated():
land.emit()
GameInfo.game_data.ship_in_space = false
%PlantInfoScreen.update_plant_info()
get_tree().create_timer(randf_range(0,3)).timeout.connect(
func(): update_dialogs()
)
update_dialogs()
else :
take_off.emit()
GameInfo.game_data.ship_in_space = true
@@ -116,9 +116,7 @@ func _on_main_screen_activated():
var gauge_tween = get_tree().create_tween()
gauge_tween.tween_property(%Gauge3D,"progress",0,3.)
get_tree().create_timer(randf_range(0,3)).timeout.connect(
func(): update_dialogs()
)
update_dialogs()
%Exit.interactable = can_exit()
update_dashboard()
@@ -161,6 +159,7 @@ func update_dashboard(with_animation := true):
if GameInfo.game_data.ship_in_space:
if choosen_run_point:
dashboard.main_screen_run_point = choosen_run_point
dashboard.main_screen_state = DashboardMainScreen.State.READY_TO_LAND
dashboard.status_text = ""
else:
@@ -16,6 +16,8 @@ dest_files=["res://.godot/imported/vending_machine.blend-d2b640c8f4d0c595cec0b5e
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
@@ -57,7 +59,7 @@ blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/vertex_colors=2
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
@@ -71,3 +73,4 @@ blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2
gltf/texture_map_mode=0
@@ -17,7 +17,7 @@ signal used
@export_tool_button("Fall Object 1", "Callable") var fall_object_2_action = fall_object_2
@export var state : State = State.CHOOSE : set = set_state
@export var choose_state : ChooseState = ChooseState.NONE
@export var choose_state : ChooseState = ChooseState.NONE : set = set_choose_state
@export var artefact_1 : Artefact = null : set = set_artefact_1
@export var artefact_2 : Artefact = null : set = set_artefact_2
@export var price : VendingMachinePrice = null : set = set_price
@@ -39,6 +39,7 @@ func update():
set_artefact_2()
set_state()
set_price()
set_choose_state()
func set_state(s := state):
state = s
@@ -105,6 +106,12 @@ func set_price(p := price):
%PayIcon.modulate = Color.WHITE if p.can_pay(GameInfo.game_data.player_data) else Color.RED
price = p
func set_choose_state(cs := choose_state):
if is_node_ready():
%SelectTop.visible = cs == ChooseState.FIRST
%SelectBottom.visible = cs == ChooseState.SECOND
choose_state = cs
func fall_object_1():
fall_object([
%Line1,
@@ -9,6 +9,7 @@
[ext_resource type="Texture2D" uid="uid://3slhocr5wy3w" path="res://common/icons/hand-stop.svg" id="6_c54xj"]
[ext_resource type="Texture2D" uid="uid://cwewx7cdy085h" path="res://common/icons/help-hexagon.svg" id="7_1vufv"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="8_5gq8t"]
[ext_resource type="Texture2D" uid="uid://80gifgp26h2g" path="res://common/icons/check.svg" id="9_ia2hc"]
[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="9_p1py0"]
[ext_resource type="Script" uid="uid://cpdtt25r2ne23" path="res://stages/3d_scenes/vending_machine_room/scripts/vending_machine_select_interactable.gd" id="10_js246"]
[ext_resource type="AudioStream" uid="uid://bynxc84w03so4" path="res://stages/3d_scenes/vending_machine_room/assets/sounds/alex_jauk-vending-machines-ambient-noise-236027.mp3" id="12_js246"]
@@ -72,6 +73,23 @@ viewport_path = NodePath("PriceScreen/PriceScreenContent")
font = ExtResource("8_5gq8t")
font_size = 30
[sub_resource type="Gradient" id="Gradient_vrdoi"]
colors = PackedColorArray(1, 0, 0.4333334, 0.78431374, 1, 0.6511667, 0.089999974, 0.78431374)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_g4v7s"]
gradient = SubResource("Gradient_vrdoi")
width = 102
height = 42
fill_from = Vector2(0.5, 1)
fill_to = Vector2(0.5, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_ia2hc"]
gradient = SubResource("Gradient_vrdoi")
width = 109
height = 47
fill_from = Vector2(0.5, 1)
fill_to = Vector2(0.5, 0)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_p1py0"]
radius = 0.23339844
height = 1.2451172
@@ -242,6 +260,32 @@ texture = ExtResource("9_p1py0")
expand_mode = 1
stretch_mode = 5
[node name="SelectTop" type="Sprite3D" parent="." unique_id=1013628083]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.09805095, 0.83888793, -0.5682117)
shaded = true
texture = SubResource("GradientTexture2D_g4v7s")
[node name="Sprite3D" type="Sprite3D" parent="SelectTop" unique_id=1049079427]
transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 0, 0, -0.018707275)
pixel_size = 0.005
shaded = true
double_sided = false
texture = ExtResource("9_ia2hc")
[node name="SelectBottom" type="Sprite3D" parent="." unique_id=656087871]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.09805095, 0.3876989, -0.5682117)
shaded = true
texture = SubResource("GradientTexture2D_ia2hc")
[node name="Sprite3D" type="Sprite3D" parent="SelectBottom" unique_id=1406817348]
transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 0, 0, -0.018707275)
pixel_size = 0.005
shaded = true
double_sided = false
texture = ExtResource("9_ia2hc")
[node name="Select1Interactable" type="Area3D" parent="." unique_id=957239971]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.08462322, 0.884176, -0.18582645)
@@ -328,7 +372,6 @@ bus = &"Sfx"
[node name="ArtefactAnnounce" parent="." unique_id=1447182082 instance=ExtResource("13_tvcj6")]
unique_name_in_owner = true
visible = false
announce_artefact = null
[connection signal="clicked" from="Select1Interactable" to="." method="_on_select_1_interactable_clicked"]
+19 -19
View File
@@ -49,26 +49,26 @@ var data_last_updated = 0.
var plant_grid : PlantGrid
# Cheat Code
func _input(_e):
if (
Input.is_action_pressed("drop")
and Input.is_action_pressed("move_right")
and Input.is_action_pressed("move_left")
and Input.is_action_just_pressed("action")
):
if data.state != RegionData.State.SUCCEEDED:
data.succeded.emit()
data.state = RegionData.State.SUCCEEDED
# data.update()
# func _input(_e):
# if (
# Input.is_action_pressed("drop")
# and Input.is_action_pressed("move_right")
# and Input.is_action_pressed("move_left")
# and Input.is_action_just_pressed("action")
# ):
# if data.state != RegionData.State.SUCCEEDED:
# data.succeded.emit()
# data.state = RegionData.State.SUCCEEDED
# # data.update()
if (
Input.is_action_pressed("drop")
and Input.is_action_pressed("move_right")
and Input.is_action_pressed("move_left")
and Input.is_action_just_pressed("move_pointer")
):
data.charges = 0
data.state = RegionData.State.FAILED
# if (
# Input.is_action_pressed("drop")
# and Input.is_action_pressed("move_right")
# and Input.is_action_pressed("move_left")
# and Input.is_action_just_pressed("move_pointer")
# ):
# data.charges = 0
# data.state = RegionData.State.FAILED
func _init():
data = GameInfo.game_data.current_region_data
+1 -1
View File
@@ -69,7 +69,7 @@ func _init(
charges = parameter.get_charge()
objective = parameter.get_objective()
region_first_name = parameter.region_first_name;
region_name_key = parameter.region_name_key;
region_name_key = parameter.region_type_key;
region_seed = parameter.get_region_seed()
rock_threshold = parameter.get_rock_threshold()
decontamination_threshold = parameter.get_decontamination_threshold()
@@ -15,50 +15,31 @@ const REGION_TYPES_CSV := "res://translation/names/location_types.csv"
const REGION_NAMES_FILE := "res://translation/names/location_names.csv"
@export var region_first_name: String
@export var region_name_key: String
@export var region_type_key: String
@export var objective: int
@export var charge: int
@export var region_seed: int
@export var modifiers: Array[RegionModifier]
func _init(
_name = "",
_region_first_name : String = "",
_region_type_key : String = "",
_modifiers: Array[RegionModifier] = [],
_region_seed = randi(),
):
set_random_region_name()
region_first_name = _region_first_name
region_type_key = _region_type_key
modifiers = _modifiers
region_seed = _region_seed
func get_random_region_first_name() -> String:
var name_file := FileAccess.open(REGION_NAMES_FILE, FileAccess.READ)
var n_names := name_file.get_line().to_int()
var name_ind := randi_range(0, n_names)
var first_name := name_file.get_line()
for i in range(name_ind):
first_name = name_file.get_line()
return first_name
func get_random_region_name_key() -> String:
var place_file := FileAccess.open(REGION_TYPES_CSV, FileAccess.READ)
var n_places := place_file.get_line().split(",")[0].to_int()
var place_ind := randi_range(0, n_places)
var place_key := place_file.get_line().split(",")[0]
for i in range(place_ind):
place_key = place_file.get_line().split(",")[0]
return place_key
func set_random_region_name():
region_first_name = get_random_region_first_name()
if randf() > JUST_NAME_PROBABILITY:
region_name_key = get_random_region_name_key()
else:
region_name_key = ""
if region_first_name == "" or region_type_key == "":
region_first_name = Random.RANDOM_REGION_NAME_POOL.pick_random()
region_type_key = Random.RANDOM_REGION_TYPE_POOL.pick_random()
func get_region_name() -> String:
var n := region_first_name
if region_name_key != "":
n = tr(region_name_key).format({"name": region_first_name})
if region_type_key != "":
n = tr(region_type_key).format({"name": region_first_name})
for m in modifiers:
n = m.modify_region_name(n)
+1 -1
View File
@@ -76,7 +76,7 @@ func _process(delta):
%Planet3d.rotate(Vector3.UP, planet_rotation.x * delta)
%Planet3d.rotate(Vector3.RIGHT, planet_rotation.y * delta)
if not planet_spin_ach_sended and planet_rotation.length() > 100:
if not planet_spin_ach_sended and planet_rotation.length() > 200:
planet_spin_ach_sended = true
SteamConnection.unlock_achievement(SteamConnection.ACH_SPIN_PLANET)
@@ -21,7 +21,7 @@ Choice/135/text,What are you?,Qu'est-ce que vous êtes ?
Choice/135/disabled_text,,
Text/136/text,"I'm like you. A robot, an artificial intelligence, a machine... Our creators gave us several names.","Je suis comme toi. Un robot, une intelligence artificielle, une machine... Nos créateurs nous ont donné plusieurs noms."
Text/137/text,"Okay, no more questions for now—listen closely.","Ok, plus de questions pour le moment, écoute-moi bien."
Text/138/text,"A long time ago, this planet was full of life. Plants thrived in the mountains, beneath the seas, and across the plains.","Il y a longtemps, cette planète était pleine de vie. Des plantes prospéraient dans les montagnes, sous les mers et sur les plaines."
Text/138/text,"A long time ago, our planet, Tau, was full of life. Plants thrived in the mountains, beneath the seas, and across the plains.","Il y a longtemps, notre planète, Tau, était pleine de vie. Des plantes prospéraient dans les montagnes, sous les mers et sur les plaines."
Text/139/text,"But now, this world is a wasteland. You'll see when you step out of the base.","Mais maintenant, ce monde est une terre désolée. Tu verras quand tu sortiras de la base."
Text/13a/text,Something happened last year... the [color=#FFA617][b]Talion[/b][/color]—a unique material capable of spawning new life forms when shattered—has reappeared.,"Quelque-chose est arrivé l'année dernière... Le [color=#FFA617][b]Talion[/b][/color], un matériau unique qui peut engendrer de nouvelles formes de vies quand il est brisé, est réapparu."
Text/13b/text,"Now, with the help of this material, we can bring this planet back to life.","Maintenant et avec l'aide de ce matériau, on peut ramener cette planète à la vie."
1 keys en fr
21 Choice/135/disabled_text
22 Text/136/text I'm like you. A robot, an artificial intelligence, a machine... Our creators gave us several names. Je suis comme toi. Un robot, une intelligence artificielle, une machine... Nos créateurs nous ont donné plusieurs noms.
23 Text/137/text Okay, no more questions for now—listen closely. Ok, plus de questions pour le moment, écoute-moi bien.
24 Text/138/text A long time ago, this planet was full of life. Plants thrived in the mountains, beneath the seas, and across the plains. A long time ago, our planet, Tau, was full of life. Plants thrived in the mountains, beneath the seas, and across the plains. Il y a longtemps, cette planète était pleine de vie. Des plantes prospéraient dans les montagnes, sous les mers et sur les plaines. Il y a longtemps, notre planète, Tau, était pleine de vie. Des plantes prospéraient dans les montagnes, sous les mers et sur les plaines.
25 Text/139/text But now, this world is a wasteland. You'll see when you step out of the base. Mais maintenant, ce monde est une terre désolée. Tu verras quand tu sortiras de la base.
26 Text/13a/text Something happened last year... the [color=#FFA617][b]Talion[/b][/color]—a unique material capable of spawning new life forms when shattered—has reappeared. Quelque-chose est arrivé l'année dernière... Le [color=#FFA617][b]Talion[/b][/color], un matériau unique qui peut engendrer de nouvelles formes de vies quand il est brisé, est réapparu.
27 Text/13b/text Now, with the help of this material, we can bring this planet back to life. Maintenant et avec l'aide de ce matériau, on peut ramener cette planète à la vie.
@@ -8,7 +8,7 @@ Choice/144/text,"No, everything is perfectly clear to me!","Non, tout est parfai
Choice/144/disabled_text,,
Choice/145/text,"Yes, among a lot of other questions ! So where am I ?","Oui, c'est l'une de mes nombreuses questions ! Où suis-je ?"
Choice/145/disabled_text,,
Text/146/text,"Actually, you are in one of fivehuman bases on this planet, [color=#FFA617][b]Astra[/b][/color]. This room is connected to the one where you were activated, but I had to make you travel across the surface to test your abilities.","En fait, tu es dans l'une des 5 bases humaines de cette planète, [color=#FFA617][b]Astra[/b][/color]. Cette salle est connectée à celle où tu t'es réveillé, mais je t'ai fait passer par la surface pour tester tes capacités."
Text/146/text,"Actually, you are in one of five human bases on this planet, [color=#FFA617][b]Astra[/b][/color]. This room is connected to the one where you were activated, but I had to make you travel across the surface to test your abilities.","En fait, tu es dans l'une des 5 bases humaines de cette planète, [color=#FFA617][b]Astra[/b][/color]. Cette salle est connectée à celle où tu t'es réveillé, mais je t'ai fait passer par la surface pour tester tes capacités."
Choice/147/text,"Wait, can you explain what I did up there?","Attendez, pouvez-vous m'expliquer ce que j'ai fait là-haut ?"
Choice/147/disabled_text,,
Text/148/text,"You started replanting this planet, and in doing so, you generated plant energy that will be very useful to us... It's a long-term task; I hope you enjoy it!","Tu as commencé à replanter cette planète, et par la même occasion, tu as généré de l'énergie végétale qui nous sera très utile... C'est un travail de longue haleine, j'espère que ça te plaît !"
1 keys en fr
8 Choice/144/disabled_text
9 Choice/145/text Yes, among a lot of other questions ! So where am I ? Oui, c'est l'une de mes nombreuses questions ! Où suis-je ?
10 Choice/145/disabled_text
11 Text/146/text Actually, you are in one of fivehuman bases on this planet, [color=#FFA617][b]Astra[/b][/color]. This room is connected to the one where you were activated, but I had to make you travel across the surface to test your abilities. Actually, you are in one of five human bases on this planet, [color=#FFA617][b]Astra[/b][/color]. This room is connected to the one where you were activated, but I had to make you travel across the surface to test your abilities. En fait, tu es dans l'une des 5 bases humaines de cette planète, [color=#FFA617][b]Astra[/b][/color]. Cette salle est connectée à celle où tu t'es réveillé, mais je t'ai fait passer par la surface pour tester tes capacités.
12 Choice/147/text Wait, can you explain what I did up there? Attendez, pouvez-vous m'expliquer ce que j'ai fait là-haut ?
13 Choice/147/disabled_text
14 Text/148/text You started replanting this planet, and in doing so, you generated plant energy that will be very useful to us... It's a long-term task; I hope you enjoy it! Tu as commencé à replanter cette planète, et par la même occasion, tu as généré de l'énergie végétale qui nous sera très utile... C'est un travail de longue haleine, j'espère que ça te plaît !
@@ -1,7 +1,7 @@
keys,en,fr
Choice/1c9/text,"Hello, Demeter!",Bonjour Demeter !
Choice/1c9/disabled_text,,
Text/1ca/text,...,...
Text/2aa/text,...,...
Choice/1cb/text,Demeter?,Demeter ?
Choice/1cb/disabled_text,,
Text/1cc/text,Oh... You've woken up... I see... Your low battery must have triggered an emergency startup...,Oh... Tu t'es réveillé... Je vois... Ton manque de batterie a dû effectuer un réveil d'urgence...
@@ -29,9 +29,9 @@ Text/1da/text,"Explore the world? Why not, after all? I've seen so much already,
Choice/1db/text,I want to help you.,Je veux t'aider
Choice/1db/disabled_text,,
Text/1dc/text,"Orchid... You can't help me right now; together, we wouldn't be able to restore everything for the humans...","Orchid... Tu ne peux plus m'aider pour le moment, à nous deux nous ne pourrons pas remettre tout en état pour les humains..."
Choice/1dd/text,I want to replant this planet.,e veux replanter cette planète
Choice/1dd/text,I want to replant this planet.,Je veux replanter cette planète
Choice/1dd/disabled_text,,
Text/1de/text,"Replant it? But if we can no longer make it habitable for humans, I don't quite understand the purpose.","a replanter ? Mais si nous ne pouvons plus la mettre en état pour les humains, je ne comprends pas bien dans quel but."
Text/1de/text,"Replant it? But if we can no longer make it habitable for humans, I don't quite understand the purpose.","La replanter ? Mais si nous ne pouvons plus la mettre en état pour les humains, je ne comprends pas bien dans quel but."
Text/1df/text,"Well, if you really want to do something, I suppose you could...","Enfin si tu veux vraiment faire quelque chose, j'imagine que tu pourrais..."
Text/1e0/text,"The last AI I spoke to is named Poseidon, and its servers are located in an underwater base not far from here.","La dernière IA avec laquelle j'ai parlé s'appelle Poséidon, et ses serveurs se trouvent dans une base sous-marine pas très loin d'ici."
Text/1e1/text,I suppose you could go and see what's going on there.,J'imagine que tu pourrais aller voir ce qu'il s'y passe.
1 keys en fr
2 Choice/1c9/text Hello, Demeter! Bonjour Demeter !
3 Choice/1c9/disabled_text
4 Text/1ca/text Text/2aa/text ... ...
5 Choice/1cb/text Demeter? Demeter ?
6 Choice/1cb/disabled_text
7 Text/1cc/text Oh... You've woken up... I see... Your low battery must have triggered an emergency startup... Oh... Tu t'es réveillé... Je vois... Ton manque de batterie a dû effectuer un réveil d'urgence...
29 Choice/1db/text I want to help you. Je veux t'aider
30 Choice/1db/disabled_text
31 Text/1dc/text Orchid... You can't help me right now; together, we wouldn't be able to restore everything for the humans... Orchid... Tu ne peux plus m'aider pour le moment, à nous deux nous ne pourrons pas remettre tout en état pour les humains...
32 Choice/1dd/text I want to replant this planet. e veux replanter cette planète Je veux replanter cette planète
33 Choice/1dd/disabled_text
34 Text/1de/text Replant it? But if we can no longer make it habitable for humans, I don't quite understand the purpose. a replanter ? Mais si nous ne pouvons plus la mettre en état pour les humains, je ne comprends pas bien dans quel but. La replanter ? Mais si nous ne pouvons plus la mettre en état pour les humains, je ne comprends pas bien dans quel but.
35 Text/1df/text Well, if you really want to do something, I suppose you could... Enfin si tu veux vraiment faire quelque chose, j'imagine que tu pourrais...
36 Text/1e0/text The last AI I spoke to is named Poseidon, and its servers are located in an underwater base not far from here. La dernière IA avec laquelle j'ai parlé s'appelle Poséidon, et ses serveurs se trouvent dans une base sous-marine pas très loin d'ici.
37 Text/1e1/text I suppose you could go and see what's going on there. J'imagine que tu pourrais aller voir ce qu'il s'y passe.
+4 -1
View File
@@ -191,7 +191,7 @@ RECHARGE_STATION_DESC_TEXT,"[b]You can recharge yourself here.[/b] When rechargi
TALION_CRISTAL,Talion Crystal,Cristal de Talion
TALION_CRISTAL_DESC_TEXT,"A pure form of Talion, cannot be broken or used","Une forme pure de Talion, ne peut pas être cassé ou utilisé"
TALION_CELL,Talion Cell,Cellule de Talion
TALION_CELL_DESC_TEXT,"This cell is filled with liquid form of Talion, let's see what's inside!","Cette cellule est remplie d'une forme liquide de Talio, voyons ce qu'il y a à l'intérieur !"
TALION_CELL_DESC_TEXT,"This cell is filled with liquid form of Talion, let's see what's inside!","Cette cellule est remplie d'une forme liquide de Talion, voyons ce qu'il y a à l'intérieur !"
ENERGY_CELL,Energy Cell,Cellule d'énergie
ENERGY_CELL_DESC_TEXT,"Some energy remain on this cell... Might be usefull. Can only be used when Orchid's energy is not full.","De l'énergie reste dans cette cellule... Cela pourra être utile. Peut seulement être utilisée si Orchid n'est pas complètement rechargé."
LISTEN_MESSAGE,"Listen message","Lire le message"
@@ -284,6 +284,7 @@ GIVE_UP,Give Up,Abandonner
DESTINATION,Destination,Destination
LOCATION,Location,Location
LAND_SHIP,Land Ship,Atterrir
LAND_SHIP_IN_%S,Land Ship in %s,Atterrir à %s
TAKE_OFF,Take Off,Décoller
NO_MORE_ENERGY,No more energy,Plus assez d'énergie
NO_RECHARGE_LEFT,"No recharge left, go to the ship to respawn","Pas de recharge restante, aller sur le vaisseau pour recommencer"
@@ -436,3 +437,5 @@ CONNECT_TO_HADES,Connect to Hades,Se connecter à Hadès
CONNECT_TO_ATHENA,Connect to Athena,Se connecter à Athéna
NO_ENERGY,No Energy,Pas d'énergie
THANK_YOU_FOR_YOUR_PURCHASE,Thank you for your purchase,Merci pour votre achat
LOW_SIGNAL,Low Signal,Signal Faible
RETURN_NEAR_PLANTATION_ZONE,Return near plantation zone,Retournez près de la zone de plantation
1 keys en fr
191 TALION_CRISTAL Talion Crystal Cristal de Talion
192 TALION_CRISTAL_DESC_TEXT A pure form of Talion, cannot be broken or used Une forme pure de Talion, ne peut pas être cassé ou utilisé
193 TALION_CELL Talion Cell Cellule de Talion
194 TALION_CELL_DESC_TEXT This cell is filled with liquid form of Talion, let's see what's inside! Cette cellule est remplie d'une forme liquide de Talio, voyons ce qu'il y a à l'intérieur ! Cette cellule est remplie d'une forme liquide de Talion, voyons ce qu'il y a à l'intérieur !
195 ENERGY_CELL Energy Cell Cellule d'énergie
196 ENERGY_CELL_DESC_TEXT Some energy remain on this cell... Might be usefull. Can only be used when Orchid's energy is not full. De l'énergie reste dans cette cellule... Cela pourra être utile. Peut seulement être utilisée si Orchid n'est pas complètement rechargé.
197 LISTEN_MESSAGE Listen message Lire le message
284 DESTINATION Destination Destination
285 LOCATION Location Location
286 LAND_SHIP Land Ship Atterrir
287 LAND_SHIP_IN_%S Land Ship in %s Atterrir à %s
288 TAKE_OFF Take Off Décoller
289 NO_MORE_ENERGY No more energy Plus assez d'énergie
290 NO_RECHARGE_LEFT No recharge left, go to the ship to respawn Pas de recharge restante, aller sur le vaisseau pour recommencer
437 CONNECT_TO_ATHENA Connect to Athena Se connecter à Athéna
438 NO_ENERGY No Energy Pas d'énergie
439 THANK_YOU_FOR_YOUR_PURCHASE Thank you for your purchase Merci pour votre achat
440 LOW_SIGNAL Low Signal Signal Faible
441 RETURN_NEAR_PLANTATION_ZONE Return near plantation zone Retournez près de la zone de plantation
+4 -4
View File
@@ -18,7 +18,7 @@ Demeter: Certainly; my systems were successfully installed exactly 12 seconds ag
User 47: Well, it's about time. Any news from Zeus?
Demeter: The entity Zeus has been attempting to contact me for precisely one hour and 37 minutes.
User 47: He's relentless! Alright, perfect—send him your report. In the meantime, can you remind me of the outside temperature?
Demeter: On the north face of Tau, the temperature is currently 32 degrees Celsius, and the air is 96% breathable.
Demeter: On the north face of the planet Tau, the temperature is currently 32 degrees Celsius, and the air is 96% breathable.
User 47: Very well, I should get ready now... One last thing: can you list your functions?
Demeter: My primary function is to ensure survival and assist humans, taking precedence over any other directives. Would you like me to detail the rest of my functions?
User 47: No, that's fine! Start a comprehensive diagnostic; I'll ask for the results when I get back from the excursion.","[color=#FFA617][b]Connexion de l'utilisateur 47 sur le terminal Boréa 193[/b][/color]
@@ -39,7 +39,7 @@ Demeter: Bien sûr, mes systèmes ont été correctement installés il y a exact
Utilisateur 47: Et bah, c'est pas trop tôt, des nouvelles de Zeus ?
Demeter: L'entité Zeus tente de me contacter depuis précisément une heure et 37 minutes.
Utilisateur 47: Oh le forceur ! Bon parfait, envoie lui ton rapport. En attendant est-ce que tu peux me rappeler la température extérieure ?
Demeter: Sur la face nord de Tau, il fait actuellement 32 degrés Celsius et l'air y est respirable à 96%.
Demeter: Sur la face nord de la planète Tau, il fait actuellement 32 degrés Celsius et l'air y est respirable à 96%.
Utilisateur 47: Très bien, je devrais me préparer maintenant... Une dernière chose, est-ce que tu peux m'énoncer tes fonctions?
Demeter: Ma fonction première est d'assurer la survie et d'assister les humains, au détriment de n'importe quelle directive. Veux-tu que je détaille le reste de mes fonctions ?
Utilisateur 47: Non ça ira ! Commence un diagnostic approfondi, je te demanderai le résultat quand je serais revenue de l'excursion."
@@ -72,7 +72,7 @@ Utilisateurs 47: Demeter, tu ne m'aides pas du tout là !
LOG_PLANET_DISCOVERY_2_TITLE_TEXT,"3152 - Planet Discovery 2","3152 - Découverte de la planète 2"
LOG_PLANET_DISCOVERY_2_CONTENT_TEXT,"[color=#FFA617][b]User 47 connecting via relay antenna 502[/b][/color]
[i]Corrupted data[/i]
User 47: So, that's why we ended up on Tau.
User 47: So, that's why we ended up on the planet Tau.
Demeter: Thank you; I didn't have that information in my knowledge base.
User 47: No problem, Demeter—don't hesitate to ask if you have any other questions!
Demeter: Sandy, you have now walked exactly one mile from your spacecraft. Please keep an eye on your heart rate; the ambient air, while breathable, hasn't been fully tested yet, and the billions of species on this planet could all...
@@ -86,7 +86,7 @@ User 47: It's an... orange crystal, just like the moss covering the ground.
Demeter: I've noticed it scattered all over the ground via the cameras at my disposal.
User 47: And... how strange... New plants are sprouting right before my eyes next to the debris... I'm bringing a sample back to the lab.","[color=#FFA617][b]Connexion de l'utilisateur 47 par l'antenne relais 502[/b][/color]
[i]Données corrompus[/i]
Utilisateur 47: Et donc c'est pour ça que nous sommes arrivés sur Tau.
Utilisateur 47: Et donc c'est pour ça que nous sommes arrivés sur la planète Tau.
Demeter: Merci, je n'avais pas cette information dans ma base de connaissances.
Utilisateur 47: Pas de problème Demeter, n'hésite pas si tu as d'autres questions !
Demeter: Sandy, vous avez maintenant marché exactement deux kilom_tres depuis votre aéronef. Je vous prie de faire attention a votre rythme cardiaque, l'air ambiant, bien que respirable, n'a pas encore été entièrement testé et les milliards d'espèces sur cette planète peuvent toutes...
Can't render this file because it contains an unexpected character in line 120 and column 55.
+8
View File
@@ -24,6 +24,14 @@ Tereshkova
Poiro
O'Malley
Dream
Cumulus
Pyrka
Pacho
Birdopia
Obsaya
Looping
Jarvis
Orion
Isitt
Pomoa
Ezeron
1 100
24 Poiro
25 O'Malley
26 Dream
27 Cumulus
28 Pyrka
29 Pacho
30 Birdopia
31 Obsaya
32 Looping
33 Jarvis
34 Orion
35 Isitt
36 Pomoa
37 Ezeron
+23 -23
View File
@@ -1,24 +1,24 @@
23,en,fr
VALLEY,Valley of {name},Vallée {name}
HIGHLANDS,{name} Highlands,Hautes terres de {name}
HEIGHTS,{name} Heights,Hauteurs de {name}
MOUNTAIN,Mountain of {name},Montagne {name}
PEAKS,{name} Peaks,Piques de {name}
HILLS,{name} Hills,Collines {name}
PASS,Pass of {name},Passe {name}
PLAIN,Plain of {name},Plaine {name}
CANAL,Canal of {name},Canal de {name}
FLATLANDS,Flatlands of {name},Terres plates de {name}
LABYRINTH,{name} Labyrinth,Labyrinthe {name}
REGION,Region of {name},Région de {name}
BARRIER,Barrier of {name},Barrière de {name}
CROWN,{name} Crown,Couronne {name}
SUMMIT,Summit of {name},Sommet de {name}
PANORAMA,{name} Panorama,Panorama de {name}
EXPANSE,{name} Expanse,Étendues {name}
GROUNDS,{name} Grounds,Terres de {name}
PLATEAU,Plateau of {name},Plateau de {name}
FOOTHILLS,{name} Foothills,Contreforts de {name}
CANYON,Canyon of {name},Canyon {name}
RIDGE,{name} Ridge,Crête de {name}
LANDSCAPE,{name} Landscape,Paysage de {name}
REGION_TYPE_VALLEY,Valley of {name},Vallée {name}
REGION_TYPE_HIGHLANDS,{name} Highlands,Hautes terres de {name}
REGION_TYPE_HEIGHTS,{name} Heights,Hauteurs de {name}
REGION_TYPE_MOUNTAIN,Mountain of {name},Montagne {name}
REGION_TYPE_PEAKS,{name} Peaks,Piques de {name}
REGION_TYPE_HILLS,{name} Hills,Collines {name}
REGION_TYPE_PASS,Pass of {name},Passe {name}
REGION_TYPE_PLAIN,Plain of {name},Plaine {name}
REGION_TYPE_CANAL,Canal of {name},Canal de {name}
REGION_TYPE_FLATLANDS,Flatlands of {name},Terres plates de {name}
REGION_TYPE_LABYRINTH,{name} Labyrinth,Labyrinthe {name}
REGION_TYPE_REGION,Region of {name},Région de {name}
REGION_TYPE_BARRIER,Barrier of {name},Barrière de {name}
REGION_TYPE_CROWN,{name} Crown,Couronne {name}
REGION_TYPE_SUMMIT,Summit of {name},Sommet de {name}
REGION_TYPE_PANORAMA,{name} Panorama,Panorama de {name}
REGION_TYPE_EXPANSE,{name} Expanse,Étendues {name}
REGION_TYPE_GROUNDS,{name} Grounds,Terres de {name}
REGION_TYPE_PLATEAU,Plateau of {name},Plateau de {name}
REGION_TYPE_FOOTHILLS,{name} Foothills,Contreforts de {name}
REGION_TYPE_CANYON,Canyon of {name},Canyon {name}
REGION_TYPE_RIDGE,{name} Ridge,Crête de {name}
REGION_TYPE_LANDSCAPE,{name} Landscape,Paysage de {name}
1 23 en fr
2 VALLEY REGION_TYPE_VALLEY Valley of {name} Vallée {name}
3 HIGHLANDS REGION_TYPE_HIGHLANDS {name} Highlands Hautes terres de {name}
4 HEIGHTS REGION_TYPE_HEIGHTS {name} Heights Hauteurs de {name}
5 MOUNTAIN REGION_TYPE_MOUNTAIN Mountain of {name} Montagne {name}
6 PEAKS REGION_TYPE_PEAKS {name} Peaks Piques de {name}
7 HILLS REGION_TYPE_HILLS {name} Hills Collines {name}
8 PASS REGION_TYPE_PASS Pass of {name} Passe {name}
9 PLAIN REGION_TYPE_PLAIN Plain of {name} Plaine {name}
10 CANAL REGION_TYPE_CANAL Canal of {name} Canal de {name}
11 FLATLANDS REGION_TYPE_FLATLANDS Flatlands of {name} Terres plates de {name}
12 LABYRINTH REGION_TYPE_LABYRINTH {name} Labyrinth Labyrinthe {name}
13 REGION REGION_TYPE_REGION Region of {name} Région de {name}
14 BARRIER REGION_TYPE_BARRIER Barrier of {name} Barrière de {name}
15 CROWN REGION_TYPE_CROWN {name} Crown Couronne {name}
16 SUMMIT REGION_TYPE_SUMMIT Summit of {name} Sommet de {name}
17 PANORAMA REGION_TYPE_PANORAMA {name} Panorama Panorama de {name}
18 EXPANSE REGION_TYPE_EXPANSE {name} Expanse Étendues {name}
19 GROUNDS REGION_TYPE_GROUNDS {name} Grounds Terres de {name}
20 PLATEAU REGION_TYPE_PLATEAU Plateau of {name} Plateau de {name}
21 FOOTHILLS REGION_TYPE_FOOTHILLS {name} Foothills Contreforts de {name}
22 CANYON REGION_TYPE_CANYON Canyon of {name} Canyon {name}
23 RIDGE REGION_TYPE_RIDGE {name} Ridge Crête de {name}
24 LANDSCAPE REGION_TYPE_LANDSCAPE {name} Landscape Paysage de {name}