Merge branch 'musique_et_son_3' of https://git.zacharie-guet.fr/zacharie/seeding-planets into musique_et_son_3

This commit is contained in:
2026-05-24 16:18:11 +02:00
207 changed files with 5852 additions and 1661 deletions

View File

@@ -0,0 +1,14 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://di0m3uqgi3l08"]
[ext_resource type="Texture2D" uid="uid://dfd72vla6crn4" path="res://common/assets/textures/cristal.png" id="1_m4qy0"]
[resource]
diffuse_mode = 3
specular_mode = 1
disable_fog = true
albedo_texture = ExtResource("1_m4qy0")
metallic_specular = 1.0
rim_tint = 0.48
stencil_flags = 2
stencil_reference = 5
stencil_outline_thickness = 0.626

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dfd72vla6crn4"
path.s3tc="res://.godot/imported/cristal.png-542ce388785d47ebc69b0d8cd0728915.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://common/assets/textures/cristal.png"
dest_files=["res://.godot/imported/cristal.png-542ce388785d47ebc69b0d8cd0728915.s3tc.ctex"]
[params]
compress/mode=2
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=true
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=0

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dq2nodhwnp73f"
path="res://.godot/imported/solarmusic-dripping-water-in-cave-114694.ogg-81f5d41775da1d0914399edcb9214d3c.oggvorbisstr"
[deps]
source_file="res://common/audio_manager/assets/ambiance/cave/solarmusic-dripping-water-in-cave-114694.ogg"
dest_files=["res://.godot/imported/solarmusic-dripping-water-in-cave-114694.ogg-81f5d41775da1d0914399edcb9214d3c.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dnqq2sy3dxrb2"
path="res://.godot/imported/freesound_community-wine-glass-clink-36036.mp3-bc462b7f4a73f6e9bc3696ca5c63bc97.mp3str"
[deps]
source_file="res://common/audio_manager/assets/sfx/cristal/freesound_community-wine-glass-clink-36036.mp3"
dest_files=["res://.godot/imported/freesound_community-wine-glass-clink-36036.mp3-bc462b7f4a73f6e9bc3696ca5c63bc97.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://di6id2kyfy2e1"
path="res://.godot/imported/sslc2022-earth-rumble-128880.mp3-cbdb82e7630ba8aed62692404d0e45e0.mp3str"
[deps]
source_file="res://common/audio_manager/assets/sfx/earth_rumble/sslc2022-earth-rumble-128880.mp3"
dest_files=["res://.godot/imported/sslc2022-earth-rumble-128880.mp3-cbdb82e7630ba8aed62692404d0e45e0.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://3c4nxjasebyk"
path="res://.godot/imported/pickaxe_1_reverb.wav-8d6172bc1e5c2f43ec5b5cf869d5b6e3.sample"
[deps]
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_1_reverb.wav"
dest_files=["res://.godot/imported/pickaxe_1_reverb.wav-8d6172bc1e5c2f43ec5b5cf869d5b6e3.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bs5ldhabymm5p"
path="res://.godot/imported/pickaxe_2_reverb.wav-c953afb7e49205a0f4377738e1135a5b.sample"
[deps]
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_2_reverb.wav"
dest_files=["res://.godot/imported/pickaxe_2_reverb.wav-c953afb7e49205a0f4377738e1135a5b.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bu278eqn8krnb"
path="res://.godot/imported/pickaxe_3_reverb.wav-d3e3d8b6b50a16c6757536f43c8c6ccd.sample"
[deps]
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_3_reverb.wav"
dest_files=["res://.godot/imported/pickaxe_3_reverb.wav-d3e3d8b6b50a16c6757536f43c8c6ccd.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://rf7hachl3042"
path="res://.godot/imported/universfield-bubble-pop-07-487896.mp3-9674fcc5b43af938e0c8845e16ca6bfd.mp3str"
[deps]
source_file="res://common/audio_manager/assets/sfx/signal/universfield-bubble-pop-07-487896.mp3"
dest_files=["res://.godot/imported/universfield-bubble-pop-07-487896.mp3-9674fcc5b43af938e0c8845e16ca6bfd.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -1,6 +1,8 @@
[gd_scene format=3 uid="uid://b6hscxcrj065q"]
[ext_resource type="Script" uid="uid://2p5d6vogtn82" path="res://common/audio_manager/scripts/audio_manager.gd" id="1_0tvca"]
[ext_resource type="AudioStream" uid="uid://dq2nodhwnp73f" path="res://common/audio_manager/assets/ambiance/cave/solarmusic-dripping-water-in-cave-114694.ogg" id="2_ge2sc"]
[ext_resource type="AudioStream" uid="uid://dipnmlprwfo12" path="res://common/audio_manager/assets/ambiance/niveau/ambiance_phase_1.ogg" id="2_tuvql"]
[ext_resource type="AudioStream" uid="uid://dipnmlprwfo12" path="res://common/audio_manager/assets/ambiance/niveau/ambiance.ogg" id="3_qvjf5"]
[ext_resource type="AudioStream" uid="uid://b1hut6lc1jevh" path="res://common/audio_manager/assets/morceaux/niveau/mines_phase_2.ogg" id="4_2fduo"]
[ext_resource type="AudioStream" uid="uid://cdohaice7nc8d" path="res://common/audio_manager/assets/ambiance/niveau/ambiance_foggy.ogg" id="4_ipd1r"]
@@ -129,6 +131,11 @@ script = ExtResource("1_0tvca")
[node name="Ambiances" type="Node" parent="." unique_id=1989991562]
unique_name_in_owner = true
[node name="Cave" type="AudioStreamPlayer" parent="Ambiances" unique_id=71769481]
stream = ExtResource("2_ge2sc")
volume_db = -7.195
pitch_scale = 0.5
[node name="BaseRelais" type="AudioStreamPlayer" parent="Ambiances" unique_id=1895636918]
unique_name_in_owner = true
stream = ExtResource("7_ge2sc")

View File

@@ -67,6 +67,9 @@ func _on_change_scene(scene : Scene):
elif scene is RelayBaseScene:
stop_all_musics()
play_ambiance_alone("BaseRelais", false)
elif scene is CaveScene:
stop_all_musics()
play_ambiance_alone("Cave", false)
# Fonction s'exécutant à chaque début de timeline
func _on_timeline_started():

View File

@@ -39,6 +39,11 @@ materials/extract_format=0
materials/extract_path=""
_subresources={
"materials": {
"Cristal": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/assets/materials/cristal.tres",
"use_external/path": "uid://di0m3uqgi3l08"
},
"Material": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/assets/materials/default_3d.tres",

View File

@@ -39,6 +39,11 @@ materials/extract_format=0
materials/extract_path=""
_subresources={
"materials": {
"Cristal": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/assets/materials/cristal.tres",
"use_external/path": "uid://di0m3uqgi3l08"
},
"Material": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/assets/materials/default_3d.tres",

View File

@@ -33,6 +33,7 @@ signal current_region_data_updated(p : RegionData)
@export var game_mode : GameMode = GameMode.STORY
@export var dialogs_done : Array[String] = [] #Chemin des dialogues terminés
@export var tutorials_done : Array[String] = []
func start_run() -> RunData:
player_data.clear_inventory()

View File

@@ -1,13 +1,12 @@
extends Resource
class_name ProgressionData
@export var planted_mutation_ids: Array[String] = []
@export var story_step_i := 0
@export var ship_tutorial_done = false
@export var mutations_unlocked = 8
var all_mutations: Array[PlantMutation] : get = get_all_mutations
var available_mutations: Array[PlantMutation] : get = get_all_mutations
var available_mutations: Array[PlantMutation] : get = get_available_mutations
var available_artefacts: Array[Artefact] : get = get_all_artifacts
var story_step : StoryStep : get = get_story_step
@@ -19,23 +18,26 @@ func next_story_step() -> void:
if story_step_i + 1 < len(get_all_story_steps()):
story_step_i += 1
func get_available_mutations() -> Array[PlantMutation]:
return get_all_mutations().slice(0, mutations_unlocked)
func get_all_mutations() -> Array[PlantMutation]:
return [
AncientMutation.new(),
FertileMutation.new(),
GenerousMutation.new(),
HurriedMutation.new(),
PrecociousMutation.new(),
ProlificMutation.new(),
ProtectiveMutation.new(),
PureMutation.new(),
PurificationMutation.new(),
QualityMutation.new(),
AncientMutation.new(),
ProlificMutation.new(),
PrecociousMutation.new(),
PurificationMutation.new(),
VivaciousMutation.new(),
QuickMutation.new(),
RobustMutation.new(),
SocialMutation.new(),
FertileMutation.new(),
HurriedMutation.new(),
GenerousMutation.new(),
ProtectiveMutation.new(),
PureMutation.new(),
ToughMutation.new(),
VivaciousMutation.new(),
]
func get_all_artifacts() -> Array[Artefact]:

View File

@@ -32,42 +32,56 @@ func generate_next_run_points() -> Array[RunPoint]:
next_run_points = []
for i in range(story_step.get_run_point_number(level+1)):
var last_modifiers : Array[String] = []
if len(next_run_points):
for m in next_run_points[0].region_parameter.modifiers:
last_modifiers.append(m.modifier_name)
next_run_points.append(
generate_next_run_point()
generate_next_run_point(last_modifiers)
)
return next_run_points
func generate_next_run_point() -> RunPoint:
func generate_next_run_point(last_modifiers : Array[String] = []) -> RunPoint:
var region_parameter = RegionParameter.new()
var next_level = level+1
var challenge_modifiers = generate_challenge_modifiers().filter(
func(m : RegionModifier): return not m.modifier_name in last_modifiers
)
var benefic_modifiers = generate_benefic_modifiers().filter(
func(m : RegionModifier): return not m.modifier_name in last_modifiers
)
var normal_modifiers = generate_normal_modifiers().filter(
func(m : RegionModifier): return not m.modifier_name in last_modifiers
)
if story_step.need_gameplay_modifier(next_level):
var is_challenge = randf() < story_step.get_challenge_chance(next_level)
if is_challenge:
region_parameter.modifiers = [
generate_challenge_modifiers().pick_random(),
generate_benefic_modifiers().pick_random()
challenge_modifiers.pick_random(),
benefic_modifiers.pick_random()
] as Array[RegionModifier]
else:
region_parameter.modifiers = [
generate_normal_modifiers().pick_random()
normal_modifiers.pick_random()
] as Array[RegionModifier]
var first_vending = story_step.get_first_vending_machine_occurence(next_level)
var vending_occurence = story_step.get_vending_machine_occurence(next_level)
if vending_occurence > 0:
if (level - first_vending)%vending_occurence == 0:
region_parameter.modifiers.append(VendingMachineModifier.new())
region_parameter.modifiers.append_array(
story_step.get_gameplay_modifiers_for_region(next_level)
)
region_parameter.modifiers.append_array(
story_step.get_story_modifiers_for_region(next_level)
)
region_parameter.objective = story_step.get_objective_for_region(next_level)
region_parameter.charge = story_step.get_charge_number(next_level)
return RunPoint.new(
region_parameter
)
@@ -94,7 +108,7 @@ func generate_normal_modifiers() -> Array[RegionModifier]:
HarshModifier.new(),
ToxicModifier.new(),
SandyModifier.new(),
MagneticModifier.new(),
]
func generate_benefic_modifiers() -> Array[RegionModifier]:
@@ -102,6 +116,7 @@ func generate_benefic_modifiers() -> Array[RegionModifier]:
VendingMachineModifier.new(),
ResonnanceModifier.new(),
InstableModifier.new(),
CaveModifier.new(),
]

View File

@@ -57,8 +57,8 @@ const AVAILABLE_LANGUAGES_LABEL = [
#region ------------------ Game ------------------
const MAX_ZOOM = 1.8
const MIN_ZOOM = 0.8
const MAX_ZOOM = 2.
const MIN_ZOOM = 0.5
# Not in settings pannel
@export var zoom : float = 1. :

View File

@@ -2,6 +2,7 @@ extends StoryStep
class_name AstraStoryStep
const MERCURY_ARRIVAL_DIALOG_PATH="res://dialogs/timelines/astra/mercury_arrival.dtl"
const CAVE_DIALOG_PATH="res://dialogs/timelines/astra/cave.dtl"
func get_respawn_scene() -> Scene:
return AstraScene.new()
@@ -15,9 +16,21 @@ func get_destination_scene() -> Scene:
"001"
)
func get_cave_occurence(_level : int) -> int:
return 2
func get_region_sequence_length() -> int:
return 4
func get_objective_for_region(level : int) -> int:
match level:
1: return 6
2: return 10
3: return 16
4: return 24
5: return 34
_: return get_objective_for_region(level-1) + (level-2) * 5
func get_first_vending_machine_occurence(_level : int) -> int:
return 0
@@ -28,6 +41,8 @@ func get_challenge_chance(_level : int) -> float:
return 0.
func get_ship_dialog_path(level : int, ship_in_space := true) -> String:
if ship_in_space and level == get_region_sequence_length() - 1:
if ship_in_space and level == get_cave_occurence(level) - 1:
return CAVE_DIALOG_PATH
if ship_in_space and is_run_finished(level + 1):
return MERCURY_ARRIVAL_DIALOG_PATH
return ""

View File

@@ -22,11 +22,11 @@ func get_destination_scene() -> Scene:
)
func get_first_vending_machine_occurence(_level : int) -> int:
return 0
return 1
func get_ship_dialog_path(level : int, ship_in_space := true) -> String:
if level == 0:
return MERCURY_DEPARTURE_DIALOG_PATH
if ship_in_space and level == get_region_sequence_length() - 1:
if ship_in_space and is_run_finished(level + 1):
return VENUS_ARRIVAL_DIALOG_PATH
return ""

View File

@@ -19,7 +19,7 @@ func get_ship_dialog_path(_level : int, _ship_in_space := true) -> String:
#region ------------------ Run ------------------
func is_run_finished(level : int) -> bool:
return level == get_region_sequence_length()
return level == get_region_sequence_length() - 1
func get_region_sequence_length() -> int:
return 6
@@ -28,7 +28,13 @@ func get_first_vending_machine_occurence(_level : int) -> int:
return 2
func get_vending_machine_occurence(_level : int) -> int:
return 4
return 3
func get_first_cave_occurence(level : int) -> int:
return get_cave_occurence(level)
func get_cave_occurence(_level : int) -> int:
return 3
func get_challenge_chance(_level : int) -> float:
return 0.3
@@ -38,15 +44,17 @@ func get_run_point_number(level : int) -> int:
return 1
return 2
func get_charge_number(_level : int) -> int:
return 10
func get_objective_for_region(level : int) -> int:
match level:
0: return 1
1: return 8
2: return 10
3: return 15
4: return 20
5: return 30
_: return get_objective_for_region(level-1) + (level-3) * 5
1: return 10
2: return 15
3: return 20
4: return 30
5: return 45
_: return get_objective_for_region(level-1) + (level-2) * 5
func get_story_modifiers_for_region(level : int) -> Array[RegionModifier]:
var modifiers : Array[RegionModifier] = []
@@ -54,6 +62,25 @@ func get_story_modifiers_for_region(level : int) -> Array[RegionModifier]:
var dest_mod = DestinationModifier.new()
dest_mod.destination_scene = get_destination_scene()
modifiers.append(dest_mod)
var first_cave = get_first_cave_occurence(level)
var cave_occurence = get_cave_occurence(level)
if cave_occurence > 0 and level >= first_cave:
if (level - first_cave)%cave_occurence == 0:
modifiers.append(CaveModifier.new())
return modifiers
func get_gameplay_modifiers_for_region(level : int) -> Array[RegionModifier]:
var modifiers : Array[RegionModifier] = []
if need_gameplay_modifier(level):
var first_vending = get_first_vending_machine_occurence(level)
var vending_occurence = get_vending_machine_occurence(level)
if vending_occurence > 0 and level >= first_vending:
if (level - first_vending)%vending_occurence == 0:
modifiers.append(VendingMachineModifier.new())
return modifiers
func need_gameplay_modifier(level : int):

23
common/icons/cristal.svg Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="#ffffff"
class="icon icon-tabler icons-tabler-filled icon-tabler-globe"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<path
id="path5"
style="fill:#ffffff;stroke-width:21.0943;stroke-linecap:round;paint-order:stroke fill markers"
d="m 17.023734,4.3635641 a 0.381287,0.381287 0 0 0 -0.170042,0.058862 L 11.821685,7.6971107 A 0.63341096,0.63341096 0 0 0 11.534237,8.2108309 L 11.240336,19.008011 a 0.54999444,0.54999444 0 0 0 0.281243,0.495301 l 2.913668,1.633839 a 0.85528839,0.85528839 0 0 0 0.615008,0.08674 l 3.251881,-0.764304 a 0.54999441,0.54999441 0 0 0 0.407255,-0.3982 L 21.41304,9.6040507 A 0.633411,0.633411 0 0 0 21.276945,9.0305978 L 17.348792,4.4922505 A 0.381287,0.381287 0 0 0 17.023734,4.3635641 Z M 16.855445,5.710685 a 0.29045002,0.29045002 0 0 1 0.24822,0.1000976 l 2.992058,3.4556065 a 0.18188889,0.18188889 0 0 1 -0.06799,0.2862794 L 16.39349,11.042166 a 0.43339164,0.43339164 0 0 1 -0.433214,-0.0611 L 12.879721,8.5445752 a 0.18188888,0.18188888 0 0 1 0.01384,-0.2939165 l 3.831045,-2.4933356 a 0.29045002,0.29045002 0 0 1 0.130842,-0.046638 z" />
<path
id="path11"
style="fill:#ffffff;stroke-width:30;stroke-linecap:round;paint-order:stroke fill markers"
d="M 11.299657,2.8712653 4.865863,8.4803941 A 0.83240115,0.83240115 109.32328 0 0 4.5938103,9.2562442 l 1.6673523,9.2015148 a 0.84433519,0.84433519 50.484116 0 0 0.5249373,0.63644 l 4.4292571,1.721467 a 1.216379,1.216379 3.6429642e-7 0 0 0.88129,0 l 4.429257,-1.721467 a 0.84433513,0.84433513 129.51588 0 0 0.524938,-0.63644 L 18.718193,9.2562442 A 0.83240121,0.83240121 70.676724 0 0 18.446141,8.4803941 L 12.012347,2.8712653 a 0.54226096,0.54226096 5.9568751e-7 0 0 -0.71269,0 z"
transform="matrix(0.43145929,-0.11560917,0.11560917,0.43145929,0.83225312,12.978764)" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqdyykjx6hdrr"
path.s3tc="res://.godot/imported/cristal.svg-7e9a919e9dbc36092f14a8401b5f4888.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://common/icons/cristal.svg"
dest_files=["res://.godot/imported/cristal.svg-7e9a919e9dbc36092f14a8401b5f4888.s3tc.ctex"]
[params]
compress/mode=2
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=true
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=0
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

23
common/icons/flag-2.svg Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="currentColor"
class="icon icon-tabler icons-tabler-filled icon-tabler-flag-2"
version="1.1"
id="svg2"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<path
stroke="none"
d="M 0,0 H 24 V 24 H 0 Z"
fill="none"
id="path1" />
<path
d="m 19,4 a 1,1 0 0 1 0.993,0.883 L 20,5 v 9 a 1,1 0 0 1 -0.883,0.993 L 19,15 H 6 v 6 A 1,1 0 0 1 5.117,21.993 L 5,22 A 1,1 0 0 1 4.007,21.117 L 4,21 V 5 A 1,1 0 0 1 4.883,4.007 L 5,4 Z"
id="path2"
style="fill:#fefefe;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 701 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://uckrw5fan88k"
path="res://.godot/imported/flag-2.svg-b4658bfe95b153ec543e0e6f4d1176cb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/flag-2.svg"
dest_files=["res://.godot/imported/flag-2.svg-b4658bfe95b153ec543e0e6f4d1176cb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

39
common/icons/hand-finger Normal file
View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="18.474695"
height="20.999998"
viewBox="0 0 18.474695 20.999998"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="icon icon-tabler icons-tabler-outline icon-tabler-hand-finger"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<path
stroke="none"
d="m -2.525305,-2.0000007 h 24 V 21.999999 h -24 z"
fill="none"
id="path1" />
<path
d="M 5.474695,10.999999 V 2.4999993 a 1.5,1.5 0 0 1 3,0 v 7.5"
id="path2"
style="stroke:#ffffff;stroke-opacity:1" />
<path
d="m 8.474695,9.4999993 v -2 a 1.5,1.5 0 1 1 3,0 v 2.5"
id="path3"
style="stroke:#ffffff;stroke-opacity:1" />
<path
d="m 11.474695,8.4999993 a 1.5,1.5 0 0 1 3,0 v 1.5"
id="path4"
style="stroke:#ffffff;stroke-opacity:1" />
<path
d="m 14.474695,9.4999993 a 1.5,1.5 0 0 1 3,0 v 4.4999997 a 6,6 0 0 1 -6,6 h -2 0.208 a 6,6 0 0 1 -5.012,-2.7 69.74,69.74 0 0 1 -0.196,-0.3 c -0.312,-0.479 -1.407,-2.388 -3.286,-5.728 a 1.5,1.5 0 0 1 0.536,-2.0219997 1.867,1.867 0 0 1 2.28,0.28 l 1.47,1.4699997"
id="path5"
style="stroke:#ffffff;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="18.474695"
height="20.999998"
viewBox="0 0 18.474695 20.999998"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="icon icon-tabler icons-tabler-outline icon-tabler-hand-finger"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<path
stroke="none"
d="m -2.525305,-2.0000007 h 24 V 21.999999 h -24 z"
fill="none"
id="path1" />
<path
d="M 5.474695,10.999999 V 2.4999993 a 1.5,1.5 0 0 1 3,0 v 7.5"
id="path2"
style="stroke:#ffffff;stroke-opacity:1" />
<path
d="m 8.474695,9.4999993 v -2 a 1.5,1.5 0 1 1 3,0 v 2.5"
id="path3"
style="stroke:#ffffff;stroke-opacity:1" />
<path
d="m 11.474695,8.4999993 a 1.5,1.5 0 0 1 3,0 v 1.5"
id="path4"
style="stroke:#ffffff;stroke-opacity:1" />
<path
d="m 14.474695,9.4999993 a 1.5,1.5 0 0 1 3,0 v 4.4999997 a 6,6 0 0 1 -6,6 h -2 0.208 a 6,6 0 0 1 -5.012,-2.7 69.74,69.74 0 0 1 -0.196,-0.3 c -0.312,-0.479 -1.407,-2.388 -3.286,-5.728 a 1.5,1.5 0 0 1 0.536,-2.0219997 1.867,1.867 0 0 1 2.28,0.28 l 1.47,1.4699997"
id="path5"
style="stroke:#ffffff;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b3vg3tipd4boh"
path="res://.godot/imported/hand-finger.svg-4b9fa57a07066292554e8fd7f7ad9dac.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/hand-finger.svg"
dest_files=["res://.godot/imported/hand-finger.svg-4b9fa57a07066292554e8fd7f7ad9dac.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

45
common/icons/magnet.svg Normal file
View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="currentColor"
class="icon icon-tabler icons-tabler-filled icon-tabler-magnet"
version="1.1"
id="svg2"
sodipodi:docname="magnet.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="18.5"
inkscape:cx="18.621622"
inkscape:cy="14.324324"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
stroke="none"
d="M0 0h24v24H0z"
fill="none"
id="path1" />
<path
d="M21 9v4a9 9 0 0 1 -18 0v-4h7v4a2 2 0 1 0 4 0v-4zm-3 -7a3 3 0 0 1 3 3v2h-7v-2a3 3 0 0 1 3 -3zm-11 0a3 3 0 0 1 3 3v2h-7v-2a3 3 0 0 1 3 -3z"
id="path2"
style="fill:#ffffff;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://mv0emix7dwio"
path="res://.godot/imported/magnet.svg-210fc8631abfaf11eefb9e027a72fb42.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/icons/magnet.svg"
dest_files=["res://.godot/imported/magnet.svg-210fc8631abfaf11eefb9e027a72fb42.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=2.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,31 @@
extends Scene
class_name CaveScene
@export var cave_room_seed = 0
func _init(
_crs : int = 0
):
cave_room_seed = _crs
func get_scene_id() -> String:
return "CRISTAL_CAVE"
func get_scene_path() -> String:
return "res://stages/3d_scenes/cave/cave.tscn"
func is_mouse_captured() -> bool:
return true
func is_needed_to_be_announced() -> bool:
return true
func get_scene_title() -> String:
return tr("CRISTAL_CAVE")
func get_scene_icon() -> Texture:
return preload("res://common/icons/cristal.svg")
func _on_generated(generated_scene : Node):
var cave : Cave = generated_scene as Cave
cave.setup_room(cave_room_seed)

View File

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

View File

@@ -12,16 +12,18 @@ static func get_tile_from_pos(coord) -> Vector2i:
floori(coord.y / (Region.TILE_SIZE)),
)
static func get_tiles_in_circle(center: Vector2, radius : float) -> Array[Vector2i]:
static func get_tiles_in_circle(center: Vector2,radius : float) -> Array[Vector2i]:
var tiles : Array[Vector2i] = []
var margin = ceili(radius * 0.5)
for x in range(
floori((center.x - radius/2.) / Region.TILE_SIZE),
ceili((center.x + radius/2.) / Region.TILE_SIZE),
floori((center.x - radius/2.) / Region.TILE_SIZE) - margin,
ceili((center.x + radius/2.) / Region.TILE_SIZE) + margin,
):
for y in range(
floori((center.y - radius/2.) / Region.TILE_SIZE),
ceili((center.y + radius/2.) / Region.TILE_SIZE),
floori((center.y - radius/2.) / Region.TILE_SIZE) - margin,
ceili((center.y + radius/2.) / Region.TILE_SIZE) + margin,
):
if is_tile_on_circle(Vector2i(x,y), center, radius):
tiles.append(Vector2i(x,y))
@@ -30,24 +32,29 @@ static func get_tiles_in_circle(center: Vector2, radius : float) -> Array[Vector
static func is_tile_on_circle(tile_coord : Vector2i, circle_center: Vector2, circle_radius : float) -> bool:
var absolute_tile_pos : Vector2 = tile_coord * Region.TILE_SIZE
# Loop over tile corners to know if the area collide
var corners : Array[Vector2] = []
for x in [0,1]:
for y in [0,1]:
corners.append(
absolute_tile_pos
+ Vector2.RIGHT * x * Region.TILE_SIZE
+ Vector2.DOWN * y * Region.TILE_SIZE
)
# Check if segment touch area
for i in range(4):
var a = corners[i%4]
var b = corners[(i+1)%4]
if segment_intersect_circle(a,b,circle_center,circle_radius):
return true
var tile_center = absolute_tile_pos + Vector2.ONE * Region.TILE_SIZE / 2
var tile_radius = roundf(Region.TILE_SIZE/2.)
return false
return pow(tile_center.x - circle_center.x, 2) + pow(tile_center.y - circle_center.y, 2) <= pow(tile_radius + circle_radius, 2)
# Loop over tile corners to know if the area collide
# var corners : Array[Vector2] = []
# for x in [0,1]:
# for y in [0,1]:
# corners.append(
# absolute_tile_pos
# + Vector2.RIGHT * x * Region.TILE_SIZE
# + Vector2.DOWN * y * Region.TILE_SIZE
# )
# # Check if segment touch area
# for i in range(4):
# var a = corners[i%4]
# var b = corners[(i+1)%4]
# if segment_intersect_circle(a,b,circle_center,circle_radius):
# return true
# return false
# Stolen here https://stackoverflow.com/questions/1073336/circle-line-segment-collision-detection-algorithm

View File

@@ -0,0 +1,3 @@

View File

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

View File

@@ -0,0 +1,9 @@
[gd_scene format=3 uid="uid://6or2rnjt5ixv"]
[ext_resource type="Script" uid="uid://bebwor5r5nnov" path="res://common/tools/scripts/test_tiles.gd" id="1_44t07"]
[node name="TestTiles" type="Node2D" unique_id=949540000]
script = ExtResource("1_44t07")
[node name="Grid" type="Node2D" parent="." unique_id=2109744474]
unique_name_in_owner = true

View File

@@ -0,0 +1,40 @@
shader_type canvas_item;
uniform float line_number = 6;
uniform vec4 line_color : source_color = vec4(1.);
uniform float line_thickness : hint_range(0.0, 0.01) = 0.001;
const mat3 sobel_x = mat3(
vec3( 1.0, 2.0, 1.0),
vec3( 0.0, 0.0, 0.0),
vec3(-1.0, -2.0, -1.0)
);
const mat3 sobel_y = mat3(
vec3(1.0, 0.0, -1.0),
vec3(2.0, 0.0, -2.0),
vec3(1.0, 0.0, -1.0)
);
float sample_quantized(sampler2D text, vec2 uv) {
return ceil(texture(text, uv).r * line_number) / line_number;
}
void fragment() {
float gx = 0.0;
float gy = 0.0;
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
vec2 offset = vec2(float(x) - 1.0, float(y) - 1.0) * line_thickness;
float s = sample_quantized(TEXTURE, UV + offset);
gx += s * sobel_x[x][y];
gy += s * sobel_y[x][y];
}
}
float edge = length(vec2(gx, gy));
float line = step(0.0001, edge);
COLOR = vec4(line_color.rgb, line * line_color.a * COLOR.r);
}

View File

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

View File

@@ -0,0 +1,13 @@
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
join demeter center [animation="Bounce In" length="1.0"]
demeter: I hope everything is going well for you so far. I'm calling because the next regions you're heading to contain unique rock formations\: the [b]Caverns of Talion[/b]. #id:e5
- Talion hadn't disappeared? #id:e6
demeter: Precisely, I'd like you to check for me if its reappearance on the surface also means its reappearance in the caverns. #id:e7
- How do you know? #id:e8
demeter: These caverns were well known to humans. Some went there to study Talion, others to explore the cave. These explorations were very risky, but apparently some humans enjoyed risking their lives... #id:e9
- What does that change for me? #id:ea
demeter: The crystals in these caverns are special; they don't produce life, but they release a powerful mutagenic energy into the air. This will surely help you grow more powerfull plants for the rest of your journey. #id:eb
demeter: Use your detector to find the entrance to the cave; humans had installed an elevator there. #id:ec
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
[wait time="2.0"]
[end_timeline]

View File

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

View File

@@ -1,29 +1,52 @@
extends Camera2D
class_name Camera
class_name RegionCamera
const MOVE_LERP_WEIGHT = 0.9
const ZOOM_LERP_WEIGHT = 0.05
const SHAKE_INTENSITY = 10.0
const SHAKE_SPEED = 500.0
const ZOOM_STEP = 0.1
@export var following : Node2D
@export var should_follow : bool = true
@onready var settings = GameInfo.settings_data
@export var shake_active_time = -1
var shake_noise := FastNoiseLite.new()
func _input(_e):
if Input.is_action_just_pressed("zoom_in"):
settings.zoom = settings.zoom + ZOOM_STEP
GameInfo.save_settings()
if Input.is_action_just_pressed("zoom_out"):
settings.zoom = settings.zoom - ZOOM_STEP
GameInfo.save_settings()
if Input.is_action_just_pressed("zoom_in"):
settings.zoom = settings.zoom + ZOOM_STEP
GameInfo.save_settings()
if Input.is_action_just_pressed("zoom_out"):
settings.zoom = settings.zoom - ZOOM_STEP
GameInfo.save_settings()
func _ready():
if following:
zoom = Vector2.ONE * settings.zoom
global_position = following.global_position
if following and should_follow:
zoom = Vector2.ONE * settings.zoom
global_position = following.global_position
func _process(_delta):
if following:
global_position = following.global_position.lerp(global_position, MOVE_LERP_WEIGHT)
zoom = zoom.lerp(Vector2.ONE * settings.zoom, MOVE_LERP_WEIGHT)
func _process(delta):
if following and should_follow:
global_position = following.global_position.lerp(global_position, MOVE_LERP_WEIGHT)
zoom = zoom.lerp(Vector2.ONE * settings.zoom, MOVE_LERP_WEIGHT)
if shake_active_time > 0.:
print(shake_noise.get_noise_2d(shake_active_time * SHAKE_SPEED, 0) * SHAKE_INTENSITY)
shake_active_time -= delta
offset = Vector2(
shake_noise.get_noise_2d(shake_active_time * SHAKE_SPEED, 0) * SHAKE_INTENSITY,
shake_noise.get_noise_2d(0, shake_active_time * SHAKE_SPEED) * SHAKE_INTENSITY,
)
else :
offset = lerp(offset, Vector2.ZERO, 10.5 * delta)
func shake(time := 5):
shake_noise.seed = randi()
shake_active_time = time

View File

@@ -0,0 +1,294 @@
[gd_scene format=3 uid="uid://bhbc1monbgumh"]
[ext_resource type="Script" uid="uid://xamd5y6tig71" path="res://entities/interactable_3d/cristal/scripts/artefact_announce.gd" id="1_2sroa"]
[ext_resource type="Texture2D" uid="uid://bi5jo6pf0acjb" path="res://common/icons/carambola.svg" id="2_3vg7r"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="3_doutq"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="4_bw55c"]
[ext_resource type="Script" uid="uid://bqisp5hjs06rj" path="res://gui/game/announce/scripts/announce_inspectable.gd" id="5_5vr2f"]
[ext_resource type="Script" uid="uid://dj2pv1hiwjfv0" path="res://gui/game/card/scripts/card_info.gd" id="7_tryv5"]
[ext_resource type="Script" uid="uid://dgbh38j13g5kn" path="res://gui/game/card/scripts/card_section_info.gd" id="8_duftv"]
[ext_resource type="Texture2D" uid="uid://dth2mj0nh2q70" path="res://common/icons/align-right.svg" id="9_qlk3h"]
[ext_resource type="Script" uid="uid://b4tkium34c831" path="res://gui/game/card/scripts/card_stat_info.gd" id="10_d5x7w"]
[ext_resource type="Texture2D" uid="uid://bsvxhafoxwmw0" path="res://common/icons/cube-3d-sphere.svg" id="11_mb83y"]
[ext_resource type="Environment" uid="uid://bxyp24f85p0xf" path="res://gui/game/assets/gui_3d_environment.tres" id="13_uyc6b"]
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="14_kb1t6"]
[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="15_ijwr2"]
[sub_resource type="ViewportTexture" id="ViewportTexture_6hxtc"]
viewport_path = NodePath("Particles/SubViewport")
[sub_resource type="Curve" id="Curve_brrmr"]
_limits = [-200.0, 200.0, 0.0, 1.0]
_data = [Vector2(0, -200), 0.0, 560.0, 0, 0, Vector2(0.08235294, 92.384125), 1336.3082, 1336.3082, 0, 0, Vector2(0.34901965, 200), 0.0, 0.0, 0, 0, Vector2(0.854902, -200), 0.0, 0.0, 0, 0]
point_count = 4
[sub_resource type="Gradient" id="Gradient_0u75y"]
offsets = PackedFloat32Array(0, 0.8689956, 0.98253274)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="LabelSettings" id="LabelSettings_u8fe7"]
font = ExtResource("4_bw55c")
font_size = 50
font_color = Color(1, 0.6509804, 0.09019608, 1)
[sub_resource type="ViewportTexture" id="ViewportTexture_smt8b"]
viewport_path = NodePath("AnnounceContainer/ObjectVisualiser/SubViewport")
[sub_resource type="Resource" id="Resource_xdybx"]
script = ExtResource("8_duftv")
title_text = "DESCRIPTION"
title_icon = ExtResource("9_qlk3h")
text = "TALION_OVERLOADER_DESC_TEXT"
[sub_resource type="Resource" id="Resource_041ff"]
script = ExtResource("7_tryv5")
title = "TALION_OVERLOADER"
subtitle = "ARTEFACT"
important_stat_icon = ExtResource("11_mb83y")
sections = Array[ExtResource("8_duftv")]([SubResource("Resource_xdybx")])
[sub_resource type="Animation" id="Animation_aao0q"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("ArtefactAnnounce/AnnounceContainer:theme_override_constants/separation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [4]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("ArtefactAnnounce/Particles:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("ArtefactAnnounce/AnnounceContainer:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("ArtefactAnnounce/MarginContainer/BackgroundRect:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [1.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("ArtefactAnnounce:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.03333333),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_b6hac"]
resource_name = "appear"
length = 0.8
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("ArtefactAnnounce/AnnounceContainer:theme_override_constants/separation")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.23333333, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [480, 4]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("ArtefactAnnounce/Particles:modulate")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.5, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("ArtefactAnnounce/AnnounceContainer:modulate")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.2, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("ArtefactAnnounce/MarginContainer/BackgroundRect:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.03333333, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 0.8]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("ArtefactAnnounce:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 0.16666667),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_1aa3a"]
_data = {
&"RESET": SubResource("Animation_aao0q"),
&"appear": SubResource("Animation_b6hac")
}
[node name="ArtefactAnnounce" type="CanvasLayer" unique_id=1447182082]
visible = false
script = ExtResource("1_2sroa")
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1853133518]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="BackgroundRect" type="ColorRect" parent="MarginContainer" unique_id=1594037653]
layout_mode = 2
color = Color(0.0352941, 0.0196078, 0.12549, 0.705882)
[node name="Particles" type="TextureRect" parent="." unique_id=1748571879]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -500.0
offset_top = -500.0
offset_right = 500.0
offset_bottom = 500.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("ViewportTexture_6hxtc")
[node name="SubViewport" type="SubViewport" parent="Particles" unique_id=1123249182]
transparent_bg = true
size = Vector2i(1000, 1000)
[node name="GPUParticles2D" type="CPUParticles2D" parent="Particles/SubViewport" unique_id=220592083]
position = Vector2(500, 500)
amount = 20
texture = ExtResource("2_3vg7r")
preprocess = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 2.0
initial_velocity_max = 2.0
linear_accel_min = 5.0
linear_accel_max = 5.0
linear_accel_curve = SubResource("Curve_brrmr")
color_ramp = SubResource("Gradient_0u75y")
[node name="AnnounceContainer" type="VBoxContainer" parent="." unique_id=645433045]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -627.0
offset_bottom = 627.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 4
alignment = 1
[node name="AnnounceTitle" type="Label" parent="AnnounceContainer" unique_id=1768593559]
unique_name_in_owner = true
layout_mode = 2
text = "NEW_ARTEFACT"
label_settings = ExtResource("3_doutq")
horizontal_alignment = 1
[node name="AnnounceText" type="Label" parent="AnnounceContainer" unique_id=768724763]
unique_name_in_owner = true
layout_mode = 2
text = "TALION_OVERLOADER"
label_settings = SubResource("LabelSettings_u8fe7")
horizontal_alignment = 1
[node name="ObjectVisualiser" type="TextureRect" parent="AnnounceContainer" unique_id=1180983374]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
mouse_filter = 0
texture = SubResource("ViewportTexture_smt8b")
stretch_mode = 5
script = ExtResource("5_5vr2f")
info = SubResource("Resource_041ff")
[node name="SubViewport" type="SubViewport" parent="AnnounceContainer/ObjectVisualiser" unique_id=1795775056]
own_world_3d = true
transparent_bg = true
size = Vector2i(300, 300)
[node name="AnnouceObject" type="Node3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=1527573801]
unique_name_in_owner = true
transform = Transform3D(-0.47699222, 0, 0.878631, 0, 0.9995686, 0, -0.8787731, 0, -0.47690943, 0, 0, 0)
[node name="Camera3D" type="Camera3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=173755338]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1)
keep_aspect = 0
current = true
fov = 20.0
[node name="WorldEnvironment" type="WorldEnvironment" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=1135825303]
environment = ExtResource("13_uyc6b")
[node name="OkButton" type="Button" parent="AnnounceContainer" unique_id=249785792]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
theme = ExtResource("14_kb1t6")
text = "OK"
icon = ExtResource("15_ijwr2")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1913258839]
unique_name_in_owner = true
root_node = NodePath("../..")
libraries/ = SubResource("AnimationLibrary_1aa3a")

Binary file not shown.

View File

@@ -0,0 +1,68 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://mwk845fx5ye2"
path="res://.godot/imported/cristal.blend-5fdcaa76cec17f12715c1ff4a4caf324.scn"
[deps]
source_file="res://entities/interactable_3d/cristal/assets/cristal.blend"
dest_files=["res://.godot/imported/cristal.blend-5fdcaa76cec17f12715c1ff4a4caf324.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={
"materials": {
"Cristal": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/assets/materials/cristal.tres",
"use_external/path": "uid://di0m3uqgi3l08"
}
}
}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/gpu_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2

Binary file not shown.

View File

@@ -0,0 +1,68 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c7p114rvk26xw"
path="res://.godot/imported/cristal_crack.blend-127c21c2b9bb4a6237729dd3a817aaf1.scn"
[deps]
source_file="res://entities/interactable_3d/cristal/assets/cristal_crack.blend"
dest_files=["res://.godot/imported/cristal_crack.blend-127c21c2b9bb4a6237729dd3a817aaf1.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={
"materials": {
"Cristal": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/assets/materials/cristal.tres",
"use_external/path": "uid://di0m3uqgi3l08"
}
}
}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/gpu_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2

Binary file not shown.

View File

@@ -0,0 +1,84 @@
[gd_scene format=3 uid="uid://8rorj31s3irn"]
[ext_resource type="Script" uid="uid://dwn3g8c5sa0a2" path="res://entities/interactable_3d/cristal/scripts/cristal.gd" id="1_ci2hw"]
[ext_resource type="AudioStream" uid="uid://3c4nxjasebyk" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_1_reverb.wav" id="2_3rrt0"]
[ext_resource type="PackedScene" uid="uid://mwk845fx5ye2" path="res://entities/interactable_3d/cristal/assets/cristal.blend" id="2_ci2hw"]
[ext_resource type="PackedScene" uid="uid://c7p114rvk26xw" path="res://entities/interactable_3d/cristal/assets/cristal_crack.blend" id="2_vejte"]
[ext_resource type="AudioStream" uid="uid://bs5ldhabymm5p" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_2_reverb.wav" id="3_247i2"]
[ext_resource type="AudioStream" uid="uid://bu278eqn8krnb" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_3_reverb.wav" id="4_k7wsc"]
[ext_resource type="PackedScene" uid="uid://bhbc1monbgumh" path="res://entities/interactable_3d/cristal/artefact_announce.tscn" id="8_3rrt0"]
[ext_resource type="PackedScene" uid="uid://brp1fpvasaims" path="res://entities/interactable_3d/cristal/mutation_announce.tscn" id="9_247i2"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ojmpp"]
streams_count = 3
stream_0/stream = ExtResource("2_3rrt0")
stream_1/stream = ExtResource("3_247i2")
stream_2/stream = ExtResource("4_k7wsc")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ci2hw"]
transparency = 1
shading_mode = 0
vertex_color_use_as_albedo = true
[sub_resource type="PrismMesh" id="PrismMesh_nvfy2"]
lightmap_size_hint = Vector2i(14, 21)
material = SubResource("StandardMaterial3D_ci2hw")
size = Vector3(0.2, 0.2, 0.2)
[sub_resource type="Gradient" id="Gradient_ci2hw"]
offsets = PackedFloat32Array(0, 0.80349344, 1)
colors = PackedColorArray(1, 0.6509804, 0.09019608, 1, 1, 0.1764706, 0.3372549, 0.827451, 1, 0, 0.43137255, 0)
[sub_resource type="BoxShape3D" id="BoxShape3D_nvfy2"]
size = Vector3(1, 2.0454712, 1)
[node name="Cristal" type="Area3D" unique_id=1403604311]
script = ExtResource("1_ci2hw")
metadata/_custom_type_script = "uid://bj4d1x8n8ina"
[node name="BreackAudioPlayer" type="AudioStreamPlayer3D" parent="." unique_id=1190729820]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0430325, 0)
stream = SubResource("AudioStreamRandomizer_ojmpp")
[node name="BreakParticles" type="CPUParticles3D" parent="." unique_id=1968257379]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0430325, 0)
emitting = false
amount = 16
lifetime = 0.5
one_shot = true
speed_scale = 1.5
explosiveness = 1.0
mesh = SubResource("PrismMesh_nvfy2")
particle_flag_rotate_y = true
direction = Vector3(0, 1, 0)
initial_velocity_min = 1.0
initial_velocity_max = 4.0
angular_velocity_min = -90.0
angular_velocity_max = -90.0
angle_min = -180.0
angle_max = 180.0
scale_amount_min = 0.5
color = Color(1, 0.6509804, 0.09019608, 1)
color_ramp = SubResource("Gradient_ci2hw")
[node name="CristalModel" parent="." unique_id=886555966 instance=ExtResource("2_ci2hw")]
unique_name_in_owner = true
[node name="CristalModelCrack" parent="." unique_id=26298259 instance=ExtResource("2_vejte")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0051152706, 0.006559938, -0.011411905)
visible = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1235599731]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9791151, 0)
shape = SubResource("BoxShape3D_nvfy2")
[node name="MutationAnnounce" parent="." unique_id=1447182082 instance=ExtResource("9_247i2")]
unique_name_in_owner = true
[node name="ArtefactAnnounce" parent="." unique_id=114641656 instance=ExtResource("8_3rrt0")]
unique_name_in_owner = true
[editable path="CristalModelCrack"]

View File

@@ -0,0 +1,315 @@
[gd_scene format=3 uid="uid://brp1fpvasaims"]
[ext_resource type="Script" uid="uid://c0tyivmiouctw" path="res://entities/interactable_3d/cristal/scripts/mutation_announce.gd" id="1_02o74"]
[ext_resource type="Texture2D" uid="uid://bi5jo6pf0acjb" path="res://common/icons/carambola.svg" id="2_vlom2"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="3_5hs4t"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="4_yg5wk"]
[ext_resource type="Script" uid="uid://bqisp5hjs06rj" path="res://gui/game/announce/scripts/announce_inspectable.gd" id="5_qu1xy"]
[ext_resource type="Texture2D" uid="uid://0hbdgalf04e" path="res://common/icons/wood.svg" id="6_n403s"]
[ext_resource type="Script" uid="uid://dj2pv1hiwjfv0" path="res://gui/game/card/scripts/card_info.gd" id="7_se4h4"]
[ext_resource type="Script" uid="uid://dgbh38j13g5kn" path="res://gui/game/card/scripts/card_section_info.gd" id="8_0osya"]
[ext_resource type="Texture2D" uid="uid://dth2mj0nh2q70" path="res://common/icons/align-right.svg" id="9_s5jxo"]
[ext_resource type="Script" uid="uid://b4tkium34c831" path="res://gui/game/card/scripts/card_stat_info.gd" id="10_qidgp"]
[ext_resource type="Texture2D" uid="uid://bsvxhafoxwmw0" path="res://common/icons/cube-3d-sphere.svg" id="11_uj15c"]
[ext_resource type="PackedScene" uid="uid://mwk845fx5ye2" path="res://entities/interactable_3d/cristal/assets/cristal.blend" id="12_wy2oe"]
[ext_resource type="Environment" uid="uid://bxyp24f85p0xf" path="res://gui/game/assets/gui_3d_environment.tres" id="13_kyl1n"]
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="14_d2gpy"]
[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="15_hu5cq"]
[sub_resource type="ViewportTexture" id="ViewportTexture_6hxtc"]
viewport_path = NodePath("Particles/SubViewport")
[sub_resource type="Curve" id="Curve_brrmr"]
_limits = [-200.0, 200.0, 0.0, 1.0]
_data = [Vector2(0, -200), 0.0, 560.0, 0, 0, Vector2(0.08235294, 92.384125), 1336.3082, 1336.3082, 0, 0, Vector2(0.34901965, 200), 0.0, 0.0, 0, 0, Vector2(0.854902, -200), 0.0, 0.0, 0, 0]
point_count = 4
[sub_resource type="Gradient" id="Gradient_0u75y"]
offsets = PackedFloat32Array(0, 0.8689956, 0.98253274)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="LabelSettings" id="LabelSettings_u8fe7"]
font = ExtResource("4_yg5wk")
font_size = 50
font_color = Color(1, 0.6509804, 0.09019608, 1)
[sub_resource type="ViewportTexture" id="ViewportTexture_smt8b"]
viewport_path = NodePath("AnnounceContainer/ObjectVisualiser/SubViewport")
[sub_resource type="Resource" id="Resource_rjaqi"]
script = ExtResource("8_0osya")
title_text = "Description"
title_icon = ExtResource("9_s5jxo")
text = "Une fois mature, ajoute [b]1[/b][img=22x22]res://common/icons/growth.svg[/img] tous les [b]3[/b][img=22x22]res://common/icons/calendar-week.svg[/img]"
[sub_resource type="Resource" id="Resource_kgj7d"]
script = ExtResource("7_se4h4")
title = "Ancien"
subtitle = "Mutation"
important_stat_icon = ExtResource("6_n403s")
sections = Array[ExtResource("8_0osya")]([SubResource("Resource_rjaqi")])
[sub_resource type="Animation" id="Animation_aao0q"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MutationAnnounce/AnnounceContainer:theme_override_constants/separation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [4]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MutationAnnounce/Particles:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MutationAnnounce/AnnounceContainer:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MutationAnnounce/MarginContainer/BackgroundRect:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [1.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MutationAnnounce:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.03333333),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_b6hac"]
resource_name = "appear"
length = 0.8
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MutationAnnounce/AnnounceContainer:theme_override_constants/separation")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.23333333, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [480, 4]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MutationAnnounce/Particles:modulate")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.5, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MutationAnnounce/AnnounceContainer:modulate")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.2, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MutationAnnounce/MarginContainer/BackgroundRect:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.03333333, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 0.8]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MutationAnnounce:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 0.16666667),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_1aa3a"]
_data = {
&"RESET": SubResource("Animation_aao0q"),
&"appear": SubResource("Animation_b6hac")
}
[node name="MutationAnnounce" type="CanvasLayer" unique_id=1447182082]
visible = false
script = ExtResource("1_02o74")
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1853133518]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="BackgroundRect" type="ColorRect" parent="MarginContainer" unique_id=1594037653]
layout_mode = 2
color = Color(0.0352941, 0.0196078, 0.12549, 0.705882)
[node name="Particles" type="TextureRect" parent="." unique_id=1748571879]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -500.0
offset_top = -500.0
offset_right = 500.0
offset_bottom = 500.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("ViewportTexture_6hxtc")
[node name="SubViewport" type="SubViewport" parent="Particles" unique_id=1123249182]
transparent_bg = true
size = Vector2i(1000, 1000)
[node name="GPUParticles2D" type="CPUParticles2D" parent="Particles/SubViewport" unique_id=220592083]
position = Vector2(500, 500)
amount = 20
texture = ExtResource("2_vlom2")
preprocess = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 2.0
initial_velocity_max = 2.0
linear_accel_min = 5.0
linear_accel_max = 5.0
linear_accel_curve = SubResource("Curve_brrmr")
color_ramp = SubResource("Gradient_0u75y")
[node name="AnnounceContainer" type="VBoxContainer" parent="." unique_id=645433045]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -627.0
offset_bottom = 627.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 4
alignment = 1
[node name="AnnounceTitle" type="Label" parent="AnnounceContainer" unique_id=1768593559]
unique_name_in_owner = true
layout_mode = 2
text = "NEW_MUTATION"
label_settings = ExtResource("3_5hs4t")
horizontal_alignment = 1
[node name="AnnounceText" type="Label" parent="AnnounceContainer" unique_id=768724763]
unique_name_in_owner = true
layout_mode = 2
text = "Ancien"
label_settings = SubResource("LabelSettings_u8fe7")
horizontal_alignment = 1
[node name="ObjectVisualiser" type="TextureRect" parent="AnnounceContainer" unique_id=1180983374]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
mouse_filter = 0
texture = SubResource("ViewportTexture_smt8b")
stretch_mode = 5
script = ExtResource("5_qu1xy")
info = SubResource("Resource_kgj7d")
[node name="MutationIconTextureRect" type="TextureRect" parent="AnnounceContainer/ObjectVisualiser" unique_id=312214951]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("6_n403s")
[node name="SubViewport" type="SubViewport" parent="AnnounceContainer/ObjectVisualiser" unique_id=1795775056]
own_world_3d = true
transparent_bg = true
size = Vector2i(300, 300)
[node name="AnnouceObject" type="Node3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=1527573801]
unique_name_in_owner = true
transform = Transform3D(0.9998366, 0, 0, 0, 0.9995686, 0, 0, 0, 0.9996744, 0, 0, 0)
[node name="cristal" parent="AnnounceContainer/ObjectVisualiser/SubViewport/AnnouceObject" unique_id=1362490576 instance=ExtResource("12_wy2oe")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="Camera3D" type="Camera3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=173755338]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
keep_aspect = 0
current = true
fov = 20.0
[node name="WorldEnvironment" type="WorldEnvironment" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=1135825303]
environment = ExtResource("13_kyl1n")
[node name="OkButton" type="Button" parent="AnnounceContainer" unique_id=249785792]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
theme = ExtResource("14_d2gpy")
text = "OK"
icon = ExtResource("15_hu5cq")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1913258839]
unique_name_in_owner = true
root_node = NodePath("../..")
libraries/ = SubResource("AnimationLibrary_1aa3a")

View File

@@ -0,0 +1,85 @@
@tool
extends CanvasLayer
class_name ArtefactAnnounce
const DEFAULT_OBJECT_ACCELERATION = Vector2(3,0)
@export var announce_artefact : Artefact = null : set = set_announce_artefact
@export_tool_button("Update", "Callable") var update_action = set_announce_artefact
var object_acceleration := Vector2(0,0)
var rotating := false
var prev_mouse_pos : Vector2
var next_mouse_pos : Vector2
const YELLOW_COLOR = Color("e29f32")
const RED_COLOR = Color("f20058")
func _ready():
set_announce_artefact()
%OkButton.button_down.connect(_on_ok_button_down)
hide()
func _process(delta):
update_rotation(delta)
func update_rotation(delta):
if visible:
next_mouse_pos = get_viewport().get_mouse_position()
if Input.is_action_just_pressed("action"):
rotating = true
prev_mouse_pos = get_viewport().get_mouse_position()
if Input.is_action_just_released("action"):
rotating = false
object_acceleration = Vector2(
float(next_mouse_pos.x - prev_mouse_pos.x),
float(next_mouse_pos.y - prev_mouse_pos.y)
)
var object_rotation = object_acceleration
if rotating:
object_rotation = Vector2(
float(next_mouse_pos.x - prev_mouse_pos.x),
float(next_mouse_pos.y - prev_mouse_pos.y)
)
prev_mouse_pos = next_mouse_pos
else :
object_acceleration = object_acceleration.lerp(DEFAULT_OBJECT_ACCELERATION, 0.1)
%AnnouceObject.rotate(Vector3.UP, object_rotation.x * delta)
%AnnouceObject.rotate(Vector3.RIGHT, object_rotation.y * delta)
func set_announce_artefact(artefact := announce_artefact):
for c in %AnnouceObject.get_children():
c.queue_free()
if is_node_ready() and artefact:
%AnnounceTitle.text = "NEW_ARTEFACT"
%AnnounceText.text = artefact.get_artefact_name()
%ObjectVisualiser.info = artefact.card_info()
%AnnouceObject.add_child(
artefact.get_3d_scene().instantiate()
)
if not visible:
%AnimationPlayer.play("appear")
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
AudioManager.play_sfx("Reveal")
elif artefact == null and visible:
%AnimationPlayer.play_backwards("appear")
if not Engine.is_editor_hint():
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
announce_artefact = artefact
func _on_ok_button_down():
announce_artefact = null

View File

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

View File

@@ -0,0 +1,54 @@
extends Interactable3D
const MAX_BREAK_LEVEL = 2
signal broken
@export var break_level = 0
func _ready():
update_model()
func click():
if interactable:
clicked.emit()
%BreackAudioPlayer.playing = true
%BreakParticles.emitting = true
break_level += 1
if break_level == MAX_BREAK_LEVEL:
broken.emit()
interactable = false
unlock_mutation()
update_model()
func update_model():
if is_node_ready():
%CristalModel.visible = break_level == 0
%CristalModelCrack.visible = break_level > 0
if break_level > 1:
%CristalModelCrack.find_children("AnimationPlayer")[0].play("Break")
func unlock_mutation():
var progression = GameInfo.game_data.progression_data
if progression.mutations_unlocked < len(progression.get_all_mutations()):
var new_mutation : PlantMutation = progression.get_all_mutations()[progression.mutations_unlocked]
progression.mutations_unlocked += 1
get_tree().create_timer(1.).timeout.connect(
func (): %MutationAnnounce.announce_mutation = new_mutation
);
else:
var talion_relay = TalionRelayArtifact.new()
if GameInfo.game_data and GameInfo.game_data.current_region_data and GameInfo.game_data.current_run:
GameInfo.game_data.current_run.add_artefacts(talion_relay)
get_tree().create_timer(1.).timeout.connect(
func (): %ArtefactAnnounce.announce_artefact = talion_relay
);

View File

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

View File

@@ -0,0 +1,80 @@
@tool
extends CanvasLayer
class_name MutationAnnounce
const DEFAULT_OBJECT_ACCELERATION = Vector2(3,0)
@export var announce_mutation : PlantMutation = null : set = set_announce_mutation
@export_tool_button("Update", "Callable") var update_action = set_announce_mutation
var announce_objects : Array[AnnouceObject] = []
var object_acceleration := Vector2(0,0)
var rotating := false
var prev_mouse_pos : Vector2
var next_mouse_pos : Vector2
const YELLOW_COLOR = Color("e29f32")
const RED_COLOR = Color("f20058")
func _ready():
set_announce_mutation()
%OkButton.button_down.connect(_on_ok_button_down)
hide()
func _process(delta):
update_rotation(delta)
func update_rotation(delta):
if visible:
next_mouse_pos = get_viewport().get_mouse_position()
if Input.is_action_just_pressed("action"):
rotating = true
prev_mouse_pos = get_viewport().get_mouse_position()
if Input.is_action_just_released("action"):
rotating = false
object_acceleration = Vector2(
float(next_mouse_pos.x - prev_mouse_pos.x),
float(next_mouse_pos.y - prev_mouse_pos.y)
)
var object_rotation = object_acceleration
if rotating:
object_rotation = Vector2(
float(next_mouse_pos.x - prev_mouse_pos.x),
float(next_mouse_pos.y - prev_mouse_pos.y)
)
prev_mouse_pos = next_mouse_pos
else :
object_acceleration = object_acceleration.lerp(DEFAULT_OBJECT_ACCELERATION, 0.1)
%AnnouceObject.rotate(Vector3.UP, object_rotation.x * delta)
%AnnouceObject.rotate(Vector3.RIGHT, object_rotation.y * delta)
func set_announce_mutation(mutation := announce_mutation):
if is_node_ready() and mutation:
%AnnounceTitle.text = "NEW_MUTATION"
%AnnounceText.text = mutation.get_mutation_name()
%MutationIconTextureRect.texture = mutation.get_icon()
%ObjectVisualiser.info = mutation.card_info()
if not visible:
%AnimationPlayer.play("appear")
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
AudioManager.play_sfx("Reveal")
elif mutation == null and visible:
%AnimationPlayer.play_backwards("appear")
if not Engine.is_editor_hint():
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
announce_mutation = mutation
func _on_ok_button_down():
announce_mutation = null

View File

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

View File

@@ -14,6 +14,7 @@ func can_interact(_p : Player) -> bool:
region != null
and region.data
and region.data.charges > 0
and region.data.state == RegionData.State.IN_PROGRESS
)
func interact(_p: Player) -> bool:

View File

@@ -7,14 +7,18 @@
[ext_resource type="Texture2D" uid="uid://bhi3mwl23flwp" path="res://entities/interactables/truck/recharge/STW_Props_Batterie_Glass_V2.png" id="5_2okh4"]
[ext_resource type="Texture2D" uid="uid://c01f6ja6btsep" path="res://entities/interactables/truck/recharge/STW_Props_Batterie_TERRE.png" id="6_2okh4"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bjhct"]
radius = 38.45475
height = 76.9095
[sub_resource type="LabelSettings" id="LabelSettings_1vpbi"]
font = ExtResource("4_ot7vv")
font_size = 30
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_ot7vv"]
radius = 43.0
height = 116.0
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bjhct"]
radius = 38.45475
height = 76.9095
[node name="TruckRecharge" type="Area2D" unique_id=1099196706]
script = ExtResource("1_ipgcv")
default_interact_text = "RECHARGE"
@@ -22,10 +26,6 @@ default_info_title = "RECHARGE_STATION"
default_info_desc = "RECHARGE_STATION_DESC_TEXT"
metadata/_custom_type_script = "uid://dyprcd68fjstf"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2014886648]
position = Vector2(9, -53)
shape = SubResource("CapsuleShape2D_bjhct")
[node name="RechargeStation" type="Sprite2D" parent="." unique_id=1801951226]
scale = Vector2(0.5, 0.5)
texture = ExtResource("2_ot7vv")
@@ -67,6 +67,10 @@ scale = Vector2(0.5, 0.5)
texture = ExtResource("6_2okh4")
offset = Vector2(0, -120)
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2014886648]
position = Vector2(12, -54)
shape = SubResource("CapsuleShape2D_ot7vv")
[node name="StaticBody2D" type="StaticBody2D" parent="." unique_id=1324035615]
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=842130596]

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dslagvhodlepi"
path="res://.godot/imported/asset_cristals.png-fbcde6581d88986094aa97c2145c31c2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/interactables/win_cristal/assets/sprites/asset_cristals.png"
dest_files=["res://.godot/imported/asset_cristals.png-fbcde6581d88986094aa97c2145c31c2.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

View File

@@ -0,0 +1,31 @@
@tool
extends InspectableEntity
class_name WinCristal
@export_tool_button("Update", "Callable") var update_action = update
@export_tool_button("Spawn Anim", "Callable") var spawn_action = spawn_animation
@export var data : WinCristalData = WinCristalData.random() :
set(v):
data = v
update()
func _ready():
update()
func update():
if is_node_ready() and data:
for i in range(len(%Sprites.get_children())):
%Sprites.get_children()[i].visible = data.cristal_type == i
%Sprites.get_children()[i].flip_h = data.cristal_flip
func spawn_animation():
scale = Vector2.ZERO
%CristalPlayer.play()
get_tree().create_tween().tween_property(self, "scale", Vector2.ONE, 0.3).set_trans(Tween.TRANS_BOUNCE)
func get_card_up_padding() -> float:
return Pointer.CARD_UP_PADDING * 2
func save() -> EntityData:
data.position = global_position
return data

View File

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

View File

@@ -0,0 +1,22 @@
extends EntityData
class_name WinCristalData
const WIN_CRISTAL_SCENE = preload("res://entities/interactables/win_cristal/win_cristal.tscn")
@export var cristal_type : int
@export var cristal_flip : bool
func load_entity() -> Entity:
var win_cristal := WIN_CRISTAL_SCENE.instantiate() as WinCristal
win_cristal.data = self
return win_cristal
static func random() -> WinCristalData:
var data = WinCristalData.new()
data.cristal_type = randi_range(0,3)
data.cristal_flip = randi() % 2 == 0
return data

View File

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

View File

@@ -0,0 +1,82 @@
[gd_scene format=3 uid="uid://de5pt5vyu23fb"]
[ext_resource type="Script" uid="uid://cismap3cn5e36" path="res://entities/interactables/win_cristal/scripts/win_cristal.gd" id="1_yb2ta"]
[ext_resource type="Script" uid="uid://cos0ennmyfvc2" path="res://entities/interactables/win_cristal/scripts/win_cristal_data.gd" id="2_vkbio"]
[ext_resource type="Texture2D" uid="uid://dslagvhodlepi" path="res://entities/interactables/win_cristal/assets/sprites/asset_cristals.png" id="2_yb2ta"]
[ext_resource type="AudioStream" uid="uid://dnqq2sy3dxrb2" path="res://common/audio_manager/assets/sfx/cristal/freesound_community-wine-glass-clink-36036.mp3" id="3_vkbio"]
[sub_resource type="Resource" id="Resource_5lni1"]
script = ExtResource("2_vkbio")
cristal_type = 2
cristal_flip = true
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_vkbio"]
radius = 40.0
height = 116.0
[sub_resource type="AtlasTexture" id="AtlasTexture_5lni1"]
atlas = ExtResource("2_yb2ta")
region = Rect2(52, 55, 305, 347)
[sub_resource type="AtlasTexture" id="AtlasTexture_bcx38"]
atlas = ExtResource("2_yb2ta")
region = Rect2(378, 21, 199, 385)
[sub_resource type="AtlasTexture" id="AtlasTexture_t34j2"]
atlas = ExtResource("2_yb2ta")
region = Rect2(75, 527, 316, 399)
[sub_resource type="AtlasTexture" id="AtlasTexture_55qjo"]
atlas = ExtResource("2_yb2ta")
region = Rect2(462, 542, 286, 387)
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_tfnwb"]
random_pitch = 1.4142135
streams_count = 1
stream_0/stream = ExtResource("3_vkbio")
[node name="WinCristal" type="Area2D" unique_id=247353676]
script = ExtResource("1_yb2ta")
data = SubResource("Resource_5lni1")
default_info_title = "TALION_CRISTAL"
default_info_desc = "TALION_CRISTAL_DESC_TEXT"
metadata/_custom_type_script = "uid://d3bk52402ylvl"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=187731103]
position = Vector2(1, -42)
shape = SubResource("CapsuleShape2D_vkbio")
[node name="Sprites" type="Node2D" parent="." unique_id=940993390]
unique_name_in_owner = true
[node name="AssetCristals" type="Sprite2D" parent="Sprites" unique_id=2111863528]
scale = Vector2(0.4, 0.4)
texture = SubResource("AtlasTexture_5lni1")
offset = Vector2(0, -139.255)
flip_h = true
[node name="AssetCristals2" type="Sprite2D" parent="Sprites" unique_id=1380362341]
visible = false
scale = Vector2(0.3, 0.3)
texture = SubResource("AtlasTexture_bcx38")
offset = Vector2(0, -149)
flip_h = true
[node name="AssetCristals3" type="Sprite2D" parent="Sprites" unique_id=2082980627]
visible = false
scale = Vector2(0.3, 0.3)
texture = SubResource("AtlasTexture_t34j2")
offset = Vector2(0, -150)
flip_h = true
[node name="AssetCristals4" type="Sprite2D" parent="Sprites" unique_id=495215885]
visible = false
scale = Vector2(0.3, 0.3)
texture = SubResource("AtlasTexture_55qjo")
offset = Vector2(0, -150)
flip_h = true
[node name="CristalPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1879646229]
unique_name_in_owner = true
stream = SubResource("AudioStreamRandomizer_tfnwb")
bus = &"Sfx"

View File

@@ -13,6 +13,7 @@ atlas = ExtResource("3_j6jm5")
region = Rect2(76, 75, 124, 135)
[sub_resource type="ViewportTexture" id="ViewportTexture_rbgiq"]
viewport_path = NodePath("LifeTimeSprite/SubViewport")
[sub_resource type="Gradient" id="Gradient_rbgiq"]
interpolation_mode = 1
@@ -185,8 +186,7 @@ texture = ExtResource("3_rbgiq")
[node name="LifeTimeSprite" type="Sprite2D" parent="." unique_id=799762981]
unique_name_in_owner = true
position = Vector2(-1, -9.999985)
scale = Vector2(0.34, 0.34)
scale = Vector2(0.26000002, 0.26000005)
texture = SubResource("ViewportTexture_rbgiq")
[node name="SubViewport" type="SubViewport" parent="LifeTimeSprite" unique_id=1809354262]

View File

@@ -1,7 +1,9 @@
extends InspectableEntity
class_name Plant
const PLANT_AREA_RADIUS = 20
const PLANT_AREA_RADIUS = 40
const PLANT_GROWING_AREA_HEIGHT = 70
const PLANT_MATURE_AREA_HEIGHT = 150
const HARVESTED_SEED_DISPLACEMENT_FACTOR = 100
const RANDOM_MAX_GROW_INTERVAL = Region.MIN_PASS_DAY_ANIMATION_TIME/2. - 0.1
@@ -22,6 +24,7 @@ const SPRITE_SCENE : PackedScene = preload("res://entities/plants/plant_sprite.t
@onready var influence_zone : PlantInfluenceZone
var harvested = false
var last_state : PlantData.State
func _init(
_data : PlantData
@@ -30,7 +33,7 @@ func _init(
func _ready():
plant_sprite = generate_sprite()
collision_shape = generate_collision_shape()
generate_collision_shape()
influence_zone = generate_influence_zone()
plant_sprite.setup_plant_sprite(data)
@@ -53,9 +56,6 @@ func inspect(is_inspected : bool = true):
plant_sprite.display_lifetime_sprite = is_inspected
influence_zone.show_influence = is_inspected
func affect_preview(is_affected : bool = true):
plant_sprite.sprite_modulate = MODULATE_AFFECTED_COLOR if is_affected else default_modulate
func generate_sprite() -> PlantSprite:
var sprite_object : PlantSprite = SPRITE_SCENE.instantiate()
@@ -64,15 +64,28 @@ func generate_sprite() -> PlantSprite:
return sprite_object
func generate_collision_shape() -> CollisionShape2D:
var collision = CollisionShape2D.new()
var shape = CircleShape2D.new()
func generate_collision_shape():
if collision_shape:
collision_shape.queue_free()
collision_shape = CollisionShape2D.new()
var shape = CapsuleShape2D.new()
shape.radius = PLANT_AREA_RADIUS
collision.shape = shape
add_child(collision)
var height = PLANT_AREA_RADIUS
return collision
match data.get_state():
PlantData.State.GROWING:
height = PLANT_GROWING_AREA_HEIGHT
PlantData.State.MATURE:
height = PLANT_MATURE_AREA_HEIGHT
shape.height = height
collision_shape.shape = shape
collision_shape.position.y -= height / 5.
add_child(collision_shape)
func generate_influence_zone() -> PlantInfluenceZone:
var zone = PlantInfluenceZone.new(data.get_influence_radius())
@@ -85,13 +98,14 @@ func generate_influence_zone() -> PlantInfluenceZone:
func _pass_day():
await get_tree().create_timer(randf_range(0., RANDOM_MAX_GROW_INTERVAL)).timeout
var last_state = data.get_state()
last_state = data.get_state()
data.day += 1
for m in data.mutations:
m._start_day_effect(self)
func _end_pass_day():
match data.get_state():
PlantData.State.MATURE:
if last_state != PlantData.State.MATURE:
@@ -99,7 +113,7 @@ func _pass_day():
PlantData.State.DEAD:
die()
generate_collision_shape()
plant_sprite.update_plant_sprite(data, last_state != data.get_state())
@@ -109,8 +123,8 @@ func calculate_plant_score(
return data.get_score(with_state)
func harvest():
for i in range(data.get_random_seed_income()):
produce_seed()
for i in range(data.get_seed_number()):
await produce_seed()
if data.get_state() == PlantData.State.MATURE:
for m in data.mutations:
@@ -128,6 +142,7 @@ func produce_seed():
global_position,
HARVESTED_SEED_DISPLACEMENT_FACTOR,
)
await plant_sprite.play_bump_animation()
func mature():
for m in data.mutations:
@@ -136,8 +151,9 @@ func mature():
func die():
for m in data.mutations:
m._start_dead_effect(self)
for i in range(data.get_random_seed_income()):
produce_seed()
for i in range(data.get_seed_number()):
await produce_seed()
AudioManager.play_sfx("Harvest")
disappear()
func disappear():
@@ -200,10 +216,7 @@ func card_info() -> CardInfo:
LIFETIME_ICON
),
CardStatInfo.new(
"%d-%d" % [
data.get_seed_number(PlantData.State.MATURE) - data.get_seed_random_loose(),
data.get_seed_number(PlantData.State.MATURE)
],
str(data.get_seed_number()),
SEED_ICON
),
])

View File

@@ -96,7 +96,7 @@ func is_mature() -> bool:
return get_state() == State.MATURE
func get_seed_number(state = get_state()):
var seed_number = get_plant_info().get_seed_number() if (state == State.MATURE or state == State.DEAD) else 0
var seed_number = get_plant_info().get_seed_number() if (state == State.MATURE or state == State.DEAD) else 1
for m in mutations:
seed_number = m.mutate_seed_number(self , seed_number)
@@ -116,11 +116,11 @@ func get_seed_random_loose():
func get_influence_radius():
return get_plant_info().get_influence_radius()
func get_random_seed_income():
return max(
get_seed_number() - randi_range(0, get_seed_random_loose()),
0
)
# func get_random_seed_income():
# return max(
# get_seed_number() - randi_range(0, get_seed_random_loose()),
# 0
# )
func get_lifetime_buff() -> int:
var buff = 0

View File

@@ -74,6 +74,23 @@ func get_level_for_rarity(rarity: int) -> int:
func get_rarity() -> int:
return get_base_rarity() + level - 1
func card_info() -> CardInfo:
var info = CardInfo.new(
get_mutation_name(),
tr("MUTATION")
)
info.important_stat_icon = get_icon()
var desc_section := CardSectionInfo.new(
tr("DESCRIPTION"),
get_mutation_description(),
)
desc_section.title_icon = InspectableEntity.DESC_ICON
info.sections.append(desc_section)
return info
func card_section() -> CardSectionInfo:
var section = CardSectionInfo.new(
get_mutation_name() + (" %d" % level if level > 1 else ""),
@@ -107,4 +124,4 @@ static func get_rarity_color(rarity: int) -> Color:
Color("FFA617"),
]
return rarity_colors[min(rarity, len(rarity_colors) - 1)%len(rarity_colors)]
return rarity_colors[rarity%len(rarity_colors)]

View File

@@ -1,3 +1,4 @@
@tool
extends PlantMutation
class_name AncientMutation

View File

@@ -23,4 +23,4 @@ func _start_maturation_effect(plant : Plant):
func get_purification_radius() -> int:
return level * 2
return level

View File

@@ -1,4 +1,4 @@
extends Node2D
extends Area2D
class_name PlantSprite
const PLANTED_SEED_CROP_WIDTH = 50
@@ -64,6 +64,13 @@ func set_sprite_modulate(c := sprite_modulate):
if is_node_ready():
%Sprite.modulate = c
func affect_preview(is_affected : bool = true):
sprite_modulate = InspectableEntity.MODULATE_AFFECTED_COLOR if is_affected else Color.WHITE
func _on_body_entered(body: Node2D) -> void:
if body is Player && $AnimationPlayer.current_animation != "player_move":
$AnimationPlayer.play("player_move");
func play_bump_animation():
%AnimationPlayer.play("bump")
await %AnimationPlayer.animation_finished

View File

@@ -17,7 +17,7 @@ func _init(size : int = 1):
seeds_size = size
func current_is_tool() -> bool:
return current_item_ind <= len(tools)
return current_item_ind < len(tools)
func set_current_item(new_ind: int):
if new_ind < 0:

View File

@@ -44,7 +44,7 @@ func is_action_need_press_time() -> bool:
func get_action_press_time() -> float:
return DEFAULT_PRESS_TIME
func get_usage_object_affected(_i : InspectableEntity) -> bool:
func get_usage_object_affected(_i : Area2D) -> bool:
return false
func is_one_time_use():

View File

@@ -21,7 +21,7 @@ func get_energy_used() -> int:
func get_usage_zone_radius() -> int:
return 10
func get_usage_object_affected(i : InspectableEntity) -> bool:
func get_usage_object_affected(i : Area2D) -> bool:
return i is Plant
func use_text() -> String:

View File

@@ -41,7 +41,7 @@ static func generate_from_parent(plant_data : PlantData) -> Seed:
static func generate_random(rarity := 0) -> Seed:
var new_seed = Seed.new(
Random.generate_random_word(),
[generate_first_mutation(rarity)]
generate_first_mutations(rarity),
)
return new_seed
@@ -63,10 +63,10 @@ func get_energy_used() -> int:
return 1
func get_usage_zone_radius() -> int:
return 35
return 50
func get_usage_object_affected(i : InspectableEntity) -> bool:
return i is Plant
func get_usage_object_affected(i : Area2D) -> bool:
return i is PlantSprite
func use_text() -> String:
return tr("PLANT_%s") % plant_name
@@ -82,10 +82,19 @@ 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 Plant:
if area is PlantSprite:
is_there_a_plant_here = true
return not is_there_a_plant_here and player.region.is_coords_decontaminated(zone.get_tiles())
var plant_tiles = Math.get_tiles_in_circle(
zone.get_global_position(),
20
)
return (
not is_there_a_plant_here
and player.region.is_coords_decontaminated(plant_tiles)
and not player.region.is_coords_rocky(plant_tiles)
)
func use(player : Player, zone : Player.ActionZone) -> bool:
if player.region == null:
@@ -138,7 +147,10 @@ func get_particles() -> Array[EffectParticles.Parameters]:
return param
static func generate_first_mutation(rarity := 0) -> PlantMutation:
static func generate_first_mutations(rarity := 0) -> Array[PlantMutation]:
if rarity < 0:
return []
var possible_mutation : PlantMutation = GameInfo.game_data.progression_data.available_mutations.filter(
func (m : PlantMutation): return m.get_base_rarity() <= rarity
@@ -148,26 +160,20 @@ static func generate_first_mutation(rarity := 0) -> PlantMutation:
possible_mutation.level += level_to_add
return possible_mutation
return [possible_mutation]
static func mutate_mutations(mutations : Array[PlantMutation]) -> Array[PlantMutation]:
var mutation_possibility : Array[MutationPossibility] = [
AddMutation.new()
]
var mutation_possibility : Array[MutationPossibility] = []
if (
len(mutations) >= GameInfo.game_data.current_run.plant_info.get_mutation_max_number()
len(mutations) < GameInfo.game_data.current_run.plant_info.get_mutation_max_number()
):
mutation_possibility = [
UpgradeMutation.new(),
]
elif len(mutations) > 0:
mutation_possibility = [
AddMutation.new(),
UpgradeMutation.new(),
]
mutation_possibility.append(AddMutation.new())
if len(mutations) > 0:
mutation_possibility.append(UpgradeMutation.new())
var chosen_mutation_possibility = mutation_possibility.pick_random()
return chosen_mutation_possibility.mutate(mutations)

View File

@@ -17,7 +17,7 @@ func get_icon() -> Texture2D:
func get_usage_zone_radius() -> int:
return SHOVEL_ZONE_RADIUS
func get_usage_object_affected(i : InspectableEntity) -> bool:
func get_usage_object_affected(i : Area2D) -> bool:
return i is Plant
func use_text() -> String:

View File

@@ -9,11 +9,23 @@
[ext_resource type="AudioStream" uid="uid://cv5avkd3qekt7" path="res://common/audio_manager/assets/sfx/movement/movement.wav" id="7_qiwj3"]
[sub_resource type="CircleShape2D" id="CircleShape2D_sglur"]
radius = 27.0
radius = 13.0
[sub_resource type="CircleShape2D" id="CircleShape2D_abrql"]
radius = 40.0
[sub_resource type="Gradient" id="Gradient_qiwj3"]
offsets = PackedFloat32Array(0.37339056, 0.49785408)
colors = PackedColorArray(0.043137256, 0.050980393, 0.15686275, 0, 0.043137256, 0.050980393, 0.15686275, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_26q78"]
gradient = SubResource("Gradient_qiwj3")
width = 600
height = 600
fill = 1
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(0.5, 0)
[sub_resource type="AtlasTexture" id="AtlasTexture_fkugw"]
atlas = ExtResource("4_bls4j")
region = Rect2(3048, 0, 762, 1080)
@@ -113,6 +125,9 @@ animations = [{
"speed": 5.0
}]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_bectd"]
blend_mode = 1
[sub_resource type="Curve" id="Curve_fkugw"]
_data = [Vector2(0, 0.14473677), 0.0, 0.0, 0, 0, Vector2(0.972549, 0.2654798), 0.0, 0.0, 0, 0]
point_count = 2
@@ -253,6 +268,12 @@ position = Vector2(-2.3841858e-07, -7.999996)
scale = Vector2(0.29154927, 0.29154924)
texture = ExtResource("2_fkugw")
[node name="Fog" type="Sprite2D" parent="." unique_id=1590893330]
z_index = 10
position = Vector2(0.99999994, -17)
scale = Vector2(8, 8)
texture = SubResource("GradientTexture2D_26q78")
[node name="PlayerSprite" type="AnimatedSprite2D" parent="." unique_id=638545037]
unique_name_in_owner = true
position = Vector2(0.99999994, -17)
@@ -267,6 +288,7 @@ wanted_orientation = 2
[node name="Light" type="Sprite2D" parent="PlayerSprite" unique_id=1768327734]
modulate = Color(0.70603025, 0.5959886, 0.33971557, 0.09019608)
z_index = -1
material = SubResource("CanvasItemMaterial_bectd")
scale = Vector2(16.093441, 16.093441)
texture = ExtResource("5_8fjmc")
@@ -290,3 +312,15 @@ bus = &"Sfx"
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=793749564]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_qiwj3")
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="." unique_id=1282043308]
unique_name_in_owner = true
simplify_path = true
simplify_epsilon = 4.223
path_search_max_polygons = 1000
avoidance_enabled = true
radius = 500.0
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

View File

@@ -5,6 +5,7 @@ const ACTION_AREA_UPDATE_TIME=0.05 # When creating an action_zone, we make sure
const MAX_REACH = 100
const HOLDING_ITEM_SPRITE_SIZE = 20.
const TURN_ANIMATION_MINIMUM_THRESHOLD = 0.2
const SPEED = 350
signal player_updated(player: Player)
signal upgraded
@@ -12,7 +13,6 @@ signal upgraded
var terrain : Terrain
var region : Region :
get(): return terrain if terrain is Region else null
@export var speed = 350
var data : PlayerData
var last_action_area_movement_timer : float = 100.
@@ -22,7 +22,13 @@ var controlling_player : bool = false :
controlling_player = v
velocity = Vector2.ZERO
var instruction : Instruction = null
var instruction : Instruction = null :
set(i):
if instruction and is_node_ready():
instruction.abort(self)
instruction = i
if instruction and is_node_ready():
instruction.spawn_indicator(self)
@onready var preview_zone : ActionZone = await setup_action_zone(Vector2.ZERO, null)
@onready var action_zone : ActionZone = await setup_action_zone(Vector2.ZERO, null)
@@ -81,7 +87,7 @@ func _process(delta):
instruction = null
input_direction = calculate_direction_instruction_direction()
velocity = input_direction * speed
velocity = input_direction * SPEED
turn_animate(input_direction)
move_preview_zone(get_global_mouse_position())
@@ -106,8 +112,11 @@ func calculate_direction_instruction_direction() -> Vector2:
instruction.position.distance_to(global_position) > (MAX_REACH - 1.)
or instruction is MoveInstruction
)
):
return self.global_position.direction_to(instruction.position)
):
if %NavigationAgent2D.target_position != instruction.position:
%NavigationAgent2D.target_position = instruction.position
return to_local(%NavigationAgent2D.get_next_path_position()).normalized()
# return self.global_position.direction_to(instruction.position)
return Vector2.ZERO
func calculate_direction_input_direction() -> Vector2:
@@ -147,8 +156,8 @@ func try_interact(interactable : Interactable):
func try_move(move_to : Vector2):
instruction = MoveInstruction.new(move_to)
func can_pick_item(item: Item):
return item.type == Item.ItemType.TOOL_ITEM || !data.inventory.is_full() || !data.inventory.current_is_tool()
func can_pick_item(_item: Item):
return true
func pick_item(item : Item):
if item.type != Item.ItemType.TOOL_ITEM && data.inventory.is_full():
@@ -163,13 +172,23 @@ func pick_item(item : Item):
func drop_item():
var ind_to_drop := data.inventory.current_item_ind
while (
(data.inventory.get_item(ind_to_drop) == null or ind_to_drop < len(data.inventory.tools))
and ind_to_drop < len(data.inventory.get_all_items()) - 1
if (
data.inventory.get_item(ind_to_drop) == null or ind_to_drop < len(data.inventory.tools)
):
ind_to_drop += 1
var item_to_drop = data.inventory.pop_item(ind_to_drop)
if item_to_drop:
var possible_ind : Array = range(
len(data.inventory.tools),
len(data.inventory.tools) + data.inventory.seeds_size
).filter(
func (i): return data.inventory.get_item(i) != null
)
if len(possible_ind):
ind_to_drop = possible_ind.pop_back()
else:
return
var item_to_drop : Item = data.inventory.pop_item(ind_to_drop)
if item_to_drop and item_to_drop.type != Item.ItemType.TOOL_ITEM:
terrain.drop_item(item_to_drop, global_position)
AudioManager.play_sfx("Drop")
region.save()
@@ -239,11 +258,10 @@ func setup_preview_zone(item : Item):
return preview_zone
elif preview_zone:
preview_zone.destroy()
preview_zone = null
if item:
preview_zone = await generate_action_zone(item)
else:
preview_zone = null
func setup_action_zone(zone_position : Vector2, item: Item) -> ActionZone:
if action_zone:
@@ -259,8 +277,11 @@ func move_preview_zone(zone_position : Vector2):
class Instruction:
const INDICATOR_COLOR := Color("#96B3DB")
var position : Vector2
var need_movement : bool = true
var indicator := Sprite2D.new()
func _init(_pos : Vector2):
position = _pos
@@ -270,8 +291,46 @@ class Instruction:
func do(_player : Player):
pass
func indicator_texture():
return preload("res://common/icons/map-pin.svg")
func indicator_size():
return 40
func indicator_shift():
return Vector2.ZERO
func spawn_indicator(player : Player):
indicator.texture = indicator_texture()
indicator.texture = indicator_texture()
indicator.scale = Vector2(
1./(float(indicator_texture().get_width())/indicator_size()),
1./(float(indicator_texture().get_height())/indicator_size())
)
indicator.modulate = Color(
INDICATOR_COLOR.r,
INDICATOR_COLOR.g,
INDICATOR_COLOR.b,
0.
)
player.get_parent().add_child(indicator)
indicator.global_position = position + indicator_shift()
player.get_tree().create_tween().tween_property(indicator, "modulate:a", 0.8, 0.2)
func abort(player : Player):
indicator.queue_free()
class MoveInstruction extends Instruction:
func indicator_shift():
return Vector2.UP * 50
func can_be_done(player : Player):
return player.global_position.distance_to(position) < 10.
@@ -289,7 +348,10 @@ class ItemActionInstruction extends Instruction:
not item.is_usage_need_proximity() or
player.global_position.distance_to(position) < player.MAX_REACH
)
func indicator_texture():
return item.icon
func do(player : Player):
player.use_item(item)
@@ -303,13 +365,16 @@ class InteractableInstruction extends Instruction:
func can_be_done(player : Player):
return player.global_position.distance_to(position) < player.MAX_REACH
func indicator_texture():
return preload("res://common/icons/hand-grab.svg")
func do(player : Player):
interactable.interact(player)
class ActionZone:
var item : Item = null
var area : Area2D = Area2D.new()
var affected_areas : Array[InspectableEntity]= []
var affected_areas : Array[Area2D]= []
func _init(_i : Item):
item = _i
@@ -330,9 +395,9 @@ class ActionZone:
func update_preview_on_affected_area():
var detected_areas = get_affected_areas()
clear_preview_on_affected_area()
var new_affected_areas : Array[InspectableEntity] = []
var new_affected_areas : Array[Area2D] = []
for a in detected_areas:
if a is InspectableEntity and item.get_usage_object_affected(a):
if a is Area2D and item.get_usage_object_affected(a) and a.has_method("affect_preview"):
a.affect_preview(true)
new_affected_areas.append(a)
affected_areas = new_affected_areas

