Dev pour la béta 1

* ajout des artefacts avec la pile et l'emplacement de graine
* affichage des artefacts dans le vaisseau sur une étagère
* ajout des distributeurs d'artefacts dans les régions
* affichage des attributs de bases de plantes dans le vaisseau
* changement de l'affichage du choix des régions
* changement des icônes du détecteur
This commit is contained in:
2026-04-10 16:16:54 +02:00
parent 84a2eafe57
commit 8062c42e7b
154 changed files with 2780 additions and 1772 deletions

View File

@@ -16,6 +16,7 @@
[ext_resource type="Texture2D" uid="uid://b752eqq4cm7ve" path="res://common/icons/building-factory-2.svg" id="11_fwgig"]
[ext_resource type="Texture2D" uid="uid://dg00xnpp6ixls" path="res://common/icons/server-2.svg" id="12_mlppq"]
[ext_resource type="Texture2D" uid="uid://1ynlp05wj0hm" path="res://common/icons/rocket.svg" id="13_r4e5h"]
[ext_resource type="Texture2D" uid="uid://bmersnaoira20" path="res://common/icons/building-store.svg" id="16_0e2h6"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdnee"]
shader = ExtResource("2_ktnx3")
@@ -116,6 +117,7 @@ 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
@@ -144,6 +146,7 @@ position = Vector2(-405, -151)
unique_name_in_owner = true
visible = false
icon = ExtResource("11_fwgig")
present = null
default_info_title = "ASTRA_FACTORY"
default_info_desc = "ASTRA_FACTORY_TEXT"
@@ -153,6 +156,7 @@ visible = false
position = Vector2(91, -177)
to_scene_id = "BOREA"
icon = ExtResource("12_mlppq")
present = null
default_interact_text = "ENTER"
available = true
default_info_title = "BOREA_BASE"
@@ -164,10 +168,23 @@ visible = false
position = Vector2(91, -177)
to_scene_id = "GARAGE"
icon = ExtResource("13_r4e5h")
present = null
default_interact_text = "ENTER"
default_info_title = "MYSTERIOUS_DOOR"
default_info_desc = "MYSTERIOUS_DOOR_TEXT"
[node name="VendingMachineDoor" parent="Entities" unique_id=580707365 instance=ExtResource("8_2f6js")]
unique_name_in_owner = true
visible = false
position = Vector2(91, -177)
to_scene_id = "VENDING_MACHINE_DOOR"
icon = ExtResource("16_0e2h6")
present = null
default_interact_text = "ENTER"
available = true
default_info_title = "VENDING_MACHINES"
default_info_desc = "MYSTERIOUS_DOOR_TEXT"
[node name="Camera" parent="." unique_id=1399042986 node_paths=PackedStringArray("following") instance=ExtResource("8_fwgig")]
following = NodePath("../Entities/Player")

View File

@@ -1,4 +1,3 @@
@tool
extends Node2D
class_name Chunk
@@ -37,18 +36,18 @@ var generation_semaphore : Semaphore
var all_tiles : Array[Vector2i]
var all_global_tiles : Array[Vector2i]
@export_tool_button("Update", "Callable") var update_action = func():
generation_semaphore.post()
for c in get_children():
c.queue_free()
# @export_tool_button("Update", "Callable") var update_action = func():
# generation_semaphore.post()
# for c in get_children():
# c.queue_free()
setup_position()
# queue_redraw()
generate()
# setup_position()
# # queue_redraw()
# generate()
@export_tool_button("Clear", "Callable") var clear_action = func():
for c in get_children():
c.queue_free()
# @export_tool_button("Clear", "Callable") var clear_action = func():
# for c in get_children():
# c.queue_free()
func _init(
_chunk_coord : Vector2i = Vector2i.ZERO,

View File

@@ -7,8 +7,12 @@ func get_modifier_name() -> String:
func get_description() -> String:
return tr("ARID_MODIFIER_DESC_TEXT")
func get_icon() -> Texture:
return preload("res://common/icons/droplet-off.svg")
func modify_decontamination_threshold(decontamination_threshold : float) -> float:
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 * (0.5)))
return max(1,roundi(start_decontamination_zone_radius * (0.5)))

View File

@@ -7,5 +7,8 @@ func get_modifier_name() -> String:
func get_description() -> String:
return tr("HARSH_MODIFIER_DESC_TEXT")
func get_icon() -> Texture:
return preload("res://common/icons/wind.svg")
func modify_objective(objective : int) -> int:
return roundi(objective * 1.5)

View File

@@ -7,5 +7,8 @@ func get_modifier_name() -> String:
func get_description() -> String:
return tr("HUMID_MODIFIER_DESC_TEXT")
func get_icon() -> Texture:
return preload("res://common/icons/cloud-rain.svg")
func modify_charge(charge : int) -> int:
return charge - 2

View File

