diff --git a/common/game_data/scripts/run/run_data.gd b/common/game_data/scripts/run/run_data.gd
index 7f74a24..dbe6124 100644
--- a/common/game_data/scripts/run/run_data.gd
+++ b/common/game_data/scripts/run/run_data.gd
@@ -64,6 +64,10 @@ func generate_next_run_point(last_modifiers : Array[String] = []) -> RunPoint:
challenge_modifiers.pick_random(),
benefic_modifiers.pick_random()
] as Array[RegionModifier]
+ elif story_step.is_run_point_dangerous(next_level):
+ region_parameter.modifiers = [
+ challenge_modifiers.pick_random()
+ ] as Array[RegionModifier]
else:
region_parameter.modifiers = [
normal_modifiers.pick_random()
diff --git a/common/game_data/scripts/settings_data.gd b/common/game_data/scripts/settings_data.gd
index 92ddc0c..34491ff 100644
--- a/common/game_data/scripts/settings_data.gd
+++ b/common/game_data/scripts/settings_data.gd
@@ -58,8 +58,6 @@ const AVAILABLE_LANGUAGES_LABEL = [
@export var action_remapped : Array[String] = []
@export var input_remapped : Array[InputEvent] = []
-@export var auto_pickup := true
-
@export var fov := 75. :
set(v):
fov = v
@@ -68,6 +66,10 @@ const AVAILABLE_LANGUAGES_LABEL = [
#region ------------------ Game ------------------
+@export var auto_pickup := true
+
+@export var mouse_sensivity := 0.2
+
const MAX_ZOOM = 2.
const MIN_ZOOM = 0.5
diff --git a/common/game_data/scripts/story/story_step.gd b/common/game_data/scripts/story/story_step.gd
index bd4f5b0..1ba2913 100644
--- a/common/game_data/scripts/story/story_step.gd
+++ b/common/game_data/scripts/story/story_step.gd
@@ -37,7 +37,7 @@ func get_cave_occurence(_level : int) -> int:
return 3
func get_challenge_chance(_level : int) -> float:
- return 0.3
+ return 0.15
func get_run_point_number(level : int) -> int:
if is_run_finished(level):
@@ -47,6 +47,9 @@ func get_run_point_number(level : int) -> int:
func get_charge_number(_level : int) -> int:
return 10
+func is_run_point_dangerous(level : int) -> bool:
+ return level == get_region_sequence_length() - 2
+
func get_objective_for_region(level : int) -> int:
match level:
1: return 10
diff --git a/common/vfx/circle/scripts/circle.gd b/common/vfx/circle/scripts/circle.gd
index 73012d2..d67f96c 100644
--- a/common/vfx/circle/scripts/circle.gd
+++ b/common/vfx/circle/scripts/circle.gd
@@ -1,11 +1,40 @@
extends Sprite2D
class_name Circle
-@export var radius : int = 0
-@export var color : Color = Color.WHITE
-@export var opacity : float = 1.0
-@export var fill : bool = true
-@export var width : int = -1
+@export var radius : int = 0 :
+ set(v):
+ radius = v
+ queue_redraw()
+@export var color : Color = Color.WHITE :
+ set(v):
+ color = v
+ queue_redraw()
+@export var opacity : float = 1.0 :
+ set(v):
+ opacity = v
+ queue_redraw()
+@export var fill : bool = true :
+ set(v):
+ fill = v
+ queue_redraw()
+@export var width : int = -1 :
+ set(v):
+ width = v
+ queue_redraw()
+
+
+func _init(
+ _radius = 0,
+ _color = Color.WHITE,
+ _opacity = 1.0,
+ _fill = true,
+ _width = -1,
+):
+ radius = _radius
+ color = _color
+ opacity = _opacity
+ fill = _fill
+ width = _width
func _draw():
draw_circle(
diff --git a/entities/plants/plant_sprite.tscn b/entities/plants/plant_sprite.tscn
index dc19eb3..6c2b9d5 100644
--- a/entities/plants/plant_sprite.tscn
+++ b/entities/plants/plant_sprite.tscn
@@ -186,6 +186,7 @@ texture = ExtResource("3_rbgiq")
[node name="LifeTimeSprite" type="Sprite2D" parent="." unique_id=799762981]
unique_name_in_owner = true
+visible = false
scale = Vector2(0.26000002, 0.26000005)
texture = SubResource("ViewportTexture_rbgiq")
diff --git a/entities/plants/scripts/plant_influence_zone.gd b/entities/plants/scripts/plant_influence_zone.gd
index a9959c5..cb3ea4a 100644
--- a/entities/plants/scripts/plant_influence_zone.gd
+++ b/entities/plants/scripts/plant_influence_zone.gd
@@ -5,26 +5,26 @@ var radius : int
var sprite : Circle
var collision_shape : CollisionShape2D
var show_influence : bool = false :
- set(v):
- show_influence = v
- if sprite:
- sprite.visible = v
+ set(v):
+ show_influence = v
+ if sprite:
+ sprite.visible = v
func _init(_radius = 100):
- radius = _radius
+ radius = _radius
func _ready():
- sprite = Circle.new()
- # sprite.z_index = 100
- sprite.radius = radius
- sprite.fill = false
- sprite.width = 1
- sprite.opacity = 0.5
- sprite.visible = show_influence
- add_child(sprite)
+ sprite = Circle.new()
+ # sprite.z_index = 100
+ sprite.radius = radius
+ sprite.fill = false
+ sprite.width = 1
+ sprite.opacity = 0.5
+ sprite.visible = show_influence
+ add_child(sprite)
- collision_shape = CollisionShape2D.new()
- var circle_shape : CircleShape2D = CircleShape2D.new()
- circle_shape.radius = radius
- collision_shape.shape = circle_shape
- add_child(collision_shape)
\ No newline at end of file
+ collision_shape = CollisionShape2D.new()
+ var circle_shape : CircleShape2D = CircleShape2D.new()
+ circle_shape.radius = radius
+ collision_shape.shape = circle_shape
+ add_child(collision_shape)
\ No newline at end of file
diff --git a/entities/plants/scripts/plant_sprite.gd b/entities/plants/scripts/plant_sprite.gd
index 83e8bb1..3bb63fe 100644
--- a/entities/plants/scripts/plant_sprite.gd
+++ b/entities/plants/scripts/plant_sprite.gd
@@ -56,8 +56,8 @@ func start_harvest_animation():
func set_display_lifetime_sprite(d := display_lifetime_sprite):
display_lifetime_sprite = d
- if is_node_ready():
- %LifeTimeSprite.visible = d
+ # if is_node_ready():
+ # %LifeTimeSprite.visible = d
func set_sprite_modulate(c := sprite_modulate):
sprite_modulate = c
diff --git a/entities/player/inventory/scripts/item.gd b/entities/player/inventory/scripts/item.gd
index 7b44170..df50b5a 100644
--- a/entities/player/inventory/scripts/item.gd
+++ b/entities/player/inventory/scripts/item.gd
@@ -14,6 +14,7 @@ enum ItemType {TOOL_ITEM, CONSUMABLE_ITEM}
@export var type: ItemType : get = get_item_type
@export var description: String : get = get_description
var icon: Texture2D : get = get_icon
+var pointer: Texture2D : get = get_pointer
@export var usage_zone_radius: int = 5 : get = get_usage_zone_radius
@export var energy_usage : int = 1 : get = get_energy_used
@@ -29,6 +30,9 @@ func get_description() -> String:
func get_icon() -> Texture2D:
return icon
+func get_pointer() -> Texture2D:
+ return null
+
func get_energy_used() -> int:
return energy_usage
@@ -50,6 +54,9 @@ func get_usage_object_affected(_i : Area2D) -> bool:
func is_one_time_use():
return false
+func snap_usage_to_grid():
+ return false
+
func can_use(_player : Player, _zone: Player.ActionZone) -> bool:
return false
diff --git a/entities/player/inventory/scripts/items/detector.gd b/entities/player/inventory/scripts/items/detector.gd
index a3793c7..aa78605 100644
--- a/entities/player/inventory/scripts/items/detector.gd
+++ b/entities/player/inventory/scripts/items/detector.gd
@@ -13,6 +13,9 @@ func get_description() -> String:
func get_icon() -> Texture2D:
return preload("res://common/icons/broadcast.svg")
+func get_pointer() -> Texture2D:
+ return preload("res://gui/pointer/assets/cursors/pointer-signal.svg")
+
func get_energy_used() -> int:
return 0
diff --git a/entities/player/inventory/scripts/items/fork.gd b/entities/player/inventory/scripts/items/fork.gd
index 217c197..591a96b 100644
--- a/entities/player/inventory/scripts/items/fork.gd
+++ b/entities/player/inventory/scripts/items/fork.gd
@@ -12,9 +12,15 @@ func get_description() -> String:
func get_icon() -> Texture2D:
return preload("res://common/icons/fork.svg")
+func get_pointer() -> Texture2D:
+ return preload("res://gui/pointer/assets/cursors/pointer-fork.svg")
+
func get_item_type() -> ItemType:
return Item.ItemType.TOOL_ITEM
+func snap_usage_to_grid():
+ return true
+
func get_energy_used() -> int:
return 1
diff --git a/entities/player/inventory/scripts/items/pickaxe.gd b/entities/player/inventory/scripts/items/pickaxe.gd
index ba5f777..c954b2d 100644
--- a/entities/player/inventory/scripts/items/pickaxe.gd
+++ b/entities/player/inventory/scripts/items/pickaxe.gd
@@ -12,6 +12,9 @@ func get_description() -> String:
func get_icon() -> Texture2D:
return preload("res://common/icons/pick.svg")
+func get_pointer() -> Texture2D:
+ return preload("res://gui/pointer/assets/cursors/pointer-dig.svg")
+
func get_energy_used() -> int:
return 1
diff --git a/entities/player/inventory/scripts/items/seed.gd b/entities/player/inventory/scripts/items/seed.gd
index 8ed7b0a..9f9cdf2 100644
--- a/entities/player/inventory/scripts/items/seed.gd
+++ b/entities/player/inventory/scripts/items/seed.gd
@@ -65,15 +65,21 @@ func get_icon() -> Texture2D:
stored_icon = PlantTextureBuilder.build_seed_texture(plant_name.hash())
return stored_icon
+func get_pointer() -> Texture2D:
+ return preload("res://gui/pointer/assets/cursors/pointer-seed.svg")
+
func get_energy_used() -> int:
return 1
func get_usage_zone_radius() -> int:
- return 50
+ return 10
func get_usage_object_affected(i : Area2D) -> bool:
return i is PlantSprite
+func snap_usage_to_grid():
+ return true
+
func use_text() -> String:
return tr("PLANT_%s") % plant_name
@@ -88,13 +94,12 @@ func can_use(player : Player, zone : Player.ActionZone) -> bool:
var is_there_a_plant_here = false
for area in zone.get_affected_areas():
- if area is PlantSprite:
+ if area is PlantSprite or area is TruckRecharge:
is_there_a_plant_here = true
- var plant_tiles = Math.get_tiles_in_circle(
+ var plant_tiles = [Math.get_tile_from_pos(
zone.get_global_position(),
- 20
- )
+ )] as Array[Vector2i]
return (
not is_there_a_plant_here
diff --git a/entities/player/inventory/scripts/items/ship_portal.gd b/entities/player/inventory/scripts/items/ship_portal.gd
index 4329214..d8795a4 100644
--- a/entities/player/inventory/scripts/items/ship_portal.gd
+++ b/entities/player/inventory/scripts/items/ship_portal.gd
@@ -13,6 +13,9 @@ func get_description() -> String:
func get_icon() -> Texture2D:
return preload("res://common/icons/rocket.svg")
+func get_pointer() -> Texture2D:
+ return preload("res://gui/pointer/assets/cursors/pointer-ship.svg")
+
func get_energy_used() -> int:
return 0
diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd
index 74f4726..e14b6a0 100644
--- a/entities/player/scripts/player.gd
+++ b/entities/player/scripts/player.gd
@@ -12,8 +12,7 @@ signal player_updated(player: Player)
signal upgraded
var terrain : Terrain
-var region : Region :
- get(): return terrain if terrain is Region else null
+@export var region : Region
var data : PlayerData
var last_action_area_movement_timer : float = 100.
@@ -91,11 +90,16 @@ func _process(delta):
instruction.do(self)
instruction = null
+
if instruction and instruction.need_movement:
if input_direction.length() != 0:
instruction = null
input_direction = calculate_direction_instruction_direction()
+ if instruction == null and action_zone:
+ action_zone.destroy()
+ action_zone = null
+
velocity = input_direction * SPEED
turn_animate(input_direction)
@@ -286,8 +290,8 @@ func recharge(amount : int = data.max_energy):
func full_recharge():
data.energy = max(data.energy, data.max_energy)
-func generate_action_zone(item : Item) -> ActionZone:
- var zone = ActionZone.new(item)
+func generate_action_zone(item : Item, preview = true) -> ActionZone:
+ var zone = ActionZone.new(item, region.plant_grid, preview)
if not get_parent().is_node_ready():
await get_parent().ready
@@ -303,12 +307,12 @@ func setup_preview_zone(item : Item):
preview_zone = null
if item:
- preview_zone = await generate_action_zone(item)
+ preview_zone = await generate_action_zone(item, true)
func setup_action_zone(zone_position : Vector2, item: Item) -> ActionZone:
if action_zone:
action_zone.destroy()
- action_zone = await generate_action_zone(item)
+ action_zone = await generate_action_zone(item, false)
action_zone.move_to_position(zone_position)
last_action_area_movement_timer = 0.
return action_zone
@@ -316,6 +320,7 @@ func setup_action_zone(zone_position : Vector2, item: Item) -> ActionZone:
func move_preview_zone(zone_position : Vector2):
if preview_zone:
preview_zone.move_to_position(zone_position)
+ preview_zone.update_preview(self)
class Instruction:
@@ -414,12 +419,21 @@ class InteractableInstruction extends Instruction:
interactable.interact(player)
class ActionZone:
+ const ZONE_ACTIVATED_COLOR = Color("#96B3DB")
+ const ZONE_DEACTIVATED_COLOR = Color("#FF006E")
+ const ZONE_OPACITY = 0.6
+
var item : Item = null
var area : Area2D = Area2D.new()
var affected_areas : Array[Area2D]= []
+ var plant_grid : PlantGrid
+ var circle : Circle
+ var preview: bool
- func _init(_i : Item):
+ func _init(_i : Item, _grid : PlantGrid, _preview = false):
item = _i
+ plant_grid = _grid
+ preview = _preview
if item and item.get_usage_zone_radius() > 0:
area = Area2D.new()
var collision_shape = CollisionShape2D.new()
@@ -429,11 +443,25 @@ class ActionZone:
collision_shape.shape = circle_shape
area.add_child(collision_shape)
+ circle = Circle.new(
+ item.get_usage_zone_radius(),
+ )
+ circle.fill = preview
+ circle.modulate.a = ZONE_OPACITY
+ area.add_child(circle)
+ circle.z_index = 100
+
func clear_preview_on_affected_area():
for a in affected_areas:
if a:
a.affect_preview(false)
+ func update_preview(player : Player):
+ update_preview_on_affected_area()
+ if circle:
+ circle.color = ZONE_ACTIVATED_COLOR if item.can_use(player, self) else ZONE_DEACTIVATED_COLOR
+
+
func update_preview_on_affected_area():
var detected_areas = get_affected_areas()
clear_preview_on_affected_area()
@@ -457,9 +485,13 @@ class ActionZone:
return Vector2.ZERO if area == null else area.global_position
func move_to_position(pos : Vector2):
- if area:
- update_preview_on_affected_area()
- area.global_position = pos
+ if area and plant_grid:
+ if item and item.snap_usage_to_grid():
+ area.global_position = plant_grid.get_point_for_tile(
+ Math.get_tile_from_pos(pos)
+ )
+ else:
+ area.global_position = pos
func get_tiles() -> Array[Vector2i]:
return Math.get_tiles_in_circle(
diff --git a/entities/player_3d/scripts/player_3d.gd b/entities/player_3d/scripts/player_3d.gd
index 967eea3..8289ee3 100644
--- a/entities/player_3d/scripts/player_3d.gd
+++ b/entities/player_3d/scripts/player_3d.gd
@@ -39,10 +39,11 @@ func _ready():
)
func _input(event):
+ var sensivity = GameInfo.settings_data.mouse_sensivity / 100
if controlling_player:
if event is InputEventMouseMotion and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
- rotate_y(-event.relative.x * MOUSE_SENSIVITY)
- %Camera3D.rotate_x(-event.relative.y * MOUSE_SENSIVITY)
+ rotate_y(-event.relative.x * sensivity)
+ %Camera3D.rotate_x(-event.relative.y * sensivity)
%Camera3D.rotation.x = clampf($Camera3D.rotation.x, -deg_to_rad(70), deg_to_rad(70))
query_mouse = true
if event.is_action_pressed("action") and action_hovered and action_hovered.interactable:
diff --git a/gui/menu/settings/scripts/settings.gd b/gui/menu/settings/scripts/settings.gd
index 36501e4..a767eab 100644
--- a/gui/menu/settings/scripts/settings.gd
+++ b/gui/menu/settings/scripts/settings.gd
@@ -48,6 +48,7 @@ func setup_video():
func setup_controls():
%AutoPickupCheckBox.button_pressed = settings.auto_pickup
%FovSlider.value = settings.fov
+ %SensibilitySlider.value = settings.mouse_sensivity
func _on_language_option_button_item_selected(index: int):
settings.language = SettingsData.AVAILABLE_LANGUAGES[index]
@@ -77,3 +78,6 @@ func _on_auto_pickup_check_box_toggled(toggled_on: bool):
func _on_fov_slider_value_changed(value):
if is_node_ready():
settings.fov = value
+
+func _on_sensibility_slider_value_changed(value: float):
+ settings.mouse_sensivity = value
diff --git a/gui/menu/settings/settings.tscn b/gui/menu/settings/settings.tscn
index 40733c5..6ff22dc 100644
--- a/gui/menu/settings/settings.tscn
+++ b/gui/menu/settings/settings.tscn
@@ -23,7 +23,7 @@ script = ExtResource("1_7t8mv")
[node name="SettingsWindow" parent="." unique_id=798514856 instance=ExtResource("1_gkn1k")]
unique_name_in_owner = true
process_mode = 3
-custom_minimum_size = Vector2(700, 600)
+custom_minimum_size = Vector2(900, 634.155)
layout_mode = 1
offset_left = -349.99994
offset_right = 350.00055
@@ -155,6 +155,22 @@ title = "GAME"
layout_mode = 2
columns = 2
+[node name="SensibilitySliderText" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings" unique_id=1624022562 instance=ExtResource("4_rbiwc")]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "MOUSE_SENSIVITY"
+
+[node name="SensibilitySlider" type="HSlider" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings" unique_id=1287461408]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme = ExtResource("2_7t8mv")
+min_value = 0.01
+max_value = 0.5
+step = 0.01
+value = 0.2
+
[node name="AutoPickupText" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings" unique_id=1206884739 instance=ExtResource("4_rbiwc")]
layout_mode = 2
text = "AUTO_PICKUP"
@@ -187,6 +203,7 @@ bus = &"Sfx"
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/SoundSliders/SFXSlider" to="." method="_on_sfx_slider_value_changed"]
[connection signal="toggled" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/FullScreenCheckBox" to="." method="_on_full_screen_check_box_toggled"]
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/FovSlider" to="." method="_on_fov_slider_value_changed"]
+[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings/SensibilitySlider" to="." method="_on_sensibility_slider_value_changed"]
[connection signal="toggled" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings/AutoPickupCheckBox" to="." method="_on_auto_pickup_check_box_toggled"]
[editable path="SettingsWindow"]
diff --git a/gui/pointer/assets/cursors/pointer-action.svg b/gui/pointer/assets/cursors/pointer-action.svg
new file mode 100644
index 0000000..41d8500
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-action.svg
@@ -0,0 +1,65 @@
+
+
diff --git a/gui/pointer/assets/cursors/pointer-action.svg.import b/gui/pointer/assets/cursors/pointer-action.svg.import
new file mode 100644
index 0000000..76fe4ca
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-action.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cl3wt3tbjiep0"
+path="res://.godot/imported/pointer-action.svg-7d0a608f5d92b361c052c9c646842598.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/pointer/assets/cursors/pointer-action.svg"
+dest_files=["res://.godot/imported/pointer-action.svg-7d0a608f5d92b361c052c9c646842598.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/cursors/pointer-dig.svg b/gui/pointer/assets/cursors/pointer-dig.svg
new file mode 100644
index 0000000..fc1de1a
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-dig.svg
@@ -0,0 +1,68 @@
+
+
diff --git a/gui/pointer/assets/cursors/pointer-dig.svg.import b/gui/pointer/assets/cursors/pointer-dig.svg.import
new file mode 100644
index 0000000..fbdea32
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-dig.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bh4m4fbaxl6t4"
+path="res://.godot/imported/pointer-dig.svg-ad7b43afdaf2efe42f9726c76536bc0e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/pointer/assets/cursors/pointer-dig.svg"
+dest_files=["res://.godot/imported/pointer-dig.svg-ad7b43afdaf2efe42f9726c76536bc0e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/cursors/pointer-fork.svg b/gui/pointer/assets/cursors/pointer-fork.svg
new file mode 100644
index 0000000..713bd11
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-fork.svg
@@ -0,0 +1,74 @@
+
+
diff --git a/gui/pointer/assets/cursors/pointer-fork.svg.import b/gui/pointer/assets/cursors/pointer-fork.svg.import
new file mode 100644
index 0000000..819115c
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-fork.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1xvmctdfkyua"
+path="res://.godot/imported/pointer-fork.svg-7da3179fd298523652e878610e95a15b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/pointer/assets/cursors/pointer-fork.svg"
+dest_files=["res://.godot/imported/pointer-fork.svg-7da3179fd298523652e878610e95a15b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/cursors/pointer-seed.svg b/gui/pointer/assets/cursors/pointer-seed.svg
new file mode 100644
index 0000000..88f3f22
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-seed.svg
@@ -0,0 +1,70 @@
+
+
diff --git a/gui/pointer/assets/cursors/pointer-seed.svg.import b/gui/pointer/assets/cursors/pointer-seed.svg.import
new file mode 100644
index 0000000..14dc322
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-seed.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c7ph01vdeeoql"
+path="res://.godot/imported/pointer-seed.svg-5fd492bb617059b1e1c19cc9d7b92b0c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/pointer/assets/cursors/pointer-seed.svg"
+dest_files=["res://.godot/imported/pointer-seed.svg-5fd492bb617059b1e1c19cc9d7b92b0c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/cursors/pointer-ship.svg b/gui/pointer/assets/cursors/pointer-ship.svg
new file mode 100644
index 0000000..2a92f2f
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-ship.svg
@@ -0,0 +1,66 @@
+
+
diff --git a/gui/pointer/assets/cursors/pointer-ship.svg.import b/gui/pointer/assets/cursors/pointer-ship.svg.import
new file mode 100644
index 0000000..aa25275
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-ship.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rupmj6lgmxn7"
+path="res://.godot/imported/pointer-ship.svg-3f864fc9504ac00ce18636a8c6203910.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/pointer/assets/cursors/pointer-ship.svg"
+dest_files=["res://.godot/imported/pointer-ship.svg-3f864fc9504ac00ce18636a8c6203910.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/cursors/pointer-signal.svg b/gui/pointer/assets/cursors/pointer-signal.svg
new file mode 100644
index 0000000..154cc8d
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-signal.svg
@@ -0,0 +1,63 @@
+
+
diff --git a/gui/pointer/assets/cursors/pointer-signal.svg.import b/gui/pointer/assets/cursors/pointer-signal.svg.import
new file mode 100644
index 0000000..4e48255
--- /dev/null
+++ b/gui/pointer/assets/cursors/pointer-signal.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://sq5of6kpjrxj"
+path="res://.godot/imported/pointer-signal.svg-f760203858e8cefeb5c8506af6f58026.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://gui/pointer/assets/cursors/pointer-signal.svg"
+dest_files=["res://.godot/imported/pointer-signal.svg-f760203858e8cefeb5c8506af6f58026.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/cursors/pointer.svg b/gui/pointer/assets/cursors/pointer.svg
index e91a777..8f989d0 100644
--- a/gui/pointer/assets/cursors/pointer.svg
+++ b/gui/pointer/assets/cursors/pointer.svg
@@ -1,8 +1,8 @@
diff --git a/gui/pointer/pointer.tscn b/gui/pointer/pointer.tscn
index 81cdc2b..de0fbb4 100644
--- a/gui/pointer/pointer.tscn
+++ b/gui/pointer/pointer.tscn
@@ -3,7 +3,7 @@
[ext_resource type="Script" uid="uid://vhumsfntpqcl" path="res://gui/pointer/scripts/pointer.gd" id="1_1pe2k"]
[ext_resource type="Texture2D" uid="uid://bspffyprdywgc" path="res://gui/pointer/assets/cursors/pointer.svg" id="2_q4bvb"]
[ext_resource type="AudioStream" uid="uid://bym03qp4n6vep" path="res://gui/pointer/assets/sounds/click.wav" id="3_kj0cm"]
-[ext_resource type="Texture2D" uid="uid://b3vg3tipd4boh" path="res://common/icons/hand-finger.svg" id="3_mw4ws"]
+[ext_resource type="Texture2D" uid="uid://cl3wt3tbjiep0" path="res://gui/pointer/assets/cursors/pointer-action.svg" id="3_mw4ws"]
[ext_resource type="AudioStream" uid="uid://bhsew2amu3ydx" path="res://gui/pointer/assets/sounds/action_press_time.wav" id="3_tof6i"]
[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="4_b4uwv"]
[ext_resource type="AudioStream" uid="uid://cs4y6sinpth8e" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_1.wav" id="4_mw4ws"]
@@ -74,7 +74,7 @@ metadata/_custom_type_script = "uid://dj2pv1hiwjfv0"
process_mode = 3
script = ExtResource("1_1pe2k")
default_cursor = ExtResource("2_q4bvb")
-hover_cursor = ExtResource("3_mw4ws")
+action_cursor = ExtResource("3_mw4ws")
[node name="InspectorCanvasLayer" type="CanvasLayer" parent="." unique_id=561032710]
layer = 128
diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd
index 6d98f92..1589bf9 100644
--- a/gui/pointer/scripts/pointer.gd
+++ b/gui/pointer/scripts/pointer.gd
@@ -13,7 +13,7 @@ const CARD_UP_PADDING = 50
const PRESS_TIME_DRAG := 0.15
@export var default_cursor: Texture2D
-@export var hover_cursor: Texture2D
+@export var action_cursor: Texture2D
var all_inspected: Array[Node]
var inspected: Node = null
@@ -54,7 +54,6 @@ func get_current_inspected() -> Node:
func _ready():
Input.set_custom_mouse_cursor(default_cursor)
- Input.set_custom_mouse_cursor(hover_cursor, Input.CURSOR_POINTING_HAND)
%Action.visible = false
func _process(delta):
@@ -66,18 +65,26 @@ func _process(delta):
%Inspector.position = get_viewport().get_mouse_position()
- if not action_disabled and not dragging_inspected and current_selected_item and SceneManager.actual_scene.scene_id == "REGION":
- %ActionZone.radius = current_selected_item.usage_zone_radius * GameInfo.settings_data.zoom
- %ActionZone.color = ZONE_ACTIVATED_COLOR if can_use_item else ZONE_DEACTIVATED_COLOR
- else:
- %ActionZone.radius = 0
+ # if not action_disabled and not dragging_inspected and current_selected_item and SceneManager.actual_scene.scene_id == "REGION":
+ # %ActionZone.radius = current_selected_item.usage_zone_radius * GameInfo.settings_data.zoom
+ # %ActionZone.color = ZONE_ACTIVATED_COLOR if can_use_item else ZONE_DEACTIVATED_COLOR
+ # else:
+ # %ActionZone.radius = 0
- %ActionZone.queue_redraw()
+ # %ActionZone.queue_redraw()
update_card()
update_inspector(get_current_inspected())
+ var cursor := default_cursor
+ if not Pause.pause and player and not action_disabled:
+ if can_interact:
+ cursor = action_cursor
+ elif current_selected_item and current_selected_item.get_pointer():
+ cursor = current_selected_item.get_pointer()
+ Input.set_custom_mouse_cursor(cursor)
+
if player and dragging_inspected:
inspected.global_position = player.get_global_mouse_position()
@@ -226,7 +233,7 @@ func update_card():
%CardVisualiser.show()
-func update_inspector(current_inspected: Node):
+func update_inspector(current_inspected):
if current_inspected:
if inspected != current_inspected:
if inspected and inspected.has_method("inspect"):
diff --git a/stages/3d_scenes/cockpit_scene/cockpit_elements/travel_screen/scripts/travel_screen_content.gd b/stages/3d_scenes/cockpit_scene/cockpit_elements/travel_screen/scripts/travel_screen_content.gd
index a6df7ed..477bc93 100644
--- a/stages/3d_scenes/cockpit_scene/cockpit_elements/travel_screen/scripts/travel_screen_content.gd
+++ b/stages/3d_scenes/cockpit_scene/cockpit_elements/travel_screen/scripts/travel_screen_content.gd
@@ -6,6 +6,7 @@ const SHIP_ICON = preload("res://common/icons/rocket.svg")
const START_ICON = preload("res://common/icons/device-floppy.svg")
const REGION_ICON = preload("res://common/icons/globe.svg")
const DESTINATION_ICON = preload("res://common/icons/flag-2.svg")
+const DANGER_ICON = preload("res://common/icons/alert-triangle.svg")
const PREVIOUS_COLOR = Color("2364AAAA")
const CURRENT_COLOR = Color("e29f32")
@@ -54,6 +55,9 @@ func update(with_animation := true):
for m_i in range(len(modifiers)):
spawn_icon(modifiers[m_i].get_icon(), Vector2(i,-m_i - 1),color, 0.7)
+ if story_step.is_run_point_dangerous(i):
+ spawn_icon(DANGER_ICON, Vector2(i,-len(modifiers) - 1),color, 0.7)
+
spawn_icon(icon, Vector2(i,0),color)
ship_icon = spawn_icon(SHIP_ICON, Vector2(current_position, 1), CURRENT_COLOR, 1)
diff --git a/stages/terrain/region/region.tscn b/stages/terrain/region/region.tscn
index 21614e0..ecdf8f7 100644
--- a/stages/terrain/region/region.tscn
+++ b/stages/terrain/region/region.tscn
@@ -21,9 +21,9 @@
[sub_resource type="Resource" id="Resource_r4e5h"]
script = ExtResource("3_r4e5h")
rain_value = 0.42404523
-cloud_value = 0.20464431
-wind_direction = Vector2(0.4359836, 0.8999546)
-wind_force = 0.9393943
+cloud_value = 0.4445428
+wind_direction = Vector2(-0.63176113, -0.7751632)
+wind_force = 0.92673165
fog_value = 0.5362279
ambiance_name = "ExteriorWindy"
type = 3
@@ -190,7 +190,8 @@ layer = 3
[node name="Entities" type="Node2D" parent="." unique_id=2132324579]
y_sort_enabled = true
-[node name="Player" parent="Entities" unique_id=75851644 instance=ExtResource("5_ovqi1")]
+[node name="Player" parent="Entities" unique_id=75851644 node_paths=PackedStringArray("region") instance=ExtResource("5_ovqi1")]
+region = NodePath("../..")
[node name="RechargeStation" parent="Entities" unique_id=2068738444 instance=ExtResource("7_6d8m3")]
unique_name_in_owner = true
diff --git a/stages/terrain/region/scripts/plant_grid.gd b/stages/terrain/region/scripts/plant_grid.gd
new file mode 100644
index 0000000..0da97b0
--- /dev/null
+++ b/stages/terrain/region/scripts/plant_grid.gd
@@ -0,0 +1,73 @@
+extends Sprite2D
+class_name PlantGrid
+
+const GRID_SHIFT : int = roundi(Region.TILE_SIZE / 2.)
+const GRID_SIZE : int = Region.TILE_SIZE
+const POINT_RADIUS : int = 5
+const POINT_COLOR : Color = Color.WHITE
+const POINT_RANDOM_SHIFT = roundi(Region.TILE_SIZE / 2.)
+
+const REFRESH_TIME : float = 2.
+
+var refresh_timer : float = 0.
+
+var region : Region
+var noise : Noise
+
+func _init(
+ _region : Region
+):
+ region = _region
+ noise = FastNoiseLite.new()
+ noise.seed = region.data.region_seed
+ noise.noise_type = noise.TYPE_VALUE
+
+
+func _process(delta):
+ refresh_timer += delta
+ if refresh_timer > REFRESH_TIME:
+ refresh_timer = 0
+ queue_redraw()
+ var current_item = GameInfo.game_data.player_data.inventory.get_item()
+ var target_opacity = (1.) if current_item and current_item.snap_usage_to_grid() else 0.
+
+ modulate.a = lerp(
+ modulate.a,
+ target_opacity,
+ 0.1)
+
+func _draw():
+ for p in get_grid_point():
+ draw_point(p)
+
+
+func get_grid_point() -> Array[Vector2]:
+ var grid_points : Array[Vector2] = []
+
+ for x in range(-Region.CHUNK_TILE_SIZE, Region.CHUNK_TILE_SIZE * 2):
+ for y in range(-Region.CHUNK_TILE_SIZE, Region.CHUNK_TILE_SIZE * 2):
+ if (
+ region.is_coords_decontaminated([Vector2(x,y)])
+ and not region.is_coords_rocky([Vector2(x,y)])
+ ):
+ grid_points.append(
+ get_point_for_tile(Vector2(x,y))
+ )
+ return grid_points
+
+func get_point_for_tile(tile_pos: Vector2):
+ return get_world_pos_for_tile(tile_pos) + get_random_shift(tile_pos)
+
+func get_world_pos_for_tile(tile_pos: Vector2):
+ return tile_pos*GRID_SIZE + Vector2.ONE * GRID_SHIFT
+
+func get_random_shift(pos: Vector2):
+ return Vector2.RIGHT.rotated(noise.get_noise_2d(pos.x*100,pos.y*100) * 2*PI) * POINT_RANDOM_SHIFT * noise.get_noise_2d(pos.x*50,pos.y*50)
+
+
+func draw_point(pos: Vector2):
+ draw_circle(
+ pos,
+ POINT_RADIUS,
+ POINT_COLOR
+ )
diff --git a/stages/terrain/region/scripts/plant_grid.gd.uid b/stages/terrain/region/scripts/plant_grid.gd.uid
new file mode 100644
index 0000000..39d736b
--- /dev/null
+++ b/stages/terrain/region/scripts/plant_grid.gd.uid
@@ -0,0 +1 @@
+uid://c8l37exf4csv7
diff --git a/stages/terrain/region/scripts/region.gd b/stages/terrain/region/scripts/region.gd
index 303b796..4420b96 100644
--- a/stages/terrain/region/scripts/region.gd
+++ b/stages/terrain/region/scripts/region.gd
@@ -45,6 +45,7 @@ var data_last_updated = 0.
@onready var recharge_station : TruckRecharge = %RechargeStation
@onready var camera : RegionCamera = %Camera
+var plant_grid : PlantGrid
# Cheat Code
# func _input(_e):
@@ -99,7 +100,9 @@ func _ready():
GameInfo.game_data.player_data.inventory.add_item(Pickaxe.new())
GameInfo.game_data.player_data.inventory.add_item(Fork.new())
GameInfo.game_data.player_data.inventory.add_item(ShipPortal.new())
-
+
+ plant_grid = PlantGrid.new(self)
+ add_child(plant_grid)
data.succeded.connect(finishing_region_animation)
@@ -310,6 +313,8 @@ func is_coords_decontaminated(tiles_coords : Array[Vector2i]):
var local_coord := TilesDiffData.get_local_coord(coord, chunk.chunk_coord)
if not chunk.decontamination_layer.is_decontamined(local_coord):
return false
+ else:
+ return false
return true
func is_coords_rocky(tiles_coords : Array[Vector2i]):
@@ -317,7 +322,9 @@ func is_coords_rocky(tiles_coords : Array[Vector2i]):
var chunk : Chunk = get_chunk_for_coord(coord)
if chunk:
var local_coord := TilesDiffData.get_local_coord(coord, chunk.chunk_coord)
- if chunk.rock_layer.get_tile_type(local_coord) == RockLayer.TileType.ROCK:
+ if (
+ chunk.rock_layer.get_tile_type(local_coord) == RockLayer.TileType.ROCK
+ or chunk.rock_layer.get_tile_type(local_coord) == RockLayer.TileType.CRISTAL):
return true
return false
diff --git a/stages/terrain/region/scripts/region_parameter.gd b/stages/terrain/region/scripts/region_parameter.gd
index ec40000..023ecf4 100644
--- a/stages/terrain/region/scripts/region_parameter.gd
+++ b/stages/terrain/region/scripts/region_parameter.gd
@@ -2,8 +2,8 @@ extends Resource
class_name RegionParameter
const DEFAULT_ROCK_THRESHOLD = 0.3
-const DEFAULT_DECONTAMINATION_THRESHOLD = 0.35
-const DEFAULT_CRISTAL_THRESHOLD = 0.1
+const DEFAULT_DECONTAMINATION_THRESHOLD = 0.1
+const DEFAULT_CRISTAL_THRESHOLD = 0.3
const DEFAULT_CHARGE = 10
const DEFAULT_TALION_CELL_CHANCE : Array[int] = [0,0,0,1,1]
const DEFAULT_ENERGY_CELL_CHANCE : Array[int] = [1,2,2,2,3]
diff --git a/stages/title_screen/title_screen.tscn b/stages/title_screen/title_screen.tscn
index 99668a4..b0511f5 100644
--- a/stages/title_screen/title_screen.tscn
+++ b/stages/title_screen/title_screen.tscn
@@ -452,7 +452,6 @@ size = Vector2i(1980, 1080)
[node name="Planet3d" parent="SubViewport" unique_id=926789923 instance=ExtResource("5_7a1qq")]
unique_name_in_owner = true
-details = 20
noise = SubResource("FastNoiseLite_lwj2x")
[node name="Camera3D" type="Camera3D" parent="SubViewport" unique_id=806252928]
diff --git a/translation/game/gui.csv b/translation/game/gui.csv
index 90500e6..2085fe8 100644
--- a/translation/game/gui.csv
+++ b/translation/game/gui.csv
@@ -188,6 +188,7 @@ VIDEO,Video,Vidéo
FULLSCREEN,Fullscreen,Plein écran
FOV,Fov,Fov
GAME,Game,Jeu
+MOUSE_SENSIVITY,Mouse Sensivity in 3D scenes,Sensibilité de la souris dans les scènes en 3D
AUTO_PICKUP,Auto pickup seeds,Récolte automatique des graines
CONTROLS,Controls,Contrôles
MOVE_RIGHT,Move right,Déplacement à droite
@@ -314,7 +315,7 @@ TOXIC_MODIFIER_DESC_TEXT,Reduce all plant lifetime by 1,Réduit la durée de vie
SANDY,Sandy,Sableux
SANDY_MODIFIER_DESC_TEXT,Reduce plants influence radius,Réduit le rayon d'influence des plantes
RADIOACTIVE,Radioactive,Radioactif
-RADIOACTIVE_MODIFIER_DESC_TEXT,Reduce the plant's base plant point by 1,Réduit les points de plantes de base des plantes de 1
+RADIOACTIVE_MODIFIER_DESC_TEXT,Reduce the plant's base plant pPoint by 1,Réduit les points de plantes de base des plantes de 1
CONTAMINATED,Contaminated,Contaminée
CONTAMINATED_MODIFIER_DESC_TEXT,Decrease all plants seeds production by one,Diminue la production de graine de 1
MAGNETIC,Magnetic,Magnétique