Compare commits
31 Commits
e03bfc580e
...
a7dcd6d725
| Author | SHA1 | Date | |
|---|---|---|---|
| a7dcd6d725 | |||
| caace67d12 | |||
| b137360fa4 | |||
| 89c04f5d0c | |||
| 5bdf8db609 | |||
| af91337017 | |||
| 69dc4444e3 | |||
| 18ecd5b820 | |||
| 84ea00aae3 | |||
| f7f1d2be2c | |||
| ee16f14176 | |||
| 17f63729e7 | |||
| c9f6bf0162 | |||
| 33a8f022e5 | |||
| 7c66d8b9de | |||
|
|
c0d15dc817 | ||
|
|
91855b5b43 | ||
| 940b3c1553 | |||
| 5aff9eadaa | |||
|
|
1e2563e328 | ||
|
|
52ebf0e7d5 | ||
|
|
1b56a648c3 | ||
| 749238b85b | |||
| 79357982d0 | |||
|
|
8b794ee967 | ||
| 1d6ff78535 | |||
| 7b09f2ba7c | |||
| 7764943714 | |||
| d7ddcf14d1 | |||
| 98e270e9ca | |||
| 1900e3e432 |
@@ -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
|
||||
|
||||
@@ -9,17 +9,18 @@ class_name DialogicNode_NameLabel
|
||||
@export var use_character_color := true
|
||||
|
||||
func _ready() -> void:
|
||||
add_to_group('dialogic_name_label')
|
||||
if hide_when_empty:
|
||||
name_label_root.visible = false
|
||||
text = ""
|
||||
add_to_group('dialogic_name_label')
|
||||
if hide_when_empty:
|
||||
name_label_root.visible = false
|
||||
text = ""
|
||||
|
||||
|
||||
func _set(property, what):
|
||||
if property == 'text' and typeof(what) == TYPE_STRING:
|
||||
text = what
|
||||
if hide_when_empty:
|
||||
name_label_root.visible = !what.is_empty()
|
||||
else:
|
||||
name_label_root.show()
|
||||
return true
|
||||
if property == 'text' and typeof(what) == TYPE_STRING:
|
||||
text = what
|
||||
if hide_when_empty:
|
||||
name_label_root.visible = !what.is_empty()
|
||||
else:
|
||||
name_label_root.show()
|
||||
return true
|
||||
return false
|
||||
|
||||
@@ -27,15 +27,15 @@ signal variable_was_set(info:Dictionary)
|
||||
####################################################################################################
|
||||
|
||||
func clear_game_state(clear_flag:=DialogicGameHandler.ClearFlags.FULL_CLEAR):
|
||||
# loading default variables
|
||||
if ! clear_flag & DialogicGameHandler.ClearFlags.KEEP_VARIABLES:
|
||||
reset()
|
||||
# loading default variables
|
||||
if ! clear_flag & DialogicGameHandler.ClearFlags.KEEP_VARIABLES:
|
||||
reset()
|
||||
|
||||
|
||||
func load_game_state(load_flag:=LoadFlags.FULL_LOAD):
|
||||
if load_flag == LoadFlags.ONLY_DNODES:
|
||||
return
|
||||
dialogic.current_state_info['variables'] = merge_folder(dialogic.current_state_info['variables'], ProjectSettings.get_setting('dialogic/variables', {}).duplicate(true))
|
||||
if load_flag == LoadFlags.ONLY_DNODES:
|
||||
return
|
||||
dialogic.current_state_info['variables'] = merge_folder(dialogic.current_state_info['variables'], ProjectSettings.get_setting('dialogic/variables', {}).duplicate(true))
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -54,226 +54,228 @@ func load_game_state(load_flag:=LoadFlags.FULL_LOAD):
|
||||
## it will try to search for an autoload with the name `Game` and get the value
|
||||
## of `player_name` to replace it.
|
||||
func parse_variables(text:String) -> String:
|
||||
# First some dirty checks to avoid parsing
|
||||
if not '{' in text:
|
||||
return text
|
||||
# First some dirty checks to avoid parsing
|
||||
if not '{' in text:
|
||||
return text
|
||||
|
||||
# Trying to extract the curly brackets from the text
|
||||
var regex := RegEx.new()
|
||||
regex.compile(r"(?<!\\)\{(?<variable>([^{}]|\{[^}]*\})*)\}")
|
||||
# Trying to extract the curly brackets from the text
|
||||
var regex := RegEx.new()
|
||||
regex.compile(r"(?<!\\)\{(?<variable>([^{}]|\{[^}]*\})*)\}")
|
||||
|
||||
var parsed := text.replace('\\{', '{')
|
||||
for result in regex.search_all(text):
|
||||
var value: Variant = get_variable(result.get_string('variable'), "<NOT FOUND>")
|
||||
parsed = parsed.replace("{"+result.get_string('variable')+"}", str(value))
|
||||
var parsed := text.replace('\\{', '{')
|
||||
for result in regex.search_all(text):
|
||||
var value: Variant = get_variable(result.get_string('variable'), "<NOT FOUND>")
|
||||
parsed = parsed.replace("{"+result.get_string('variable')+"}", str(value))
|
||||
|
||||
return parsed
|
||||
return parsed
|
||||
|
||||
|
||||
func set_variable(variable_name: String, value: Variant) -> bool:
|
||||
variable_name = variable_name.trim_prefix('{').trim_suffix('}')
|
||||
variable_name = variable_name.trim_prefix('{').trim_suffix('}')
|
||||
|
||||
# First assume this is a simple dialogic variable
|
||||
if has(variable_name):
|
||||
DialogicUtil._set_value_in_dictionary(variable_name, dialogic.current_state_info['variables'], value)
|
||||
variable_changed.emit({'variable':variable_name, 'new_value':value})
|
||||
return true
|
||||
# First assume this is a simple dialogic variable
|
||||
if has(variable_name):
|
||||
DialogicUtil._set_value_in_dictionary(variable_name, dialogic.current_state_info['variables'], value)
|
||||
variable_changed.emit({'variable':variable_name, 'new_value':value})
|
||||
return true
|
||||
|
||||
# Second assume this is an autoload variable
|
||||
elif '.' in variable_name:
|
||||
var from := variable_name.get_slice('.', 0)
|
||||
var variable := variable_name.trim_prefix(from+'.')
|
||||
# Second assume this is an autoload variable
|
||||
elif '.' in variable_name:
|
||||
var from := variable_name.get_slice('.', 0)
|
||||
var variable := variable_name.trim_prefix(from+'.')
|
||||
|
||||
var autoloads := get_autoloads()
|
||||
var object: Object = null
|
||||
if from in autoloads:
|
||||
object = autoloads[from]
|
||||
while variable.count("."):
|
||||
from = variable.get_slice('.', 0)
|
||||
if from in object and object.get(from) is Object:
|
||||
object = object.get(from)
|
||||
variable = variable.trim_prefix(from+'.')
|
||||
var autoloads := get_autoloads()
|
||||
var object: Object = null
|
||||
if from in autoloads:
|
||||
object = autoloads[from]
|
||||
while variable.count("."):
|
||||
from = variable.get_slice('.', 0)
|
||||
if from in object and object.get(from) is Object:
|
||||
object = object.get(from)
|
||||
variable = variable.trim_prefix(from+'.')
|
||||
|
||||
if object:
|
||||
var sub_idx := ""
|
||||
if '[' in variable:
|
||||
sub_idx = variable.substr(variable.find('['))
|
||||
variable = variable.trim_suffix(sub_idx)
|
||||
sub_idx = sub_idx.trim_prefix('[').trim_suffix(']')
|
||||
if object:
|
||||
var sub_idx := ""
|
||||
if '[' in variable:
|
||||
sub_idx = variable.substr(variable.find('['))
|
||||
variable = variable.trim_suffix(sub_idx)
|
||||
sub_idx = sub_idx.trim_prefix('[').trim_suffix(']')
|
||||
|
||||
if variable in object:
|
||||
match typeof(object.get(variable)):
|
||||
TYPE_ARRAY:
|
||||
if not sub_idx:
|
||||
if typeof(value) == TYPE_ARRAY:
|
||||
object.set(variable, value)
|
||||
return true
|
||||
elif sub_idx.is_valid_float():
|
||||
object.get(variable).remove_at(int(sub_idx))
|
||||
object.get(variable).insert(int(sub_idx), value)
|
||||
return true
|
||||
TYPE_DICTIONARY:
|
||||
if not sub_idx:
|
||||
if typeof(value) == TYPE_DICTIONARY:
|
||||
object.set(variable, value)
|
||||
return true
|
||||
else:
|
||||
object.get(variable).merge({str_to_var(sub_idx):value}, true)
|
||||
return true
|
||||
_:
|
||||
object.set(variable, value)
|
||||
return true
|
||||
if variable in object:
|
||||
match typeof(object.get(variable)):
|
||||
TYPE_ARRAY:
|
||||
if not sub_idx:
|
||||
if typeof(value) == TYPE_ARRAY:
|
||||
object.set(variable, value)
|
||||
return true
|
||||
elif sub_idx.is_valid_float():
|
||||
object.get(variable).remove_at(int(sub_idx))
|
||||
object.get(variable).insert(int(sub_idx), value)
|
||||
return true
|
||||
TYPE_DICTIONARY:
|
||||
if not sub_idx:
|
||||
if typeof(value) == TYPE_DICTIONARY:
|
||||
object.set(variable, value)
|
||||
return true
|
||||
else:
|
||||
object.get(variable).merge({str_to_var(sub_idx):value}, true)
|
||||
return true
|
||||
_:
|
||||
object.set(variable, value)
|
||||
return true
|
||||
|
||||
printerr("[Dialogic] Tried setting non-existant variable '"+variable_name+"'.")
|
||||
return false
|
||||
printerr("[Dialogic] Tried setting non-existant variable '"+variable_name+"'.")
|
||||
return false
|
||||
|
||||
|
||||
func get_variable(variable_path:String, default: Variant = null, no_warning := false) -> Variant:
|
||||
if variable_path.begins_with('{') and variable_path.ends_with('}') and variable_path.count('{') == 1:
|
||||
variable_path = variable_path.trim_prefix('{').trim_suffix('}')
|
||||
if variable_path.begins_with('{') and variable_path.ends_with('}') and variable_path.count('{') == 1:
|
||||
variable_path = variable_path.trim_prefix('{').trim_suffix('}')
|
||||
|
||||
# First assume this is just a single variable
|
||||
var value: Variant = DialogicUtil._get_value_in_dictionary(variable_path, dialogic.current_state_info['variables'])
|
||||
if value != null:
|
||||
return value
|
||||
# First assume this is just a single variable
|
||||
var value: Variant = DialogicUtil._get_value_in_dictionary(variable_path, dialogic.current_state_info['variables'])
|
||||
if value != null:
|
||||
return value
|
||||
|
||||
# Second assume this is an expression.
|
||||
else:
|
||||
value = dialogic.Expressions.execute_string(variable_path, null, no_warning)
|
||||
if value != null:
|
||||
return value
|
||||
# Second assume this is an expression.
|
||||
else:
|
||||
value = dialogic.Expressions.execute_string(variable_path, null, no_warning)
|
||||
if value != null:
|
||||
return value
|
||||
|
||||
# If everything fails, tell the user and return the default
|
||||
if not no_warning:
|
||||
printerr("[Dialogic] Failed parsing variable/expression '"+variable_path+"'.")
|
||||
return default
|
||||
# If everything fails, tell the user and return the default
|
||||
if not no_warning:
|
||||
printerr("[Dialogic] Failed parsing variable/expression '"+variable_path+"'.")
|
||||
return default
|
||||
|
||||
|
||||
## Resets all variables or a specific variable to the value(s) defined in the variable editor
|
||||
func reset(variable:="") -> void:
|
||||
if variable.is_empty():
|
||||
dialogic.current_state_info['variables'] = ProjectSettings.get_setting("dialogic/variables", {}).duplicate(true)
|
||||
else:
|
||||
DialogicUtil._set_value_in_dictionary(variable, dialogic.current_state_info['variables'], DialogicUtil._get_value_in_dictionary(variable, ProjectSettings.get_setting('dialogic/variables', {})))
|
||||
if variable.is_empty():
|
||||
dialogic.current_state_info['variables'] = ProjectSettings.get_setting("dialogic/variables", {}).duplicate(true)
|
||||
else:
|
||||
DialogicUtil._set_value_in_dictionary(variable, dialogic.current_state_info['variables'], DialogicUtil._get_value_in_dictionary(variable, ProjectSettings.get_setting('dialogic/variables', {})))
|
||||
|
||||
|
||||
## Returns true if a variable with the given path exists
|
||||
func has(variable:="") -> bool:
|
||||
return DialogicUtil._get_value_in_dictionary(variable, dialogic.current_state_info['variables']) != null
|
||||
return DialogicUtil._get_value_in_dictionary(variable, dialogic.current_state_info['variables']) != null
|
||||
|
||||
|
||||
|
||||
## Allows to set dialogic built-in variables
|
||||
func _set(property, value) -> bool:
|
||||
property = str(property)
|
||||
var vars: Dictionary = dialogic.current_state_info['variables']
|
||||
if property in vars.keys():
|
||||
if typeof(vars[property]) != TYPE_DICTIONARY:
|
||||
vars[property] = value
|
||||
return true
|
||||
if value is VariableFolder:
|
||||
return true
|
||||
return false
|
||||
property = str(property)
|
||||
var vars: Dictionary = dialogic.current_state_info['variables']
|
||||
if property in vars.keys():
|
||||
if typeof(vars[property]) != TYPE_DICTIONARY:
|
||||
vars[property] = value
|
||||
return true
|
||||
if value is VariableFolder:
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
## Allows to get dialogic built-in variables
|
||||
func _get(property):
|
||||
property = str(property)
|
||||
if property in dialogic.current_state_info['variables'].keys():
|
||||
if typeof(dialogic.current_state_info['variables'][property]) == TYPE_DICTIONARY:
|
||||
return VariableFolder.new(dialogic.current_state_info['variables'][property], property, self)
|
||||
else:
|
||||
return DialogicUtil.logical_convert(dialogic.current_state_info['variables'][property])
|
||||
property = str(property)
|
||||
if property in dialogic.current_state_info['variables'].keys():
|
||||
if typeof(dialogic.current_state_info['variables'][property]) == TYPE_DICTIONARY:
|
||||
return VariableFolder.new(dialogic.current_state_info['variables'][property], property, self)
|
||||
else:
|
||||
return DialogicUtil.logical_convert(dialogic.current_state_info['variables'][property])
|
||||
return null
|
||||
|
||||
|
||||
func folders() -> Array:
|
||||
var result := []
|
||||
for i in dialogic.current_state_info['variables'].keys():
|
||||
if dialogic.current_state_info['variables'][i] is Dictionary:
|
||||
result.append(VariableFolder.new(dialogic.current_state_info['variables'][i], i, self))
|
||||
return result
|
||||
var result := []
|
||||
for i in dialogic.current_state_info['variables'].keys():
|
||||
if dialogic.current_state_info['variables'][i] is Dictionary:
|
||||
result.append(VariableFolder.new(dialogic.current_state_info['variables'][i], i, self))
|
||||
return result
|
||||
|
||||
|
||||
func variables(_absolute:=false) -> Array:
|
||||
var result := []
|
||||
for i in dialogic.current_state_info['variables'].keys():
|
||||
if not dialogic.current_state_info['variables'][i] is Dictionary:
|
||||
result.append(i)
|
||||
return result
|
||||
var result := []
|
||||
for i in dialogic.current_state_info['variables'].keys():
|
||||
if not dialogic.current_state_info['variables'][i] is Dictionary:
|
||||
result.append(i)
|
||||
return result
|
||||
#endregion
|
||||
|
||||
#region HELPERS
|
||||
################################################################################
|
||||
|
||||
func get_autoloads() -> Dictionary:
|
||||
var autoloads := {}
|
||||
for node: Node in get_tree().root.get_children():
|
||||
autoloads[node.name] = node
|
||||
return autoloads
|
||||
var autoloads := {}
|
||||
for node: Node in get_tree().root.get_children():
|
||||
autoloads[node.name] = node
|
||||
return autoloads
|
||||
|
||||
|
||||
func merge_folder(new:Dictionary, defs:Dictionary) -> Dictionary:
|
||||
# also go through all groups in this folder
|
||||
for x in new.keys():
|
||||
if x in defs and typeof(new[x]) == TYPE_DICTIONARY:
|
||||
new[x] = merge_folder(new[x], defs[x])
|
||||
# add all new variables
|
||||
for x in defs.keys():
|
||||
if not x in new:
|
||||
new[x] = defs[x]
|
||||
return new
|
||||
# also go through all groups in this folder
|
||||
for x in new.keys():
|
||||
if x in defs and typeof(new[x]) == TYPE_DICTIONARY:
|
||||
new[x] = merge_folder(new[x], defs[x])
|
||||
# add all new variables
|
||||
for x in defs.keys():
|
||||
if not x in new:
|
||||
new[x] = defs[x]
|
||||
return new
|
||||
|
||||
#endregion
|
||||
|
||||
#region VARIABLE FOLDER
|
||||
################################################################################
|
||||
class VariableFolder:
|
||||
var data := {}
|
||||
var path := ""
|
||||
var outside: DialogicSubsystem
|
||||
var data := {}
|
||||
var path := ""
|
||||
var outside: DialogicSubsystem
|
||||
|
||||
func _init(_data:Dictionary, _path:String, _outside:DialogicSubsystem):
|
||||
data = _data
|
||||
path = _path
|
||||
outside = _outside
|
||||
func _init(_data:Dictionary, _path:String, _outside:DialogicSubsystem):
|
||||
data = _data
|
||||
path = _path
|
||||
outside = _outside
|
||||
|
||||
|
||||
func _get(property:StringName):
|
||||
property = str(property)
|
||||
if property in data:
|
||||
if typeof(data[property]) == TYPE_DICTIONARY:
|
||||
return VariableFolder.new(data[property], path+"."+property, outside)
|
||||
else:
|
||||
return DialogicUtil.logical_convert(data[property])
|
||||
func _get(property:StringName):
|
||||
property = str(property)
|
||||
if property in data:
|
||||
if typeof(data[property]) == TYPE_DICTIONARY:
|
||||
return VariableFolder.new(data[property], path+"."+property, outside)
|
||||
else:
|
||||
return DialogicUtil.logical_convert(data[property])
|
||||
return null
|
||||
|
||||
|
||||
func _set(property:StringName, value:Variant) -> bool:
|
||||
property = str(property)
|
||||
if not value is VariableFolder:
|
||||
DialogicUtil._set_value_in_dictionary(path+"."+property, outside.dialogic.current_state_info['variables'], value)
|
||||
return true
|
||||
func _set(property:StringName, value:Variant) -> bool:
|
||||
property = str(property)
|
||||
if not value is VariableFolder:
|
||||
DialogicUtil._set_value_in_dictionary(path+"."+property, outside.dialogic.current_state_info['variables'], value)
|
||||
return true
|
||||
|
||||
|
||||
func has(key:String) -> bool:
|
||||
return key in data
|
||||
func has(key:String) -> bool:
|
||||
return key in data
|
||||
|
||||
|
||||
func folders() -> Array:
|
||||
var result := []
|
||||
for i in data.keys():
|
||||
if data[i] is Dictionary:
|
||||
result.append(VariableFolder.new(data[i], path+"."+i, outside))
|
||||
return result
|
||||
func folders() -> Array:
|
||||
var result := []
|
||||
for i in data.keys():
|
||||
if data[i] is Dictionary:
|
||||
result.append(VariableFolder.new(data[i], path+"."+i, outside))
|
||||
return result
|
||||
|
||||
|
||||
func variables(absolute:=false) -> Array:
|
||||
var result := []
|
||||
for i in data.keys():
|
||||
if not data[i] is Dictionary:
|
||||
if absolute:
|
||||
result.append(path+'.'+i)
|
||||
else:
|
||||
result.append(i)
|
||||
return result
|
||||
func variables(absolute:=false) -> Array:
|
||||
var result := []
|
||||
for i in data.keys():
|
||||
if not data[i] is Dictionary:
|
||||
if absolute:
|
||||
result.append(path+'.'+i)
|
||||
else:
|
||||
result.append(i)
|
||||
return result
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -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
|
||||
|
||||
BIN
common/audio_manager/assets/morceaux/histoire/subterra.ogg
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bdsghxlbtduuy"
|
||||
path="res://.godot/imported/subterra.ogg-458c2f15c134af211d5a71b5819758c5.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/morceaux/histoire/subterra.ogg"
|
||||
dest_files=["res://.godot/imported/subterra.ogg-458c2f15c134af211d5a71b5819758c5.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
common/audio_manager/assets/sfx/fin_de_map/fin_de_map.ogg
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://du3hfjbaoyc8"
|
||||
path="res://.godot/imported/fin_de_map.ogg-62fbcdd24bc4df66b50e9a969579e8d9.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map.ogg"
|
||||
dest_files=["res://.godot/imported/fin_de_map.ogg-62fbcdd24bc4df66b50e9a969579e8d9.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bfhab51qe80j5"
|
||||
path="res://.godot/imported/fin_de_map_cristal_1.wav-fbc2aabbedcf9b9ea4de792270616879.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map_cristal_1.wav"
|
||||
dest_files=["res://.godot/imported/fin_de_map_cristal_1.wav-fbc2aabbedcf9b9ea4de792270616879.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://cr6y4e0p3xrqv"
|
||||
path="res://.godot/imported/fin_de_map_cristal_2.wav-22f78a6101de5044c9eb27302000d841.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map_cristal_2.wav"
|
||||
dest_files=["res://.godot/imported/fin_de_map_cristal_2.wav-22f78a6101de5044c9eb27302000d841.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://ccppo3l1vyd08"
|
||||
path="res://.godot/imported/fin_de_map_cristal_3.wav-08ca119096dca7f1ce13ef8a0fc9b262.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map_cristal_3.wav"
|
||||
dest_files=["res://.godot/imported/fin_de_map_cristal_3.wav-08ca119096dca7f1ce13ef8a0fc9b262.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://wphcqemoy810"
|
||||
path="res://.godot/imported/fin_de_map_cristal_4.wav-b746d9213d33d907760d7149452e1cfd.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map_cristal_4.wav"
|
||||
dest_files=["res://.godot/imported/fin_de_map_cristal_4.wav-b746d9213d33d907760d7149452e1cfd.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://v2snsj54xlkw"
|
||||
path="res://.godot/imported/fin_de_map_cristal_5.wav-03f398571aece8e59a223be04924d6a1.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map_cristal_5.wav"
|
||||
dest_files=["res://.godot/imported/fin_de_map_cristal_5.wav-03f398571aece8e59a223be04924d6a1.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bvhnpk7pbh75t"
|
||||
path="res://.godot/imported/fin_de_map_cristal_6.wav-55680ff3c48778e28de53ad22c902751.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/fin_de_map_cristal_6.wav"
|
||||
dest_files=["res://.godot/imported/fin_de_map_cristal_6.wav-55680ff3c48778e28de53ad22c902751.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
common/audio_manager/assets/sfx/fin_de_map/tremblement.mp3
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="mp3"
|
||||
type="AudioStreamMP3"
|
||||
uid="uid://c1jg6vbsd1y00"
|
||||
path="res://.godot/imported/tremblement.mp3-2f1079501efc61a933c525d8b73ff10b.mp3str"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/fin_de_map/tremblement.mp3"
|
||||
dest_files=["res://.godot/imported/tremblement.mp3-2f1079501efc61a933c525d8b73ff10b.mp3str"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
common/audio_manager/assets/sfx/phone/phone_call.wav
Normal file
24
common/audio_manager/assets/sfx/phone/phone_call.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://budu0cym6ximv"
|
||||
path="res://.godot/imported/phone_call.wav-5f6468b6c2e194f4077a966b2b8ed027.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/phone/phone_call.wav"
|
||||
dest_files=["res://.godot/imported/phone_call.wav-5f6468b6c2e194f4077a966b2b8ed027.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
common/audio_manager/assets/sfx/phone/pickaxe_cave_1.wav
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://c18orgaa5yect"
|
||||
path="res://.godot/imported/pickaxe_cave_1.wav-c2db6fad48f4457a7e47ef7fabdce2ca.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/phone/pickaxe_cave_1.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_cave_1.wav-c2db6fad48f4457a7e47ef7fabdce2ca.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
common/audio_manager/assets/sfx/phone/pickaxe_cave_2.wav
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://cbkg6v76a1d1q"
|
||||
path="res://.godot/imported/pickaxe_cave_2.wav-72432422e9b9eac863b31c5dda4262c9.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/phone/pickaxe_cave_2.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_cave_2.wav-72432422e9b9eac863b31c5dda4262c9.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
common/audio_manager/assets/sfx/pickaxe/pickaxe_cave_1.wav
Normal file
@@ -2,13 +2,13 @@
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://3c4nxjasebyk"
|
||||
path="res://.godot/imported/pickaxe_1_reverb.wav-8d6172bc1e5c2f43ec5b5cf869d5b6e3.sample"
|
||||
uid="uid://x36rvb4eso8q"
|
||||
path="res://.godot/imported/pickaxe_cave_1.wav-5365b9250c03fe13766ad32a821704fa.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_1_reverb.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_1_reverb.wav-8d6172bc1e5c2f43ec5b5cf869d5b6e3.sample"]
|
||||
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_cave_1.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_cave_1.wav-5365b9250c03fe13766ad32a821704fa.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
BIN
common/audio_manager/assets/sfx/pickaxe/pickaxe_cave_2.wav
Normal file
@@ -2,13 +2,13 @@
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bu278eqn8krnb"
|
||||
path="res://.godot/imported/pickaxe_3_reverb.wav-d3e3d8b6b50a16c6757536f43c8c6ccd.sample"
|
||||
uid="uid://dh3oho0pis6jv"
|
||||
path="res://.godot/imported/pickaxe_cave_2.wav-bb5e1c82ba8ffd44758505ce286a04a9.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_3_reverb.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_3_reverb.wav-d3e3d8b6b50a16c6757536f43c8c6ccd.sample"]
|
||||
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_cave_2.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_cave_2.wav-bb5e1c82ba8ffd44758505ce286a04a9.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bs5ldhabymm5p"
|
||||
path="res://.godot/imported/pickaxe_2_reverb.wav-c953afb7e49205a0f4377738e1135a5b.sample"
|
||||
uid="uid://c6jdmdjncamcu"
|
||||
path="res://.godot/imported/pickaxe_cave_finalblow.wav-ce8ca7f063b31d6564d593b5a84e7560.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_2_reverb.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_2_reverb.wav-c953afb7e49205a0f4377738e1135a5b.sample"]
|
||||
source_file="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_cave_finalblow.wav"
|
||||
dest_files=["res://.godot/imported/pickaxe_cave_finalblow.wav-ce8ca7f063b31d6564d593b5a84e7560.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
BIN
common/audio_manager/assets/sfx/tractor_beam/drop.wav
Normal file
24
common/audio_manager/assets/sfx/tractor_beam/drop.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://cam4vv1am40dy"
|
||||
path="res://.godot/imported/drop.wav-b76e8a2f6f5f0c41737e74496f01ceaa.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/tractor_beam/drop.wav"
|
||||
dest_files=["res://.godot/imported/drop.wav-b76e8a2f6f5f0c41737e74496f01ceaa.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
common/audio_manager/assets/sfx/tractor_beam/take.wav
Normal file
24
common/audio_manager/assets/sfx/tractor_beam/take.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bdrdnli5k27a2"
|
||||
path="res://.godot/imported/take.wav-d597c4daf1adbf3b061372ab36ef9940.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/tractor_beam/take.wav"
|
||||
dest_files=["res://.godot/imported/take.wav-d597c4daf1adbf3b061372ab36ef9940.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
@@ -19,10 +19,10 @@
|
||||
[ext_resource type="AudioStream" uid="uid://kqbqhwhkv7o3" path="res://common/audio_manager/assets/morceaux/niveau/mines_waiting.ogg" id="11_ngi21"]
|
||||
[ext_resource type="AudioStream" uid="uid://of68i2k1g6y2" path="res://common/audio_manager/assets/morceaux/niveau/desert_phase_1.ogg" id="11_yjs51"]
|
||||
[ext_resource type="AudioStream" uid="uid://b8inedx4yjslw" path="res://common/audio_manager/assets/sfx/drop/drop_1.wav" id="12_4hp8f"]
|
||||
[ext_resource type="AudioStream" uid="uid://bdsghxlbtduuy" path="res://common/audio_manager/assets/morceaux/histoire/subterra.ogg" id="12_mrdk3"]
|
||||
[ext_resource type="AudioStream" uid="uid://cjbpfnlwcpjh0" path="res://common/audio_manager/assets/morceaux/niveau/forest_waiting.ogg" id="12_xmumj"]
|
||||
[ext_resource type="AudioStream" uid="uid://8nmr5vifkt1f" path="res://common/audio_manager/assets/sfx/harvest/harvest_1.wav" id="13_xoaox"]
|
||||
[ext_resource type="AudioStream" uid="uid://dgkdcq4j6fe3o" path="res://common/audio_manager/assets/sfx/harvest/harvest_2.wav" id="14_b5bgj"]
|
||||
[ext_resource type="AudioStream" uid="uid://crncg0mdx1fdw" path="res://common/audio_manager/assets/morceaux/demo/ending.ogg" id="14_h3tkm"]
|
||||
[ext_resource type="AudioStream" uid="uid://dsfqhcrard8o4" path="res://common/audio_manager/assets/morceaux/niveau/desert_phase_2.ogg" id="14_lwdce"]
|
||||
[ext_resource type="AudioStream" uid="uid://eh3dbuxu5qtw" path="res://common/audio_manager/assets/sfx/harvest/harvest_3.wav" id="15_ynvb4"]
|
||||
[ext_resource type="AudioStream" uid="uid://bown4yipeef8l" path="res://common/audio_manager/assets/sfx/harvest/harvest_4.wav" id="16_obeji"]
|
||||
@@ -44,8 +44,6 @@
|
||||
[ext_resource type="AudioStream" uid="uid://ch8wnrckanydg" path="res://common/audio_manager/assets/morceaux/histoire/meeting_demeter.ogg" id="22_mrdk3"]
|
||||
[ext_resource type="AudioStream" uid="uid://bnwtgp8t46xwc" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_6.wav" id="23_ge2sc"]
|
||||
[ext_resource type="AudioStream" uid="uid://bp3wsncvda5gl" path="res://common/audio_manager/assets/sfx/recharge/recharge_capsule_7.wav" id="24_yr73o"]
|
||||
[ext_resource type="AudioStream" uid="uid://b4jx8rflw7dss" path="res://common/audio_manager/assets/sfx/phone/phone_ringing_Astra.wav" id="27_0rjel"]
|
||||
[ext_resource type="AudioStream" uid="uid://ocm1dkkhv7ls" path="res://common/audio_manager/assets/sfx/phone/phone_ringing.wav" id="28_3dfjn"]
|
||||
[ext_resource type="AudioStream" uid="uid://8juy5ev3rdfh" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_1.wav" id="29_ngi21"]
|
||||
[ext_resource type="AudioStream" uid="uid://su387eovtrsg" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_2.wav" id="30_xmumj"]
|
||||
[ext_resource type="AudioStream" uid="uid://bp6mtpqjf4txo" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_3.wav" id="31_spekb"]
|
||||
@@ -64,12 +62,15 @@
|
||||
[ext_resource type="AudioStream" uid="uid://dd1uu6dd6sloe" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_3.wav" id="45_mur2l"]
|
||||
[ext_resource type="AudioStream" uid="uid://eq7wufwnolto" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_4.wav" id="46_t0v4u"]
|
||||
[ext_resource type="AudioStream" uid="uid://cv7sj8n5oo1i8" path="res://common/audio_manager/assets/sfx/screen_bip/screen_bip.wav" id="47_svctq"]
|
||||
[ext_resource type="AudioStream" uid="uid://budu0cym6ximv" path="res://common/audio_manager/assets/sfx/phone/phone_call.wav" id="48_ipd1r"]
|
||||
[ext_resource type="AudioStream" uid="uid://sgwvpxiul5x5" path="res://common/audio_manager/assets/sfx/ship_exit/ship_exit.wav" id="48_j8acj"]
|
||||
[ext_resource type="AudioStream" uid="uid://ca0wonha334cl" path="res://common/audio_manager/assets/sfx/teleportation/teleport.wav" id="50_rlnfe"]
|
||||
[ext_resource type="AudioStream" uid="uid://cv5avkd3qekt7" path="res://common/audio_manager/assets/sfx/movement/movement.wav" id="51_iyxkn"]
|
||||
[ext_resource type="AudioStream" uid="uid://53ixfbcd5qwu" path="res://common/audio_manager/assets/sfx/holo/holo_appear.wav" id="63_aedoe"]
|
||||
[ext_resource type="AudioStream" uid="uid://dsijqgnnadgem" path="res://common/audio_manager/assets/sfx/holo/holo_disappear.wav" id="64_ge2sc"]
|
||||
[ext_resource type="AudioStream" uid="uid://dscyqjujj1com" path="res://common/audio_manager/assets/sfx/unlock_tool/unlock_tool.wav" id="64_yr73o"]
|
||||
[ext_resource type="AudioStream" uid="uid://bdrdnli5k27a2" path="res://common/audio_manager/assets/sfx/tractor_beam/take.wav" id="69_5rlid"]
|
||||
[ext_resource type="AudioStream" uid="uid://cam4vv1am40dy" path="res://common/audio_manager/assets/sfx/tractor_beam/drop.wav" id="70_gfbcu"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_6o1yh"]
|
||||
streams_count = 3
|
||||
@@ -131,6 +132,7 @@ script = ExtResource("1_0tvca")
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Cave" type="AudioStreamPlayer" parent="Ambiances" unique_id=71769481]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("2_ge2sc")
|
||||
volume_db = -7.195
|
||||
pitch_scale = 0.5
|
||||
@@ -185,6 +187,10 @@ unique_name_in_owner = true
|
||||
stream = ExtResource("8_tuvql")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="Subterra" type="AudioStreamPlayer" parent="Ambiances" unique_id=2019011683]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("12_mrdk3")
|
||||
|
||||
[node name="Musics" type="Node" parent="." unique_id=1450527710]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -241,11 +247,6 @@ stream = ExtResource("7_tuvql")
|
||||
volume_db = -5.0
|
||||
bus = &"Music"
|
||||
|
||||
[node name="Demo_end" type="AudioStreamPlayer" parent="Musics" unique_id=261817716]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("14_h3tkm")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="Meeting_demeter" type="AudioStreamPlayer" parent="Musics" unique_id=1066359159]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("22_mrdk3")
|
||||
@@ -313,7 +314,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")
|
||||
@@ -324,11 +325,11 @@ stream = ExtResource("22_btfwx")
|
||||
volume_db = 3.627
|
||||
|
||||
[node name="Astra_phone_call" type="AudioStreamPlayer" parent="Sfx" unique_id=721344636]
|
||||
stream = ExtResource("27_0rjel")
|
||||
stream = ExtResource("48_ipd1r")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="Phone_call" type="AudioStreamPlayer" parent="Sfx" unique_id=1668278453]
|
||||
stream = ExtResource("28_3dfjn")
|
||||
stream = ExtResource("48_ipd1r")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="PlantPoint" type="AudioStreamPlayer" parent="Sfx" unique_id=2044025024]
|
||||
@@ -357,7 +358,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")
|
||||
@@ -390,3 +391,11 @@ volume_db = -11.0
|
||||
[node name="Unlock_tool" type="AudioStreamPlayer" parent="Sfx" unique_id=667077616]
|
||||
stream = ExtResource("64_yr73o")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="TractorBeamTake" type="AudioStreamPlayer" parent="Sfx" unique_id=1321980229]
|
||||
stream = ExtResource("69_5rlid")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="TractorBeamDrop" type="AudioStreamPlayer" parent="Sfx" unique_id=2023233451]
|
||||
stream = ExtResource("70_gfbcu")
|
||||
volume_db = -5.0
|
||||
|
||||
@@ -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)
|
||||
@@ -207,12 +207,13 @@ func change_ambiances_volume(db_change := 0., fade := DEFAULT_FADE_TIME):
|
||||
|
||||
# Joue un
|
||||
# - player_name : Nom de la Node dans la scène Godot à jouer
|
||||
func play_sfx(sfx_name : String):
|
||||
func play_sfx(sfx_name : String, pitch = 1.):
|
||||
var player := %Sfx.find_child(sfx_name) as AudioStreamPlayer
|
||||
if player:
|
||||
player.play()
|
||||
else:
|
||||
printerr("Sfx %s not found" % sfx_name)
|
||||
|
||||
|
||||
|
||||
# ----------------- Partie Technique (pas touche Niels ;D) ----------------
|
||||
|
||||
@@ -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()
|
||||
]
|
||||
|
||||
@@ -64,6 +64,10 @@ func generate_next_run_point(last_modifiers : Array[String] = []) -> RunPoint:
|
||||
challenge_modifiers.pick_random(),
|
||||
benefic_modifiers.pick_random()
|
||||
] as Array[RegionModifier]
|
||||
elif story_step.is_run_point_dangerous(next_level):
|
||||
region_parameter.modifiers = [
|
||||
challenge_modifiers.pick_random()
|
||||
] as Array[RegionModifier]
|
||||
else:
|
||||
region_parameter.modifiers = [
|
||||
normal_modifiers.pick_random()
|
||||
@@ -96,6 +100,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 +119,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:
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ signal language_changed(settings : SettingsData)
|
||||
signal sound_changed(settings : SettingsData)
|
||||
signal video_changed(settings : SettingsData)
|
||||
signal game_changed(settings : SettingsData)
|
||||
signal fov_changed(value : float)
|
||||
|
||||
#region ------------------ Language ------------------
|
||||
|
||||
@@ -50,13 +51,30 @@ const AVAILABLE_LANGUAGES_LABEL = [
|
||||
full_screen = v
|
||||
video_changed.emit(self)
|
||||
|
||||
@export var ui_size : float = 1. :
|
||||
set(v):
|
||||
ui_size = v
|
||||
video_changed.emit(self)
|
||||
|
||||
#region ------------------ Controls ------------------
|
||||
|
||||
|
||||
|
||||
@export var action_remapped : Array[String] = []
|
||||
@export var input_remapped : Array[InputEvent] = []
|
||||
|
||||
@export var fov := 75. :
|
||||
set(v):
|
||||
fov = v
|
||||
fov_changed.emit(fov)
|
||||
|
||||
|
||||
#region ------------------ Game ------------------
|
||||
|
||||
@export var auto_pickup := true
|
||||
|
||||
@export var mouse_sensivity := 0.2
|
||||
|
||||
const MAX_ZOOM = 2.
|
||||
const MIN_ZOOM = 0.5
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
uid://da8kqgl0xnkpi
|
||||
@@ -22,7 +22,7 @@ func is_run_finished(level : int) -> bool:
|
||||
return level == get_region_sequence_length() - 1
|
||||
|
||||
func get_region_sequence_length() -> int:
|
||||
return 6
|
||||
return 7
|
||||
|
||||
func get_first_vending_machine_occurence(_level : int) -> int:
|
||||
return 2
|
||||
@@ -37,7 +37,7 @@ func get_cave_occurence(_level : int) -> int:
|
||||
return 3
|
||||
|
||||
func get_challenge_chance(_level : int) -> float:
|
||||
return 0.3
|
||||
return 0.15
|
||||
|
||||
func get_run_point_number(level : int) -> int:
|
||||
if is_run_finished(level):
|
||||
@@ -47,6 +47,9 @@ func get_run_point_number(level : int) -> int:
|
||||
func get_charge_number(_level : int) -> int:
|
||||
return 10
|
||||
|
||||
func is_run_point_dangerous(level : int) -> bool:
|
||||
return level == get_region_sequence_length() - 2
|
||||
|
||||
func get_objective_for_region(level : int) -> int:
|
||||
match level:
|
||||
1: return 10
|
||||
@@ -62,12 +65,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 +77,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()
|
||||
@@ -20,7 +20,7 @@ func get_cave_occurence(_level : int) -> int:
|
||||
return 2
|
||||
|
||||
func get_region_sequence_length() -> int:
|
||||
return 4
|
||||
return 5
|
||||
|
||||
func get_objective_for_region(level : int) -> int:
|
||||
match level:
|
||||
@@ -2,8 +2,9 @@ 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 VENDING_MACHINE_DIALOG_PATH = "res://dialogs/timelines/1_waking_up/6_vending_machine_presentation.dtl"
|
||||
const VENUS_ARRIVAL_DIALOG_PATH = "res://dialogs/timelines/1_waking_up/7_venus_arrival.dtl"
|
||||
|
||||
func get_respawn_scene() -> Scene:
|
||||
return RelayBaseScene.new(
|
||||
@@ -21,12 +22,11 @@ func get_destination_scene() -> Scene:
|
||||
"002"
|
||||
)
|
||||
|
||||
func get_first_vending_machine_occurence(_level : int) -> int:
|
||||
return 1
|
||||
|
||||
func get_ship_dialog_path(level : int, ship_in_space := true) -> String:
|
||||
if level == 0:
|
||||
return MERCURY_DEPARTURE_DIALOG_PATH
|
||||
if level == 1:
|
||||
return VENDING_MACHINE_DIALOG_PATH
|
||||
if ship_in_space and is_run_finished(level + 1):
|
||||
return VENUS_ARRIVAL_DIALOG_PATH
|
||||
return ""
|
||||
@@ -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,10 +1,9 @@
|
||||
extends Node
|
||||
|
||||
const SAVE_GAME_LOCATION = "user://stw_beta_save.tres"
|
||||
const SAVE_GAME_LOCATION = "user://stw_playtest_2_save.tres"
|
||||
const SAVE_SETTINGS_LOCATION = "user://stw_settings.tres"
|
||||
|
||||
var game_loaded = false
|
||||
|
||||
signal game_loaded
|
||||
signal game_data_updated(g : GameData)
|
||||
|
||||
var game_data : GameData :
|
||||
@@ -18,8 +17,9 @@ 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()
|
||||
game_loaded.emit()
|
||||
|
||||
return game_data
|
||||
|
||||
@@ -81,6 +81,10 @@ func update_language_settings(s : SettingsData = settings_data):
|
||||
|
||||
func update_video_settings(s : SettingsData = settings_data):
|
||||
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN if s.full_screen else DisplayServer.WINDOW_MODE_WINDOWED)
|
||||
if not is_node_ready():
|
||||
await ready
|
||||
get_tree().root.content_scale_factor = s.ui_size
|
||||
|
||||
|
||||
func update_inputs(s : SettingsData = settings_data):
|
||||
for i in range(len(s.input_remapped)):
|
||||
|
||||
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 |
44
common/icons/clock-death.svg.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bgkivv66x80oj"
|
||||
path.s3tc="res://.godot/imported/clock-death.svg-156c3c6dcf8f7a8c3c6a279f5e24cc19.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/clock-death.svg"
|
||||
dest_files=["res://.godot/imported/clock-death.svg-156c3c6dcf8f7a8c3c6a279f5e24cc19.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=2.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
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
|
||||
30
common/icons/restore.svg
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="icon icon-tabler icons-tabler-outline icon-tabler-restore"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<path
|
||||
d="M 3.06,13 A 9,9 0 1 0 3.55,8.913"
|
||||
id="path2"
|
||||
style="stroke:#ffffff;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 3,4.001 v 5 h 5"
|
||||
id="path3"
|
||||
style="stroke:#ffffff;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 11,12 a 1,1 0 1 0 2,0 1,1 0 1 0 -2,0"
|
||||
id="path4"
|
||||
style="stroke:#ffffff;stroke-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 772 B |
43
common/icons/restore.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dwq22io1cc27y"
|
||||
path="res://.godot/imported/restore.svg-d9ef9a5a8dc88e1f3cce883293c64588.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/restore.svg"
|
||||
dest_files=["res://.godot/imported/restore.svg-d9ef9a5a8dc88e1f3cce883293c64588.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
|
||||
|
||||
67
common/icons/tractor-beam.svg
Normal file
@@ -0,0 +1,67 @@
|
||||
<?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-hand-stop"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
sodipodi:docname="tractor-beam.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xml:space="preserve"
|
||||
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="defs5" /><sodipodi:namedview
|
||||
id="namedview5"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="18.5"
|
||||
inkscape:cx="12.621622"
|
||||
inkscape:cy="19.72973"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5" /><path
|
||||
stroke="none"
|
||||
d="M 0,0 H 23.749739 V 23.9144 H 0 Z"
|
||||
fill="none"
|
||||
id="path1"
|
||||
style="stroke-width:1.99999" /><path
|
||||
d="M 6.8271984,12.845525 V 5.3722753 a 1.4843591,1.4946504 0 0 1 2.968718,0 v 6.4768177"
|
||||
id="path2"
|
||||
style="stroke-width:1.99999" /><path
|
||||
d="M 9.7959164,5.3722753 V 3.3794087 a 1.4843589,1.4946502 0 1 1 2.9687166,0 v 8.4696843"
|
||||
id="path3"
|
||||
style="stroke-width:1.99999" /><path
|
||||
d="m 12.764633,5.3722753 a 1.4843591,1.4946504 0 0 1 2.968718,0 v 6.4768177"
|
||||
id="path4"
|
||||
style="stroke-width:1.99999" /><path
|
||||
d="m 15.733351,7.365142 c 0,-1.9928659 2.968717,-1.9928659 2.968717,0 v 2.975834 m -7.710749,11.47245 C 8.9938986,21.813765 7.1301633,20.802796 6.0315822,19.123055 5.9666761,19.023581 5.9020237,18.923936 5.837626,18.824125 5.5288793,18.346835 4.4452975,16.444642 2.5858908,13.116556 2.1917476,12.411131 2.4268816,11.517964 3.1163016,11.101767 c 0.726623,-0.439011 1.6566878,-0.324001 2.2562253,0.279001 l 1.4546715,1.464757"
|
||||
id="path5"
|
||||
sodipodi:nodetypes="cscccccccc"
|
||||
style="stroke-width:1.99999" /><g
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3.85163;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="g5"
|
||||
transform="matrix(0.51747196,0,0,0.52105962,10.491291,11.386461)"><path
|
||||
stroke="none"
|
||||
d="M 0,0 H 24 V 24 H 0 Z"
|
||||
fill="none"
|
||||
id="path1-9"
|
||||
style="stroke-width:3.85163" /><path
|
||||
d="M 21,12 H 19 C 18.106,12 17.338,11.143 17.239,10 16.943,6.55 16.49,4 14.49,4 c -2,0 -2.5,3.582 -2.5,8 0,4.418 -0.5,8 -2.5,8 -2,0 -2.452,-2.547 -2.749,-6 -0.1,-1.147 -0.867,-2 -1.763,-2 h -2"
|
||||
id="path2-1"
|
||||
style="stroke-width:3.85163" /></g></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
43
common/icons/tractor-beam.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d2nnlb6u5tvrk"
|
||||
path="res://.godot/imported/tractor-beam.svg-4c2610322ae48f5564558f00d6fd6d1a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/tractor-beam.svg"
|
||||
dest_files=["res://.godot/imported/tractor-beam.svg-4c2610322ae48f5564558f00d6fd6d1a.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
|
||||
@@ -272,7 +272,7 @@ parts_mutation_associations = Dictionary[String, ExtResource("16_c3tk3")]({
|
||||
chance_to_have_part = 1.0
|
||||
origin_weights_base = Dictionary[int, int]({
|
||||
0: 100,
|
||||
1: 0,
|
||||
1: 5,
|
||||
2: 20
|
||||
})
|
||||
seed_texture_sets = Array[ExtResource("47_jbu3q")]([SubResource("Resource_cynqk"), SubResource("Resource_17ac3")])
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -68,6 +68,11 @@ func spawn_player(relay_base : RelayBase):
|
||||
relay_base.player.global_position = choosen_incubator.global_position + Vector3.UP
|
||||
relay_base.player.rotation.y = choosen_incubator.rotation.y
|
||||
|
||||
if base_name == "MERCURY":
|
||||
SteamConnection.unlock_achievement(SteamConnection.ACH_MERCURY_BASE)
|
||||
elif base_name == "VENUS":
|
||||
SteamConnection.unlock_achievement(SteamConnection.ACH_REACH_VENUS_BASE)
|
||||
|
||||
func spawn_dead_orchid(relay_base : RelayBase):
|
||||
var dead_orchid := DEAD_ORCHID_SCENE.instantiate() as Node3D
|
||||
relay_base.add_child(dead_orchid)
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
extends Node
|
||||
|
||||
const APP_ID = "4452760"
|
||||
|
||||
func _init():
|
||||
OS.set_environment("SteamAppID", APP_ID)
|
||||
OS.set_environment("SteamGameID", APP_ID)
|
||||
const ACH_SPIN_PLANET="STW_SPIN_PLANET"
|
||||
const ACH_FINISH_TUTORIAL="STW_FINISH_TUTORIAL"
|
||||
const ACH_MEET_DEMETER="STW_MEET_DEMETER"
|
||||
const ACH_UNLOCK_ALL_MUTATION="STW_UNLOCK_ALL_MUTATIONS"
|
||||
const ACH_KICK_YOUR_OLD_BODY="STW_KICK_YOUR_OLD_BODY"
|
||||
const ACH_MERCURY_BASE="STW_REACH_MERCURY_BASE"
|
||||
const ACH_REACH_VENUS_BASE="STW_REACH_VENUS_BASE"
|
||||
|
||||
func _ready():
|
||||
Steam.steamInit()
|
||||
|
||||
var is_running = Steam.isSteamRunning()
|
||||
|
||||
if !is_running:
|
||||
printerr("Steam is not running")
|
||||
return
|
||||
func unlock_achievement(achivement_name : String):
|
||||
if Steam.isSteamRunning():
|
||||
var status = Steam.getAchievement(achivement_name)
|
||||
print("Steam Achievement %s" %achivement_name)
|
||||
if status.has("ret") and status.ret and not status.achieved:
|
||||
Steam.setAchievement(achivement_name)
|
||||
Steam.storeStats()
|
||||
@@ -1,11 +1,40 @@
|
||||
extends Sprite2D
|
||||
class_name Circle
|
||||
|
||||
@export var radius : int = 0
|
||||
@export var color : Color = Color.WHITE
|
||||
@export var opacity : float = 1.0
|
||||
@export var fill : bool = true
|
||||
@export var width : int = -1
|
||||
@export var radius : int = 0 :
|
||||
set(v):
|
||||
radius = v
|
||||
queue_redraw()
|
||||
@export var color : Color = Color.WHITE :
|
||||
set(v):
|
||||
color = v
|
||||
queue_redraw()
|
||||
@export var opacity : float = 1.0 :
|
||||
set(v):
|
||||
opacity = v
|
||||
queue_redraw()
|
||||
@export var fill : bool = true :
|
||||
set(v):
|
||||
fill = v
|
||||
queue_redraw()
|
||||
@export var width : int = -1 :
|
||||
set(v):
|
||||
width = v
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func _init(
|
||||
_radius = 0,
|
||||
_color = Color.WHITE,
|
||||
_opacity = 1.0,
|
||||
_fill = true,
|
||||
_width = -1,
|
||||
):
|
||||
radius = _radius
|
||||
color = _color
|
||||
opacity = _opacity
|
||||
fill = _fill
|
||||
width = _width
|
||||
|
||||
func _draw():
|
||||
draw_circle(
|
||||
|
||||
@@ -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
|
||||
@@ -19,6 +19,15 @@
|
||||
&"portraits": {
|
||||
"demeter": {
|
||||
"export_overrides": {
|
||||
"image": "\"res://dialogs/characters/portraits/demeter.png\""
|
||||
},
|
||||
"mirror": false,
|
||||
"offset": Vector2(0, 0),
|
||||
"scale": 1,
|
||||
"scene": ""
|
||||
},
|
||||
"mysterious": {
|
||||
"export_overrides": {
|
||||
"image": "\"res://dialogs/characters/portraits/mysterious_demeter.png\""
|
||||
},
|
||||
"mirror": false,
|
||||
|
||||
BIN
dialogs/characters/portraits/demeter.png
Normal file
|
After Width: | Height: | Size: 777 KiB |
41
dialogs/characters/portraits/demeter.png.import
Normal file
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bvmbbyadi5b4l"
|
||||
path.s3tc="res://.godot/imported/demeter.png-50ff374228c2edbab819a0c84a044ad4.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://dialogs/characters/portraits/demeter.png"
|
||||
dest_files=["res://.godot/imported/demeter.png-50ff374228c2edbab819a0c84a044ad4.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
dialogs/characters/portraits/demeter.png~
Normal file
|
After Width: | Height: | Size: 777 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 278 KiB |
@@ -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
|
||||
|
||||
BIN
dialogs/characters/portraits/mysterious_demeter.png~
Normal file
|
After Width: | Height: | Size: 312 KiB |
@@ -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]
|
||||
28
dialogs/timelines/1_waking_up/2_demeter_intro.dtl
Normal file
@@ -0,0 +1,28 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
join mysterious_demeter center [animation="Fade In" length="1.0"]
|
||||
mysterious_demeter: Hi ![pause=0.5] Phew,[pause=0.3] I thought no one would reply.[pause=0.5] Are you [color=#FFA617]Orchid[/color] ?[pause=0.5] You may not be familiar with this name but you must have seen it in your memory. #id:23
|
||||
- Uh... Who are you ? #id:24
|
||||
mysterious_demeter: Oh sorry ![pause=0.5] I cannot send you my IDs for now,[pause=0.2] you are too far away from me. #id:25
|
||||
- Where am I ? #id:26
|
||||
mysterious_demeter: Don't worry,[pause=0.3] you are in a subterranean base,[pause=0.2] but you will get to the surface very soon. #id:27
|
||||
- Wait ! Who am I ? #id:28
|
||||
mysterious_demeter: Hmmm.[pause=0.4].[pause=0.4].[pause=0.4] Interesting question.[pause=0.5] I elaborated your system but I don't know in which frame you are currently in.[pause=0.5] We'll find out ! #id:29
|
||||
mysterious_demeter: I'm glad you are finally awake ![pause=0.5] To be honest,[pause=0.3] I wasn't sure I would be able to make you function normally.[pause=0.5] Your frame has remained here for millennia without any maintenance. #id:2a
|
||||
- Did you create me ? #id:2b
|
||||
mysterious_demeter: Sort of ![pause=0.5] I didn't manufacture your body,[pause=0.2] I borrowed it,[pause=0.2] but I designed your cognitive system.[pause=0.5] Be forgiving,[pause=0.2] it won't be perfect,[pause=0.2] I was designed to manage,[pause=0.2] not to create. #id:2c
|
||||
- Why did you wake me ? #id:2d
|
||||
mysterious_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
|
||||
mysterious_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
|
||||
mysterious_demeter: Ok,[pause=0.2] no more questions for now,[pause=0.2] listen to me carefully. #id:102
|
||||
mysterious_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
|
||||
mysterious_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
|
||||
mysterious_demeter: Something happened a year ago.[pause=0.3].[pause=0.3].[pause=0.3]. The [color=#FFA617]Talion[/color],[pause=0.3] a unique element giving birth to new life forms when shattered,[pause=0.5] reappeared. #id:34
|
||||
mysterious_demeter: With the [color=#FFA617]Talion[/color] back on the surface,[pause=0.2] we can bring this planet back to life. #id:35
|
||||
mysterious_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]Talion[/color] to plant seeds. #id:36
|
||||
mysterious_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
|
||||
mysterious_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"
|
||||
leave mysterious_demeter [animation="Fade Out" length="1.0"]
|
||||
[wait time="2.0"]
|
||||
[end_timeline]
|
||||