View File

@@ -64,7 +64,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.253273, 0)
shape = SubResource("CapsuleShape3D_eodxe")
[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1818490710]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.7901894e-08, -0.25222805, 0.6383209)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.0989037e-09, -0.25222805, 0.025139987)
shadow_enabled = true
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1210282091]

View File

@@ -2,7 +2,7 @@ extends CharacterBody3D
class_name Player3D
const POINTER_TEXTURE = preload("res://common/icons/focus.svg")
const POINTER_ACTION_TEXTURE = preload("res://common/icons/hand-stop.svg")
const POINTER_ACTION_TEXTURE = preload("res://common/icons/hand-finger.svg")
@export var pointer_texture_rect : TextureRect

View File

@@ -4,9 +4,6 @@ class_name EntityData
@export var position : Vector2
func _init(e : Entity):
position = e.global_position
func get_position() -> Vector2:
return position

View File

@@ -1,8 +1,8 @@
extends Entity
class_name InspectableEntity
const MODULATE_INSPECTED_COLOR = Color.GRAY
const MODULATE_AFFECTED_COLOR = Color.RED
const MODULATE_INSPECTED_COLOR = Color("#96B3DB")
const MODULATE_AFFECTED_COLOR = Color("#FF006E")
const DESC_ICON = preload("res://common/icons/align-right.svg")
@export var default_info_title = ""
@@ -11,6 +11,8 @@ const DESC_ICON = preload("res://common/icons/align-right.svg")
@onready var default_modulate : Color = modulate
@onready var inspectable_signals_setuped : bool = setup_inspectable_signals()
var mouse_over := false
func inspect(is_inspected : bool = true):
modulate = MODULATE_INSPECTED_COLOR if is_inspected else default_modulate
@@ -23,9 +25,11 @@ func setup_inspectable_signals() -> bool:
return true
func _on_mouse_entered():
mouse_over = true
Pointer.inspect(self)
func _on_mouse_excited():
mouse_over = false
Pointer.stop_inspect(self)
func pointer_text() -> String:
@@ -54,3 +58,7 @@ func _notification(what):
func get_card_up_padding() -> float:
return Pointer.CARD_UP_PADDING
func _process(_delta):
modulate.a = 0.3 if mouse_over and Pointer.inspected != self else 1.