@@ -7,5 +7,8 @@ func get_modifier_name() -> String:
func get_description() -> String:
return tr("POOR_MODIFIER_DESC_TEXT")
func get_icon() -> Texture:
return preload("res://common/icons/cactus.svg")
func modify_cristal_threshold(cristal_threshold : float) -> float:
return cristal_threshold * 0.5

View File

@@ -2,20 +2,41 @@
extends Resource
class_name RegionModifier
const DEFAULT_MODIFIER_COLOR = Color("ff006eff")
const DEFAULT_ICON = preload("res://common/icons/cloud.svg")
const DOOR_SCENE = preload("res://entities/interactables/door/door.tscn")
var level : int = 1
var modifier_name : String : get = get_modifier_name
var description : String : get = get_description
var flags : Array[String] : get = get_flags
@export var modifier_seed : int = 0
func _init(_level : int = 1):
if modifier_seed == 0:
modifier_seed = randi()
level = _level
@abstract func get_modifier_name() -> String
@abstract func get_description() -> String
func get_icon() -> Texture:
return DEFAULT_ICON
func get_card_section_color() -> Color:
return DEFAULT_MODIFIER_COLOR
func get_difficulty_score() -> float:
return float(level)
func get_flags() -> Array[String]:
return []
func region_ready(_region : Region) -> void:
pass
func modify_charge(charge : int) -> int:
return charge
@@ -32,4 +53,32 @@ func modify_cristal_threshold(cristal_threshold : float) -> float:
return cristal_threshold
func modify_start_decontamination_zone_radius(start_decontamination_zone_radius : int) -> int:
return start_decontamination_zone_radius
return start_decontamination_zone_radius
func card_section() -> CardSectionInfo:
var section := CardSectionInfo.new(
get_modifier_name(),
get_description(),
)
section.title_icon = get_icon()
section.color = get_card_section_color()
return section
func generate_door(
title : String,
desc : String,
scene_id : String,
icon : Texture
) -> Door:
var new_door = DOOR_SCENE.instantiate() as Door
new_door.name = "Door%d" % modifier_seed
new_door.to_scene_id = scene_id
new_door.default_info_title = title
new_door.default_info_desc = desc
new_door.icon = icon
new_door.present = true
return new_door

View File

@@ -0,0 +1,31 @@
extends RegionModifier
class_name VendingMachineModifier
const VENDING_MACHINES_ICON = preload("res://common/icons/building-store.svg")
func get_modifier_name() -> String:
return tr("VENDING_MACHINES")
func get_description() -> String:
return tr("VENDING_MACHINES_MODIFIER_DESC_TEXT")
func get_icon() -> Texture:
return preload("res://common/icons/building-store.svg")
func get_card_section_color() -> Color:
return Color("25c147")
func region_ready(region) -> void:
var new_vending_machine_door = generate_door(
tr("VENDING_MACHINES"),
tr("VENDING_MACHINES_DOOR_DESC_TEXT"),
"VENDING_MACHINE_ROOM",
VENDING_MACHINES_ICON
)
new_vending_machine_door.available = region.data.completed_doors.find(new_vending_machine_door.name) == -1
region.add_entity(new_vending_machine_door)
region.random_move_object(new_vending_machine_door,Region.DOORS_RANDOM_MOVEMENT)
func get_difficulty_score() -> float:
return 0

View File

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

View File

