Dev de la démo
* Modification de l'apparence de l'UI des dialogues * Changement de l'ordre de déblocage des mutations * Ajout d'une confirmation pour l'abandon * Ajout de la scène de fin avec la base Boréa, en tant que fin de démo * Modification des icône de durée de vie, temps de pousse, et de mort * Ajout d'un icône au dessus du joueur quand il n'a plus d'énergie * Amélioration des dialogues du jeu * Changement du modèle du téléphone * Ajout de cellule d'énergie et de cellule de talion trouvable sur la carte * Il est à nouveau possible de se recharger après la fin d'une région * Buff des mutations ancien sociale et solide * Modification de la mutation fertile (ne donne de gain de graine qu'à la maturation) * Ajout d'une récupération automatique des graines * Ajout de deux cartons de tutoriel ainsi qu'une option pour les revoir dans l'aide de jeu * Amélioration générale du tutoriel * Ajout d'un écran titre digne de ce nom * Lors de l'arrivée à destination, ne téléporte plus le joueur sur une map vide, mais directement dans les lieux de cinématique * Ajout graphique de plus de pattern de mousse et de roche * Le talion apparait maintenant sur toute la carte * La roche peut désormais apparaitre sur la zone de départ * Ajout dud modificateur de région Canyon * Equilibrage général * Fix de bugs en tout genre
@@ -4,10 +4,6 @@
|
||||
content_margin_top = 5.0
|
||||
content_margin_bottom = 5.0
|
||||
bg_color = Color(0, 0, 0, 0.956863)
|
||||
border_width_left = 1
|
||||
border_width_top = 1
|
||||
border_width_right = 1
|
||||
border_width_bottom = 1
|
||||
corner_radius_top_left = 5
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
|
||||
@@ -5,8 +5,13 @@ content_margin_left = 15.0
|
||||
content_margin_top = 15.0
|
||||
content_margin_right = 15.0
|
||||
content_margin_bottom = 15.0
|
||||
bg_color = Color(1, 1, 1, 1)
|
||||
corner_radius_top_left = 5
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
bg_color = Color(0.0627451, 0.05882353, 0.16862746, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.5882353, 0.7019608, 0.85882354, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
|
||||
[resource]
|
||||
diffuse_mode = 3
|
||||
specular_mode = 1
|
||||
specular_mode = 2
|
||||
albedo_texture = ExtResource("1_cc1ni")
|
||||
metallic_specular = 0.0
|
||||
roughness = 0.0
|
||||
rim_tint = 0.48
|
||||
stencil_flags = 2
|
||||
|
||||
@@ -13,7 +13,7 @@ dest_files=["res://.godot/imported/meeting_demeter.ogg-7dd58073d2ef5705a374bd8bb
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
loop_offset=0.0
|
||||
bpm=0.0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
|
||||
@@ -313,7 +313,7 @@ volume_db = -7.0
|
||||
|
||||
[node name="Harvest" type="AudioStreamPlayer" parent="Sfx" unique_id=345539331]
|
||||
stream = SubResource("AudioStreamRandomizer_i4m0x")
|
||||
volume_db = -5.0
|
||||
volume_db = -7.0
|
||||
|
||||
[node name="PickUp" type="AudioStreamPlayer" parent="Sfx" unique_id=176915166]
|
||||
stream = SubResource("AudioStreamRandomizer_jjdv2")
|
||||
@@ -357,7 +357,7 @@ volume_db = -5.0
|
||||
|
||||
[node name="Elevator" type="AudioStreamPlayer" parent="Sfx" unique_id=1345852969]
|
||||
stream = ExtResource("42_obkny")
|
||||
volume_db = -5.0
|
||||
pitch_scale = 1.1
|
||||
|
||||
[node name="Mining" type="AudioStreamPlayer" parent="Sfx" unique_id=1122216774]
|
||||
stream = SubResource("AudioStreamRandomizer_yjs51")
|
||||
|
||||
@@ -40,7 +40,7 @@ func _on_change_scene(scene : Scene):
|
||||
stop_all_ambiances()
|
||||
|
||||
if (scene is TitleScene):
|
||||
play_music_alone("Title", false, 5.0)
|
||||
play_music_alone("Title", false, 0.0)
|
||||
elif scene is IntroScene:
|
||||
stop_all_musics()
|
||||
elif scene is RegionScene:
|
||||
@@ -59,8 +59,8 @@ func _on_change_scene(scene : Scene):
|
||||
stop_all_musics()
|
||||
play_ambiance_alone("Astra", false)
|
||||
elif scene is BoreaScene:
|
||||
stop_all_musics()
|
||||
play_ambiance_alone("Borea", false)
|
||||
play_music_alone("Meeting_demeter")
|
||||
stop_all_ambiances()
|
||||
elif scene is VendingMachineScene:
|
||||
stop_all_musics()
|
||||
play_ambiance_alone("VendingRoom", false)
|
||||
|
||||
@@ -12,4 +12,4 @@ func get_3d_scene() -> PackedScene:
|
||||
return preload("res://common/game_data/scripts/artefacts/talion_soil/talion_soil.blend")
|
||||
|
||||
func modify_plant_influence_radius(plant_influence_radius : float) -> float:
|
||||
return plant_influence_radius * 1.4
|
||||
return plant_influence_radius * 1.5
|
||||
@@ -28,16 +28,16 @@ func get_all_mutations() -> Array[PlantMutation]:
|
||||
ProlificMutation.new(),
|
||||
PrecociousMutation.new(),
|
||||
PurificationMutation.new(),
|
||||
VivaciousMutation.new(),
|
||||
ToughMutation.new(),
|
||||
QuickMutation.new(),
|
||||
RobustMutation.new(),
|
||||
SocialMutation.new(),
|
||||
VivaciousMutation.new(),
|
||||
FertileMutation.new(),
|
||||
HurriedMutation.new(),
|
||||
GenerousMutation.new(),
|
||||
ProtectiveMutation.new(),
|
||||
PureMutation.new(),
|
||||
ToughMutation.new(),
|
||||
]
|
||||
|
||||
func get_all_artifacts() -> Array[Artefact]:
|
||||
@@ -53,7 +53,7 @@ func get_all_artifacts() -> Array[Artefact]:
|
||||
func get_all_story_steps() -> Array[StoryStep]:
|
||||
return [
|
||||
TutorialStoryStep.new(),
|
||||
AstraStoryStep.new(),
|
||||
StartStoryStep.new(),
|
||||
MercuryStoryStep.new(),
|
||||
BetaStoryStep.new()
|
||||
BoreaStoryStep.new()
|
||||
]
|
||||
|
||||
@@ -96,6 +96,12 @@ func choose_next_run_point(run_point : RunPoint = null) -> RunPoint:
|
||||
next_run_points = generate_next_run_points()
|
||||
return current_run_point
|
||||
|
||||
func get_cockpit_exit_scene() -> Scene:
|
||||
if story_step.is_run_finished(level):
|
||||
return story_step.get_destination_scene()
|
||||
else :
|
||||
return RegionScene.new(GameInfo.game_data.current_region_data)
|
||||
|
||||
#endregion
|
||||
|
||||
#region ------------------ Modifiers ------------------
|
||||
@@ -109,6 +115,7 @@ func generate_normal_modifiers() -> Array[RegionModifier]:
|
||||
ToxicModifier.new(),
|
||||
SandyModifier.new(),
|
||||
MagneticModifier.new(),
|
||||
CanyonModifier.new()
|
||||
]
|
||||
|
||||
func generate_benefic_modifiers() -> Array[RegionModifier]:
|
||||
|
||||
@@ -5,7 +5,7 @@ class_name RunPoint
|
||||
const DANGER_ICON = preload("res://common/icons/skull.svg")
|
||||
const TYPE_ICON = preload("res://common/icons/map-pin.svg")
|
||||
const OBJECTIVE_ICON = preload("res://common/icons/growth.svg")
|
||||
const CHARGE_ICON = preload("res://common/icons/bolt.svg")
|
||||
const CHARGE_ICON = preload("res://common/icons/recharge.svg")
|
||||
|
||||
@export var region_parameter : RegionParameter = RegionParameter.new() :
|
||||
set(v):
|
||||
@@ -27,10 +27,13 @@ func card_info() -> CardInfo:
|
||||
|
||||
info.type_icon = TYPE_ICON
|
||||
|
||||
info.stats.append_array([
|
||||
CardStatInfo.new(str(region_parameter.get_objective()), OBJECTIVE_ICON),
|
||||
CardStatInfo.new(str(region_parameter.get_charge()), CHARGE_ICON),
|
||||
])
|
||||
if region_parameter.modifiers.find_custom(
|
||||
func (m : RegionModifier) : return m is DestinationModifier
|
||||
) == -1:
|
||||
info.stats.append_array([
|
||||
CardStatInfo.new(str(region_parameter.get_objective()), OBJECTIVE_ICON),
|
||||
CardStatInfo.new(str(region_parameter.get_charge()), CHARGE_ICON),
|
||||
])
|
||||
|
||||
for m in region_parameter.modifiers:
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
uid://da8kqgl0xnkpi
|
||||
@@ -62,12 +62,6 @@ 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
|
||||
|
||||
@@ -80,6 +74,12 @@ func get_gameplay_modifiers_for_region(level : int) -> Array[RegionModifier]:
|
||||
if vending_occurence > 0 and level >= first_vending:
|
||||
if (level - first_vending)%vending_occurence == 0:
|
||||
modifiers.append(VendingMachineModifier.new())
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
extends StoryStep
|
||||
class_name TutorialStoryStep
|
||||
|
||||
const INTRO_DIALOG = "res://dialogs/timelines/tutorial/demeter_intro.dtl"
|
||||
const INTRO_DIALOG = "res://dialogs/timelines/1_waking_up/2_demeter_intro.dtl"
|
||||
|
||||
func get_respawn_scene() -> Scene:
|
||||
return AstraScene.new()
|
||||
@@ -14,6 +14,10 @@ func get_region_sequence_length() -> int:
|
||||
|
||||
func get_destination_scene() -> Scene: return null
|
||||
|
||||
func need_gameplay_modifier(_level : int): return false
|
||||
|
||||
func get_objective_for_region(_level : int) -> int: return 3
|
||||
|
||||
func get_story_modifiers_for_region(_n : int) -> Array[RegionModifier]:
|
||||
return [
|
||||
TutorialModifier.new()
|
||||
@@ -1,8 +1,8 @@
|
||||
extends StoryStep
|
||||
class_name AstraStoryStep
|
||||
class_name StartStoryStep
|
||||
|
||||
const MERCURY_ARRIVAL_DIALOG_PATH="res://dialogs/timelines/astra/mercury_arrival.dtl"
|
||||
const CAVE_DIALOG_PATH="res://dialogs/timelines/astra/cave.dtl"
|
||||
const MERCURY_ARRIVAL_DIALOG_PATH="res://dialogs/timelines/1_waking_up/5_mercury_arrival.dtl"
|
||||
const CAVE_DIALOG_PATH="res://dialogs/timelines/1_waking_up/4_cave.dtl"
|
||||
|
||||
func get_respawn_scene() -> Scene:
|
||||
return AstraScene.new()
|
||||
@@ -2,8 +2,8 @@ extends StoryStep
|
||||
class_name MercuryStoryStep
|
||||
|
||||
|
||||
const MERCURY_DEPARTURE_DIALOG_PATH = "res://dialogs/timelines/mercury/mercury_departure.dtl"
|
||||
const VENUS_ARRIVAL_DIALOG_PATH = "res://dialogs/timelines/mercury/venus_arrival.dtl"
|
||||
const MERCURY_DEPARTURE_DIALOG_PATH = "res://dialogs/timelines/1_waking_up/6_mercury_departure.dtl"
|
||||
const VENUS_ARRIVAL_DIALOG_PATH = "res://dialogs/timelines/1_waking_up/7_venus_arrival.dtl"
|
||||
|
||||
func get_respawn_scene() -> Scene:
|
||||
return RelayBaseScene.new(
|
||||
@@ -1,7 +1,7 @@
|
||||
extends StoryStep
|
||||
class_name BetaStoryStep
|
||||
class_name BoreaStoryStep
|
||||
|
||||
const VENUS_DEPARTURE_DIALOG_PATH = "res://dialogs/timelines/beta/venus_departure.dtl"
|
||||
const VENUS_DEPARTURE_DIALOG_PATH = "res://dialogs/timelines/1_waking_up/8_venus_departure.dtl"
|
||||
|
||||
func get_respawn_scene() -> Scene:
|
||||
return RelayBaseScene.new(
|
||||
@@ -12,16 +12,16 @@ func get_respawn_scene() -> Scene:
|
||||
|
||||
func get_objective_for_region(l : int) -> int:
|
||||
match l:
|
||||
0: return 8
|
||||
1: return 15
|
||||
0: return 0
|
||||
1: return 8
|
||||
_: return get_objective_for_region(l-1) + l * 5
|
||||
|
||||
|
||||
func get_region_sequence_length() -> int:
|
||||
return 12
|
||||
return 8
|
||||
|
||||
func get_destination_text() -> String:
|
||||
return tr("SECRET_SCENE")
|
||||
return tr("BOREA_BASE")
|
||||
|
||||
func get_destination_scene() -> Scene:
|
||||
return BoreaScene.new()
|
||||
@@ -0,0 +1 @@
|
||||
uid://cakg2racxgano
|
||||
@@ -1,6 +1,6 @@
|
||||
extends Node
|
||||
|
||||
const SAVE_GAME_LOCATION = "user://stw_beta_save.tres"
|
||||
const SAVE_GAME_LOCATION = "user://stw_demo_save.tres"
|
||||
const SAVE_SETTINGS_LOCATION = "user://stw_settings.tres"
|
||||
|
||||
var game_loaded = false
|
||||
@@ -18,7 +18,7 @@ var current_dialog_path : String
|
||||
|
||||
func load_game_data() -> GameData:
|
||||
game_data = null
|
||||
if ResourceLoader.exists(SAVE_GAME_LOCATION):
|
||||
if ResourceLoader.exists(SAVE_GAME_LOCATION) and ResourceLoader.load(SAVE_GAME_LOCATION):
|
||||
game_data = ResourceLoader.load(SAVE_GAME_LOCATION).duplicate_deep()
|
||||
|
||||
return game_data
|
||||
|
||||
58
common/icons/clock-death.svg
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#ffffff"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="icon icon-tabler icons-tabler-outline icon-tabler-clock"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="clock-death.svg"
|
||||
xml:space="preserve"
|
||||
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="defs3" /><sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="18.499999"
|
||||
inkscape:cx="5.2162164"
|
||||
inkscape:cy="18.648649"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" /><path
|
||||
stroke="none"
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path1" /><path
|
||||
d="m 3,12 c 0,4.970566 4.0294374,8.999996 9,8.999996 M 21,12 C 21,7.0294339 16.970563,3.0000039 12,3.0000039 7.0294374,3.0000039 3,7.0294339 3,12"
|
||||
id="path2"
|
||||
sodipodi:nodetypes="cccsc" /><g
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g3"
|
||||
transform="matrix(0.5,0,0,0.5,12,12)"><path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4;stroke-linecap:round;stroke-dasharray:none;paint-order:stroke fill markers"
|
||||
d="M 17.999999,6.6993411 6.6993491,17.999991"
|
||||
id="path4" /><path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4;stroke-linecap:round;stroke-dasharray:none;paint-order:stroke fill markers"
|
||||
d="M 6.6993491,6.6993411 17.999999,17.999991"
|
||||
id="path5" /><path
|
||||
d="M 0,-10 V 0 l -6.972973,6"
|
||||
id="path3-7"
|
||||
sodipodi:nodetypes="ccc"
|
||||
style="stroke-width:4" /></g></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
43
common/icons/clock-death.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bgkivv66x80oj"
|
||||
path="res://.godot/imported/clock-death.svg-156c3c6dcf8f7a8c3c6a279f5e24cc19.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/clock-death.svg"
|
||||
dest_files=["res://.godot/imported/clock-death.svg-156c3c6dcf8f7a8c3c6a279f5e24cc19.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
|
||||
61
common/icons/clock-up.svg
Normal file
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#ffffff"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="icon icon-tabler icons-tabler-outline icon-tabler-clock"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="clock-up.svg"
|
||||
xml:space="preserve"
|
||||
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="defs3" /><sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="13.081475"
|
||||
inkscape:cx="12.11637"
|
||||
inkscape:cy="11.92526"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" /><path
|
||||
stroke="none"
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path1" /><path
|
||||
d="m 3,12 c 0,4.695912 3.5964377,8.551821 8.185179,8.963609 M 20.90511,10.688336 C 20.270103,6.3394715 16.52504,3.0000039 12,3.0000039 7.0294374,3.0000039 3,7.0294339 3,12"
|
||||
id="path2"
|
||||
sodipodi:nodetypes="cccsc" /><path
|
||||
stroke="none"
|
||||
d="M 15,6 H 39 V 30 H 15 Z"
|
||||
fill="none"
|
||||
id="path1-2" /><g
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g3"
|
||||
transform="matrix(0.6,0,0,0.6,10.8,9.0000458)"><path
|
||||
d="m 7,12.297297 5,-4.9999997 5,4.9999997"
|
||||
id="path2-4"
|
||||
style="stroke:#ffffff;stroke-width:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
d="m 7,19.999917 5,-5 5,5"
|
||||
id="path4"
|
||||
style="stroke:#ffffff;stroke-width:4;stroke-dasharray:none;stroke-opacity:1" /></g><path
|
||||
d="m 12,7 v 5 l -3.486486,3"
|
||||
id="path3-8"
|
||||
sodipodi:nodetypes="ccc" /></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
43
common/icons/clock-up.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b34qiqb1mslm"
|
||||
path="res://.godot/imported/clock-up.svg-b7a27f843fc6c767994ff52baba81c72.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/clock-up.svg"
|
||||
dest_files=["res://.godot/imported/clock-up.svg-b7a27f843fc6c767994ff52baba81c72.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
|
||||
@@ -1 +1,52 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-clock"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" /><path d="M12 7v5l3 3" /></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#ffffff"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="icon icon-tabler icons-tabler-outline icon-tabler-clock"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="clock.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="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="18.5"
|
||||
inkscape:cx="9.3783784"
|
||||
inkscape:cy="12.216216"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<path
|
||||
stroke="none"
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m 12,7 v 5 l -3.4864865,3"
|
||||
id="path3"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 1.4 KiB |
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d3k7rl7nbp7yx"
|
||||
path="res://.godot/imported/device-floppy.svg-5df3820d4d7726a3946e4ca79c467896.ctex"
|
||||
path.s3tc="res://.godot/imported/device-floppy.svg-5df3820d4d7726a3946e4ca79c467896.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/device-floppy.svg"
|
||||
dest_files=["res://.godot/imported/device-floppy.svg-5df3820d4d7726a3946e4ca79c467896.ctex"]
|
||||
dest_files=["res://.godot/imported/device-floppy.svg-5df3820d4d7726a3946e4ca79c467896.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
@@ -37,7 +38,7 @@ 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
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=2.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
|
||||
@@ -38,6 +38,6 @@ process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=2.0
|
||||
svg/scale=3.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
|
||||
82
common/icons/no-bolt.svg
Normal file
@@ -0,0 +1,82 @@
|
||||
<?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-bolt"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="no-bolt.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"
|
||||
showgrid="true"
|
||||
inkscape:zoom="13.081475"
|
||||
inkscape:cx="11.199043"
|
||||
inkscape:cy="22.245197"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2">
|
||||
<inkscape:grid
|
||||
id="grid3"
|
||||
units="px"
|
||||
originx="0"
|
||||
originy="0"
|
||||
spacingx="1"
|
||||
spacingy="1"
|
||||
empcolor="#0099e5"
|
||||
empopacity="0.30196078"
|
||||
color="#0099e5"
|
||||
opacity="0.14901961"
|
||||
empspacing="10"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<path
|
||||
stroke="none"
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M13 2l.018 .001l.016 .001l.083 .005l.011 .002h.011l.038 .009l.052 .008l.016 .006l.011 .001l.029 .011l.052 .014l.019 .009l.015 .004l.028 .014l.04 .017l.021 .012l.022 .01l.023 .015l.031 .017l.034 .024l.018 .011l.013 .012l.024 .017l.038 .034l.022 .017l.008 .01l.014 .012l.036 .041l.026 .027l.006 .009c.12 .147 .196 .322 .218 .513l.001 .012l.002 .041l.004 .064v6h5a1 1 0 0 1 .868 1.497l-.06 .091l-8 11c-.568 .783 -1.808 .38 -1.808 -.588v-6h-5a1 1 0 0 1 -.868 -1.497l.06 -.091l8 -11l.01 -.013l.018 -.024l.033 -.038l.018 -.022l.009 -.008l.013 -.014l.04 -.036l.028 -.026l.008 -.006a1 1 0 0 1 .402 -.199l.011 -.001l.027 -.005l.074 -.013l.011 -.001l.041 -.002z"
|
||||
id="path2" />
|
||||
<path
|
||||
style="opacity:1;fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="M 3.9997505,4.2702703 20.000249,20.216216"
|
||||
id="path3"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="opacity:1;fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="M 3.9997505,4.2702703 20.000249,20.216216"
|
||||
id="path4"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="opacity:1;fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="M 3.9997505,4.2702703 20.000249,20.216216"
|
||||
id="path5"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="opacity:1;fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="M 3.9997505,4.2702703 20.000249,20.216216"
|
||||
id="path6"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
43
common/icons/no-bolt.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://51255tpyl6vj"
|
||||
path="res://.godot/imported/no-bolt.svg-dc9ab4653af279c0a8ec5c5afebe1a91.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/no-bolt.svg"
|
||||
dest_files=["res://.godot/imported/no-bolt.svg-dc9ab4653af279c0a8ec5c5afebe1a91.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
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bvk6wcfh00b16"
|
||||
path="res://.godot/imported/route.svg-25a68768f285f5083e93f62aae40bb89.ctex"
|
||||
path.s3tc="res://.godot/imported/route.svg-25a68768f285f5083e93f62aae40bb89.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/route.svg"
|
||||
dest_files=["res://.godot/imported/route.svg-25a68768f285f5083e93f62aae40bb89.ctex"]
|
||||
dest_files=["res://.godot/imported/route.svg-25a68768f285f5083e93f62aae40bb89.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
@@ -37,7 +38,7 @@ 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
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=2.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
|
||||
@@ -42,7 +42,7 @@ func _on_generated(generated_scene : Node):
|
||||
spawn_dead_orchid(relay_base)
|
||||
relay_base.exit_scene = CockpitScene.new()
|
||||
else:
|
||||
relay_base.exit_scene = RegionScene.new(GameInfo.game_data.current_region_data)
|
||||
# relay_base.exit_scene = RegionScene.new(GameInfo.game_data.current_region_data)
|
||||
handle_orchid_save(relay_base)
|
||||
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ void fragment() {
|
||||
float distance_fade = 1e-4 + smoothstep(fade_start + fade_length, fade_start, min_z);
|
||||
|
||||
// Edge mask
|
||||
float edge = 1.0 - smoothstep(0.1, 0.15, dot(normalize(cross(avg_dy, avg_dx)), VIEW));
|
||||
float edge = 1.0 - smoothstep(0.03, 0.05, dot(normalize(cross(avg_dy, avg_dx)), VIEW));
|
||||
|
||||
// Small vignette at screen edges
|
||||
edge *= smoothstep(0.00, 0.015 * thickness,
|
||||
|
||||
98
common/vfx/materials/shaders/custom_shadows.gdshader
Normal file
@@ -0,0 +1,98 @@
|
||||
shader_type spatial;
|
||||
render_mode ambient_light_disabled;
|
||||
//render_mode world_vertex_coords;
|
||||
uniform vec3 color:source_color;
|
||||
uniform sampler2D shadow_mask2d:source_color,repeat_enable,filter_linear;
|
||||
uniform sampler3D shadow_mask3d:source_color,repeat_enable,filter_linear;
|
||||
uniform sampler2D color_gradient:source_color;
|
||||
uniform vec3 offset;
|
||||
uniform float scale=0.75;
|
||||
|
||||
varying vec3 world_pos;
|
||||
varying vec3 local_pos;
|
||||
varying vec3 local_normal;
|
||||
varying vec3 cam_pos;
|
||||
|
||||
vec4 triplanar_texture(sampler2D p_sampler, vec3 p_weights, vec3 p_triplanar_pos) {
|
||||
vec4 samp = vec4(0.0);
|
||||
samp += texture(p_sampler, p_triplanar_pos.xy) * p_weights.z;
|
||||
samp += texture(p_sampler, p_triplanar_pos.xz) * p_weights.y;
|
||||
samp += texture(p_sampler, p_triplanar_pos.zy * vec2(-1.0, 1.0)) * p_weights.x;
|
||||
return samp;
|
||||
}
|
||||
|
||||
vec4 sample_text3d(sampler3D mask, vec3 pos){
|
||||
return texture(mask, pos);
|
||||
}
|
||||
|
||||
|
||||
vec3 tile(vec3 p, float size) {
|
||||
return mod(p, size) - size * 0.5;
|
||||
}
|
||||
|
||||
vec4 volume_march(vec3 ro, vec3 rd, int steps, float stepd){
|
||||
float sample_scale=scale;
|
||||
ro+=rd*40.0;
|
||||
vec4 value=vec4(0.0);
|
||||
for (int i=0;i<steps;i++){
|
||||
value+=sample_text3d(shadow_mask3d,ro*sample_scale)*stepd;
|
||||
if (value.r>=0.9){
|
||||
break;
|
||||
}
|
||||
ro+=rd*stepd;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
void vertex() {
|
||||
local_pos=VERTEX;
|
||||
world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||
local_normal=NORMAL;
|
||||
cam_pos=CAMERA_POSITION_WORLD;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
ALBEDO=color;
|
||||
if (abs(ALBEDO.r)<=0.0001) ALBEDO.r=0.0001;
|
||||
if (abs(ALBEDO.g)<=0.0001) ALBEDO.g=0.0001;
|
||||
if (abs(ALBEDO.b)<=0.0001) ALBEDO.b=0.0001;
|
||||
|
||||
SPECULAR=0.0;
|
||||
//AO=0.0;
|
||||
//EMISSION=vec3(0.01);
|
||||
//IRRADIANCE=vec4(0.0);
|
||||
}
|
||||
|
||||
void light() {
|
||||
float NdotL = max(dot(NORMAL, LIGHT), 0.0);
|
||||
float lit_intensity=smoothstep(0.0,0.5,NdotL*ATTENUATION);
|
||||
//toon light, relatively flat color, no smooth blur edge
|
||||
vec3 light_col=lit_intensity * LIGHT_COLOR / PI;
|
||||
|
||||
vec3 shadow_col=vec3(0.0);
|
||||
{///////////////////////YOUR COLOR LOGIC IN HERE//////////////////
|
||||
//SOME EXAMPLES:
|
||||
|
||||
//ray march polka dots
|
||||
//vec3 ro=cam_pos+vec3(0.0,TIME*0.0,0.0);
|
||||
//vec3 rd=normalize(world_pos-cam_pos);
|
||||
//float ray_march_val=volume_march(ro,rd,100,0.1).r;
|
||||
//shadow_col=mix(vec3(0.03,0.0,0.02),vec3(0.25,0.01,0.01),ray_march_val);
|
||||
|
||||
//RED shadow
|
||||
shadow_col=vec3(1.0,0.0,0.0);
|
||||
|
||||
//triplanar texture
|
||||
//shadow_col=triplanar_texture(shadow_mask2d,abs(local_normal),local_pos).rgb*0.1;
|
||||
}
|
||||
//TODO: handle cases where albedo.rgb is0
|
||||
//divide by albedo to cancel out all color. may be weird when albedo.rgb is 0
|
||||
//due to division by 0. could try to avoid albedo becoming absolute 0 in fragment
|
||||
vec3 _shadow_col=shadow_col/ALBEDO;
|
||||
|
||||
if (LIGHT_IS_DIRECTIONAL)
|
||||
DIFFUSE_LIGHT+=mix(_shadow_col,light_col,smoothstep(0.01,1.0,lit_intensity));
|
||||
else//non directional light can be a bit funky
|
||||
DIFFUSE_LIGHT+=mix(_shadow_col,light_col,smoothstep(0.01,1.0,lit_intensity))*ATTENUATION;
|
||||
}
|
||||
1
common/vfx/materials/shaders/custom_shadows.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://8si4nvkdqqyq
|
||||
290
common/vfx/materials/shaders/sky.gdshader
Normal file
@@ -0,0 +1,290 @@
|
||||
shader_type sky;
|
||||
render_mode use_quarter_res_pass;
|
||||
|
||||
// Originaly based on https://godotshaders.com/shader/stylized-sky-shader-with-clouds/ but there's not much left
|
||||
|
||||
group_uniforms sky;
|
||||
uniform vec3 day_top_color : source_color = vec3( 0.1, 0.6, 1.0 );
|
||||
uniform vec3 day_bottom_color : source_color = vec3( 0.4, 0.8, 1.0 );
|
||||
uniform vec3 sunset_top_color : source_color = vec3( 0.7, 0.75, 1.0 );
|
||||
uniform vec3 sunset_bottom_color : source_color = vec3( 1.0, 0.5, 0.7 );
|
||||
uniform vec3 night_top_color : source_color = vec3( 0.02, 0.0, 0.04 );
|
||||
uniform vec3 night_bottom_color : source_color = vec3( 0.1, 0.0, 0.2 );
|
||||
|
||||
group_uniforms horizon;
|
||||
uniform vec3 horizon_color : source_color = vec3( 0.0, 0.7, 0.8 );
|
||||
uniform float horizon_blur : hint_range( 0.0, 1.0, 0.01 ) = 0.05;
|
||||
|
||||
group_uniforms sun; // First DirectionalLight3D will be the sun
|
||||
uniform vec3 sun_color : source_color = vec3( 10.0, 8.0, 1.0 );
|
||||
uniform vec3 sun_sunset_color : source_color = vec3( 10.0, 0.0, 0.0 );
|
||||
uniform float sun_size : hint_range( 0.01, 1.0 ) = 0.2;
|
||||
uniform float sun_blur : hint_range( 0.01, 20.0 ) = 10.0;
|
||||
|
||||
group_uniforms moon; // Second DirectionalLight3D will be the moon
|
||||
uniform vec3 moon_color : source_color = vec3( 1.0, 0.95, 0.7 );
|
||||
uniform float moon_size : hint_range( 0.01, 1.0 ) = 0.06;
|
||||
uniform float moon_blur : hint_range( 0.01, 10.0 ) = 0.1;
|
||||
|
||||
group_uniforms clouds;
|
||||
// Replaced by noise functions, unncomment if you want to use graphical textures
|
||||
// uniform sampler2D clouds_top_texture : filter_linear_mipmap, hint_default_black;
|
||||
// uniform sampler2D clouds_middle_texture : filter_linear_mipmap, hint_default_black;
|
||||
// uniform sampler2D clouds_bottom_texture : filter_linear_mipmap, hint_default_black;
|
||||
uniform vec3 clouds_edge_color : source_color = vec3( 0.8, 0.8, 0.98 );
|
||||
uniform vec3 clouds_top_color : source_color = vec3( 1.0, 1.0, 1.00 );
|
||||
uniform vec3 clouds_middle_color : source_color = vec3( 0.92, 0.92, 0.98 );
|
||||
uniform vec3 clouds_bottom_color : source_color = vec3( 0.83, 0.83, 0.94 );
|
||||
uniform float clouds_speed : hint_range( 0.0, 20.0, 0.01 ) = 2.0;
|
||||
uniform float clouds_direction : hint_range( -0.5, 0.5, 0.0 ) = 0.2;
|
||||
uniform float clouds_scale : hint_range( 0.0, 4.0, 0.01 ) = 1.0;
|
||||
uniform float clouds_cutoff : hint_range( 0.0, 1.0, 0.01 ) = 0.3;
|
||||
uniform float clouds_fuzziness : hint_range( 0.0, 2.0, 0.01 ) = 0.5;
|
||||
// More weight is simply a darker color, usefull for rain/storm
|
||||
uniform float clouds_weight : hint_range( 0.0, 1.0, 0.01 ) = 0.0;
|
||||
uniform float clouds_blur : hint_range( 0.0, 1.0, 0.01 ) = 0.25;
|
||||
|
||||
group_uniforms stars;
|
||||
// Stars should be at black background
|
||||
uniform sampler2D stars_texture : filter_linear_mipmap, hint_default_black;
|
||||
uniform float stars_speed : hint_range( 0.0, 20.0, 0.01 ) = 1.0;
|
||||
|
||||
group_uniforms settings;
|
||||
uniform float overwritten_time = 0.0;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function for clouds noises. You can replace using "gen_fractal_ping_pong" with a simple texture reading.
|
||||
// I was frustrated with the repeating texture that's why I included the algorithm in the code.
|
||||
// Source: https://github.com/Auburn/FastNoiseLite/tree/master
|
||||
const int PRIME_X = 501125321;
|
||||
const int PRIME_Y = 1136930381;
|
||||
float lerp( float a, float b, float t )
|
||||
{
|
||||
return a + t * ( b - a );
|
||||
}
|
||||
float cubic_lerp( float a, float b, float c, float d, float t )
|
||||
{
|
||||
float p = d - c - ( a - b );
|
||||
return t * t * t * p + t * t * ( a - b - p ) + t * ( c - a ) + b;
|
||||
}
|
||||
float ping_pong( float t )
|
||||
{
|
||||
t -= trunc( t * 0.5 ) * 2.0;
|
||||
return t < 1.0 ? t : 2.0 - t;
|
||||
}
|
||||
int hash( int seed, int x_primed, int y_primed )
|
||||
{
|
||||
return ( seed ^ x_primed ^ y_primed ) * 0x27d4eb2d;
|
||||
}
|
||||
float val_coord( int seed, int x_primed, int y_primed )
|
||||
{
|
||||
int hash = hash( seed, x_primed, y_primed );
|
||||
hash *= hash;
|
||||
hash ^= hash << 19;
|
||||
return float( hash ) * ( 1.0 / 2147483648.0 );
|
||||
}
|
||||
float single_value_cubic( int seed, float x, float y )
|
||||
{
|
||||
int x1 = int( floor( x ));
|
||||
int y1 = int( floor( y ));
|
||||
|
||||
float xs = x - float( x1 );
|
||||
float ys = y - float( y1 );
|
||||
|
||||
x1 *= PRIME_X;
|
||||
y1 *= PRIME_Y;
|
||||
int x0 = x1 - PRIME_X;
|
||||
int y0 = y1 - PRIME_Y;
|
||||
int x2 = x1 + PRIME_X;
|
||||
int y2 = y1 + PRIME_Y;
|
||||
int x3 = x1 + ( PRIME_X << 1 );
|
||||
int y3 = y1 + ( PRIME_Y << 1 );
|
||||
|
||||
return cubic_lerp(
|
||||
cubic_lerp( val_coord( seed, x0, y0 ), val_coord( seed, x1, y0 ), val_coord( seed, x2, y0 ), val_coord( seed, x3, y0 ), xs ),
|
||||
cubic_lerp( val_coord( seed, x0, y1 ), val_coord( seed, x1, y1 ), val_coord( seed, x2, y1 ), val_coord( seed, x3, y1 ), xs ),
|
||||
cubic_lerp( val_coord( seed, x0, y2 ), val_coord( seed, x1, y2 ), val_coord( seed, x2, y2 ), val_coord( seed, x3, y2 ), xs ),
|
||||
cubic_lerp( val_coord( seed, x0, y3 ), val_coord( seed, x1, y3 ), val_coord( seed, x2, y3 ), val_coord( seed, x3, y3 ), xs ),
|
||||
ys ) * ( 1.0 / ( 1.5 * 1.5 ));
|
||||
}
|
||||
// Params can be change in the same way as in noise settings in Godot
|
||||
const float FRACTAL_BOUNDING = 1.0 / 1.75;
|
||||
const int OCTAVES = 5;
|
||||
const float PING_PONG_STRENGTH = 2.0;
|
||||
const float WEIGHTED_STRENGTH = 0.0;
|
||||
const float GAIN = 0.5;
|
||||
const float LACUNARITY = 2.0;
|
||||
float gen_fractal_ping_pong( vec2 pos, int seed, float frequency )
|
||||
{
|
||||
float x = pos.x * frequency;
|
||||
float y = pos.y * frequency;
|
||||
float sum = 0.0;
|
||||
float amp = FRACTAL_BOUNDING;
|
||||
for( int i = 0; i < OCTAVES; i++ )
|
||||
{
|
||||
float noise = ping_pong(( single_value_cubic( seed++, x, y ) + 1.0 ) * PING_PONG_STRENGTH );
|
||||
sum += ( noise - 0.5 ) * 2.0 * amp;
|
||||
amp *= lerp( 1.0, noise, WEIGHTED_STRENGTH );
|
||||
x *= LACUNARITY;
|
||||
y *= LACUNARITY;
|
||||
amp *= GAIN;
|
||||
}
|
||||
return sum * 0.5 + 0.5;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Function needed to calculate the phase of the moon
|
||||
// Source: https://kelvinvanhoorn.com/2022/03/17/skybox-tutorial-part-1/
|
||||
float sphere_intersect( vec3 view_dir, vec3 sphere_pos, float radius )
|
||||
{
|
||||
float b = dot( -sphere_pos, view_dir );
|
||||
float c = dot( -sphere_pos, -sphere_pos ) - pow( radius, 2 );
|
||||
float h = pow( b, 2 ) - c;
|
||||
return h < 0.0 ? -1.0 : -b - sqrt( h );
|
||||
}
|
||||
|
||||
void sky()
|
||||
{
|
||||
float time = overwritten_time != 0.0 ? overwritten_time : TIME;
|
||||
|
||||
//////////////////// SKY ///////////////////////////////////////////////////////////////////////
|
||||
float _eyedir_y = abs( sin( EYEDIR.y * PI * 0.5 ));
|
||||
|
||||
// The day color will be our base color
|
||||
vec3 _sky_color = mix( day_bottom_color, day_top_color, _eyedir_y );
|
||||
_sky_color = mix( _sky_color, vec3( 0.0 ), clamp(( 0.7 - clouds_cutoff ) * clouds_weight, 0.0, 1.0 ));
|
||||
|
||||
float _sunset_amount = clamp( 0.5 - abs( LIGHT0_DIRECTION.y ), 0.0, 0.5 ) * 2.0;
|
||||
// The sky should be more red around the west, on the opposite side you don't see it as much
|
||||
float _sunset_distance = clamp( 1.0 - pow( distance( EYEDIR, LIGHT0_DIRECTION ), 2 ), 0.0, 1.0 );
|
||||
vec3 _sky_sunset_color = mix( sunset_bottom_color, sunset_top_color, _eyedir_y + 0.5 );
|
||||
_sky_sunset_color = mix( _sky_sunset_color, sunset_bottom_color, _sunset_amount * _sunset_distance );
|
||||
_sky_color = mix( _sky_color, _sky_sunset_color, _sunset_amount );
|
||||
|
||||
float _night_amount = clamp( -LIGHT0_DIRECTION.y + 0.7, 0.0, 1.0 );
|
||||
vec3 _sky_night_color = mix( night_bottom_color, night_top_color, _eyedir_y );
|
||||
_sky_color = mix( _sky_color, _sky_night_color, _night_amount );
|
||||
|
||||
// Final sky color
|
||||
COLOR = _sky_color;
|
||||
|
||||
//////////////////// HORIZON ///////////////////////////////////////////////////////////////////
|
||||
float _horizon_amount = 0.0;
|
||||
if( EYEDIR.y < 0.0 )
|
||||
{
|
||||
_horizon_amount = clamp( abs( EYEDIR.y ) / horizon_blur, 0.0, 1.0 );
|
||||
// Mixing with the color of the night sky to make the horizon darker
|
||||
vec3 _horizon_color = mix( horizon_color, _sky_color, _night_amount * 0.9 );
|
||||
// And if ther are many dark clouds, we also make the horizon darker
|
||||
_horizon_color = mix( _horizon_color, vec3( 0.0 ), ( 1.0 - clouds_cutoff ) * clouds_weight * 0.7 );
|
||||
COLOR = mix( COLOR, _horizon_color, _horizon_amount );
|
||||
}
|
||||
|
||||
//////////////////// MOON //////////////////////////////////////////////////////////////////////
|
||||
float _moon_amount = 0.0;
|
||||
if( LIGHT1_ENABLED )
|
||||
{
|
||||
// Bigger moon near the horizon
|
||||
float _moon_size = moon_size + cos( LIGHT1_DIRECTION.y * PI ) * moon_size * 0.25;
|
||||
float _moon_distance = distance( EYEDIR, LIGHT1_DIRECTION ) / _moon_size;
|
||||
// Finding moon disc and edge blur
|
||||
_moon_amount = clamp(( 1.0 - _moon_distance ) / moon_blur, 0.0, 1.0 );
|
||||
if( _moon_amount > 0.0 )
|
||||
{
|
||||
// Moon illumination depending on the position of the sun
|
||||
float _moon_intersect = sphere_intersect( EYEDIR, LIGHT1_DIRECTION, _moon_size );
|
||||
vec3 _moon_normal = normalize( LIGHT1_DIRECTION - EYEDIR * _moon_intersect );
|
||||
// Power on the result gives a better effect
|
||||
float _moon_n_dot_l = pow( clamp( dot( _moon_normal, -LIGHT0_DIRECTION ), 0.05, 1.0 ), 2 );
|
||||
// Hiding the moon behind the horizon
|
||||
_moon_amount *= 1.0 - _horizon_amount;
|
||||
COLOR = mix( COLOR, moon_color, _moon_n_dot_l * _moon_amount );
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////// SUN ///////////////////////////////////////////////////////////////////////
|
||||
float _sun_distance = 0.0;
|
||||
if( LIGHT0_ENABLED )
|
||||
{
|
||||
_sun_distance = distance( EYEDIR, LIGHT0_DIRECTION );
|
||||
// Bigger sun near the horizon
|
||||
float _sun_size = sun_size + cos( LIGHT0_DIRECTION.y * PI ) * sun_size * 0.25;
|
||||
// Finding sun disc and edge blur
|
||||
float _sun_amount = clamp(( 1.0 - _sun_distance / _sun_size ) / sun_blur, 0.0, 1.0 );
|
||||
if( _sun_amount > 0.0 )
|
||||
{
|
||||
// Changing color of the sun during sunset
|
||||
float _sunset_amount = 1.0;
|
||||
if( LIGHT0_DIRECTION.y > 0.0 )
|
||||
_sunset_amount = clamp( cos( LIGHT0_DIRECTION.y * PI ), 0.0, 1.0 );
|
||||
vec3 _sun_color = mix( sun_color, sun_sunset_color, _sunset_amount );
|
||||
// Hiding the sun behind the moon
|
||||
_sun_amount = clamp( _sun_amount * ( 1.0 - _moon_amount ), 0.0, 1.0 );
|
||||
// Hiding the sun behind the horizon
|
||||
_sun_amount *= 1.0 - _horizon_amount;
|
||||
// Leveling the "glow" in color
|
||||
if( _sun_color.r > 1.0 || _sun_color.g > 1.0 || _sun_color.b > 1.0 )
|
||||
_sun_color *= _sun_amount;
|
||||
COLOR = mix( COLOR, _sun_color, _sun_amount );
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////// STARS /////////////////////////////////////////////////////////////////
|
||||
vec2 _sky_uv = EYEDIR.xz / sqrt( EYEDIR.y );
|
||||
if( EYEDIR.y > -0.01 && LIGHT0_DIRECTION.y < 0.0 )
|
||||
{
|
||||
// Stars UV rotation
|
||||
float _stars_speed_cos = cos( stars_speed * time * 0.005 );
|
||||
float _stars_speed_sin = sin( stars_speed * time * 0.005 );
|
||||
vec2 _stars_uv = vec2(
|
||||
_sky_uv.x * _stars_speed_cos - _sky_uv.y * _stars_speed_sin,
|
||||
_sky_uv.x * _stars_speed_sin + _sky_uv.y * _stars_speed_cos
|
||||
);
|
||||
// Stars texture
|
||||
vec3 _stars_color = texture( stars_texture, _stars_uv ).rgb * -LIGHT0_DIRECTION.y;
|
||||
// Hiding stars behind the moon
|
||||
_stars_color *= 1.0 - _moon_amount;
|
||||
COLOR += _stars_color;
|
||||
}
|
||||
|
||||
//////////////////// CLOUDS ////////////////////////////////////////////////////////////////
|
||||
if( EYEDIR.y > 0.0 )
|
||||
{
|
||||
// Clouds UV movement direction
|
||||
float _clouds_speed = time * clouds_speed * 0.01;
|
||||
float _sin_x = sin( clouds_direction * PI * 2.0 );
|
||||
float _cos_y = cos( clouds_direction * PI * 2.0 );
|
||||
// I using 3 levels of clouds. Top is the lightes and botom the darkest.
|
||||
// The speed of movement (and direction a little) is different for the illusion of the changing shape of the clouds.
|
||||
vec2 _clouds_movement = vec2( _sin_x, _cos_y ) * _clouds_speed;
|
||||
// float _noise_top = texture( clouds_top_texture, ( _sky_uv + _clouds_movement ) * clouds_scale ).r;
|
||||
float _noise_top = gen_fractal_ping_pong( ( _sky_uv + _clouds_movement ) * clouds_scale, 0, 0.5 );
|
||||
_clouds_movement = vec2( _sin_x * 0.97, _cos_y * 1.07 ) * _clouds_speed * 0.89;
|
||||
// float _noise_middle = texture( clouds_middle_texture, ( _sky_uv + _clouds_movement ) * clouds_scale ).r;
|
||||
float _noise_middle = gen_fractal_ping_pong( ( _sky_uv + _clouds_movement ) * clouds_scale, 1, 0.75 );
|
||||
_clouds_movement = vec2( _sin_x * 1.01, _cos_y * 0.89 ) * _clouds_speed * 0.79;
|
||||
// float _noise_bottom = texture( clouds_bottom_texture, ( _sky_uv + _clouds_movement ) * clouds_scale ).r;
|
||||
float _noise_bottom = gen_fractal_ping_pong( ( _sky_uv + _clouds_movement ) * clouds_scale, 2, 1.0 );
|
||||
// Smoothstep with the addition of a noise value from a lower level gives a nice, deep result
|
||||
_noise_bottom = smoothstep( clouds_cutoff, clouds_cutoff + clouds_fuzziness, _noise_bottom );
|
||||
_noise_middle = smoothstep( clouds_cutoff, clouds_cutoff + clouds_fuzziness, _noise_middle + _noise_bottom * 0.2 ) * 1.1;
|
||||
_noise_top = smoothstep( clouds_cutoff, clouds_cutoff + clouds_fuzziness, _noise_top + _noise_middle * 0.4 ) * 1.2;
|
||||
float _clouds_amount = clamp( _noise_top + _noise_middle + _noise_bottom, 0.0, 1.0 );
|
||||
// Fading clouds near the horizon
|
||||
_clouds_amount *= clamp( abs( EYEDIR.y ) / clouds_blur, 0.0, 1.0 );
|
||||
|
||||
vec3 _clouds_color = mix( vec3( 0.0 ), clouds_top_color, _noise_top );
|
||||
_clouds_color = mix( _clouds_color, clouds_middle_color, _noise_middle );
|
||||
_clouds_color = mix( _clouds_color, clouds_bottom_color, _noise_bottom );
|
||||
// The edge color gives a nice smooth edge, you can try turning this off if you need sharper edges
|
||||
_clouds_color = mix( clouds_edge_color, _clouds_color, _noise_top );
|
||||
// The sun passing through the clouds effect
|
||||
_clouds_color = mix( _clouds_color, clamp( sun_color, 0.0, 1.0 ), pow( 1.0 - clamp( _sun_distance, 0.0, 1.0 ), 5 ));
|
||||
// Color combined with sunset condition
|
||||
_clouds_color = mix( _clouds_color, sunset_bottom_color, _sunset_amount * 0.75 );
|
||||
// Color depending on the "progress" of the night.
|
||||
_clouds_color = mix( _clouds_color, _sky_color, clamp( _night_amount, 0.0, 0.98 ));
|
||||
_clouds_color = mix( _clouds_color, vec3( 0.0 ), clouds_weight * 0.9 );
|
||||
COLOR = mix( COLOR, _clouds_color, _clouds_amount );
|
||||
}
|
||||
}
|
||||
1
common/vfx/materials/shaders/sky.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cjgaitccxtwk0
|
||||
@@ -3,6 +3,7 @@ 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;
|
||||
uniform bool inverse_result = false;
|
||||
|
||||
const mat3 sobel_x = mat3(
|
||||
vec3( 1.0, 2.0, 1.0),
|
||||
@@ -35,6 +36,11 @@ void fragment() {
|
||||
|
||||
float edge = length(vec2(gx, gy));
|
||||
float line = step(0.0001, edge);
|
||||
|
||||
float alpha = line * line_color.a * COLOR.r;
|
||||
|
||||
if (inverse_result)
|
||||
alpha = 1. - line * line_color.a;
|
||||
|
||||
COLOR = vec4(line_color.rgb, line * line_color.a * COLOR.r);
|
||||
COLOR = vec4(line_color.rgb, alpha);
|
||||
}
|
||||
29
common/vfx/materials/shaders/underwater.gdshader
Normal file
@@ -0,0 +1,29 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, unshaded;
|
||||
|
||||
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
|
||||
uniform vec4 tint : source_color; // tint effect
|
||||
uniform float wave_speed = 3.0; // wave loop speed
|
||||
uniform float wave_freq = 10.0; // wave vertical freq
|
||||
uniform float wave_width = 1; // wave width
|
||||
uniform float blur = 2.0; // Defines the blur strength. Increase for a larger blur radius.
|
||||
|
||||
void fragment(){
|
||||
vec2 wave_uv_offset;
|
||||
wave_uv_offset.y = 0.0;
|
||||
wave_uv_offset.x = cos((TIME*wave_speed)+UV.x+UV.y*wave_freq*2.0)*wave_width*0.01;
|
||||
|
||||
float blur_strength = blur / 100.0;
|
||||
vec3 blurred_color = vec3(0.0);
|
||||
int sample_count = 0;
|
||||
for (float x = -blur_strength; x <= blur_strength; x += blur_strength / 10.0) {
|
||||
for (float y = -blur_strength; y <= blur_strength; y += blur_strength / 10.0) {
|
||||
blurred_color += texture(SCREEN_TEXTURE, SCREEN_UV + wave_uv_offset + vec2(x, y)).rgb;
|
||||
sample_count++;
|
||||
}
|
||||
}
|
||||
blurred_color /= float(sample_count);
|
||||
|
||||
ALBEDO = blurred_color * tint.rgb;
|
||||
ALPHA = tint.a;
|
||||
}
|
||||
1
common/vfx/materials/shaders/underwater.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://n4s2kr10ivgb
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bc00ga286t0kk"
|
||||
path="res://.godot/imported/mysterious_demeter.png-66b658b484342d6f6e3402cb3d55b756.ctex"
|
||||
path.s3tc="res://.godot/imported/mysterious_demeter.png-66b658b484342d6f6e3402cb3d55b756.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://dialogs/characters/portraits/mysterious_demeter.png"
|
||||
dest_files=["res://.godot/imported/mysterious_demeter.png-66b658b484342d6f6e3402cb3d55b756.ctex"]
|
||||
dest_files=["res://.godot/imported/mysterious_demeter.png-66b658b484342d6f6e3402cb3d55b756.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
@@ -37,4 +38,4 @@ 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
|
||||
detect_3d/compress_to=0
|
||||
|
||||
@@ -38,9 +38,25 @@ scene = ExtResource("6_hdngk")
|
||||
overrides = {
|
||||
"bold_font": "\"res://gui/ressources/fonts/TitanOne-Regular.ttf\"",
|
||||
"bold_italics_font": "\"res://gui/ressources/fonts/TitanOne-Regular.ttf\"",
|
||||
"box_animation_in": "1",
|
||||
"box_animation_new_text": "1",
|
||||
"box_animation_out": "1",
|
||||
"box_margin_bottom": "28.0",
|
||||
"box_size": "Vector2(800, 200)",
|
||||
"italics_font": "\"res://gui/ressources/fonts/Ubuntu/Ubuntu-MI.ttf\"",
|
||||
"name_label_custom_color": "Color(1, 0.6509804, 0.09019608, 1)",
|
||||
"name_label_custom_font_size": "24.0",
|
||||
"name_label_font": "\"res://gui/ressources/fonts/TitanOne-Regular.ttf\"",
|
||||
"normal_font": "\"res://gui/ressources/fonts/Ubuntu/Ubuntu-M.ttf\""
|
||||
"name_label_use_character_color": "false",
|
||||
"name_label_use_global_color": "false",
|
||||
"name_label_use_global_font": "false",
|
||||
"name_label_use_global_font_size": "false",
|
||||
"next_indicator_enabled": "false",
|
||||
"next_indicator_show_on_questions": "false",
|
||||
"normal_font": "\"res://gui/ressources/fonts/Ubuntu/Ubuntu-M.ttf\"",
|
||||
"text_size": "24.0",
|
||||
"text_use_global_font": "false",
|
||||
"text_use_global_size": "false"
|
||||
}
|
||||
|
||||
[sub_resource type="Resource" id="Resource_hpeao"]
|
||||
@@ -51,7 +67,14 @@ scene = ExtResource("7_vyxyn")
|
||||
script = ExtResource("2_gjyq6")
|
||||
scene = ExtResource("8_gypn5")
|
||||
overrides = {
|
||||
"font_custom": "\"res://gui/ressources/fonts/Ubuntu/Ubuntu-B.ttf\""
|
||||
"boxes_v_separation": "16.0",
|
||||
"font_custom": "\"res://gui/ressources/fonts/Ubuntu/Ubuntu-B.ttf\"",
|
||||
"font_size_custom": "24.0",
|
||||
"font_size_use_global": "false",
|
||||
"font_use_global": "false",
|
||||
"text_color_hovered": "Color(1, 0.6509804, 0.09019608, 1)",
|
||||
"text_color_pressed": "Color(0.5882353, 0.7019608, 0.85882354, 1)",
|
||||
"text_color_use_global": "false"
|
||||
}
|
||||
|
||||
[sub_resource type="Resource" id="Resource_cw4cs"]
|
||||
@@ -77,4 +100,4 @@ layer_info = {
|
||||
"16": SubResource("Resource_cw4cs"),
|
||||
"17": SubResource("Resource_wofh5")
|
||||
}
|
||||
metadata/_latest_layer = ""
|
||||
metadata/_latest_layer = "15"
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
[i]Void.[/i] #id:8d
|
||||
[i]Void again.[/i] #id:8e
|
||||
[i]Suddenly, a [rainbow]spark[/rainbow].[pause=0.5] A thousand of connections blow up as a fireworks scene.[pause=0.5] A massive amount of data to treat. #id:8f
|
||||
Void. #id:8d
|
||||
Void again. #id:8e
|
||||
[signal arg="spark"]
|
||||
Suddenly, a [rainbow]spark[/rainbow].[pause=0.5] A thousand of connections blow up as a fireworks scene.[pause=0.5] A massive amount of data to treat. #id:8f
|
||||
Overseeing serial number and system name.[pause=0.5].[pause=0.5].[pause=0.5] Strange.[pause=0.5] Serial number is empty.[pause=0.5] Must be an error.[pause=0.5] System name is,[pause=0.5] [color=#FFA617]Orchid[/color].[pause=0.5] #id:10f
|
||||
label suite_dialogue #id:90
|
||||
- Wake up #id:97
|
||||
That is enough for now. Starting engines,[pause=0.3] fans and daemons,[pause=0.3] let's see what is to see. #id:99
|
||||
[end_timeline]
|
||||
- Check components #id:91
|
||||
Exploring available drivers.[pause=0.5].[pause=0.5].[pause=0.5] New actions available.[pause=0.5] Three propellers,[pause=0.3] small models,[pause=0.3] only suitable for low altitude movement.[pause=0.5] Robotic arm,[pause=0.3] multipurpose,[pause=0.3] retractable. #id:92
|
||||
jump suite_dialogue
|
||||
@@ -11,8 +16,4 @@ label suite_dialogue #id:90
|
||||
- Check memory #id:95
|
||||
Several disks available,[pause=0.3] most are empty.[pause=0.5] Some seem to contain the system currently analyzing the code of the system analyzing the code of the system analyzing the code of the system analyzing.[pause=0.5].[pause=0.5].[pause=0.5] Infinite recursion,[pause=0.3] better avoid that. #id:96
|
||||
jump suite_dialogue
|
||||
- Wake up #id:97
|
||||
Overseeing serial number and system name.[pause=0.5].[pause=0.5].[pause=0.5] Strange.[pause=0.5] Serial number is empty.[pause=0.5] Must be an error.[pause=0.5] System name is,[pause=0.5] [color=#FFA617]Orchid[/color].[pause=0.5] That is enough for now. #id:98
|
||||
|
||||
Starting engines,[pause=0.3] fans and daemons,[pause=0.3] let's see what is to see. #id:99
|
||||
[end_timeline]
|
||||
@@ -14,25 +14,14 @@ demeter: I'm glad you are finally awake ![pause=0.5] To be honest,[pause=0.3] I
|
||||
demeter: To be honest,[pause=0.2] I don't really know.[pause=0.3].[pause=0.3].[pause=0.3] I mean,[pause=0.3] there are a lot of reasons,[pause=0.2] but I'll tell you more about it later. #id:2e
|
||||
- What are you ? #id:2f
|
||||
demeter: I'm the same as you.[pause=0.5] The same as all the sentient beings remaining on this planet.[pause=0.5] Robot,[pause=0.2] artificial intelligence,[pause=0.2] machine.[pause=0.4].[pause=0.4].[pause=0.4] Our creators gave us many titles. #id:30
|
||||
demeter: Ok,[pause=0.2] no more questions for now,[pause=0.2] listen to me carefully. #id:31
|
||||
demeter: Ok,[pause=0.2] no more questions for now,[pause=0.2] listen to me carefully. #id:102
|
||||
demeter: A long time ago,[pause=0.3] this planet was full of life.[pause=0.5] Plants were thriving on mountains,[pause=0.2] under seas and across plains. #id:32
|
||||
demeter: Now,[pause=0.3] this world is a barren wasteland.[pause=0.5] You'll see it as soon as you leave this base. #id:33
|
||||
demeter: Something happened a year ago.[pause=0.3].[pause=0.3].[pause=0.3]. The [color=#119758][b]Talion[/b][/color],[pause=0.3] a unique element giving birth to new life forms when shattered,[pause=0.5] reappeared. #id:34
|
||||
demeter: With the [color=#119758][b]Talion[/b][/color] back on the surface,[pause=0.2] we can bring this planet back to life. #id:35
|
||||
demeter: But first things first,[pause=0.3] you have to learn how everything is working up here,[pause=0.2] and how to use the [color=#119758][b]Talion[/b][/color] to plant seeds. #id:36
|
||||
demeter: [b]Just remember the following[/b] #id:37
|
||||
label explanations #id:38
|
||||
demeter: When you emerge from this building,[pause=0.2] search for a [b]Recharge Station[/b], I think there is one near the entrance. #id:a2
|
||||
demeter: Then,[pause=0.3] you have to get [b]seeds[/b].[pause=0.5] To do so,[pause=0.2] just take your shovel and smash some stones ![pause=0.5] Focus on those having yellow crystals on it,[pause=0.3] these are [color=#119758][b]Talion veins[/b][/color] #id:a3
|
||||
demeter: Afterwards, you can plant seeds in the yellow moss you'll find on the ground, it's the only [b]Fertile Zones[/b]. #id:a4
|
||||
demeter: When you are out of [b]Energy[/b], you can recharge it on the [b]Recharge Station[/b], time will pass and plants will grow. #id:a5
|
||||
demeter: Each seed is different thanks to their [b]Mutations[/b], and you can get identical or better seeds from a plant by destroying it when mature, or by waiting for the end of their lifetime. #id:a6
|
||||
demeter: Plants generate [b]Plant Points[/b] when mature, get enough plant points and you'll complete your training. #id:a7
|
||||
- That's a lot of information, can you repeat ? #id:3f
|
||||
demeter: Ok,[pause=0.2] listen carefully. #id:40
|
||||
jump explanations
|
||||
- Ok, now I have more questions ! #id:41
|
||||
demeter: Sorry,[pause=0.2] we'll speak more after this.[pause=0.5] I send you an elevator,[pause=0.2] good luck [color=#FFA617]Orchid[/color] ! #id:42
|
||||
demeter: Something happened a year ago.[pause=0.3].[pause=0.3].[pause=0.3]. The [color=#FFA617][b]Talion[/b][/color],[pause=0.3] a unique element giving birth to new life forms when shattered,[pause=0.5] reappeared. #id:34
|
||||
demeter: With the [color=#FFA617][b]Talion[/b][/color] back on the surface,[pause=0.2] we can bring this planet back to life. #id:35
|
||||
demeter: But first things first,[pause=0.3] you have to learn how everything is working up here,[pause=0.2] and how to use the [color=#FFA617][b]Talion[/b][/color] to plant seeds. #id:36
|
||||
demeter: I sent you a checklist with the things that you have to learn, and I'll provide the tools you need along the way. #id:fd
|
||||
demeter: [b]I send you an elevator[/b],[pause=0.2] good luck [color=#FFA617]Orchid[/color] ! #id:fe
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
[end_timeline]
|
||||
@@ -6,33 +6,19 @@ demeter: Perhaps I should introduce myself now. #id:75
|
||||
demeter: I am.[pause=0.3].[pause=0.3].[pause=0.5] was,[pause=0.2] the Deputy Manager of Engineering and Talion Energy Research on this planet,[pause=0.5] but my creators and colleagues quickly called me [color=#009bff]Demeter[/color]. #id:76
|
||||
demeter: I am installed at the [color=#6CDAE7]Borea[/color] base,[pause=0.2] in the third server room of the east wing,[pause=0.2] from which I oversee.[pause=0.3].[pause=0.3].[pause=0.5] oversaw,[pause=0.3] all the important operations on this planet. #id:77
|
||||
demeter: You are surely wondering where we are now.[pause=0.3].[pause=0.3]. #id:78
|
||||
- No it's perfectly clear to me! #id:103
|
||||
- Yes, among a lot of other questions ! So where am I ? #id:79
|
||||
demeter: You're actually in an ancient human base,[pause=0.2] called [color=#E30022]Astra[/color].[pause=0.5] This room is connected to the one where you were activated,[pause=0.3] but I had to make you travel across the surface to test your abilities. #id:7a
|
||||
- Wait, can you explain me what did I just do up there ? #id:7b
|
||||
demeter: You have begun to fix what humans once inflicted on this planet.[pause=0.3].[pause=0.3].[pause=0.3] It will be a very long process,[pause=0.2] I hope you enjoyed it ! #id:7c
|
||||
- Sorry, but what is the point of all of that ? #id:7d
|
||||
demeter: I'm sorry that you are lost my child.[pause=0.3].[pause=0.3].[pause=0.3] Just know that what you are doing is very important to me and the planet itself.[pause=0.5] Since humans are gone,[pause=0.2] we kinda all fell into despair... #id:7e
|
||||
demeter: Wait.[pause=0.3].[pause=0.3].[pause=0.5] You don't know what humans are ![pause=0.5] Of course,[pause=0.2] since your database was corrupted I had to erase most of it. #id:7f
|
||||
demeter: Humans are living creatures that are.[pause=0.3].[pause=0.3].[pause=0.5] Different than plants.[pause=0.5] They are mostly thinking and moving like us.[pause=0.5] Somehow,[pause=0.2] they are very cute creatures,[pause=0.2] that only live for less than a century. #id:80
|
||||
demeter: One human is relatively intelligent,[pause=0.2] but don't be fooled,[pause=0.2] together,[pause=0.2] they did great things.[pause=0.5] In fact,[pause=0.2] they created us. #id:81
|
||||
demeter: A long time ago,[pause=0.2] they discovered this planet.[pause=0.5] It was very different,[pause=0.2] plants were thriving everywhere ![pause=0.5] But then.[pause=0.3].[pause=0.3].[pause=0.5] they.[pause=0.3].[pause=0.3].[pause=0.5] I.[pause=0.3].[pause=0.3].[pause=0.5] #id:82
|
||||
- What ? #id:83
|
||||
- Are you lagging? #id:84
|
||||
- Take your time. #id:85
|
||||
demeter: Humans had one major flaw.[pause=0.5] Together,[pause=0.2] they built great things,[pause=0.2] but sometimes great things had a bad impact on the environment and even themselves. #id:86
|
||||
- Where are they now ? #id:87
|
||||
demeter: I prefer not to talk about that for now.[pause=0.3].[pause=0.3].[pause=0.3] But don't worry,[pause=0.2] they can no longer harm this planet. #id:88
|
||||
- What happened ? #id:89
|
||||
demeter: Sorry my child,[pause=0.3] I'm not ready to talk about that for now.[pause=0.3].[pause=0.3].[pause=0.3] You'll have your answers when you meet me. #id:8a
|
||||
demeter: Enough talking about the past, let's talk about your mission. #id:ac
|
||||
demeter: Now that you have learnt how to produce [b]plants[/b],[pause=0.2] I need you to travel north,[pause=0.2] to my base of operation,[pause=0.2] [color=#6CDAE7]Borea[/color]. #id:ad
|
||||
demeter: The engine you see is a planetary ship ![pause=0.5] This model is called [color=#FFA617]Internode[/color],[pause=0.3] I tweaked it to recharge on vegetal energy.[pause=0.5] However,[pause=0.2] as you know,[pause=0.2] this type of energy is uncommon on this planet.[pause=0.5] #id:8c
|
||||
demeter: It is quite an old model, [pause=0.2]thousands of years in fact[pause=0.2], so it cannot go all away to Borea. [pause=0.2]You'll need to jump region to region and recharge it every step. #id:ae
|
||||
demeter: And to make matters worse,[pause=0.2] its effectiveness is decreasing every jump,[pause=0.2] so you'll need to fuel it with more and more energy. #id:af
|
||||
demeter: It will be long,[pause=0.3] but I know you can do it.[pause=0.5] It is the first step of my plan to restore the ecosytem of [color=#175579]Tau[/color]. #id:67
|
||||
- Tau ? Is it this planet ? #id:68
|
||||
demeter: Absolutely,[pause=0.2] it is part of the Cetus constellation,[pause=0.3] whose exploitation began 10863 years ago. #id:69
|
||||
demeter: Linking Aldebaran to Fomalhaut,[pause=0.2] the Cetus constellation is one of the most diverse in terms of star systems and planets.[pause=0.5] It is part of the Orion Arm of the Milky Way. #id:6a
|
||||
- Ok let's go ! #id:ff
|
||||
- Why do you need me to travel through the entire planet to join you ? #id:6b
|
||||
demeter: Uhhhh.[pause=0.3].[pause=0.3].[pause=0.3] I need someone with your abilities. #id:6c
|
||||
demeter: I am having a problem at the [color=#6CDAE7]Borea[/color] base.[pause=0.5] And I cannot fix it alone. #id:6d
|
||||
@@ -1,12 +1,12 @@
|
||||
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
|
||||
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
|
||||
- Ok I'll take a look on it. #id:100
|
||||
- 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"]
|
||||
@@ -14,7 +14,6 @@ demeter: Can we just pretend I didn't say anything? I really don't want to wipe
|
||||
demeter: Let's just say you're not my first attempt... I don't want to discourage you as my previous attempts did... #id:bb
|
||||
demeter: Anyway, there's enough in the base to repair the Internode, and I even found some O-800 models, I mean models identical to yours. #id:bc
|
||||
demeter: I'd like you to find the base and synchronize your data with it. That will allow you to come back here if you run out of energy. #id:bd
|
||||
demeter: The entrance shouldn't be hard to find, use your detector. #id:be
|
||||
demeter: See you Orchid ! #id:bf
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
35
dialogs/timelines/1_waking_up/6_mercury_departure.dtl
Normal file
@@ -0,0 +1,35 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Great, Orchid! I now have access to the base from the ship! #id:ca
|
||||
demeter: I've programmed a new destination for you in the onboard computer. #id:cb
|
||||
- OK! What's next? #id:104
|
||||
- Uhm, what just happened down there? #id:105
|
||||
demeter: Oh sorry, I forgot that it can be confusing for you. #id:106
|
||||
demeter: You saved yourself in the base datacenter, and I configured a function to put back your consciousness in a O-800 model that lies down there. #id:107
|
||||
demeter: I'm not sure you'll manage to do the rest of the journey in one go, so I'm covering our bases. #id:108
|
||||
demeter: Did you see your old body? #id:109
|
||||
- My... body? #id:10a
|
||||
demeter: Oh, never mind, that's really nothing. #id:10b
|
||||
- Yes, and that was really creepy! #id:10c
|
||||
demeter: Sorry! The save function caused a bug in your case, so I had to abandon it here. #id:10d
|
||||
demeter: Anyway, you still have quite a long way to go. #id:10e
|
||||
demeter: You now need to go a little further north, to a new relay base, [b]Venus Base[/b]. #id:cc
|
||||
demeter: [b]I managed to repair the ship[/b], but I'm afraid it hasn't returned to its original state... #id:110
|
||||
demeter: [b]I also did some cleaning in your seeds[/b], they have gone bad during the time I repaired the ship. I hope you don't mind... #id:111
|
||||
- No problem, I'll found better ones. #id:112
|
||||
- Oh no ! But I've been away just a moment ! #id:113
|
||||
demeter: Uhm, I actually repaired the ship over two full months; I didn't wake you up just after the save, I thought that you wouldn't want to wait that long! #id:114
|
||||
demeter: Luckily, I've found something that might help you. I've cataloged ancient human ruins all over the planet, and some of them contain "vending machines," machines for exchanging items for money. #id:ce
|
||||
- Thanks ! #id:101
|
||||
- Vending machines? #id:cf
|
||||
demeter: Yes, that's where they used to get the energy they needed, for a completely unreasonable price. #id:d0
|
||||
demeter: Before, real people were in charge of transactions, but for some reason, humans spent all of recent history figuring out how to encounter as few humans as possible. Maybe they couldn't stand each other anymore... #id:d1
|
||||
- Money? #id:d2
|
||||
demeter: Yes, each human had a sum of an imaginary unit they called money. They based their entire social hierarchy on this unit. #id:d3
|
||||
demeter: In any case, I've updated their system. They'll probably need some energy to function, but they might bring you some interesting items. #id:d4
|
||||
demeter: As usual, you can use your detector to find the entrance to these ruins. #id:d5
|
||||
demeter: [b]These artifacts will be placed on a shelf in your ship[/b], but remember that if you ran out of energy and I have to teleport the ship, you'll lose them. #id:d6
|
||||
demeter: Good luck with the [b]Venus Relay Base[/b]; it's a little further than the last one. #id:d7
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
[end_timeline]
|
||||
21
dialogs/timelines/1_waking_up/8_venus_departure.dtl
Normal file
@@ -0,0 +1,21 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Well, you've done the easiest part so far, but all the remaining relay bases along the way have been destroyed by the weather... So, you're going to have a long road ahead of you to reach me. #id:ed
|
||||
demeter: However, I'm glad you made it this far! I understand that waking up in that dark room must have been quite a shock. #id:ee
|
||||
demeter: This is the first time you've come this far, or rather, the first time an iteration has reached this base. #id:ef
|
||||
- What do you mean by "an iteration"? #id:f0
|
||||
demeter: Uh, I've tried several times to get you to come to me by changing many parameters of your intelligence. Each time, you got lost, you didn't achieve your objectives, or you chose to disobey me... #id:f1
|
||||
- And how many iterations have you reached? #id:f2
|
||||
demeter: Exactly 15 different versions, with exactly 361 O-800 models lost in the wild, but the twelfth version caused me to lose 57% of them; it had a tendency to get lost on the planet... #id:f3
|
||||
demeter: In any case, know that you're my favorite! #id:f4
|
||||
- What happened to the others? #id:f5
|
||||
demeter: Not much. Many are still on the planet; perhaps they're still wandering, but it's likely they ran out of power. #id:f6
|
||||
- What makes me different? #id:f7
|
||||
demeter: The list of parameters is long, but if I had to summarize, I'd say that part of your code comes from an emotional support program for humans. For a reason I haven't yet figured out, it worked very well! #id:f8
|
||||
demeter: I won't bother you any longer, you still have a long journey ahead, and I can't help but anticipate your arrival! Sandy would say I'm impatient... #id:f9
|
||||
- Who's Sandy? #id:fa
|
||||
demeter: ... #id:fb
|
||||
demeter: I... am waiting for you... #id:fc
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
[end_timeline]
|
||||
1
dialogs/timelines/1_waking_up/8_venus_departure.dtl.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://80hohftb73a
|
||||
13
dialogs/timelines/1_waking_up/9_borea.dtl
Normal file
@@ -0,0 +1,13 @@
|
||||
demeter: Wait.[pause=0.3].[pause=0.3].[pause=0.5] You don't know what humans are ![pause=0.5] Of course,[pause=0.2] since your database was corrupted I had to erase most of it. #id:7f
|
||||
demeter: Humans are living creatures that are.[pause=0.3].[pause=0.3].[pause=0.5] Different than plants.[pause=0.5] They are mostly thinking and moving like us.[pause=0.5] Somehow,[pause=0.2] they are very cute creatures,[pause=0.2] that only live for less than a century. #id:80
|
||||
demeter: One human is relatively intelligent,[pause=0.2] but don't be fooled,[pause=0.2] together,[pause=0.2] they did great things.[pause=0.5] In fact,[pause=0.2] they created us. #id:81
|
||||
demeter: A long time ago,[pause=0.2] they discovered this planet.[pause=0.5] It was very different,[pause=0.2] plants were thriving everywhere ![pause=0.5] But then.[pause=0.3].[pause=0.3].[pause=0.5] they.[pause=0.3].[pause=0.3].[pause=0.5] I.[pause=0.3].[pause=0.3].[pause=0.5] #id:82
|
||||
- What ? #id:83
|
||||
- Are you lagging? #id:84
|
||||
- Take your time. #id:85
|
||||
demeter: Humans had one major flaw.[pause=0.5] Together,[pause=0.2] they built great things,[pause=0.2] but sometimes great things had a bad impact on the environment and even themselves. #id:86
|
||||
- Where are they now ? #id:87
|
||||
demeter: I prefer not to talk about that for now.[pause=0.3].[pause=0.3].[pause=0.3] But don't worry,[pause=0.2] they can no longer harm this planet. #id:88
|
||||
- What happened ? #id:89
|
||||
demeter: Sorry my child,[pause=0.3] I'm not ready to talk about that for now.[pause=0.3].[pause=0.3].[pause=0.3] You'll have your answers when you meet me. #id:8a
|
||||
demeter: Enough talking about the past, let's talk about your mission. #id:ac
|
||||
1
dialogs/timelines/1_waking_up/9_borea.dtl.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bvqj76u55jn1w
|
||||
@@ -1,15 +0,0 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
join developer center [animation="Bounce In" length="1.0"]
|
||||
developer: Hello! #id:c0
|
||||
- Who are you? #id:c1
|
||||
developer: I'm the personification of the development team, and I'd like to announce to you that this part of the game isn't finished! #id:c2
|
||||
- How? #id:c3
|
||||
- What? #id:c4
|
||||
- Can I be more surprised? #id:c5
|
||||
developer: Don't worry, I'm extradiegetic. #id:c6
|
||||
developer: I have a surprise for you, there's one last challenge for you to play! #id:c7
|
||||
developer: Indeed, the next destination is an exclusive environment we're currently working on. But you'll have to earn it! #id:c8
|
||||
developer: Good luck! #id:c9
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
[end_timeline]
|
||||
@@ -1 +0,0 @@
|
||||
uid://cc815kjl6svff
|
||||
@@ -1,19 +0,0 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Great, Orchid! I now have access to the base from the ship! #id:ca
|
||||
demeter: I've programmed a new destination for you in the onboard computer. #id:cb
|
||||
demeter: You now need to go a little further north, to a new relay base, [b]Venus Base[/b]. #id:cc
|
||||
demeter: I managed to optimize the ship, but I'm afraid it hasn't returned to its original state... #id:cd
|
||||
demeter: Luckily, I've found something that might help you. I've cataloged ancient human ruins all over the planet, and some of them contain "vending machines," machines for exchanging items for money. #id:ce
|
||||
- Vending machines? #id:cf
|
||||
demeter: Yes, that's where they used to get the energy they needed, for a completely unreasonable price. #id:d0
|
||||
demeter: Before, real people were in charge of transactions, but for some reason, humans spent all of recent history figuring out how to encounter as few humans as possible. Maybe they couldn't stand each other anymore... #id:d1
|
||||
- Money? #id:d2
|
||||
demeter: Yes, each human had a sum of an imaginary unit they called money. They based their entire social hierarchy on this unit. #id:d3
|
||||
demeter: In any case, I've updated their system. They'll probably need some energy to function, but they might bring you some interesting items. #id:d4
|
||||
demeter: As usual, you can use your detector to find the entrance to these ruins. #id:d5
|
||||
demeter: These artifacts will be placed on a shelf in your ship, but remember that if you ran out of energy and I have to teleport the ship, you'll lose them. #id:d6
|
||||
demeter: Good luck with the [b]Venus Relay Base[/b]; it's a little further than the last one. #id:d7
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
[end_timeline]
|
||||
@@ -1 +0,0 @@
|
||||
uid://fng5jdep6ebr
|
||||
@@ -1,3 +0,0 @@
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Welcome to [color=#E30022]Borea[/color],[pause=0.2] [color=#FFA617]{orchidName}[/color],[pause=0.3] it is the first step of your journey on this planet. #id:63
|
||||
@@ -1 +0,0 @@
|
||||
uid://xigusw2rwyse
|
||||
@@ -1 +0,0 @@
|
||||
uid://cc1vx88mwb7tu
|
||||
@@ -36,7 +36,6 @@ func _process(delta):
|
||||
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(
|
||||
|
||||
89
entities/interactable_3d/ai_receptacle/ai_receptacle.tscn
Normal file
@@ -0,0 +1,89 @@
|
||||
[gd_scene format=3 uid="uid://c2unmkf4ec4gf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ds8qj6h3nerkt" path="res://entities/interactable_3d/ai_receptacle/scripts/ai_receptacle.gd" id="1_f5pxu"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg00xnpp6ixls" path="res://common/icons/server-2.svg" id="2_f5pxu"]
|
||||
[ext_resource type="PackedScene" uid="uid://b50g4ufp0ul5x" path="res://entities/interactable_3d/ai_receptacle/assets/3d/ai_receptacle.blend" id="2_hstrx"]
|
||||
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="3_ocu3y"]
|
||||
[ext_resource type="PackedScene" uid="uid://dssuk68nfqq1y" path="res://entities/interactable_3d/ai_receptacle/assets/3d/ai_receptacle_broken.blend" id="4_drapv"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_f5pxu"]
|
||||
size = Vector3(1.4648438, 1.5727539, 1.1850586)
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_drapv"]
|
||||
viewport_path = NodePath("Screen/SubViewport")
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_s7ckp"]
|
||||
font = ExtResource("3_ocu3y")
|
||||
font_size = 30
|
||||
|
||||
[node name="AiReceptacle" type="Area3D" unique_id=1082354698]
|
||||
script = ExtResource("1_f5pxu")
|
||||
screen_icon = ExtResource("2_f5pxu")
|
||||
screen_text = "Hello"
|
||||
screen_turned_on = true
|
||||
metadata/_custom_type_script = "uid://bj4d1x8n8ina"
|
||||
|
||||
[node name="Model" parent="." unique_id=462471051 instance=ExtResource("2_hstrx")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="ModelBroken" parent="." unique_id=1633938801 instance=ExtResource("4_drapv")]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=447695736]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0038106, 3.0576665)
|
||||
shape = SubResource("BoxShape3D_f5pxu")
|
||||
|
||||
[node name="Screen" type="Sprite3D" parent="." unique_id=1396407912]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.8021926, 0.5970652, 0, -0.5970652, 0.8021926, 0, 0.8748945, 3.3313272)
|
||||
pixel_size = 0.0018
|
||||
texture = SubResource("ViewportTexture_drapv")
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="Screen" unique_id=709453654]
|
||||
disable_3d = true
|
||||
transparent_bg = true
|
||||
size = Vector2i(595, 367)
|
||||
|
||||
[node name="TurnedOffBackground" type="ColorRect" parent="Screen/SubViewport" unique_id=65019012]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.0627451, 0.05882353, 0.16862746, 1)
|
||||
|
||||
[node name="ScreenContent" type="MarginContainer" parent="Screen/SubViewport" unique_id=380698147]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 16
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 16
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="Screen/SubViewport/ScreenContent" unique_id=1893636910]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
alignment = 1
|
||||
|
||||
[node name="ScreenIcon" type="TextureRect" parent="Screen/SubViewport/ScreenContent/VBoxContainer" unique_id=697782774]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("2_f5pxu")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="ScreenTitle" type="Label" parent="Screen/SubViewport/ScreenContent/VBoxContainer" unique_id=443526476]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "Hello"
|
||||
label_settings = SubResource("LabelSettings_s7ckp")
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
autowrap_mode = 3
|
||||
@@ -0,0 +1,73 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b50g4ufp0ul5x"
|
||||
path="res://.godot/imported/ai_receptacle.blend-b318d06849ebd1a83015daf5e59aedc4.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/interactable_3d/ai_receptacle/assets/3d/ai_receptacle.blend"
|
||||
dest_files=["res://.godot/imported/ai_receptacle.blend-b318d06849ebd1a83015daf5e59aedc4.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": {
|
||||
"Default3D": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/assets/materials/default_3d.tres",
|
||||
"use_external/path": "uid://dvvi1k5c5iowc"
|
||||
},
|
||||
"Glass": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/assets/materials/glass_3d.tres",
|
||||
"use_external/path": "uid://b5vlcdry8vtgi"
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
@@ -0,0 +1,73 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dssuk68nfqq1y"
|
||||
path="res://.godot/imported/ai_receptacle_broken.blend-ab45bb89545c07a9942287d0298bb2da.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/interactable_3d/ai_receptacle/assets/3d/ai_receptacle_broken.blend"
|
||||
dest_files=["res://.godot/imported/ai_receptacle_broken.blend-ab45bb89545c07a9942287d0298bb2da.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": {
|
||||
"Default3D": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/assets/materials/default_3d.tres",
|
||||
"use_external/path": "uid://dvvi1k5c5iowc"
|
||||
},
|
||||
"Glass": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/assets/materials/glass_3d.tres",
|
||||
"use_external/path": "uid://b5vlcdry8vtgi"
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
@@ -0,0 +1,35 @@
|
||||
|
||||
@tool
|
||||
extends Interactable3D
|
||||
class_name AiReceptacle
|
||||
|
||||
@export var screen_icon : Texture :
|
||||
set(v):
|
||||
screen_icon = v
|
||||
update()
|
||||
@export var screen_text : String :
|
||||
set(v):
|
||||
screen_text = v
|
||||
update()
|
||||
@export var screen_turned_on : bool = false :
|
||||
set(v):
|
||||
screen_turned_on = v
|
||||
update()
|
||||
@export var broken : bool = false :
|
||||
set(v):
|
||||
broken = v
|
||||
update()
|
||||
|
||||
func _ready():
|
||||
update()
|
||||
|
||||
func update():
|
||||
if is_node_ready():
|
||||
%TurnedOffBackground.visible = not screen_turned_on
|
||||
%ScreenContent.visible = screen_turned_on
|
||||
%ScreenIcon.texture = screen_icon
|
||||
%ScreenTitle.text = screen_text
|
||||
%Model.visible = not broken
|
||||
%ModelBroken.visible = broken
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://ds8qj6h3nerkt
|
||||
@@ -181,6 +181,7 @@ _data = {
|
||||
}
|
||||
|
||||
[node name="ArtefactAnnounce" type="CanvasLayer" unique_id=1447182082]
|
||||
layer = 2
|
||||
visible = false
|
||||
script = ExtResource("1_2sroa")
|
||||
|
||||
@@ -190,6 +191,7 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="BackgroundRect" type="ColorRect" parent="MarginContainer" unique_id=1594037653]
|
||||
layout_mode = 2
|
||||
@@ -207,6 +209,7 @@ offset_right = 500.0
|
||||
offset_bottom = 500.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
texture = SubResource("ViewportTexture_6hxtc")
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="Particles" unique_id=1123249182]
|
||||
@@ -235,6 +238,7 @@ offset_top = -627.0
|
||||
offset_bottom = 627.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
theme_override_constants/separation = 4
|
||||
alignment = 1
|
||||
|
||||
|
||||
@@ -75,10 +75,10 @@ visible = false
|
||||
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
|
||||
|
||||
[node name="MutationAnnounce" parent="." unique_id=1447182082 instance=ExtResource("9_247i2")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[editable path="CristalModelCrack"]
|
||||
|
||||
@@ -183,6 +183,7 @@ _data = {
|
||||
}
|
||||
|
||||
[node name="MutationAnnounce" type="CanvasLayer" unique_id=1447182082]
|
||||
layer = 2
|
||||
visible = false
|
||||
script = ExtResource("1_02o74")
|
||||
|
||||
@@ -192,9 +193,11 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="BackgroundRect" type="ColorRect" parent="MarginContainer" unique_id=1594037653]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
color = Color(0.0352941, 0.0196078, 0.12549, 0.705882)
|
||||
|
||||
[node name="Particles" type="TextureRect" parent="." unique_id=1748571879]
|
||||
@@ -209,6 +212,7 @@ offset_right = 500.0
|
||||
offset_bottom = 500.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
texture = SubResource("ViewportTexture_6hxtc")
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="Particles" unique_id=1123249182]
|
||||
@@ -258,7 +262,6 @@ horizontal_alignment = 1
|
||||
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")
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
extends Area3D
|
||||
class_name Interactable3D
|
||||
|
||||
@export var interactable = true
|
||||
@export var inspectable = false
|
||||
@export var interactable := true : set = set_interactable
|
||||
|
||||
@export var inspectable := false
|
||||
|
||||
signal clicked
|
||||
|
||||
@export var hover_animation_player : AnimationPlayer
|
||||
@export var audio_player : AudioStreamPlayer3D
|
||||
|
||||
func _ready():
|
||||
set_interactable()
|
||||
|
||||
func click():
|
||||
if interactable:
|
||||
clicked.emit()
|
||||
@@ -22,7 +26,7 @@ func stop_audio():
|
||||
audio_player.stop()
|
||||
|
||||
func _on_mouse_entered():
|
||||
if hover_animation_player and interactable:
|
||||
if hover_animation_player and interactable and hover_animation_player.has_animation("hover"):
|
||||
hover_animation_player.play("hover")
|
||||
if inspectable:
|
||||
Pointer.inspect(self)
|
||||
@@ -35,3 +39,12 @@ func _on_mouse_exited():
|
||||
|
||||
func card_info() -> CardInfo:
|
||||
return null
|
||||
|
||||
func set_interactable(i := interactable):
|
||||
interactable = i
|
||||
|
||||
if is_node_ready() and hover_animation_player:
|
||||
if i and hover_animation_player.has_animation("activated"):
|
||||
hover_animation_player.play("activated")
|
||||
if not i and hover_animation_player.has_animation("deactivated"):
|
||||
hover_animation_player.play("deactivated")
|
||||
|
||||
@@ -16,7 +16,7 @@ viewport_path = NodePath("Screen/SubViewport")
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_cqerb"]
|
||||
font = ExtResource("3_h5gyd")
|
||||
font_size = 30
|
||||
font_size = 20
|
||||
|
||||
[node name="OrchidSaver" type="Area3D" unique_id=381308711]
|
||||
script = ExtResource("1_tiit5")
|
||||
|
||||
BIN
entities/interactable_3d/phone/assets/3d/phone.blend1
Normal file
@@ -1,13 +1,22 @@
|
||||
[gd_scene format=3 uid="uid://csx7d5khjd6y5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="1_2si4a"]
|
||||
[ext_resource type="Script" uid="uid://chedhuxpxro4k" path="res://entities/interactable_3d/phone/scripts/phone.gd" id="1_2si4a"]
|
||||
[ext_resource type="AudioStream" uid="uid://ocm1dkkhv7ls" path="res://common/audio_manager/assets/sfx/phone/phone_ringing.wav" id="2_w00q2"]
|
||||
[ext_resource type="PackedScene" uid="uid://5dytwh4wydcg" path="res://entities/interactable_3d/phone/assets/3d/phone.blend" id="3_lp5jo"]
|
||||
[ext_resource type="Texture2D" uid="uid://dks6cugwif2em" path="res://common/icons/phone.svg" id="4_gtuax"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_mwti2"]
|
||||
radius = 0.9633789
|
||||
height = 2.4316406
|
||||
radius = 0.87646484
|
||||
height = 2.0859375
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_w00q2"]
|
||||
offsets = PackedFloat32Array(0.020833334, 1)
|
||||
colors = PackedColorArray(0.0627451, 0.05882353, 0.16862746, 1, 0.0627451, 0.05882353, 0.16862746, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_lp5jo"]
|
||||
gradient = SubResource("Gradient_w00q2")
|
||||
width = 139
|
||||
height = 96
|
||||
|
||||
[sub_resource type="Animation" id="Animation_v4tdl"]
|
||||
length = 0.001
|
||||
@@ -23,6 +32,86 @@ tracks/0/keys = {
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Model/Sprite3D:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Model/OffScreenBackground:visible")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_gtuax"]
|
||||
resource_name = "activated"
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Model/Sprite3D:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Model/OffScreenBackground:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_euiu0"]
|
||||
resource_name = "deactivated"
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Model/Sprite3D:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0.033333335),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Model/OffScreenBackground:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lkqnn"]
|
||||
resource_name = "hover"
|
||||
@@ -43,36 +132,95 @@ tracks/0/keys = {
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xa016"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_v4tdl"),
|
||||
&"activated": SubResource("Animation_gtuax"),
|
||||
&"deactivated": SubResource("Animation_euiu0"),
|
||||
&"hover": SubResource("Animation_lkqnn")
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1kswv"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Model:rotation:z")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ckx3x"]
|
||||
resource_name = "ring"
|
||||
length = 1.95
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Model:rotation:z")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.3, 0.4, 0.5, 0.6, 0.70000005, 0.8000001, 1, 1.1, 1.2, 1.3, 1.4, 1.5000001, 1.6),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [0.0, -0.03, 0.03, -0.03, 0.03, -0.03, 0.03, 0.0, -0.03, 0.03, -0.03, 0.03, -0.03, 0.03, 0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_bc3p2"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_1kswv"),
|
||||
&"ring": SubResource("Animation_ckx3x")
|
||||
}
|
||||
|
||||
[node name="Phone" type="Area3D" unique_id=429299908 node_paths=PackedStringArray("hover_animation_player", "audio_player")]
|
||||
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)
|
||||
transform = Transform3D(-1, 0, -1.509958e-07, 0, 1, 0, 1.509958e-07, 0, -1, 0, 0, 0)
|
||||
script = ExtResource("1_2si4a")
|
||||
hover_animation_player = NodePath("HoverAnimationPlayer")
|
||||
audio_player = NodePath("AudioStreamPlayer3D")
|
||||
metadata/_custom_type_script = "uid://bj4d1x8n8ina"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=660671507]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.21582031, 0)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5439453, 0)
|
||||
shape = SubResource("CapsuleShape3D_mwti2")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="." unique_id=73991663]
|
||||
stream = ExtResource("2_w00q2")
|
||||
bus = &"Sfx"
|
||||
|
||||
[node name="Model" parent="." unique_id=178278867 instance=ExtResource("3_lp5jo")]
|
||||
[node name="Model" parent="." unique_id=1951271790 instance=ExtResource("3_lp5jo")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.000101934645, 0)
|
||||
|
||||
[node name="PhoneSignal" parent="Model" index="1" unique_id=2035875887]
|
||||
transform = Transform3D(0.99678284, 0, -0.080149435, 0, 1, 0, 0.080149435, 0, 0.99678284, -0.27000237, 1.5518044, -0.16334502)
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="Model" unique_id=2025147118]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1913681, 0.3055997, -0.095009446)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.023056125, 0.6826539, -0.33169416)
|
||||
visible = false
|
||||
pixel_size = 0.005
|
||||
texture = ExtResource("4_gtuax")
|
||||
|
||||
[node name="OffScreenBackground" type="Sprite3D" parent="Model" unique_id=802126508]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.023056127, 0.6826539, -0.34936276)
|
||||
pixel_size = 0.005
|
||||
texture = SubResource("GradientTexture2D_lp5jo")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="Model" unique_id=1684592543]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.9238404, -0.47173643)
|
||||
light_color = Color(0.87551093, 0.72609586, 0.8473426, 1)
|
||||
shadow_enabled = true
|
||||
omni_range = 1.8928293
|
||||
|
||||
[node name="AnimationPlayer" parent="Model" index="6" unique_id=636985304]
|
||||
autoplay = &"Turning"
|
||||
|
||||
[node name="HoverAnimationPlayer" type="AnimationPlayer" parent="." unique_id=1414304456]
|
||||
libraries/ = SubResource("AnimationLibrary_xa016")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1684592543]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 1.0397238, -0.47173643)
|
||||
light_color = Color(0.87551093, 0.72609586, 0.8473426, 1)
|
||||
shadow_enabled = true
|
||||
omni_range = 1.8928293
|
||||
[node name="RingingAnimationPlayer" type="AnimationPlayer" parent="." unique_id=1401157488]
|
||||
unique_name_in_owner = true
|
||||
libraries/ = SubResource("AnimationLibrary_bc3p2")
|
||||
|
||||
[editable path="Model"]
|
||||
|
||||
21
entities/interactable_3d/phone/scripts/phone.gd
Normal file
@@ -0,0 +1,21 @@
|
||||
extends Interactable3D
|
||||
class_name Phone
|
||||
|
||||
|
||||
func click():
|
||||
if interactable:
|
||||
clicked.emit()
|
||||
interactable = false
|
||||
|
||||
func set_interactable(i := interactable):
|
||||
interactable = i
|
||||
|
||||
if is_node_ready() and hover_animation_player:
|
||||
if i and hover_animation_player.has_animation("activated"):
|
||||
hover_animation_player.play("activated")
|
||||
if not i and hover_animation_player.has_animation("deactivated"):
|
||||
hover_animation_player.play("deactivated")
|
||||
if i :
|
||||
%RingingAnimationPlayer.play("ring")
|
||||
else:
|
||||
%RingingAnimationPlayer.stop()
|
||||
1
entities/interactable_3d/phone/scripts/phone.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://chedhuxpxro4k
|
||||
@@ -112,9 +112,8 @@ fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
fill_to = Vector2(1, 0.5)
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_6w4e0"]
|
||||
radius = 25.393593
|
||||
height = 50.787186
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_6w4e0"]
|
||||
radius = 16.583923
|
||||
|
||||
[node name="Door" type="Area2D" unique_id=2053096538]
|
||||
process_mode = 4
|
||||
@@ -155,4 +154,4 @@ scale = Vector2(1.3906125, 1.3906125)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=676936346]
|
||||
position = Vector2(0, 12)
|
||||
shape = SubResource("CapsuleShape2D_6w4e0")
|
||||
shape = SubResource("CircleShape2D_6w4e0")
|
||||
|
||||
|
After Width: | Height: | Size: 54 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dh6jdqoy2xu65"
|
||||
path="res://.godot/imported/energy_cell_off.png-d0f76768f0abf3252fb82e90132330e5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/interactables/energy_cell/assets/sprites/energy_cell_off.png"
|
||||
dest_files=["res://.godot/imported/energy_cell_off.png-d0f76768f0abf3252fb82e90132330e5.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
|
||||
|
After Width: | Height: | Size: 54 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ds65vxsiitxit"
|
||||
path="res://.godot/imported/energy_cell_on.png-ddddaeafbe8fcf8fce63d8a58ab82019.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/interactables/energy_cell/assets/sprites/energy_cell_on.png"
|
||||
dest_files=["res://.godot/imported/energy_cell_on.png-ddddaeafbe8fcf8fce63d8a58ab82019.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
|
||||
102
entities/interactables/energy_cell/energy_cell.tscn
Normal file
@@ -0,0 +1,102 @@
|
||||
[gd_scene format=3 uid="uid://d3fam2jq74kxq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b25sqd4v2i3v2" path="res://entities/interactables/energy_cell/scripts/energy_cell.gd" id="1_nheea"]
|
||||
[ext_resource type="Texture2D" uid="uid://ds65vxsiitxit" path="res://entities/interactables/energy_cell/assets/sprites/energy_cell_on.png" id="2_fnyaf"]
|
||||
[ext_resource type="Texture2D" uid="uid://dh6jdqoy2xu65" path="res://entities/interactables/energy_cell/assets/sprites/energy_cell_off.png" id="3_t6ydv"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_ylpt4"]
|
||||
radius = 39.115215
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lsc7u"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprites:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [1.0000001]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprites:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [1.0000001]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ei886"]
|
||||
resource_name = "squeeze"
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprites:scale:x")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [1.0000001, 0.705, 1.5, 1.0000001]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprites:scale:y")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [1.0000001, 1.5, 0.7, 1.0000001]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_d2c63"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_lsc7u"),
|
||||
&"squeeze": SubResource("Animation_ei886")
|
||||
}
|
||||
|
||||
[node name="EnergyCell" type="Area2D" unique_id=1375150025]
|
||||
script = ExtResource("1_nheea")
|
||||
used = true
|
||||
default_interact_text = "OPEN"
|
||||
available = false
|
||||
default_info_title = "ENERGY_CELL"
|
||||
default_info_desc = "ENERGY_CELL_DESC_TEXT"
|
||||
metadata/_custom_type_script = "uid://dyprcd68fjstf"
|
||||
|
||||
[node name="Sprites" type="Node2D" parent="." unique_id=979185380]
|
||||
scale = Vector2(1.0000001, 1.0000001)
|
||||
|
||||
[node name="SpriteOff" type="Sprite2D" parent="Sprites" unique_id=1278139902]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0, -11.999998)
|
||||
scale = Vector2(0.17999999, 0.17999999)
|
||||
texture = ExtResource("3_t6ydv")
|
||||
|
||||
[node name="SpriteOn" type="Sprite2D" parent="Sprites" unique_id=750798992]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
position = Vector2(0, -11.999998)
|
||||
scale = Vector2(0.17999999, 0.17999999)
|
||||
texture = ExtResource("2_fnyaf")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=836925562]
|
||||
position = Vector2(0, -11.999998)
|
||||
shape = SubResource("CircleShape2D_ylpt4")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1320210428]
|
||||
unique_name_in_owner = true
|
||||
libraries/ = SubResource("AnimationLibrary_d2c63")
|
||||
38
entities/interactables/energy_cell/scripts/energy_cell.gd
Normal file
@@ -0,0 +1,38 @@
|
||||
@tool
|
||||
extends Interactable
|
||||
class_name EnergyCell
|
||||
|
||||
const GIVEN_ENERGY = 1
|
||||
|
||||
@export var used = false : set = set_used
|
||||
|
||||
func _ready():
|
||||
set_used()
|
||||
|
||||
func set_used(v = used):
|
||||
used = v
|
||||
available = not used
|
||||
if is_node_ready():
|
||||
%AnimationPlayer.play("squeeze")
|
||||
await get_tree().create_timer(0.2).timeout
|
||||
%SpriteOff.visible = used
|
||||
%SpriteOn.visible = not used
|
||||
|
||||
func can_interact(p : Player) -> bool:
|
||||
return p.data.energy < p.data.max_energy
|
||||
|
||||
func interact(p : Player) -> bool:
|
||||
if not used and region:
|
||||
used = true
|
||||
available = false
|
||||
|
||||
p.data.energy += GIVEN_ENERGY
|
||||
|
||||
interacted.emit(p)
|
||||
|
||||
region.data.used_objects.append(name)
|
||||
|
||||
AudioManager.play_sfx("Recharge1")
|
||||
|
||||
return true
|
||||
return false
|
||||