View File

@@ -1,55 +1,5 @@
[preset.0]
name="Web"
platform="Web"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=".export/web/index.html"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
variant/extensions_support=false
variant/thread_support=false
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=false
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
html/experimental_virtual_keyboard=false
progressive_web_app/enabled=false
progressive_web_app/ensure_cross_origin_isolation_headers=true
progressive_web_app/offline_page=""
progressive_web_app/display=1
progressive_web_app/orientation=0
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color(0, 0, 0, 1)
threads/emscripten_pool_size=8
threads/godot_pool_size=4
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
@@ -72,7 +22,7 @@ encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
[preset.0.options]
custom_template/debug=""
custom_template/release=""
@@ -119,3 +69,50 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
[preset.1]
name="Linux"
platform="Linux"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=".export/steam/content_builder/content/linux/Seeding The Wasteland.x86_64"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
pkill -x -f \"{temp_dir}/{exe_name} {cmd_args}\"
rm -rf \"{temp_dir}\""

View File

@@ -2,12 +2,6 @@
[ext_resource type="Script" uid="uid://bqdylb4maacf0" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/full_background_layer.gd" id="1_tu40u"]
[ext_resource type="Script" uid="uid://oxcjhq2817c7" path="res://addons/dialogic/Modules/Background/node_background_holder.gd" id="2_ghan2"]
[ext_resource type="Shader" uid="uid://cuni3ggtw2uuy" path="res://common/vfx/materials/shaders/blur.gdshader" id="2_v1ioh"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_v1ioh"]
shader = ExtResource("2_v1ioh")
shader_parameter/strength = 3.3
shader_parameter/mix_percentage = 0.3
[node name="BackgroundLayer" type="Control" unique_id=421215061]
layout_direction = 2
@@ -20,7 +14,7 @@ grow_vertical = 2
script = ExtResource("1_tu40u")
[node name="DialogicNode_BackgroundHolder_Blur" type="ColorRect" parent="." unique_id=726280929]
material = SubResource("ShaderMaterial_v1ioh")
modulate = Color(1, 1, 1, 0.8)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -28,4 +22,5 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
color = Color(0.0627451, 0.05882353, 0.16862746, 1)
script = ExtResource("2_ghan2")

Some files were not shown because too many files have changed in this diff Show More