@@ -9,6 +9,7 @@ const TILE_SET : TileSet = preload("res://stages/terrain/region/resources/moss_b
const TILE_SCALE = 1
const TILE_SIZE : int = roundi(TILE_SET.tile_size.x * TILE_SCALE)
const SPAWN_OBJECT_RANDOM_MOVEMENT = 200
const DOORS_RANDOM_MOVEMENT = 3000
const CHUNK_TILE_SIZE : int = 10
const CHUNK_SIZE = CHUNK_TILE_SIZE * TILE_SIZE
@@ -79,10 +80,11 @@ func _ready():
generate_near_chunks(player)
spawn_object_random_move(%RechargeStation)
random_move_object(%RechargeStation, SPAWN_OBJECT_RANDOM_MOVEMENT)
%RechargeStation.update()
spawn_object_random_move(%BoreaDoor)
spawn_object_random_move(%ShipGarageDoor)
for m in data.modifiers:
m.region_ready(self)
if not "tutorial" in data.flags:
GameInfo.game_data.player_data.inventory.add_item(Detector.new())
@@ -159,33 +161,29 @@ func save():
data.player_position = player.global_position
GameInfo.save_game_data()
func spawn_object_random_move(object : Node2D, offset : Vector2 = Vector2.ZERO):
func random_move_object(
object : Node2D,
random_movement: int = SPAWN_OBJECT_RANDOM_MOVEMENT,
offset : Vector2 = Vector2.ZERO
):
var rng := RandomNumberGenerator.new()
rng.seed = data.region_seed + object.name.hash()
object.position = Vector2(
rng.randf_range(-SPAWN_OBJECT_RANDOM_MOVEMENT,+SPAWN_OBJECT_RANDOM_MOVEMENT),
rng.randf_range(-SPAWN_OBJECT_RANDOM_MOVEMENT,SPAWN_OBJECT_RANDOM_MOVEMENT)
rng.randf_range(-random_movement,random_movement),
rng.randf_range(-random_movement,random_movement)
) + offset
dig_hole(object.position, 3)
func setup_flagged_properties():
%AstraDoor.visible = false
%ShipGarageDoor.visible = false
%BoreaDoor.visible = false
%AstraDoor.process_mode = Node.PROCESS_MODE_DISABLED
%ShipGarageDoor.process_mode = Node.PROCESS_MODE_DISABLED
%BoreaDoor.process_mode = Node.PROCESS_MODE_DISABLED
for f in data.flags:
for i in range(len(data.flags)):
var f = data.flags[i]
match f:
"tutorial":
%AstraDoor.visible = true
%ShipGarageDoor.visible = true
%AstraDoor.process_mode = Node.PROCESS_MODE_INHERIT
%ShipGarageDoor.process_mode = Node.PROCESS_MODE_INHERIT
%AstraDoor.present = true
%ShipGarageDoor.present = true
random_move_object(%ShipGarageDoor,SPAWN_OBJECT_RANDOM_MOVEMENT)
%AstraDoor.available = false
%ShipGarageDoor.available = data.state == RegionData.State.SUCCEEDED
@@ -196,13 +194,12 @@ func setup_flagged_properties():
%ShipGarageDoor.available = true
)
"borea":
%BoreaDoor.visible = true
%BoreaDoor.present = true
random_move_object(%BoreaDoor,SPAWN_OBJECT_RANDOM_MOVEMENT)
%RechargeStation.visible = false
%BoreaDoor.process_mode = Node.PROCESS_MODE_INHERIT
%RechargeStation.process_mode = Node.PROCESS_MODE_DISABLED
func is_chunk_generated(coord : Vector2i):
return generated_chunks.find_custom(
func (c: Chunk) : return get_chunk_key(c.chunk_coord) == get_chunk_key(coord)
@@ -262,7 +259,6 @@ func is_coords_decontaminated(tiles_coords : Array[Vector2i]):
return false
return true
func dig_rocks(tiles_coords : Array[Vector2i], save_tiles_diff := true, loot := true):
if save_tiles_diff :
data.rock_tiles_data.update_tiles_diff(tiles_coords, TilesDiffData.TileDiff.ABSENT)
@@ -277,6 +273,19 @@ func dig_rocks(tiles_coords : Array[Vector2i], save_tiles_diff := true, loot :=
chunk.rock_layer.remove_rocks([local_coord])
func dig_hole(game_pos: Vector2, size : int):
var hole_tiles : Array[Vector2i] = []
var tile_position := Vector2i(
roundi(game_pos.x/float(Region.TILE_SIZE)),
roundi(game_pos.y/float(Region.TILE_SIZE))
)
for x in range(-size, size):
for y in range(-size, size):
var coord = Vector2i(x,y)
if coord.distance_to(Vector2.ZERO) < size:
hole_tiles.append(coord + tile_position)
dig_rocks(hole_tiles,false,false)
func loot_talion(coord : Vector2i):
var new_seed = Seed.generate_random()
drop_item(

View File

@@ -37,14 +37,21 @@ const PLAYER_ROCK_HOLE_RADIUS = 5
@export var player_spawn : Vector2
@export var entered_door = ""
@export var completed_doors : Array[String] = [] # List of completed doors
@export var modifiers : Array[RegionModifier]
@export var charges : int :
set(v):
charges = v
update()
if GameInfo:
update()
@export var objective : int :
set(v):
objective = v
update()
if GameInfo:
update()
@export var rock_tiles_data : TilesDiffData
@export var decontamination_tiles_data : TilesDiffData
@@ -64,6 +71,7 @@ func _init(
cristal_threshold = parameter.get_cristal_threshold()
start_decontamination_hole_radius = parameter.get_start_decontamination_zone_radius()
flags = parameter.get_region_flags()
modifiers = parameter.modifiers
player_spawn = get_random_spawn_position()
player_position = player_spawn
@@ -176,4 +184,4 @@ func edit_map_origin():
rock_tiles_data.update_tiles_diff(player_hole_tiles, TilesDiffData.TileDiff.ABSENT)
#endregion
#endregion

View File

@@ -46,7 +46,12 @@ func get_region_name() -> String:
return region_name
func get_region_flags() -> Array[String]:
return region_flags
var f := region_flags
for m in modifiers:
f.append_array(m.get_flags())
return f
func get_region_level() -> int:
return level
@@ -102,4 +107,8 @@ func get_start_decontamination_zone_radius() -> int:
for m in modifiers:
zone_radius = m.modify_start_decontamination_zone_radius(zone_radius)
return zone_radius
return zone_radius
func card_info() -> CardInfo:
return null
#TODO