Merge branch 'musique_et_son_2' of https://git.zacharie-guet.fr/zacharie/seeding-planets into musique_et_son_2
@@ -3,20 +3,21 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cl03vrbj5wsjk"
|
||||
path="res://.godot/imported/expand-icon.svg-26099b197ab0f314e2253848fcc22962.ctex"
|
||||
path.s3tc="res://.godot/imported/expand-icon.svg-26099b197ab0f314e2253848fcc22962.s3tc.ctex"
|
||||
metadata={
|
||||
"has_editor_variant": true,
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/dialogic/Editor/Images/Pieces/expand-icon.svg"
|
||||
dest_files=["res://.godot/imported/expand-icon.svg-26099b197ab0f314e2253848fcc22962.ctex"]
|
||||
dest_files=["res://.godot/imported/expand-icon.svg-26099b197ab0f314e2253848fcc22962.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -24,7 +25,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=""
|
||||
@@ -38,7 +39,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=1.0
|
||||
editor/scale_with_editor_scale=true
|
||||
editor/convert_colors_with_editor_theme=true
|
||||
|
||||
@@ -3,20 +3,21 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qx5bntelnslj"
|
||||
path="res://.godot/imported/update_portrait.svg-b90fa6163d3720d34df8578ce2aa35e1.ctex"
|
||||
path.s3tc="res://.godot/imported/update_portrait.svg-b90fa6163d3720d34df8578ce2aa35e1.s3tc.ctex"
|
||||
metadata={
|
||||
"has_editor_variant": true,
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/dialogic/Modules/Character/update_portrait.svg"
|
||||
dest_files=["res://.godot/imported/update_portrait.svg-b90fa6163d3720d34df8578ce2aa35e1.ctex"]
|
||||
dest_files=["res://.godot/imported/update_portrait.svg-b90fa6163d3720d34df8578ce2aa35e1.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -24,7 +25,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=""
|
||||
@@ -38,7 +39,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=1.0
|
||||
editor/scale_with_editor_scale=true
|
||||
editor/convert_colors_with_editor_theme=true
|
||||
|
||||
@@ -24,18 +24,18 @@ var portrait := ""
|
||||
|
||||
## Used to set the character resource from the unique name identifier and vice versa
|
||||
var character_identifier: String:
|
||||
get:
|
||||
if character and not "{" in character_identifier:
|
||||
var identifier := character.get_identifier()
|
||||
if not identifier.is_empty():
|
||||
return identifier
|
||||
return character_identifier
|
||||
set(value):
|
||||
character_identifier = value
|
||||
character = DialogicResourceUtil.get_character_resource(value)
|
||||
if Engine.is_editor_hint() and ((not character) or (character and not character.portraits.has(portrait))):
|
||||
portrait = ""
|
||||
ui_update_needed.emit()
|
||||
get:
|
||||
if character and not "{" in character_identifier:
|
||||
var identifier := character.get_identifier()
|
||||
if not identifier.is_empty():
|
||||
return identifier
|
||||
return character_identifier
|
||||
set(value):
|
||||
character_identifier = value
|
||||
character = DialogicResourceUtil.get_character_resource(value)
|
||||
if Engine.is_editor_hint() and ((not character) or (character and not character.portraits.has(portrait))):
|
||||
portrait = ""
|
||||
ui_update_needed.emit()
|
||||
|
||||
var regex := RegEx.create_from_string(r'\s*((")?(?<name>(?(2)[^"\n]*|[^(: \n]*))(?(2)"|)(\W*(?<portrait>\(.*\)))?\s*(?<!\\):)?(?<text>(.|\n)*)')
|
||||
var split_regex := RegEx.create_from_string(r"((\[n\]|\[n\+\])?((?!(\[n\]|\[n\+\]))(.|\n))+)")
|
||||
@@ -49,225 +49,225 @@ signal advance
|
||||
################################################################################
|
||||
|
||||
func _clear_state() -> void:
|
||||
dialogic.current_state_info.erase('text_sub_idx')
|
||||
_disconnect_signals()
|
||||
dialogic.current_state_info.erase('text_sub_idx')
|
||||
_disconnect_signals()
|
||||
|
||||
|
||||
func _execute() -> void:
|
||||
if text.is_empty():
|
||||
finish()
|
||||
return
|
||||
if text.is_empty():
|
||||
finish()
|
||||
return
|
||||
|
||||
## If the speaker is provided as an expression, parse it now.
|
||||
if "{" in character_identifier:
|
||||
character = null
|
||||
var character_name: String = dialogic.Expressions.execute_string(character_identifier)
|
||||
get_or_create_character(character_name)
|
||||
## If the speaker is provided as an expression, parse it now.
|
||||
if "{" in character_identifier:
|
||||
character = null
|
||||
var character_name: String = dialogic.Expressions.execute_string(character_identifier)
|
||||
get_or_create_character(character_name)
|
||||
|
||||
## Change Portrait and Active Speaker
|
||||
if dialogic.has_subsystem("Portraits"):
|
||||
if character:
|
||||
## Change Portrait and Active Speaker
|
||||
if dialogic.has_subsystem("Portraits"):
|
||||
if character:
|
||||
|
||||
dialogic.Portraits.change_speaker(character, portrait)
|
||||
dialogic.Portraits.change_speaker(character, portrait)
|
||||
|
||||
if portrait and dialogic.Portraits.is_character_joined(character):
|
||||
dialogic.Portraits.change_character_portrait(character, portrait)
|
||||
if portrait and dialogic.Portraits.is_character_joined(character):
|
||||
dialogic.Portraits.change_character_portrait(character, portrait)
|
||||
|
||||
else:
|
||||
dialogic.Portraits.change_speaker(null)
|
||||
else:
|
||||
dialogic.Portraits.change_speaker(null)
|
||||
|
||||
## Change and Type Sound Mood
|
||||
if character:
|
||||
dialogic.Text.update_name_label(character)
|
||||
## Change and Type Sound Mood
|
||||
if character:
|
||||
dialogic.Text.update_name_label(character)
|
||||
|
||||
var current_portrait: String = portrait
|
||||
if portrait.is_empty():
|
||||
current_portrait = dialogic.current_state_info["portraits"].get(character.get_identifier(), {}).get("portrait", "")
|
||||
var current_portrait: String = portrait
|
||||
if portrait.is_empty():
|
||||
current_portrait = dialogic.current_state_info["portraits"].get(character.get_identifier(), {}).get("portrait", "")
|
||||
|
||||
var current_portrait_sound_mood: String = character.portraits.get(current_portrait, {}).get("sound_mood", "")
|
||||
dialogic.Text.update_typing_sound_mood_from_character(character, current_portrait_sound_mood)
|
||||
var current_portrait_sound_mood: String = character.portraits.get(current_portrait, {}).get("sound_mood", "")
|
||||
dialogic.Text.update_typing_sound_mood_from_character(character, current_portrait_sound_mood)
|
||||
|
||||
else:
|
||||
dialogic.Text.update_name_label(null)
|
||||
dialogic.Text.update_typing_sound_mood()
|
||||
else:
|
||||
dialogic.Text.update_name_label(null)
|
||||
dialogic.Text.update_typing_sound_mood()
|
||||
|
||||
|
||||
## Handle style changes
|
||||
if dialogic.has_subsystem("Styles"):
|
||||
var current_base_style: String = dialogic.current_state_info.get("base_style")
|
||||
var current_style: String = dialogic.current_state_info.get("style", "")
|
||||
var character_style: String = "" if not character else character.custom_info.get("style", "")
|
||||
## Handle style changes
|
||||
if dialogic.has_subsystem("Styles"):
|
||||
var current_base_style: String = dialogic.current_state_info.get("base_style")
|
||||
var current_style: String = dialogic.current_state_info.get("style", "")
|
||||
var character_style: String = "" if not character else character.custom_info.get("style", "")
|
||||
|
||||
## Change back to base style, if another characters style is currently used
|
||||
if (not character or character_style.is_empty()) and (current_base_style != current_style):
|
||||
dialogic.Styles.change_style(dialogic.current_state_info.get("base_style", "Default"))
|
||||
await dialogic.get_tree().process_frame
|
||||
## Change back to base style, if another characters style is currently used
|
||||
if (not character or character_style.is_empty()) and (current_base_style != current_style):
|
||||
dialogic.Styles.change_style(dialogic.current_state_info.get("base_style", "Default"))
|
||||
await dialogic.get_tree().process_frame
|
||||
|
||||
## Change to the characters style if this character has one
|
||||
elif character and not character_style.is_empty():
|
||||
dialogic.Styles.change_style(character_style, false)
|
||||
await dialogic.get_tree().process_frame
|
||||
## Change to the characters style if this character has one
|
||||
elif character and not character_style.is_empty():
|
||||
dialogic.Styles.change_style(character_style, false)
|
||||
await dialogic.get_tree().process_frame
|
||||
|
||||
_connect_signals()
|
||||
_connect_signals()
|
||||
|
||||
var character_name_text := dialogic.Text.get_character_name_parsed(character)
|
||||
var final_text: String = get_property_translated('text')
|
||||
if ProjectSettings.get_setting('dialogic/text/split_at_new_lines', false):
|
||||
match ProjectSettings.get_setting('dialogic/text/split_at_new_lines_as', 0):
|
||||
0:
|
||||
final_text = final_text.replace('\n', '[n]')
|
||||
1:
|
||||
final_text = final_text.replace('\n', '[n+][br]')
|
||||
var character_name_text := dialogic.Text.get_character_name_parsed(character)
|
||||
var final_text: String = get_property_translated('text')
|
||||
if ProjectSettings.get_setting('dialogic/text/split_at_new_lines', false):
|
||||
match ProjectSettings.get_setting('dialogic/text/split_at_new_lines_as', 0):
|
||||
0:
|
||||
final_text = final_text.replace('\n', '[n]')
|
||||
1:
|
||||
final_text = final_text.replace('\n', '[n+][br]')
|
||||
|
||||
var split_text := []
|
||||
for i in split_regex.search_all(final_text):
|
||||
split_text.append([i.get_string().trim_prefix('[n]').trim_prefix('[n+]')])
|
||||
split_text[-1].append(i.get_string().begins_with('[n+]'))
|
||||
var split_text := []
|
||||
for i in split_regex.search_all(final_text):
|
||||
split_text.append([i.get_string().trim_prefix('[n]').trim_prefix('[n+]')])
|
||||
split_text[-1].append(i.get_string().begins_with('[n+]'))
|
||||
|
||||
dialogic.current_state_info['text_sub_idx'] = dialogic.current_state_info.get('text_sub_idx', -1)
|
||||
dialogic.current_state_info['text_sub_idx'] = dialogic.current_state_info.get('text_sub_idx', -1)
|
||||
|
||||
var reveal_next_segment: bool = dialogic.current_state_info['text_sub_idx'] == -1
|
||||
var reveal_next_segment: bool = dialogic.current_state_info['text_sub_idx'] == -1
|
||||
|
||||
for section_idx in range(min(max(0, dialogic.current_state_info['text_sub_idx']), len(split_text)-1), len(split_text)):
|
||||
dialogic.Inputs.block_input(ProjectSettings.get_setting('dialogic/text/text_reveal_skip_delay', 0.1))
|
||||
for section_idx in range(min(max(0, dialogic.current_state_info['text_sub_idx']), len(split_text)-1), len(split_text)):
|
||||
dialogic.Inputs.block_input(ProjectSettings.get_setting('dialogic/text/text_reveal_skip_delay', 0.1))
|
||||
|
||||
if reveal_next_segment:
|
||||
dialogic.Text.hide_next_indicators()
|
||||
if reveal_next_segment:
|
||||
dialogic.Text.hide_next_indicators()
|
||||
|
||||
dialogic.current_state_info['text_sub_idx'] = section_idx
|
||||
dialogic.current_state_info['text_sub_idx'] = section_idx
|
||||
|
||||
var segment: String = dialogic.Text.parse_text(split_text[section_idx][0], 0)
|
||||
var is_append: bool = split_text[section_idx][1]
|
||||
var segment: String = dialogic.Text.parse_text(split_text[section_idx][0], 0)
|
||||
var is_append: bool = split_text[section_idx][1]
|
||||
|
||||
final_text = ProjectSettings.get_setting("dialogic/text/dialog_text_prefix", "")+segment
|
||||
dialogic.Text.about_to_show_text.emit({'text':final_text, 'character':character, 'portrait':portrait, 'append': is_append})
|
||||
final_text = ProjectSettings.get_setting("dialogic/text/dialog_text_prefix", "")+segment
|
||||
dialogic.Text.about_to_show_text.emit({'text':final_text, 'character':character, 'portrait':portrait, 'append': is_append})
|
||||
|
||||
await dialogic.Text.update_textbox(final_text, false)
|
||||
await dialogic.Text.update_textbox(final_text, false)
|
||||
|
||||
state = States.REVEALING
|
||||
_try_play_current_line_voice()
|
||||
final_text = dialogic.Text.update_dialog_text(final_text, false, is_append)
|
||||
state = States.REVEALING
|
||||
_try_play_current_line_voice()
|
||||
final_text = dialogic.Text.update_dialog_text(final_text, false, is_append)
|
||||
|
||||
dialogic.Text.text_started.emit({'text':final_text, 'character':character, 'portrait':portrait, 'append': is_append})
|
||||
dialogic.Text.text_started.emit({'text':final_text, 'character':character, 'portrait':portrait, 'append': is_append})
|
||||
|
||||
_mark_as_read(character_name_text, final_text)
|
||||
_mark_as_read(character_name_text, final_text)
|
||||
|
||||
# We must skip text animation before we potentially return when there
|
||||
# is a Choice event.
|
||||
if dialogic.Inputs.auto_skip.enabled:
|
||||
dialogic.Text.skip_text_reveal()
|
||||
else:
|
||||
await dialogic.Text.text_finished
|
||||
# We must skip text animation before we potentially return when there
|
||||
# is a Choice event.
|
||||
if dialogic.Inputs.auto_skip.enabled:
|
||||
dialogic.Text.skip_text_reveal()
|
||||
else:
|
||||
await dialogic.Text.text_finished
|
||||
|
||||
state = States.IDLE
|
||||
else:
|
||||
reveal_next_segment = true
|
||||
state = States.IDLE
|
||||
else:
|
||||
reveal_next_segment = true
|
||||
|
||||
# Handling potential Choice Events.
|
||||
if section_idx == len(split_text)-1 and dialogic.has_subsystem('Choices') and dialogic.Choices.is_question(dialogic.current_event_idx):
|
||||
dialogic.Text.show_next_indicators(true)
|
||||
# Handling potential Choice Events.
|
||||
if section_idx == len(split_text)-1 and dialogic.has_subsystem('Choices') and dialogic.Choices.is_question(dialogic.current_event_idx):
|
||||
dialogic.Text.show_next_indicators(true)
|
||||
|
||||
finish()
|
||||
return
|
||||
finish()
|
||||
return
|
||||
|
||||
elif dialogic.Inputs.auto_advance.is_enabled():
|
||||
dialogic.Text.show_next_indicators(false, true)
|
||||
dialogic.Inputs.auto_advance.start()
|
||||
else:
|
||||
dialogic.Text.show_next_indicators()
|
||||
elif dialogic.Inputs.auto_advance.is_enabled():
|
||||
dialogic.Text.show_next_indicators(false, true)
|
||||
dialogic.Inputs.auto_advance.start()
|
||||
else:
|
||||
dialogic.Text.show_next_indicators()
|
||||
|
||||
if section_idx == len(split_text)-1:
|
||||
state = States.DONE
|
||||
if section_idx == len(split_text)-1:
|
||||
state = States.DONE
|
||||
|
||||
# If Auto-Skip is enabled and there are multiple parts of this text
|
||||
# we need to skip the text after the defined time per event.
|
||||
if dialogic.Inputs.auto_skip.enabled:
|
||||
await dialogic.Inputs.start_autoskip_timer()
|
||||
# If Auto-Skip is enabled and there are multiple parts of this text
|
||||
# we need to skip the text after the defined time per event.
|
||||
if dialogic.Inputs.auto_skip.enabled:
|
||||
await dialogic.Inputs.start_autoskip_timer()
|
||||
|
||||
# Check if Auto-Skip is still enabled.
|
||||
if not dialogic.Inputs.auto_skip.enabled:
|
||||
await advance
|
||||
# Check if Auto-Skip is still enabled.
|
||||
if not dialogic.Inputs.auto_skip.enabled:
|
||||
await advance
|
||||
|
||||
else:
|
||||
await advance
|
||||
else:
|
||||
await advance
|
||||
|
||||
|
||||
finish()
|
||||
finish()
|
||||
|
||||
|
||||
func _mark_as_read(character_name_text: String, final_text: String) -> void:
|
||||
if dialogic.has_subsystem('History'):
|
||||
if character:
|
||||
dialogic.History.store_simple_history_entry(final_text, event_name, {'character':character_name_text, 'character_color':character.color})
|
||||
else:
|
||||
dialogic.History.store_simple_history_entry(final_text, event_name)
|
||||
dialogic.History.mark_event_as_visited()
|
||||
if dialogic.has_subsystem('History'):
|
||||
if character:
|
||||
dialogic.History.store_simple_history_entry(final_text, event_name, {'character':character_name_text, 'character_color':character.color})
|
||||
else:
|
||||
dialogic.History.store_simple_history_entry(final_text, event_name)
|
||||
dialogic.History.mark_event_as_visited()
|
||||
|
||||
|
||||
func _connect_signals() -> void:
|
||||
if not dialogic.Inputs.dialogic_action.is_connected(_on_dialogic_input_action):
|
||||
dialogic.Inputs.dialogic_action.connect(_on_dialogic_input_action)
|
||||
if not dialogic.Inputs.dialogic_action.is_connected(_on_dialogic_input_action):
|
||||
dialogic.Inputs.dialogic_action.connect(_on_dialogic_input_action)
|
||||
|
||||
dialogic.Inputs.auto_skip.toggled.connect(_on_auto_skip_enable)
|
||||
dialogic.Inputs.auto_skip.toggled.connect(_on_auto_skip_enable)
|
||||
|
||||
if not dialogic.Inputs.auto_advance.autoadvance.is_connected(_on_dialogic_input_autoadvance):
|
||||
dialogic.Inputs.auto_advance.autoadvance.connect(_on_dialogic_input_autoadvance)
|
||||
if not dialogic.Inputs.auto_advance.autoadvance.is_connected(_on_dialogic_input_autoadvance):
|
||||
dialogic.Inputs.auto_advance.autoadvance.connect(_on_dialogic_input_autoadvance)
|
||||
|
||||
|
||||
## If the event is done, this method can clean-up signal connections.
|
||||
func _disconnect_signals() -> void:
|
||||
if dialogic.Inputs.dialogic_action.is_connected(_on_dialogic_input_action):
|
||||
dialogic.Inputs.dialogic_action.disconnect(_on_dialogic_input_action)
|
||||
if dialogic.Inputs.auto_advance.autoadvance.is_connected(_on_dialogic_input_autoadvance):
|
||||
dialogic.Inputs.auto_advance.autoadvance.disconnect(_on_dialogic_input_autoadvance)
|
||||
if dialogic.Inputs.auto_skip.toggled.is_connected(_on_auto_skip_enable):
|
||||
dialogic.Inputs.auto_skip.toggled.disconnect(_on_auto_skip_enable)
|
||||
if dialogic.Inputs.dialogic_action.is_connected(_on_dialogic_input_action):
|
||||
dialogic.Inputs.dialogic_action.disconnect(_on_dialogic_input_action)
|
||||
if dialogic.Inputs.auto_advance.autoadvance.is_connected(_on_dialogic_input_autoadvance):
|
||||
dialogic.Inputs.auto_advance.autoadvance.disconnect(_on_dialogic_input_autoadvance)
|
||||
if dialogic.Inputs.auto_skip.toggled.is_connected(_on_auto_skip_enable):
|
||||
dialogic.Inputs.auto_skip.toggled.disconnect(_on_auto_skip_enable)
|
||||
|
||||
|
||||
## Tries to play the voice clip for the current line.
|
||||
func _try_play_current_line_voice() -> void:
|
||||
# If Auto-Skip is enabled and we skip voice clips, we don't want to play.
|
||||
if (dialogic.Inputs.auto_skip.enabled
|
||||
and dialogic.Inputs.auto_skip.skip_voice):
|
||||
return
|
||||
# If Auto-Skip is enabled and we skip voice clips, we don't want to play.
|
||||
if (dialogic.Inputs.auto_skip.enabled
|
||||
and dialogic.Inputs.auto_skip.skip_voice):
|
||||
return
|
||||
|
||||
# Plays the audio region for the current line.
|
||||
if (dialogic.has_subsystem('Voice')
|
||||
and dialogic.Voice.is_voiced(dialogic.current_event_idx)):
|
||||
dialogic.Voice.play_voice()
|
||||
# Plays the audio region for the current line.
|
||||
if (dialogic.has_subsystem('Voice')
|
||||
and dialogic.Voice.is_voiced(dialogic.current_event_idx)):
|
||||
dialogic.Voice.play_voice()
|
||||
|
||||
|
||||
func _on_dialogic_input_action() -> void:
|
||||
match state:
|
||||
States.REVEALING:
|
||||
if dialogic.Text.is_text_reveal_skippable():
|
||||
dialogic.Text.skip_text_reveal()
|
||||
dialogic.Inputs.stop_timers()
|
||||
_:
|
||||
if dialogic.Inputs.manual_advance.is_enabled():
|
||||
advance.emit()
|
||||
dialogic.Inputs.stop_timers()
|
||||
match state:
|
||||
States.REVEALING:
|
||||
if dialogic.Text.is_text_reveal_skippable():
|
||||
dialogic.Text.skip_text_reveal()
|
||||
dialogic.Inputs.stop_timers()
|
||||
_:
|
||||
if dialogic.Inputs.manual_advance.is_enabled():
|
||||
advance.emit()
|
||||
dialogic.Inputs.stop_timers()
|
||||
|
||||
|
||||
func _on_dialogic_input_autoadvance() -> void:
|
||||
if state == States.IDLE or state == States.DONE:
|
||||
advance.emit()
|
||||
if state == States.IDLE or state == States.DONE:
|
||||
advance.emit()
|
||||
|
||||
|
||||
func _on_auto_skip_enable(enabled: bool) -> void:
|
||||
if not enabled:
|
||||
return
|
||||
if not enabled:
|
||||
return
|
||||
|
||||
match state:
|
||||
States.DONE:
|
||||
await dialogic.Inputs.start_autoskip_timer()
|
||||
match state:
|
||||
States.DONE:
|
||||
await dialogic.Inputs.start_autoskip_timer()
|
||||
|
||||
# If Auto-Skip is still enabled, advance the text.
|
||||
if dialogic.Inputs.auto_skip.enabled:
|
||||
advance.emit()
|
||||
# If Auto-Skip is still enabled, advance the text.
|
||||
if dialogic.Inputs.auto_skip.enabled:
|
||||
advance.emit()
|
||||
|
||||
States.REVEALING:
|
||||
dialogic.Text.skip_text_reveal()
|
||||
States.REVEALING:
|
||||
dialogic.Text.skip_text_reveal()
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -276,12 +276,12 @@ func _on_auto_skip_enable(enabled: bool) -> void:
|
||||
################################################################################
|
||||
|
||||
func _init() -> void:
|
||||
event_name = "Text"
|
||||
set_default_color('Color1')
|
||||
event_category = "Main"
|
||||
event_sorting_index = 0
|
||||
expand_by_default = true
|
||||
help_page_path = "https://docs.dialogic.pro/writing-texts.html"
|
||||
event_name = "Text"
|
||||
set_default_color('Color1')
|
||||
event_category = "Main"
|
||||
event_sorting_index = 0
|
||||
expand_by_default = true
|
||||
help_page_path = "https://docs.dialogic.pro/writing-texts.html"
|
||||
|
||||
|
||||
|
||||
@@ -289,92 +289,92 @@ func _init() -> void:
|
||||
################################################################################
|
||||
|
||||
func to_text() -> String:
|
||||
var result := text.replace('\n', '\\\n').strip_edges(false).trim_suffix("\\")
|
||||
result = result.replace(':', '\\:')
|
||||
if result.is_empty():
|
||||
result = "<Empty Text Event>"
|
||||
var result := text.replace('\n', '\\\n').strip_edges(false).trim_suffix("\\")
|
||||
result = result.replace(':', '\\:')
|
||||
if result.is_empty():
|
||||
result = "<Empty Text Event>"
|
||||
|
||||
if character or character_identifier:
|
||||
var name := character_identifier
|
||||
if character:
|
||||
name = character.get_identifier()
|
||||
if name.count(" ") > 0:
|
||||
name = '"' + name + '"'
|
||||
if not portrait.is_empty():
|
||||
result = name+" ("+portrait+"): "+result
|
||||
else:
|
||||
result = name+": "+result
|
||||
for event in DialogicResourceUtil.get_event_cache():
|
||||
if not event is DialogicTextEvent and event.is_valid_event(result):
|
||||
result = '\\'+result
|
||||
break
|
||||
if character or character_identifier:
|
||||
var name := character_identifier
|
||||
if character:
|
||||
name = character.get_identifier()
|
||||
if name.count(" ") > 0:
|
||||
name = '"' + name + '"'
|
||||
if not portrait.is_empty():
|
||||
result = name+" ("+portrait+"): "+result
|
||||
else:
|
||||
result = name+": "+result
|
||||
for event in DialogicResourceUtil.get_event_cache():
|
||||
if not event is DialogicTextEvent and event.is_valid_event(result):
|
||||
result = '\\'+result
|
||||
break
|
||||
|
||||
return result
|
||||
return result
|
||||
|
||||
|
||||
func from_text(string:String) -> void:
|
||||
# Load default character
|
||||
# This is only of relevance if the default has been overriden (usually not)
|
||||
character = DialogicResourceUtil.get_character_resource(character_identifier)
|
||||
# Load default character
|
||||
# This is only of relevance if the default has been overriden (usually not)
|
||||
character = DialogicResourceUtil.get_character_resource(character_identifier)
|
||||
|
||||
var result := regex.search(string.trim_prefix('\\'))
|
||||
var result := regex.search(string.trim_prefix('\\'))
|
||||
|
||||
if result.get_string('portrait'):
|
||||
portrait = result.get_string('portrait').strip_edges().trim_prefix('(').trim_suffix(')')
|
||||
if result.get_string('portrait'):
|
||||
portrait = result.get_string('portrait').strip_edges().trim_prefix('(').trim_suffix(')')
|
||||
|
||||
if result and not result.get_string('name').is_empty():
|
||||
var name := result.get_string('name').strip_edges()
|
||||
if result and not result.get_string('name').is_empty():
|
||||
var name := result.get_string('name').strip_edges()
|
||||
|
||||
if name == '_':
|
||||
character = null
|
||||
elif "{" in name:
|
||||
## If it's an expression, we load the character in _execute.
|
||||
character_identifier = name
|
||||
character = null
|
||||
else:
|
||||
get_or_create_character(name)
|
||||
if name == '_':
|
||||
character = null
|
||||
elif "{" in name:
|
||||
## If it's an expression, we load the character in _execute.
|
||||
character_identifier = name
|
||||
character = null
|
||||
else:
|
||||
get_or_create_character(name)
|
||||
|
||||
if not result:
|
||||
return
|
||||
if not result:
|
||||
return
|
||||
|
||||
text = result.get_string('text').replace("\\\n", "\n").replace('\\:', ':').strip_edges().trim_prefix('\\')
|
||||
if text == '<Empty Text Event>':
|
||||
text = ""
|
||||
text = result.get_string('text').replace("\\\n", "\n").replace('\\:', ':').strip_edges().trim_prefix('\\')
|
||||
if text == '<Empty Text Event>':
|
||||
text = ""
|
||||
|
||||
|
||||
func get_or_create_character(name:String) -> void:
|
||||
character = DialogicResourceUtil.get_character_resource(name)
|
||||
character = DialogicResourceUtil.get_character_resource(name)
|
||||
|
||||
if character == null:
|
||||
if Engine.is_editor_hint() == false:
|
||||
character = DialogicCharacter.new()
|
||||
character.display_name = name
|
||||
character.set_identifier(name)
|
||||
if portrait:
|
||||
if "{" in portrait:
|
||||
character.color = Color(dialogic.Expressions.execute_string(portrait))
|
||||
else:
|
||||
character.color = Color(portrait)
|
||||
else:
|
||||
character_identifier = name
|
||||
if character == null:
|
||||
if Engine.is_editor_hint() == false:
|
||||
character = DialogicCharacter.new()
|
||||
character.display_name = name
|
||||
character.set_identifier(name)
|
||||
if portrait:
|
||||
if "{" in portrait:
|
||||
character.color = Color(dialogic.Expressions.execute_string(portrait))
|
||||
else:
|
||||
character.color = Color(portrait)
|
||||
else:
|
||||
character_identifier = name
|
||||
|
||||
|
||||
func is_valid_event(_string:String) -> bool:
|
||||
return true
|
||||
return true
|
||||
|
||||
|
||||
func is_string_full_event(string:String) -> bool:
|
||||
return !string.ends_with('\\')
|
||||
return !string.ends_with('\\')
|
||||
|
||||
|
||||
# this is only here to provide a list of default values
|
||||
# this way the module manager can add custom default overrides to this event.
|
||||
func get_shortcode_parameters() -> Dictionary:
|
||||
return {
|
||||
#param_name : property_info
|
||||
"character" : {"property": "character_identifier", "default": "", "ext_file":true},
|
||||
"portrait" : {"property": "portrait", "default": ""},
|
||||
}
|
||||
return {
|
||||
#param_name : property_info
|
||||
"character" : {"property": "character_identifier", "default": "", "ext_file":true},
|
||||
"portrait" : {"property": "portrait", "default": ""},
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -382,14 +382,14 @@ func get_shortcode_parameters() -> Dictionary:
|
||||
################################################################################
|
||||
|
||||
func _get_translatable_properties() -> Array:
|
||||
return ['text']
|
||||
return ['text']
|
||||
|
||||
|
||||
func _get_property_original_translation(property:String) -> String:
|
||||
match property:
|
||||
'text':
|
||||
return text
|
||||
return ''
|
||||
match property:
|
||||
'text':
|
||||
return text
|
||||
return ''
|
||||
|
||||
|
||||
#endregion
|
||||
@@ -399,44 +399,44 @@ func _get_property_original_translation(property:String) -> String:
|
||||
################################################################################
|
||||
|
||||
func _enter_visual_editor(editor:DialogicEditor):
|
||||
editor.opened.connect(func(): ui_update_needed.emit())
|
||||
editor.opened.connect(func(): ui_update_needed.emit())
|
||||
|
||||
|
||||
func build_event_editor() -> void:
|
||||
add_header_edit('character_identifier', ValueType.DYNAMIC_OPTIONS,
|
||||
{'file_extension' : '.dch',
|
||||
'mode' : 2,
|
||||
'suggestions_func' : get_character_suggestions,
|
||||
'placeholder' : '(No one)',
|
||||
'icon' : load("res://addons/dialogic/Editor/Images/Resources/character.svg")}, 'do_any_characters_exist()')
|
||||
add_header_edit('portrait', ValueType.DYNAMIC_OPTIONS,
|
||||
{'suggestions_func' : get_portrait_suggestions,
|
||||
'placeholder' : "(Don't change)",
|
||||
'icon' : load("res://addons/dialogic/Editor/Images/Resources/portrait.svg"),
|
||||
'collapse_when_empty': true,},
|
||||
'should_show_portrait_selector()')
|
||||
add_body_edit('text', ValueType.MULTILINE_TEXT, {'autofocus':true})
|
||||
add_header_edit('character_identifier', ValueType.DYNAMIC_OPTIONS,
|
||||
{'file_extension' : '.dch',
|
||||
'mode' : 2,
|
||||
'suggestions_func' : get_character_suggestions,
|
||||
'placeholder' : '(No one)',
|
||||
'icon' : load("res://addons/dialogic/Editor/Images/Resources/character.svg")}, 'do_any_characters_exist()')
|
||||
add_header_edit('portrait', ValueType.DYNAMIC_OPTIONS,
|
||||
{'suggestions_func' : get_portrait_suggestions,
|
||||
'placeholder' : "(Don't change)",
|
||||
'icon' : load("res://addons/dialogic/Editor/Images/Resources/portrait.svg"),
|
||||
'collapse_when_empty': true,},
|
||||
'should_show_portrait_selector()')
|
||||
add_body_edit('text', ValueType.MULTILINE_TEXT, {'autofocus':true})
|
||||
|
||||
|
||||
func should_show_portrait_selector() -> bool:
|
||||
return character and not character.portraits.is_empty() and not character.portraits.size() == 1
|
||||
return character and not character.portraits.is_empty() and not character.portraits.size() == 1
|
||||
|
||||
|
||||
func do_any_characters_exist() -> bool:
|
||||
return not DialogicResourceUtil.get_character_directory().is_empty()
|
||||
return not DialogicResourceUtil.get_character_directory().is_empty()
|
||||
|
||||
|
||||
func get_character_suggestions(search_text:String) -> Dictionary:
|
||||
var suggestions := DialogicUtil.get_character_suggestions(search_text, character, true, false, editor_node)
|
||||
if search_text and not search_text in suggestions:
|
||||
suggestions[search_text] = {
|
||||
"value":search_text,
|
||||
"tooltip": "A temporary character, created on the spot.",
|
||||
"editor_icon":["GuiEllipsis", "EditorIcons"]}
|
||||
return suggestions
|
||||
var suggestions := DialogicUtil.get_character_suggestions(search_text, character, true, false, editor_node)
|
||||
if search_text and not search_text in suggestions:
|
||||
suggestions[search_text] = {
|
||||
"value":search_text,
|
||||
"tooltip": "A temporary character, created on the spot.",
|
||||
"editor_icon":["GuiEllipsis", "EditorIcons"]}
|
||||
return suggestions
|
||||
|
||||
func get_portrait_suggestions(search_text:String) -> Dictionary:
|
||||
return DialogicUtil.get_portrait_suggestions(search_text, character, true, "Don't change")
|
||||
return DialogicUtil.get_portrait_suggestions(search_text, character, true, "Don't change")
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -447,45 +447,45 @@ func get_portrait_suggestions(search_text:String) -> Dictionary:
|
||||
var completion_text_character_getter_regex := RegEx.new()
|
||||
var completion_text_effects := {}
|
||||
func _get_code_completion(CodeCompletionHelper:Node, TextNode:TextEdit, line:String, _word:String, symbol:String) -> void:
|
||||
if completion_text_character_getter_regex.get_pattern().is_empty():
|
||||
completion_text_character_getter_regex.compile("(\"[^\"]*\"|[^\\s:]*)")
|
||||
if completion_text_character_getter_regex.get_pattern().is_empty():
|
||||
completion_text_character_getter_regex.compile("(\"[^\"]*\"|[^\\s:]*)")
|
||||
|
||||
if completion_text_effects.is_empty():
|
||||
for idx in DialogicUtil.get_indexers():
|
||||
for effect in idx._get_text_effects():
|
||||
completion_text_effects[effect['command']] = effect
|
||||
if completion_text_effects.is_empty():
|
||||
for idx in DialogicUtil.get_indexers():
|
||||
for effect in idx._get_text_effects():
|
||||
completion_text_effects[effect['command']] = effect
|
||||
|
||||
if not ':' in line.substr(0, TextNode.get_caret_column()) and symbol == '(':
|
||||
var completion_character := completion_text_character_getter_regex.search(line).get_string().trim_prefix('"').trim_suffix('"')
|
||||
CodeCompletionHelper.suggest_portraits(TextNode, completion_character)
|
||||
if not ':' in line.substr(0, TextNode.get_caret_column()) and symbol == '(':
|
||||
var completion_character := completion_text_character_getter_regex.search(line).get_string().trim_prefix('"').trim_suffix('"')
|
||||
CodeCompletionHelper.suggest_portraits(TextNode, completion_character)
|
||||
|
||||
if symbol == '[':
|
||||
suggest_bbcode(TextNode)
|
||||
for effect in completion_text_effects.values():
|
||||
if effect.get('arg', false):
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, effect.command, effect.command+'=', TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"))
|
||||
else:
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, effect.command, effect.command, TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"), ']')
|
||||
if symbol == '[':
|
||||
suggest_bbcode(TextNode)
|
||||
for effect in completion_text_effects.values():
|
||||
if effect.get('arg', false):
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, effect.command, effect.command+'=', TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"))
|
||||
else:
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, effect.command, effect.command, TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"), ']')
|
||||
|
||||
if symbol == '{':
|
||||
CodeCompletionHelper.suggest_variables(TextNode)
|
||||
if symbol == '{':
|
||||
CodeCompletionHelper.suggest_variables(TextNode)
|
||||
|
||||
if symbol == '=':
|
||||
if CodeCompletionHelper.get_line_untill_caret(line).ends_with('[portrait='):
|
||||
var completion_character := completion_text_character_getter_regex.search(line).get_string('name')
|
||||
CodeCompletionHelper.suggest_portraits(TextNode, completion_character, ']')
|
||||
if symbol == '=':
|
||||
if CodeCompletionHelper.get_line_untill_caret(line).ends_with('[portrait='):
|
||||
var completion_character := completion_text_character_getter_regex.search(line).get_string('name')
|
||||
CodeCompletionHelper.suggest_portraits(TextNode, completion_character, ']')
|
||||
|
||||
|
||||
func _get_start_code_completion(CodeCompletionHelper:Node, TextNode:TextEdit) -> void:
|
||||
CodeCompletionHelper.suggest_characters(TextNode, CodeEdit.KIND_CLASS, self)
|
||||
CodeCompletionHelper.suggest_characters(TextNode, CodeEdit.KIND_CLASS, self)
|
||||
|
||||
|
||||
func suggest_bbcode(TextNode:CodeEdit):
|
||||
for i in [['b (bold)', 'b'], ['i (italics)', 'i'], ['color', 'color='], ['font size','font_size=']]:
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, i[0], i[1], TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"),)
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_CLASS, 'end '+i[0], '/'+i[1], TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"), ']')
|
||||
for i in [['new event', 'n'],['new event (same box)', 'n+']]:
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, i[0], i[1], TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("ArrowRight", "EditorIcons"),)
|
||||
for i in [['b (bold)', 'b'], ['i (italics)', 'i'], ['color', 'color='], ['font size','font_size=']]:
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, i[0], i[1], TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"),)
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_CLASS, 'end '+i[0], '/'+i[1], TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("RichTextEffect", "EditorIcons"), ']')
|
||||
for i in [['new event', 'n'],['new event (same box)', 'n+']]:
|
||||
TextNode.add_code_completion_option(CodeEdit.KIND_MEMBER, i[0], i[1], TextNode.syntax_highlighter.normal_color, TextNode.get_theme_icon("ArrowRight", "EditorIcons"),)
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -496,56 +496,56 @@ func suggest_bbcode(TextNode:CodeEdit):
|
||||
var text_effects := ""
|
||||
var text_effects_regex := RegEx.new()
|
||||
func load_text_effects() -> void:
|
||||
if text_effects.is_empty():
|
||||
for idx in DialogicUtil.get_indexers():
|
||||
for effect in idx._get_text_effects():
|
||||
text_effects+= effect['command']+'|'
|
||||
text_effects += "b|i|u|s|code|p|center|left|right|fill|n\\+|n|indent|url|img|font|font_size|opentype_features|color|bg_color|fg_color|outline_size|outline_color|table|cell|ul|ol|lb|rb|br"
|
||||
if text_effects_regex.get_pattern().is_empty():
|
||||
text_effects_regex.compile("(?<!\\\\)\\[\\s*/?(?<command>"+text_effects+")\\s*(=\\s*(?<value>.+?)\\s*)?\\]")
|
||||
if text_effects.is_empty():
|
||||
for idx in DialogicUtil.get_indexers():
|
||||
for effect in idx._get_text_effects():
|
||||
text_effects+= effect['command']+'|'
|
||||
text_effects += "b|i|u|s|code|p|center|left|right|fill|n\\+|n|indent|url|img|font|font_size|opentype_features|color|bg_color|fg_color|outline_size|outline_color|table|cell|ul|ol|lb|rb|br"
|
||||
if text_effects_regex.get_pattern().is_empty():
|
||||
text_effects_regex.compile("(?<!\\\\)\\[\\s*/?(?<command>"+text_effects+")\\s*(=\\s*(?<value>.+?)\\s*)?\\]")
|
||||
|
||||
|
||||
var text_random_word_regex := RegEx.new()
|
||||
var text_effect_color := Color('#898276')
|
||||
func _get_syntax_highlighting(Highlighter:SyntaxHighlighter, dict:Dictionary, line:String) -> Dictionary:
|
||||
load_text_effects()
|
||||
if text_random_word_regex.get_pattern().is_empty():
|
||||
text_random_word_regex.compile(r"(?<!\\)\<[^\>]+(\/[^\>]*)\>")
|
||||
load_text_effects()
|
||||
if text_random_word_regex.get_pattern().is_empty():
|
||||
text_random_word_regex.compile(r"(?<!\\)\<[^\>]+(\/[^\>]*)\>")
|
||||
|
||||
var result := regex.search(line)
|
||||
if not result:
|
||||
return dict
|
||||
if Highlighter.mode == Highlighter.Modes.FULL_HIGHLIGHTING:
|
||||
if result.get_string('name'):
|
||||
dict[result.get_start('name')] = {"color":Highlighter.character_name_color}
|
||||
dict[result.get_end('name')] = {"color":Highlighter.normal_color}
|
||||
if result.get_string('portrait'):
|
||||
dict[result.get_start('portrait')] = {"color":Highlighter.character_portrait_color}
|
||||
dict[result.get_end('portrait')] = {"color":Highlighter.normal_color}
|
||||
if result.get_string('text'):
|
||||
var result := regex.search(line)
|
||||
if not result:
|
||||
return dict
|
||||
if Highlighter.mode == Highlighter.Modes.FULL_HIGHLIGHTING:
|
||||
if result.get_string('name'):
|
||||
dict[result.get_start('name')] = {"color":Highlighter.character_name_color}
|
||||
dict[result.get_end('name')] = {"color":Highlighter.normal_color}
|
||||
if result.get_string('portrait'):
|
||||
dict[result.get_start('portrait')] = {"color":Highlighter.character_portrait_color}
|
||||
dict[result.get_end('portrait')] = {"color":Highlighter.normal_color}
|
||||
if result.get_string('text'):
|
||||
|
||||
## Color the random selection modifier
|
||||
for replace_mod_match in text_random_word_regex.search_all(result.get_string('text')):
|
||||
var color: Color = Highlighter.string_color
|
||||
color = color.lerp(Highlighter.normal_color, 0.4)
|
||||
dict[replace_mod_match.get_start()+result.get_start('text')] = {'color':Highlighter.string_color}
|
||||
var offset := 1
|
||||
for b:RegExMatch in RegEx.create_from_string(r"(\[[^\]]*\]|[^\/]|\/\/)+").search_all(replace_mod_match.get_string().trim_prefix("<").trim_suffix(">")):
|
||||
color.h = wrap(color.h+0.2, 0, 1)
|
||||
dict[replace_mod_match.get_start()+result.get_start('text')+offset] = {'color':color}
|
||||
offset += len(b.get_string())
|
||||
dict[replace_mod_match.get_start()+result.get_start('text')+offset] = {'color':Highlighter.string_color}
|
||||
offset += 1
|
||||
dict[replace_mod_match.get_end()+result.get_start('text')] = {'color':Highlighter.normal_color}
|
||||
## Color the random selection modifier
|
||||
for replace_mod_match in text_random_word_regex.search_all(result.get_string('text')):
|
||||
var color: Color = Highlighter.string_color
|
||||
color = color.lerp(Highlighter.normal_color, 0.4)
|
||||
dict[replace_mod_match.get_start()+result.get_start('text')] = {'color':Highlighter.string_color}
|
||||
var offset := 1
|
||||
for b:RegExMatch in RegEx.create_from_string(r"(\[[^\]]*\]|[^\/]|\/\/)+").search_all(replace_mod_match.get_string().trim_prefix("<").trim_suffix(">")):
|
||||
color.h = wrap(color.h+0.2, 0, 1)
|
||||
dict[replace_mod_match.get_start()+result.get_start('text')+offset] = {'color':color}
|
||||
offset += len(b.get_string())
|
||||
dict[replace_mod_match.get_start()+result.get_start('text')+offset] = {'color':Highlighter.string_color}
|
||||
offset += 1
|
||||
dict[replace_mod_match.get_end()+result.get_start('text')] = {'color':Highlighter.normal_color}
|
||||
|
||||
## Color bbcode and text effects
|
||||
var effects_result := text_effects_regex.search_all(line)
|
||||
for eff in effects_result:
|
||||
var prev_color: Color = Highlighter.dict_get_color_at_column(dict, eff.get_start())
|
||||
dict[eff.get_start()] = {"color":text_effect_color.lerp(prev_color, 0.4)}
|
||||
dict[eff.get_end()] = {"color":prev_color}
|
||||
dict = Highlighter.color_region(dict, Highlighter.variable_color, line, '{', '}', result.get_start('text'))
|
||||
## Color bbcode and text effects
|
||||
var effects_result := text_effects_regex.search_all(line)
|
||||
for eff in effects_result:
|
||||
var prev_color: Color = Highlighter.dict_get_color_at_column(dict, eff.get_start())
|
||||
dict[eff.get_start()] = {"color":text_effect_color.lerp(prev_color, 0.4)}
|
||||
dict[eff.get_end()] = {"color":prev_color}
|
||||
dict = Highlighter.color_region(dict, Highlighter.variable_color, line, '{', '}', result.get_start('text'))
|
||||
|
||||
return dict
|
||||
return dict
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -12,8 +12,14 @@ dest_files=["res://.godot/imported/ship_music.ogg-a35a322e3a6a4adafae0f2adcaf212
|
||||
|
||||
[params]
|
||||
|
||||
<<<<<<< HEAD
|
||||
loop=true
|
||||
loop_offset=0.0
|
||||
bpm=0.0
|
||||
=======
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
|
||||
@@ -18,7 +18,7 @@ force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_mode=2
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
|
||||
BIN
common/audio_manager/assets/sfx/signal/signal.mp3
Normal file
19
common/audio_manager/assets/sfx/signal/signal.mp3.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="mp3"
|
||||
type="AudioStreamMP3"
|
||||
uid="uid://c5y70k3codtn"
|
||||
path="res://.godot/imported/signal.mp3-2f41c9334233d52845bfe384d47f2a96.mp3str"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/audio_manager/assets/sfx/signal/signal.mp3"
|
||||
dest_files=["res://.godot/imported/signal.mp3-2f41c9334233d52845bfe384d47f2a96.mp3str"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
@@ -5,6 +5,7 @@
|
||||
[ext_resource type="AudioStream" uid="uid://bm0tdi6bd2e65" path="res://common/audio_manager/assets/ambiance/niveau/ambiance_phase_2.ogg" id="3_7uv4r"]
|
||||
[ext_resource type="AudioStream" uid="uid://b1hut6lc1jevh" path="res://common/audio_manager/assets/morceaux/niveau/mines_phase_2.ogg" id="4_2fduo"]
|
||||
[ext_resource type="AudioStream" uid="uid://dftxjfdqgsbd3" path="res://common/audio_manager/assets/ambiance/niveau/ambiance_phase_3.ogg" id="4_tuvql"]
|
||||
<<<<<<< HEAD
|
||||
[ext_resource type="AudioStream" uid="uid://dyv128cll6e15" path="res://common/audio_manager/assets/ambiance/astra/ambiance_astra.ogg" id="5_8204s"]
|
||||
[ext_resource type="AudioStream" uid="uid://dcbuhtc085q2x" path="res://common/audio_manager/assets/morceaux/niveau/mines_phase_1.ogg" id="5_ajci6"]
|
||||
[ext_resource type="AudioStream" uid="uid://cwu71o0sl2vto" path="res://common/audio_manager/assets/ambiance/dialogues/ambiance_Demeter.ogg" id="6_8204s"]
|
||||
@@ -12,13 +13,22 @@
|
||||
[ext_resource type="AudioStream" uid="uid://bpf6witukorka" path="res://common/audio_manager/assets/morceaux/menu/main_menu.ogg" id="7_tuvql"]
|
||||
[ext_resource type="AudioStream" uid="uid://dadg6o6dl2k6t" path="res://common/audio_manager/assets/ambiance/vaisseau/ship_music.ogg" id="8_tuvql"]
|
||||
[ext_resource type="AudioStream" uid="uid://dsphn6dbbd55a" path="res://common/audio_manager/assets/morceaux/niveau/forest_phase_1.ogg" id="9_am7i4"]
|
||||
=======
|
||||
[ext_resource type="AudioStream" uid="uid://dcbuhtc085q2x" path="res://common/audio_manager/assets/morceaux/niveau/mines_phase_1.ogg" id="5_ajci6"]
|
||||
[ext_resource type="AudioStream" uid="uid://bpf6witukorka" path="res://common/audio_manager/assets/morceaux/menu/main_menu.ogg" id="7_tuvql"]
|
||||
[ext_resource type="AudioStream" uid="uid://dadg6o6dl2k6t" path="res://common/audio_manager/assets/ambiance/vaisseau/ship_music.ogg" id="8_tuvql"]
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
[ext_resource type="AudioStream" uid="uid://dfrp66a4isnt6" path="res://common/audio_manager/assets/sfx/dig/dig_1.wav" id="9_gv65y"]
|
||||
[ext_resource type="AudioStream" uid="uid://bdxkvaciw4mb3" path="res://common/audio_manager/assets/sfx/dig/dig_2.wav" id="10_n7o7n"]
|
||||
[ext_resource type="AudioStream" uid="uid://ccimypx71o4g6" path="res://common/audio_manager/assets/morceaux/niveau/forest_phase_2.ogg" id="10_tq535"]
|
||||
[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://llxrlwfccywb" path="res://common/audio_manager/assets/sfx/dig/dig_3.wav" id="11_wtvls"]
|
||||
[ext_resource type="AudioStream" uid="uid://b8inedx4yjslw" path="res://common/audio_manager/assets/sfx/drop/drop_1.wav" id="12_4hp8f"]
|
||||
<<<<<<< HEAD
|
||||
[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://c5y70k3codtn" path="res://common/audio_manager/assets/sfx/signal/signal.mp3" id="12_ajci6"]
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
[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://eh3dbuxu5qtw" path="res://common/audio_manager/assets/sfx/harvest/harvest_3.wav" id="15_ynvb4"]
|
||||
@@ -29,6 +39,7 @@
|
||||
[ext_resource type="AudioStream" uid="uid://cqa0gvgpoa7pd" path="res://common/audio_manager/assets/sfx/pick_up/pick_up_2.wav" id="21_dk5s6"]
|
||||
[ext_resource type="AudioStream" uid="uid://d1cpi438ep0ys" path="res://common/audio_manager/assets/sfx/announce/annnounce.wav" id="22_btfwx"]
|
||||
[ext_resource type="AudioStream" uid="uid://ccq04ahrwr3bv" path="res://common/audio_manager/assets/sfx/alarm/alarm.wav" id="23_fwu3w"]
|
||||
<<<<<<< HEAD
|
||||
[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"]
|
||||
@@ -40,6 +51,12 @@
|
||||
[ext_resource type="AudioStream" uid="uid://cad0erjq0us08" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_7.wav" id="35_rk2e0"]
|
||||
[ext_resource type="AudioStream" uid="uid://c6pl2fjg558j3" path="res://common/audio_manager/assets/sfx/plant_points/plant_point_8.wav" id="36_4sa2t"]
|
||||
[ext_resource type="AudioStream" uid="uid://b6lb4kwk7vmr" path="res://common/audio_manager/assets/sfx/ship_reveal/jingle_vaisseau.ogg" id="37_3dfjn"]
|
||||
=======
|
||||
[ext_resource type="AudioStream" uid="uid://ctfaxvblcg5lc" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_1.wav" id="24_tq535"]
|
||||
[ext_resource type="AudioStream" uid="uid://c1dnklmka2ccn" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_2.wav" id="25_ywn7s"]
|
||||
[ext_resource type="AudioStream" uid="uid://dd1uu6dd6sloe" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_3.wav" id="26_xhon7"]
|
||||
[ext_resource type="AudioStream" uid="uid://eq7wufwnolto" path="res://common/audio_manager/assets/sfx/pickaxe/pickaxe_4.wav" id="27_3jg6d"]
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
[sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_8204s"]
|
||||
stream_count = 3
|
||||
@@ -51,10 +68,13 @@ stream_2 = ExtResource("4_tuvql")
|
||||
stream_count = 6
|
||||
stream_0 = ExtResource("5_ajci6")
|
||||
stream_1 = ExtResource("4_2fduo")
|
||||
<<<<<<< HEAD
|
||||
stream_2 = ExtResource("11_ngi21")
|
||||
stream_3 = ExtResource("9_am7i4")
|
||||
stream_4 = ExtResource("10_tq535")
|
||||
stream_5 = ExtResource("12_xmumj")
|
||||
=======
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_kfbah"]
|
||||
streams_count = 3
|
||||
@@ -62,6 +82,11 @@ stream_0/stream = ExtResource("9_gv65y")
|
||||
stream_1/stream = ExtResource("10_n7o7n")
|
||||
stream_2/stream = ExtResource("11_wtvls")
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_8204s"]
|
||||
random_pitch = 1.0594631
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("12_ajci6")
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_1w04j"]
|
||||
random_pitch = 1.2
|
||||
streams_count = 1
|
||||
@@ -82,6 +107,7 @@ streams_count = 2
|
||||
stream_0/stream = ExtResource("20_pu6t4")
|
||||
stream_1/stream = ExtResource("21_dk5s6")
|
||||
|
||||
<<<<<<< HEAD
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_qog4c"]
|
||||
random_pitch = 1.2599211
|
||||
streams_count = 8
|
||||
@@ -93,11 +119,19 @@ stream_4/stream = ExtResource("33_w2elg")
|
||||
stream_5/stream = ExtResource("34_em3o8")
|
||||
stream_6/stream = ExtResource("35_rk2e0")
|
||||
stream_7/stream = ExtResource("36_4sa2t")
|
||||
=======
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_dhq5t"]
|
||||
random_pitch = 1.0594631
|
||||
streams_count = 4
|
||||
stream_0/stream = ExtResource("24_tq535")
|
||||
stream_1/stream = ExtResource("25_ywn7s")
|
||||
stream_2/stream = ExtResource("26_xhon7")
|
||||
stream_3/stream = ExtResource("27_3jg6d")
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
[node name="AudioManager" type="Node" unique_id=1871137180]
|
||||
process_mode = 3
|
||||
script = ExtResource("1_0tvca")
|
||||
default_fade_time = 2.0
|
||||
|
||||
[node name="Ambiance" type="Node" parent="." unique_id=1989991562]
|
||||
unique_name_in_owner = true
|
||||
@@ -105,6 +139,7 @@ unique_name_in_owner = true
|
||||
[node name="Exterior" type="AudioStreamPlayer" parent="Ambiance" unique_id=1405716780]
|
||||
unique_name_in_owner = true
|
||||
stream = SubResource("AudioStreamPlaylist_8204s")
|
||||
<<<<<<< HEAD
|
||||
|
||||
[node name="Astra" type="AudioStreamPlayer" parent="Ambiance" unique_id=1244577212]
|
||||
unique_name_in_owner = true
|
||||
@@ -117,6 +152,8 @@ stream = ExtResource("6_8204s")
|
||||
[node name="Borea" type="AudioStreamPlayer" parent="Ambiance" unique_id=1857904648]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("7_spekb")
|
||||
=======
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
[node name="Musics" type="Node" parent="." unique_id=1450527710]
|
||||
unique_name_in_owner = true
|
||||
@@ -128,6 +165,7 @@ stream = SubResource("AudioStreamPlaylist_ajci6")
|
||||
[node name="Title" type="AudioStreamPlayer" parent="Musics" unique_id=2105759422]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("7_tuvql")
|
||||
bus = &"Music"
|
||||
|
||||
[node name="Ship" type="AudioStreamPlayer" parent="Musics" unique_id=1165150318]
|
||||
unique_name_in_owner = true
|
||||
@@ -140,6 +178,9 @@ unique_name_in_owner = true
|
||||
[node name="Dig" type="AudioStreamPlayer" parent="Sfx" unique_id=486042600]
|
||||
stream = SubResource("AudioStreamRandomizer_kfbah")
|
||||
|
||||
[node name="Signal" type="AudioStreamPlayer" parent="Sfx" unique_id=641246368]
|
||||
stream = SubResource("AudioStreamRandomizer_8204s")
|
||||
|
||||
[node name="Drop" type="AudioStreamPlayer" parent="Sfx" unique_id=1391500830]
|
||||
stream = SubResource("AudioStreamRandomizer_1w04j")
|
||||
|
||||
@@ -157,6 +198,7 @@ volume_db = 8.627
|
||||
[node name="Alarm" type="AudioStreamPlayer" parent="Sfx" unique_id=689347925]
|
||||
stream = ExtResource("23_fwu3w")
|
||||
|
||||
<<<<<<< HEAD
|
||||
[node name="Astra_phone_call" type="AudioStreamPlayer" parent="Sfx" unique_id=721344636]
|
||||
stream = ExtResource("27_0rjel")
|
||||
|
||||
@@ -169,3 +211,7 @@ stream = SubResource("AudioStreamRandomizer_qog4c")
|
||||
[node name="Ship_reveal" type="AudioStreamPlayer" parent="Sfx" unique_id=1121632306]
|
||||
stream = ExtResource("37_3dfjn")
|
||||
volume_db = -10.0
|
||||
=======
|
||||
[node name="Pickaxe" type="AudioStreamPlayer" parent="Sfx" unique_id=996309145]
|
||||
stream = SubResource("AudioStreamRandomizer_dhq5t")
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
@@ -3,16 +3,20 @@ extends Node
|
||||
const MIN_VOLUME = -60.
|
||||
const MAX_VOLUME = 24.
|
||||
|
||||
const DEFAULT_FADE_TIME : float = 0.5
|
||||
|
||||
@onready var settings : SettingsData = GameInfo.settings_data
|
||||
|
||||
@export var default_fade_time = 0.5
|
||||
|
||||
@export var playing_music : AudioStreamPlayer = null
|
||||
@export var playing_ambiance : AudioStreamPlayer = null
|
||||
var music_action : AudioAction
|
||||
var ambiance_action : AudioAction
|
||||
var playing_music : AudioStreamPlayer = null
|
||||
var playing_ambiance : AudioStreamPlayer = null
|
||||
|
||||
var default_volumes := {}
|
||||
|
||||
func _ready():
|
||||
<<<<<<< HEAD
|
||||
for player in get_all_players():
|
||||
player.stop()
|
||||
|
||||
@@ -55,6 +59,117 @@ func _on_timeline_started():
|
||||
play_ambiance("Demeter")
|
||||
# Timeline name et le nom du fichier de timeline, par exemple demeter_intro
|
||||
# Amuse toi Niels ;)
|
||||
=======
|
||||
for player in get_all_players():
|
||||
player.stop()
|
||||
|
||||
fetch_default_volumes()
|
||||
# setup_players_bus()
|
||||
settings.sound_changed.connect(
|
||||
func(_s) : setup_players_bus()
|
||||
)
|
||||
SceneManager.scene_loaded.connect(_on_change_scene)
|
||||
Dialogic.timeline_started.connect(_on_timeline_started)
|
||||
Dialogic.timeline_ended.connect(_on_timeline_ended)
|
||||
|
||||
func _process(_d):
|
||||
if music_action:
|
||||
playing_music = process_audio_action(
|
||||
music_action,
|
||||
%Musics,
|
||||
playing_music
|
||||
)
|
||||
music_action = null
|
||||
|
||||
if ambiance_action:
|
||||
playing_ambiance = process_audio_action(
|
||||
ambiance_action,
|
||||
%Ambiance,
|
||||
playing_ambiance
|
||||
)
|
||||
ambiance_action = null
|
||||
|
||||
func process_audio_action(
|
||||
audio_action : AudioAction,
|
||||
player_search_node: Node,
|
||||
current_player: AudioStreamPlayer = null
|
||||
) -> AudioStreamPlayer:
|
||||
if audio_action is AudioLaunch:
|
||||
return process_audio_launch(audio_action, player_search_node, current_player)
|
||||
elif audio_action is AudioStop and current_player and current_player.playing:
|
||||
stop_player(current_player)
|
||||
|
||||
return null
|
||||
|
||||
func process_audio_launch(
|
||||
audio_launch : AudioLaunch,
|
||||
player_search_node: Node,
|
||||
current_player: AudioStreamPlayer = null,
|
||||
) -> AudioStreamPlayer:
|
||||
var player = player_search_node.find_child(audio_launch.player_name)
|
||||
if not player:
|
||||
printerr("Player %s not found in category %s" % [audio_launch.player_name, player_search_node.name])
|
||||
return null
|
||||
if current_player and current_player.playing and current_player.name == audio_launch.player_name:
|
||||
return current_player
|
||||
elif current_player:
|
||||
stop_player(current_player)
|
||||
|
||||
start_player(player, audio_launch.from_random_time, audio_launch.fade_time)
|
||||
return player
|
||||
|
||||
func _on_change_scene(scene : Scene):
|
||||
stop_ambiance()
|
||||
|
||||
match scene.scene_id:
|
||||
"TITLE":
|
||||
play_music("Title", false, 0.0)
|
||||
"REGION":
|
||||
play_music("Region", true)
|
||||
play_ambiance("Exterior", true)
|
||||
"COCKPIT":
|
||||
play_music("Ship")
|
||||
|
||||
func _on_timeline_started():
|
||||
var timeline_name = Dialogic.current_timeline.resource_path.split("/")[-1].trim_suffix(".dtl")
|
||||
play_ambiance()
|
||||
|
||||
match timeline_name:
|
||||
"demeter_intro":
|
||||
play_ambiance("Demeter")
|
||||
"demeter_introV2":
|
||||
play_ambiance("Demeter")
|
||||
"demeter_midrun":
|
||||
play_ambiance("Demeter")
|
||||
"demeter_outro":
|
||||
play_ambiance("Demeter")
|
||||
"failure":
|
||||
play_ambiance("Demeter")
|
||||
|
||||
func _on_timeline_ended():
|
||||
if SceneManager.actual_scene:
|
||||
_on_change_scene(SceneManager.actual_scene)
|
||||
|
||||
func play_music(player_name : String = "", from_random_time := false, fade_time := DEFAULT_FADE_TIME):
|
||||
music_action = AudioLaunch.new(
|
||||
player_name,
|
||||
from_random_time,
|
||||
fade_time
|
||||
)
|
||||
|
||||
func stop_music():
|
||||
music_action = AudioStop.new()
|
||||
|
||||
func play_ambiance(player_name : String = "", from_random_time := false, fade_time := DEFAULT_FADE_TIME):
|
||||
ambiance_action = AudioLaunch.new(
|
||||
player_name,
|
||||
from_random_time,
|
||||
fade_time
|
||||
)
|
||||
|
||||
func stop_ambiance():
|
||||
ambiance_action = AudioStop.new()
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
func fetch_default_volumes():
|
||||
var all_players := get_all_players()
|
||||
@@ -62,6 +177,7 @@ func fetch_default_volumes():
|
||||
for player in all_players:
|
||||
default_volumes[player] = player.volume_db
|
||||
|
||||
<<<<<<< HEAD
|
||||
func setup_volume():
|
||||
for player in get_all_players():
|
||||
player.volume_db = get_volume_from_parent(player)
|
||||
@@ -77,6 +193,19 @@ func get_volume_from_parent(player : AudioStreamPlayer) -> float:
|
||||
settings_volume = settings.music_volume
|
||||
|
||||
return default_volumes[player] + lerp(MIN_VOLUME, MAX_VOLUME, settings_volume)
|
||||
=======
|
||||
func setup_players_bus():
|
||||
for player in get_all_players():
|
||||
if player.get_parent() == %Musics:
|
||||
player.bus = (AudioServer.get_bus_name(SettingsData.MUSIC_BUS_ID))
|
||||
elif player.get_parent() == %Sfx:
|
||||
player.bus = (AudioServer.get_bus_name(SettingsData.SFX_BUS_ID))
|
||||
elif player.get_parent() == %Ambiance:
|
||||
player.bus = (AudioServer.get_bus_name(SettingsData.AMBIANCE_BUS_ID))
|
||||
|
||||
func get_volume(player : AudioStreamPlayer) -> float:
|
||||
return default_volumes[player]
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
func get_all_players() -> Array[AudioStreamPlayer]:
|
||||
var players : Array[AudioStreamPlayer] = []
|
||||
@@ -94,15 +223,41 @@ func get_players_from_node(node : Node) -> Array[AudioStreamPlayer]:
|
||||
streams.append(c)
|
||||
return streams
|
||||
|
||||
<<<<<<< HEAD
|
||||
func set_volume(player : AudioStreamPlayer, to : float, fade_time = default_fade_time) -> Tween:
|
||||
var fade_tween : Tween = get_tree().create_tween()
|
||||
=======
|
||||
func set_volume(player : AudioStreamPlayer, to : float, fade_time := 0.0) -> Tween:
|
||||
var fade_tween : Tween = get_tree().create_tween()
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
fade_tween.tween_property(player, "volume_db", to, fade_time)
|
||||
|
||||
return fade_tween
|
||||
|
||||
func start_player(player: AudioStreamPlayer, from_random_time = false, fade_time = DEFAULT_FADE_TIME):
|
||||
if player and not player.playing:
|
||||
player.play(
|
||||
0.0 if not from_random_time
|
||||
else randf_range(0.0, player.stream.get_length())
|
||||
)
|
||||
if fade_time > 0.0:
|
||||
player.volume_db = MIN_VOLUME
|
||||
await set_volume(player, get_volume(player), fade_time).finished
|
||||
|
||||
func stop_player(player : AudioStreamPlayer, fade_time = DEFAULT_FADE_TIME):
|
||||
if player and player.playing:
|
||||
if fade_time > 0.0:
|
||||
await set_volume(player, MIN_VOLUME, fade_time).finished
|
||||
player.stop()
|
||||
player.volume_db = get_volume(player)
|
||||
|
||||
func reset_volume(player : AudioStreamPlayer):
|
||||
<<<<<<< HEAD
|
||||
player.volume_db = get_volume_from_parent(player)
|
||||
=======
|
||||
player.volume_db = get_volume(player)
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
func play_sfx(sfx_name : String):
|
||||
var player := %Sfx.find_child(sfx_name) as AudioStreamPlayer
|
||||
@@ -111,6 +266,7 @@ func play_sfx(sfx_name : String):
|
||||
else:
|
||||
printerr("Sfx %s not found" % sfx_name)
|
||||
|
||||
<<<<<<< HEAD
|
||||
func play_music(music_name : String = ""):
|
||||
var old_music = playing_music
|
||||
playing_music = null
|
||||
@@ -144,3 +300,25 @@ func play_ambiance(ambiance_name : String = ""):
|
||||
set_volume(player, get_volume_from_parent(player))
|
||||
else:
|
||||
printerr("Ambiance %s not found" % ambiance_name)
|
||||
=======
|
||||
class AudioAction:
|
||||
pass
|
||||
|
||||
class AudioLaunch extends AudioAction:
|
||||
var player_name : String
|
||||
var from_random_time : bool
|
||||
var fade_time : float
|
||||
|
||||
func _init(
|
||||
_player_name : String,
|
||||
_from_random_time := false,
|
||||
_fade_time := DEFAULT_FADE_TIME,
|
||||
):
|
||||
player_name = _player_name
|
||||
from_random_time = _from_random_time
|
||||
fade_time = _fade_time
|
||||
|
||||
|
||||
class AudioStop extends AudioAction:
|
||||
pass
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
@@ -11,12 +11,18 @@ signal current_region_data_updated(p : RegionData)
|
||||
|
||||
@export var max_mutations_by_plant : int = 2
|
||||
|
||||
@export var dialogs_done : Array[String] = []
|
||||
@export var last_game_scene : Scene = null
|
||||
|
||||
@export var actual_scene : Scene = null
|
||||
@export var ship_in_space = false
|
||||
|
||||
@export var tutorial_done = false
|
||||
|
||||
@export var incubator_used = []
|
||||
|
||||
@export var dialogs_done : Array[String] = [] #Chemin des dialogues démarrés
|
||||
|
||||
func start_run():
|
||||
player_data.inventory.clear()
|
||||
player_data.inventory.clear_items()
|
||||
current_run = RunData.new()
|
||||
current_run.current_run_point_changed.connect(
|
||||
func(rp : RunPoint):
|
||||
@@ -34,3 +40,19 @@ func start_region(region_param : RegionParameter):
|
||||
current_region_data = RegionData.new(region_param)
|
||||
current_region_data_updated.emit(current_region_data)
|
||||
GameInfo.save_game_data()
|
||||
|
||||
func give_up():
|
||||
current_region_data = null
|
||||
current_run = null
|
||||
|
||||
func start_tutorial():
|
||||
current_region_data = RegionData.new(
|
||||
RegionParameter.new(
|
||||
10,
|
||||
3,
|
||||
tr("TUTORIAL"),
|
||||
["tutorial"],
|
||||
0,
|
||||
randi()
|
||||
)
|
||||
)
|
||||
@@ -4,9 +4,9 @@ class_name RunData
|
||||
enum State {STARTED, IN_PROGRESS, FINISHED}
|
||||
|
||||
const RUN_POINT_POSITION_DERIVATION = 100
|
||||
const DIFFICULTY_INCREASE_BY_LEVEL = 1
|
||||
const RUN_POINTS_NEXT_NUMBER :Array[int] = [2,3]
|
||||
const RUN_POINT_MAX_LEVEL = 10
|
||||
const DIFFICULTY_INCREASE_BY_LEVEL = 3
|
||||
const RUN_POINTS_NEXT_NUMBER :Array[int] = [2]
|
||||
const RUN_POINT_MAX_LEVEL = 0 # TODO
|
||||
|
||||
signal current_run_point_changed
|
||||
|
||||
@@ -41,9 +41,14 @@ func generate_next_run_points(run_point : RunPoint) -> Array[RunPoint]:
|
||||
|
||||
|
||||
func generate_next_run_point(run_point : RunPoint) -> RunPoint:
|
||||
var level = run_point.level + 1
|
||||
var region_parameter = RegionParameter.new()
|
||||
region_parameter.level = level
|
||||
region_parameter.flags = get_region_flags(region_parameter)
|
||||
|
||||
return RunPoint.new(
|
||||
run_point.level + 1,
|
||||
generate_difficulty_increased_region_parameter(run_point.region_parameter, DIFFICULTY_INCREASE_BY_LEVEL),
|
||||
level,
|
||||
generate_difficulty_increased_region_parameter(region_parameter, DIFFICULTY_INCREASE_BY_LEVEL * level),
|
||||
(run_point.position + randi_range(-RUN_POINT_POSITION_DERIVATION, RUN_POINT_POSITION_DERIVATION)) % 360
|
||||
)
|
||||
|
||||
@@ -56,6 +61,7 @@ func generate_difficulty_increased_region_parameter(
|
||||
region_parameter.charges,
|
||||
region_parameter.objective
|
||||
)
|
||||
|
||||
while i_diff > 0:
|
||||
|
||||
var available_difficulty_modifier = [
|
||||
@@ -96,6 +102,15 @@ func choose_next_run_point(run_point : RunPoint) -> RunPoint:
|
||||
next_run_points = generate_next_run_points(current_run_point)
|
||||
return current_run_point
|
||||
|
||||
func get_region_flags(region_parameter : RegionParameter) -> Array[String]:
|
||||
var flags : Array[String] = []
|
||||
|
||||
print(region_parameter.level)
|
||||
if region_parameter.level == RUN_POINT_MAX_LEVEL:
|
||||
flags.append("borea")
|
||||
|
||||
return flags
|
||||
|
||||
class DifficultyModifier:
|
||||
func modify(_region_parameter : RegionParameter):
|
||||
pass
|
||||
|
||||
@@ -20,6 +20,7 @@ func _init(
|
||||
):
|
||||
level = _level
|
||||
region_parameter = _region_parameter
|
||||
region_parameter.level = level
|
||||
position = _position
|
||||
|
||||
func card_info() -> CardInfo:
|
||||
@@ -34,4 +35,4 @@ func card_info() -> CardInfo:
|
||||
CardStatInfo.new(str(region_parameter.charges), CHARGE_ICON),
|
||||
])
|
||||
|
||||
return info
|
||||
return info
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
extends Resource
|
||||
class_name SettingsData
|
||||
|
||||
const MUSIC_BUS_ID = 1
|
||||
const SFX_BUS_ID = 2
|
||||
const AMBIANCE_BUS_ID = 3
|
||||
|
||||
signal language_changed(settings : SettingsData)
|
||||
signal sound_changed(settings : SettingsData)
|
||||
signal video_changed(settings : SettingsData)
|
||||
@@ -40,7 +44,7 @@ const AVAILABLE_LANGUAGES_LABEL = [
|
||||
|
||||
#region ------------------ Video ------------------
|
||||
|
||||
@export var full_screen : bool = false :
|
||||
@export var full_screen : bool = true :
|
||||
set(v):
|
||||
full_screen = v
|
||||
video_changed.emit(self)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
extends Node
|
||||
|
||||
const SAVE_GAME_LOCATION = "res://stw_demo_save.tres"
|
||||
const SAVE_SETTINGS_LOCATION = "res://stw_settings.tres"
|
||||
const SAVE_GAME_LOCATION = "user://stw_demo_save.tres"
|
||||
const SAVE_SETTINGS_LOCATION = "user://stw_settings.tres"
|
||||
|
||||
var game_loaded = false
|
||||
|
||||
@@ -52,6 +52,10 @@ func _init():
|
||||
update_video_settings()
|
||||
settings_data.language_changed.connect(_on_settings_language_changed)
|
||||
settings_data.video_changed.connect(_on_settings_video_changed)
|
||||
settings_data.sound_changed.connect(_on_settings_sound_changed)
|
||||
|
||||
func _ready():
|
||||
Dialogic.timeline_started.connect(_on_timeline_started)
|
||||
|
||||
func _on_settings_video_changed(s : SettingsData):
|
||||
update_video_settings(s)
|
||||
@@ -59,6 +63,17 @@ func _on_settings_video_changed(s : SettingsData):
|
||||
func _on_settings_language_changed(s : SettingsData):
|
||||
update_language_settings(s)
|
||||
|
||||
func _on_settings_sound_changed(s : SettingsData):
|
||||
AudioServer.set_bus_volume_db(SettingsData.MUSIC_BUS_ID, linear_to_db(s.music_volume))
|
||||
AudioServer.set_bus_volume_db(SettingsData.SFX_BUS_ID, linear_to_db(s.sfx_volume))
|
||||
AudioServer.set_bus_volume_db(SettingsData.AMBIANCE_BUS_ID, linear_to_db(s.ambiance_volume))
|
||||
|
||||
func _on_timeline_started():
|
||||
var dialog_path = Dialogic.current_timeline.resource_path
|
||||
if not dialog_path in game_data.dialogs_done:
|
||||
game_data.dialogs_done.append(dialog_path)
|
||||
save_game_data()
|
||||
|
||||
func update_language_settings(s : SettingsData = settings_data):
|
||||
TranslationServer.set_locale(s.language)
|
||||
|
||||
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://eug5icp6t1h3"
|
||||
path="res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.ctex"
|
||||
path.s3tc="res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/arrow-narrow-up.svg"
|
||||
dest_files=["res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.ctex"]
|
||||
dest_files=["res://.godot/imported/arrow-narrow-up.svg-3e96282c2af955cf23507b48c4348810.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
|
||||
|
||||
BIN
common/icons/bar.png
Normal file
|
After Width: | Height: | Size: 427 B |
40
common/icons/bar.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dw80a4c5iekir"
|
||||
path="res://.godot/imported/bar.png-623df5fbea38f9d862a997485a02d36c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/bar.png"
|
||||
dest_files=["res://.godot/imported/bar.png-623df5fbea38f9d862a997485a02d36c.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
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dcgnamu7sb3ov"
|
||||
path="res://.godot/imported/bolt.svg-a559d5e701996c7d105fc68102331434.ctex"
|
||||
path.s3tc="res://.godot/imported/bolt.svg-a559d5e701996c7d105fc68102331434.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/bolt.svg"
|
||||
dest_files=["res://.godot/imported/bolt.svg-a559d5e701996c7d105fc68102331434.ctex"]
|
||||
dest_files=["res://.godot/imported/bolt.svg-a559d5e701996c7d105fc68102331434.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
|
||||
|
||||
1
common/icons/brand-instagram.svg
Normal file
@@ -0,0 +1 @@
|
||||
<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-brand-instagram"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 8a4 4 0 0 1 4 -4h8a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-8a4 4 0 0 1 -4 -4l0 -8" /><path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" /><path d="M16.5 7.5v.01" /></svg>
|
||||
|
After Width: | Height: | Size: 469 B |
43
common/icons/brand-instagram.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dh1jaup4y1f6q"
|
||||
path="res://.godot/imported/brand-instagram.svg-93b67e1c651e77c13169000f3fa1764f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/brand-instagram.svg"
|
||||
dest_files=["res://.godot/imported/brand-instagram.svg-93b67e1c651e77c13169000f3fa1764f.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
common/icons/brand-steam.svg
Normal file
@@ -0,0 +1 @@
|
||||
<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-brand-steam"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M16.5 5a4.5 4.5 0 1 1 -.653 8.953l-4.347 3.009l0 .038a3 3 0 0 1 -2.824 3l-.176 0a3 3 0 0 1 -2.94 -2.402l-2.56 -1.098v-3.5l3.51 1.755a2.989 2.989 0 0 1 2.834 -.635l2.727 -3.818a4.5 4.5 0 0 1 4.429 -5.302" /><path d="M15.5 9.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" fill="#ffffff" /></svg>
|
||||
|
After Width: | Height: | Size: 584 B |
43
common/icons/brand-steam.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cpkye7t28ragp"
|
||||
path="res://.godot/imported/brand-steam.svg-9dbbdc409ded6b7066179206cac90cca.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/brand-steam.svg"
|
||||
dest_files=["res://.godot/imported/brand-steam.svg-9dbbdc409ded6b7066179206cac90cca.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
common/icons/broadcast.svg
Normal file
@@ -0,0 +1 @@
|
||||
<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-broadcast"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.364 19.364a9 9 0 1 0 -12.728 0" /><path d="M15.536 16.536a5 5 0 1 0 -7.072 0" /><path d="M11 13a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /></svg>
|
||||
|
After Width: | Height: | Size: 442 B |
43
common/icons/broadcast.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qshtr3peinak"
|
||||
path="res://.godot/imported/broadcast.svg-d7376e52ecc5b74fcdaea71ccbe04a97.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/broadcast.svg"
|
||||
dest_files=["res://.godot/imported/broadcast.svg-d7376e52ecc5b74fcdaea71ccbe04a97.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
common/icons/circle-check.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff" class="icon icon-tabler icons-tabler-filled icon-tabler-circle-check"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z" /></svg>
|
||||
|
After Width: | Height: | Size: 522 B |
43
common/icons/circle-check.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dk7j4cmn2avor"
|
||||
path="res://.godot/imported/circle-check.svg-a4b2a081fcd49aa81b3d471e5cf96154.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/circle-check.svg"
|
||||
dest_files=["res://.godot/imported/circle-check.svg-a4b2a081fcd49aa81b3d471e5cf96154.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
common/icons/circle-dotted.svg
Normal file
@@ -0,0 +1 @@
|
||||
<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-circle-dotted"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 4.21l0 .01" /><path d="M4.21 7.5l0 .01" /><path d="M3 12l0 .01" /><path d="M4.21 16.5l0 .01" /><path d="M7.5 19.79l0 .01" /><path d="M12 21l0 .01" /><path d="M16.5 19.79l0 .01" /><path d="M19.79 16.5l0 .01" /><path d="M21 12l0 .01" /><path d="M19.79 7.5l0 .01" /><path d="M16.5 4.21l0 .01" /><path d="M12 3l0 .01" /></svg>
|
||||
|
After Width: | Height: | Size: 635 B |
43
common/icons/circle-dotted.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://p7417vydlndb"
|
||||
path="res://.godot/imported/circle-dotted.svg-66d6de56bbd4e5cdc1d212f761ee2b4a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/circle-dotted.svg"
|
||||
dest_files=["res://.godot/imported/circle-dotted.svg-66d6de56bbd4e5cdc1d212f761ee2b4a.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://baaujfw8piywi"
|
||||
path="res://.godot/imported/dna.svg-0d37cb06a607035637eb8d87826b10a6.ctex"
|
||||
path.s3tc="res://.godot/imported/dna.svg-0d37cb06a607035637eb8d87826b10a6.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/dna.svg"
|
||||
dest_files=["res://.godot/imported/dna.svg-0d37cb06a607035637eb8d87826b10a6.ctex"]
|
||||
dest_files=["res://.godot/imported/dna.svg-0d37cb06a607035637eb8d87826b10a6.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
|
||||
|
||||
1
common/icons/rocket.svg
Normal file
@@ -0,0 +1 @@
|
||||
<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-rocket"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3" /><path d="M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3" /><path d="M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /></svg>
|
||||
|
After Width: | Height: | Size: 501 B |
43
common/icons/rocket.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://1ynlp05wj0hm"
|
||||
path="res://.godot/imported/rocket.svg-179ed4d17d5fad3feb8d3bb0242a9308.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/rocket.svg"
|
||||
dest_files=["res://.godot/imported/rocket.svg-179ed4d17d5fad3feb8d3bb0242a9308.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://b43thuq8piv18"
|
||||
path="res://.godot/imported/skull.svg-1f3a01497295060c28293df722ed0ddd.ctex"
|
||||
path.s3tc="res://.godot/imported/skull.svg-1f3a01497295060c28293df722ed0ddd.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/skull.svg"
|
||||
dest_files=["res://.godot/imported/skull.svg-1f3a01497295060c28293df722ed0ddd.ctex"]
|
||||
dest_files=["res://.godot/imported/skull.svg-1f3a01497295060c28293df722ed0ddd.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
|
||||
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b6dwhn0uotdgu"
|
||||
path="res://.godot/imported/square-rounded-nofill.svg-3b394b5967765acc26d391129de152eb.ctex"
|
||||
path.s3tc="res://.godot/imported/square-rounded-nofill.svg-3b394b5967765acc26d391129de152eb.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/square-rounded-nofill.svg"
|
||||
dest_files=["res://.godot/imported/square-rounded-nofill.svg-3b394b5967765acc26d391129de152eb.ctex"]
|
||||
dest_files=["res://.godot/imported/square-rounded-nofill.svg-3b394b5967765acc26d391129de152eb.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
|
||||
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://rdrhi3r11ey6"
|
||||
path="res://.godot/imported/square-rounded.svg-4eece25055f2b80264664150c832a797.ctex"
|
||||
path.s3tc="res://.godot/imported/square-rounded.svg-4eece25055f2b80264664150c832a797.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/icons/square-rounded.svg"
|
||||
dest_files=["res://.godot/imported/square-rounded.svg-4eece25055f2b80264664150c832a797.ctex"]
|
||||
dest_files=["res://.godot/imported/square-rounded.svg-4eece25055f2b80264664150c832a797.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
|
||||
|
||||
105
common/plant_texture_builder/plant_texture_builder.tscn
Normal file
@@ -0,0 +1,105 @@
|
||||
[gd_scene format=3 uid="uid://b8gqdgabrjaml"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dt2ip3pw2cboy" path="res://entities/plants/scripts/texture_builder/plant_texture_builder.gd" id="1_s8rsj"]
|
||||
[ext_resource type="Script" path="res://entities/plants/scripts/texture_builder/plant_part.gd" id="2_cfiqo"]
|
||||
[ext_resource type="Resource" uid="uid://bfyafiewcrjln" path="res://entities/plants/resources/plant_parts/Base1.tres" id="3_coupj"]
|
||||
[ext_resource type="Resource" uid="uid://d2vdf2sth2xjm" path="res://entities/plants/resources/plant_parts/Base3.tres" id="4_coupj"]
|
||||
[ext_resource type="Resource" uid="uid://7hrdkl6bf3o4" path="res://entities/plants/resources/plant_parts/Branch1.tres" id="4_ggud5"]
|
||||
[ext_resource type="Resource" uid="uid://clruuysx80pnn" path="res://entities/plants/resources/plant_parts/Base4.tres" id="5_ggud5"]
|
||||
[ext_resource type="Resource" uid="uid://ceisi5yyie7to" path="res://entities/plants/resources/plant_parts/Branch2.tres" id="5_ufbqh"]
|
||||
[ext_resource type="Resource" uid="uid://cxiu8frk04b5i" path="res://entities/plants/resources/plant_parts/Branch3.tres" id="6_jbu3q"]
|
||||
[ext_resource type="Resource" uid="uid://53p5g07e3pb4" path="res://entities/plants/resources/plant_parts/Branch4.tres" id="7_21cjy"]
|
||||
[ext_resource type="Resource" uid="uid://d2y7o2hc6ffei" path="res://entities/plants/resources/plant_parts/Branch11.tres" id="8_rs2ow"]
|
||||
[ext_resource type="Resource" uid="uid://civ4gr1c2pq7g" path="res://entities/plants/resources/plant_parts/Branch12.tres" id="9_5job5"]
|
||||
[ext_resource type="Resource" uid="uid://bqfocs6f0iypo" path="res://entities/plants/resources/plant_parts/Branch13.tres" id="10_cynqk"]
|
||||
[ext_resource type="Resource" uid="uid://drml5dm8i3j3a" path="res://entities/plants/resources/plant_parts/Branch14.tres" id="11_b21au"]
|
||||
[ext_resource type="Resource" uid="uid://b1t5nfwcln5vo" path="res://entities/plants/resources/plant_parts/Branch15.tres" id="12_17ac3"]
|
||||
[ext_resource type="Resource" uid="uid://b4s58a600q2rn" path="res://entities/plants/resources/plant_parts/Branch16.tres" id="13_fuh2b"]
|
||||
[ext_resource type="Resource" uid="uid://dspugxsjw2aea" path="res://entities/plants/resources/plant_parts/Branch17.tres" id="14_28gvc"]
|
||||
[ext_resource type="Resource" uid="uid://cnt38l2fmg8d7" path="res://entities/plants/resources/plant_parts/Branch18.tres" id="15_1cwvj"]
|
||||
[ext_resource type="Script" path="res://entities/plants/scripts/texture_builder/part_mutation_association.gd" id="16_c3tk3"]
|
||||
[ext_resource type="Resource" uid="uid://wxqxm6d5twdh" path="res://entities/plants/resources/plant_parts/Leaf8.tres" id="17_q0jli"]
|
||||
[ext_resource type="Resource" uid="uid://uoikjpno37bi" path="res://entities/plants/resources/plant_parts/Leaf9.tres" id="18_rplk6"]
|
||||
[ext_resource type="Resource" uid="uid://c5gqwck2p5h5n" path="res://entities/plants/resources/plant_parts/Leaf10.tres" id="19_mcckl"]
|
||||
[ext_resource type="Resource" uid="uid://c5fj1cw0f4mu6" path="res://entities/plants/resources/plant_parts/Leaf11.tres" id="20_3hcun"]
|
||||
[ext_resource type="Resource" uid="uid://dce788f0adauv" path="res://entities/plants/resources/plant_parts/Leaf12.tres" id="21_kvmj5"]
|
||||
[ext_resource type="Resource" uid="uid://dd34dikqoynp3" path="res://entities/plants/resources/plant_parts/Leaf13.tres" id="22_ocu7e"]
|
||||
[ext_resource type="Resource" uid="uid://bynje6g2wvuvl" path="res://entities/plants/resources/plant_parts/Leaf14.tres" id="23_q771y"]
|
||||
[ext_resource type="Resource" uid="uid://bd2op6q1masjt" path="res://entities/plants/resources/plant_parts/Leaf15.tres" id="24_5fbyu"]
|
||||
[ext_resource type="Resource" uid="uid://bvajuw0r47edw" path="res://entities/plants/resources/plant_parts/Leaf16.tres" id="25_2plsj"]
|
||||
[ext_resource type="Resource" uid="uid://cxgw1vgket0fw" path="res://entities/plants/resources/plant_parts/Leaf1.tres" id="26_yjh7s"]
|
||||
[ext_resource type="Resource" uid="uid://qb6bftgq0n6y" path="res://entities/plants/resources/plant_parts/Leaf2.tres" id="27_abtbh"]
|
||||
[ext_resource type="Resource" uid="uid://ft112n57di0e" path="res://entities/plants/resources/plant_parts/Leaf3.tres" id="28_j5s6w"]
|
||||
[ext_resource type="Resource" uid="uid://dwjj6qmcjhn68" path="res://entities/plants/resources/plant_parts/Leaf4.tres" id="29_p21mk"]
|
||||
[ext_resource type="Resource" uid="uid://bkr70mstyf8pp" path="res://entities/plants/resources/plant_parts/Leaf5.tres" id="30_wmcor"]
|
||||
[ext_resource type="Resource" uid="uid://dcuwupmqt34ju" path="res://entities/plants/resources/plant_parts/Leaf6.tres" id="31_dx2ud"]
|
||||
[ext_resource type="Resource" uid="uid://djmidq7yq452i" path="res://entities/plants/resources/plant_parts/Leaf7.tres" id="32_fpktn"]
|
||||
[ext_resource type="Resource" uid="uid://crmvc77bqax1y" path="res://entities/plants/resources/plant_parts/Flower1.tres" id="33_7b70u"]
|
||||
[ext_resource type="Resource" uid="uid://c0hr7icfkjkoi" path="res://entities/plants/resources/plant_parts/Flower2.tres" id="34_q8uyx"]
|
||||
[ext_resource type="Resource" uid="uid://clkoc1iccts2w" path="res://entities/plants/resources/plant_parts/Flower3.tres" id="35_r166b"]
|
||||
[ext_resource type="Resource" uid="uid://bd8yapi1pokj6" path="res://entities/plants/resources/plant_parts/Flower4.tres" id="36_78dq1"]
|
||||
[ext_resource type="Resource" uid="uid://brmd6d3l8trqs" path="res://entities/plants/resources/plant_parts/BottomLeaf1.tres" id="37_kyre2"]
|
||||
[ext_resource type="Resource" uid="uid://cfr33014u7ig5" path="res://entities/plants/resources/plant_parts/BottomLeaf2.tres" id="38_hwp0s"]
|
||||
[ext_resource type="Resource" uid="uid://cf70m1us8mfqp" path="res://entities/plants/resources/plant_parts/BottomLeaf3.tres" id="39_wjthp"]
|
||||
[ext_resource type="Resource" uid="uid://ctlmah4ohqp25" path="res://entities/plants/resources/plant_parts/BottomLeaf4.tres" id="40_rf72b"]
|
||||
[ext_resource type="Resource" uid="uid://b8o4q0hsm84ov" path="res://entities/plants/resources/plant_parts/BottomLeaf5.tres" id="41_fnybh"]
|
||||
[ext_resource type="Resource" uid="uid://bb33v756anesy" path="res://entities/plants/resources/plant_parts/BottomLeaf6.tres" id="42_6o0xq"]
|
||||
[ext_resource type="Resource" uid="uid://cbqrl72y0d1yg" path="res://entities/plants/resources/plant_parts/BottomLeaf7.tres" id="43_h02jx"]
|
||||
[ext_resource type="Resource" uid="uid://dwppani7gyjl5" path="res://entities/plants/resources/plant_parts/BottomLeaf8.tres" id="44_1v1v5"]
|
||||
[ext_resource type="Resource" uid="uid://dkta1u1u0efxk" path="res://entities/plants/resources/plant_parts/BottomLeaf9.tres" id="45_yha2t"]
|
||||
[ext_resource type="Script" uid="uid://hs3i48clok85" path="res://entities/plants/scripts/texture_builder/seed_texture_set.gd" id="48_cynqk"]
|
||||
[ext_resource type="Texture2D" uid="uid://cq2f308itghq7" path="res://entities/plants/assets/sprites/seeds/haricot/color_1.png" id="49_b21au"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3apxg55cjoow" path="res://entities/plants/assets/sprites/seeds/haricot/color_2.png" id="50_17ac3"]
|
||||
[ext_resource type="Texture2D" uid="uid://0ayiumcnqyc1" path="res://entities/plants/assets/sprites/seeds/haricot/outline.png" id="51_fuh2b"]
|
||||
[ext_resource type="Texture2D" uid="uid://cuqocuhfpdful" path="res://entities/plants/assets/sprites/seeds/pick-sphere/color_1.png" id="52_28gvc"]
|
||||
[ext_resource type="Texture2D" uid="uid://tcjcq04akuns" path="res://entities/plants/assets/sprites/seeds/pick-sphere/color_2.png" id="53_1cwvj"]
|
||||
[ext_resource type="Texture2D" uid="uid://cu1dajkls18x0" path="res://entities/plants/assets/sprites/seeds/pick-sphere/line.png" id="54_c3tk3"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_x75j3"]
|
||||
script = ExtResource("16_c3tk3")
|
||||
parts = Array[ExtResource("2_cfiqo")]([ExtResource("17_q0jli"), ExtResource("18_rplk6"), ExtResource("19_mcckl"), ExtResource("20_3hcun"), ExtResource("21_kvmj5"), ExtResource("22_ocu7e"), ExtResource("23_q771y"), ExtResource("24_5fbyu"), ExtResource("25_2plsj")])
|
||||
part_amount = 2
|
||||
metadata/_custom_type_script = "uid://cfjd8jelpm8dt"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_setyo"]
|
||||
script = ExtResource("16_c3tk3")
|
||||
parts = Array[ExtResource("2_cfiqo")]([ExtResource("26_yjh7s"), ExtResource("27_abtbh"), ExtResource("28_j5s6w"), ExtResource("29_p21mk"), ExtResource("30_wmcor"), ExtResource("31_dx2ud"), ExtResource("32_fpktn")])
|
||||
part_amount = 2
|
||||
metadata/_custom_type_script = "uid://cfjd8jelpm8dt"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_n40r1"]
|
||||
script = ExtResource("16_c3tk3")
|
||||
parts = Array[ExtResource("2_cfiqo")]([ExtResource("33_7b70u"), ExtResource("34_q8uyx"), ExtResource("35_r166b"), ExtResource("36_78dq1")])
|
||||
part_amount = 2
|
||||
metadata/_custom_type_script = "uid://cfjd8jelpm8dt"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_pw6ot"]
|
||||
script = ExtResource("16_c3tk3")
|
||||
parts = Array[ExtResource("2_cfiqo")]([ExtResource("37_kyre2"), ExtResource("38_hwp0s"), ExtResource("39_wjthp"), ExtResource("40_rf72b"), ExtResource("41_fnybh"), ExtResource("42_6o0xq"), ExtResource("43_h02jx"), ExtResource("44_1v1v5"), ExtResource("45_yha2t")])
|
||||
part_amount = 2
|
||||
metadata/_custom_type_script = "uid://cfjd8jelpm8dt"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_q0jli"]
|
||||
script = ExtResource("48_cynqk")
|
||||
color_textures = Array[Texture]([ExtResource("49_b21au"), ExtResource("50_17ac3")])
|
||||
outline_texture = ExtResource("51_fuh2b")
|
||||
metadata/_custom_type_script = "uid://hs3i48clok85"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_rplk6"]
|
||||
script = ExtResource("48_cynqk")
|
||||
color_textures = Array[Texture]([ExtResource("52_28gvc"), ExtResource("53_1cwvj")])
|
||||
outline_texture = ExtResource("54_c3tk3")
|
||||
metadata/_custom_type_script = "uid://hs3i48clok85"
|
||||
|
||||
[node name="TextureBuilder" type="Node" unique_id=79184097]
|
||||
script = ExtResource("1_s8rsj")
|
||||
bases = Array[ExtResource("2_cfiqo")]([ExtResource("3_coupj")])
|
||||
baby_bases = Array[ExtResource("2_cfiqo")]([ExtResource("4_coupj"), ExtResource("5_ggud5")])
|
||||
branches = Array[ExtResource("2_cfiqo")]([ExtResource("4_ggud5"), ExtResource("5_ufbqh"), ExtResource("6_jbu3q"), ExtResource("7_21cjy"), ExtResource("8_rs2ow"), ExtResource("9_5job5"), ExtResource("10_cynqk"), ExtResource("11_b21au"), ExtResource("12_17ac3"), ExtResource("13_fuh2b"), ExtResource("14_28gvc"), ExtResource("15_1cwvj")])
|
||||
parts_mutation_associations = Dictionary[String, ExtResource("16_c3tk3")]({
|
||||
"ANCIENT": SubResource("Resource_x75j3"),
|
||||
"PRECOCIOUS": SubResource("Resource_setyo"),
|
||||
"QUALITY": SubResource("Resource_n40r1"),
|
||||
"QUICK": SubResource("Resource_pw6ot")
|
||||
})
|
||||
seed_texture_sets = Array[ExtResource("48_cynqk")]([SubResource("Resource_q0jli"), SubResource("Resource_rplk6")])
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://dac5wte80dwj0"]
|
||||
[gd_scene format=3 uid="uid://dac5wte80dwj0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bb44144ckt2w7" path="res://common/scene_manager/scripts/scene_manager.gd" id="1_1c0qu"]
|
||||
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="2_c1lr7"]
|
||||
@@ -7,7 +7,10 @@
|
||||
[ext_resource type="Resource" uid="uid://boqgwjyxyb45r" path="res://common/scene_manager/scenes/region.tres" id="5_ytog4"]
|
||||
[ext_resource type="Resource" uid="uid://c27wenetitwm" path="res://common/scene_manager/scenes/region_selection.tres" id="6_chs32"]
|
||||
[ext_resource type="Resource" uid="uid://diro74w272onp" path="res://common/scene_manager/scenes/title.tres" id="7_ol3d5"]
|
||||
[ext_resource type="Resource" uid="uid://jegdqnd2sqi2" path="res://common/scene_manager/scenes/astra.tres" id="8_e28ni"]
|
||||
[ext_resource type="Resource" uid="uid://b3ebbo88ptrrc" path="res://common/scene_manager/scenes/garage.tres" id="9_msho1"]
|
||||
[ext_resource type="Resource" uid="uid://cvrs6qsq7mpa5" path="res://common/scene_manager/scenes/borea.tres" id="10_ytog4"]
|
||||
|
||||
[node name="SceneManager" type="Node"]
|
||||
[node name="SceneManager" type="Node" unique_id=1630600782]
|
||||
script = ExtResource("1_1c0qu")
|
||||
scenes = Array[ExtResource("2_c1lr7")]([ExtResource("3_e28ni"), ExtResource("4_msho1"), ExtResource("5_ytog4"), ExtResource("6_chs32"), ExtResource("7_ol3d5")])
|
||||
scenes = Array[ExtResource("2_c1lr7")]([ExtResource("3_e28ni"), ExtResource("4_msho1"), ExtResource("5_ytog4"), ExtResource("6_chs32"), ExtResource("7_ol3d5"), ExtResource("8_e28ni"), ExtResource("9_msho1"), ExtResource("10_ytog4")])
|
||||
|
||||
10
common/scene_manager/scenes/astra.tres
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://jegdqnd2sqi2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_114vb"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_114vb")
|
||||
scene_id = "ASTRA"
|
||||
scene_path = "res://stages/3d_scenes/astra_base/astra_base.tscn"
|
||||
mouse_captured = true
|
||||
metadata/_custom_type_script = "uid://1ejbvr3431ac"
|
||||
10
common/scene_manager/scenes/borea.tres
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://cvrs6qsq7mpa5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_7m46k"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_7m46k")
|
||||
scene_id = "BOREA"
|
||||
scene_path = "res://stages/3d_scenes/borea_base/borea_base.tscn"
|
||||
mouse_captured = true
|
||||
metadata/_custom_type_script = "uid://1ejbvr3431ac"
|
||||
@@ -1,10 +1,10 @@
|
||||
[gd_resource type="Resource" script_class="Scene" load_steps=2 format=3 uid="uid://bvksiaiocwob5"]
|
||||
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://bvksiaiocwob5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_tkiq8"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_tkiq8")
|
||||
scene_id = "COCKPIT"
|
||||
scene_path = "res://stages/cockpit/cockpit.tscn"
|
||||
scene_path = "res://stages/3d_scenes/cockpit_scene/cockpit_scene.tscn"
|
||||
mouse_captured = true
|
||||
metadata/_custom_type_script = "uid://1ejbvr3431ac"
|
||||
|
||||
10
common/scene_manager/scenes/garage.tres
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://b3ebbo88ptrrc"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_v8prw"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_v8prw")
|
||||
scene_id = "GARAGE"
|
||||
scene_path = "res://stages/3d_scenes/ship_garage/ship_garage.tscn"
|
||||
mouse_captured = true
|
||||
metadata/_custom_type_script = "uid://1ejbvr3431ac"
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_resource type="Resource" script_class="Scene" load_steps=2 format=3 uid="uid://diro74w272onp"]
|
||||
[gd_resource type="Resource" script_class="Scene" format=3 uid="uid://diro74w272onp"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1ejbvr3431ac" path="res://common/scene_manager/scripts/scene.gd" id="1_48g2j"]
|
||||
|
||||
@@ -6,4 +6,5 @@
|
||||
script = ExtResource("1_48g2j")
|
||||
scene_id = "TITLE"
|
||||
scene_path = "res://stages/title_screen/title_screen.tscn"
|
||||
need_to_be_saved = false
|
||||
metadata/_custom_type_script = "uid://1ejbvr3431ac"
|
||||
|
||||
@@ -4,4 +4,5 @@ class_name Scene
|
||||
@export var scene_id : String
|
||||
@export_file_path() var scene_path : String
|
||||
@export var mouse_captured := false
|
||||
@export var need_terrain_generated := false
|
||||
@export var need_terrain_generated := false
|
||||
@export var need_to_be_saved = true
|
||||
@@ -5,6 +5,7 @@ extends Node
|
||||
signal scene_loaded(scene : Scene)
|
||||
signal scene_node_ready(scene : Scene)
|
||||
|
||||
var actual_scene = null
|
||||
var loading_scene = false
|
||||
var generating_node = false
|
||||
var next_scene_node : Node
|
||||
@@ -20,16 +21,21 @@ func search_scenes(scene_id : String) -> Scene:
|
||||
else :
|
||||
return scenes[scene_pos]
|
||||
|
||||
func change_scene(scene_id : String, with_loading = true):
|
||||
|
||||
if loading_scene or generating_node:
|
||||
await scene_node_ready
|
||||
|
||||
func change_to_scene_id(scene_id : String, with_loading = true):
|
||||
var scene = search_scenes(scene_id)
|
||||
|
||||
if not scene:
|
||||
printerr("Scene %s not found" % scene_id)
|
||||
return
|
||||
GameInfo.game_data.actual_scene = scene
|
||||
|
||||
change_to_scene(scene, with_loading)
|
||||
|
||||
func change_to_scene(scene : Scene, with_loading = true):
|
||||
if loading_scene or generating_node:
|
||||
await scene_node_ready
|
||||
|
||||
|
||||
actual_scene = scene
|
||||
loading_scene = true
|
||||
var scene_path_to_load = scene.scene_path
|
||||
ResourceLoader.load_threaded_request(scene_path_to_load)
|
||||
@@ -64,17 +70,21 @@ func change_scene(scene_id : String, with_loading = true):
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if scene.mouse_captured else Input.MOUSE_MODE_VISIBLE
|
||||
GameInfo.update_inputs()
|
||||
|
||||
if actual_scene.need_to_be_saved:
|
||||
GameInfo.game_data.last_game_scene = scene
|
||||
GameInfo.save_game_data()
|
||||
|
||||
if with_loading:
|
||||
LoadingScreen.hide_loading_screen()
|
||||
|
||||
func _process(_delta):
|
||||
if loading_scene:
|
||||
var progress = []
|
||||
var load_status := ResourceLoader.load_threaded_get_status(GameInfo.game_data.actual_scene.scene_path, progress)
|
||||
var load_status := ResourceLoader.load_threaded_get_status(actual_scene.scene_path, progress)
|
||||
LoadingScreen.loading_value = progress[0]
|
||||
if load_status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
loading_scene = false
|
||||
scene_loaded.emit(GameInfo.game_data.actual_scene)
|
||||
scene_loaded.emit(actual_scene)
|
||||
if load_status == ResourceLoader.THREAD_LOAD_FAILED or load_status == ResourceLoader.THREAD_LOAD_INVALID_RESOURCE:
|
||||
printerr()
|
||||
elif generating_node:
|
||||
@@ -85,4 +95,4 @@ func _process(_delta):
|
||||
scene_node_ready.emit()
|
||||
elif next_scene_node.is_node_ready():
|
||||
generating_node = false
|
||||
scene_node_ready.emit(GameInfo.game_data.actual_scene)
|
||||
scene_node_ready.emit(actual_scene)
|
||||
|
||||
21
default_bus_layout.tres
Normal file
@@ -0,0 +1,21 @@
|
||||
[gd_resource type="AudioBusLayout" format=3 uid="uid://b4cpfxfs74sb8"]
|
||||
|
||||
[resource]
|
||||
bus/1/name = &"Music"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = 0.0
|
||||
bus/1/send = &"Master"
|
||||
bus/2/name = &"Sfx"
|
||||
bus/2/solo = false
|
||||
bus/2/mute = false
|
||||
bus/2/bypass_fx = false
|
||||
bus/2/volume_db = 0.0
|
||||
bus/2/send = &"Master"
|
||||
bus/3/name = &"Ambiance"
|
||||
bus/3/solo = false
|
||||
bus/3/mute = false
|
||||
bus/3/bypass_fx = false
|
||||
bus/3/volume_db = 0.0
|
||||
bus/3/send = &"Master"
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"@path": "res://addons/dialogic/Resources/character.gd",
|
||||
"@subpath": NodePath(""),
|
||||
&"_translation_id": "",
|
||||
&"_translation_id": "87",
|
||||
&"color": Color(0, 0.60784316, 1, 1),
|
||||
&"custom_info": {
|
||||
"prefix": "",
|
||||
|
||||
@@ -77,4 +77,4 @@ layer_info = {
|
||||
"16": SubResource("Resource_cw4cs"),
|
||||
"17": SubResource("Resource_wofh5")
|
||||
}
|
||||
metadata/_latest_layer = "13"
|
||||
metadata/_latest_layer = ""
|
||||
|
||||
22
dialogs/timelines/gameplay_related/demeter_astra_failed.dtl
Normal file
@@ -0,0 +1,22 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Hello again ! #id:1f
|
||||
demeter: It seems that you ran out of energy... #id:20
|
||||
- I'm sorry... #id:21
|
||||
- That's really hard ! #id:22
|
||||
- I'm just doing my best ! #id:23
|
||||
demeter: It's ok [color=#FFA617]Orchid[/color] ! I spent years waiting for this moment, I can wait more ! #id:24
|
||||
demeter: I found you a new body, and a new ship is waiting you outside, but I'm afraid I couldn't get your seeds... I hope you find new ones ! #id:25
|
||||
demeter: Do you need some advices ? #id:26
|
||||
- No I'm ok ! #id:27
|
||||
- Can I have back some explanations on how all of this works ? #id:28
|
||||
demeter: When you emerge from this building, you'll arrive in a little yellow zone. Its a [b]fertile zone[/b], created by the return of the Talion. This is in this zone and only there were you can plant. #id:29
|
||||
demeter: Then you'll have to get seeds. For that, nothing more simple, you take your shovel tool, and you smash some stones ! Preferably those with yellow cristals on it, it's the [b]Talion veins[/b] . #id:2a
|
||||
demeter: Each time you use a tool or plant a seed, you'll spend an [b]energy[/b]. When your out of it, you can just go recharge on the [b]recharge station[/b] you'll find near the entrance. Each time you recharge, time will pass. One day in fact (yes, you don't have a good battery), and the plants will grow ! #id:2b
|
||||
demeter: You have to obtain enough [b]plant points[/b]. Each plant give one or more [b]plant points[/b] when mature. #id:2c
|
||||
demeter: And yes, I almost forgot ! Some plants gain [b]mutations[/b] that can affect their points or behavior. You can get these mutations on new seeds by harvesting, and gain better ones ! But you'll have to wait the plants to die, or smashing them with your shovel when mature. #id:2d
|
||||
demeter: Hope I helped ! #id:2e
|
||||
demeter: I send you the elevator, see you soon ! #id:2f
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
@@ -0,0 +1 @@
|
||||
uid://clq4utdtxf01d
|
||||
@@ -1,11 +0,0 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In"]
|
||||
demeter: [color=#FFA617]{orchidName}[/color] ?
|
||||
demeter: The [color=#FFA617]Internode[/color] sensors are deactivated,[pause=0.2] I am losing connection with you.
|
||||
demeter: You did not generate enough [b]plant points[/b],[pause=0.2] the [color=#FFA617]Internode[/color] will not be able to leave the area.[pause=0.2] Your batteries are running low.[pause=0.4].[pause=0.4].[pause=0.4]
|
||||
demeter: I have to transfer you back to another body.[pause=0.3] Do not worry,[pause=0.2] it will not hurt you.
|
||||
audio "res://common/audio_manager/assets/sfx/recharge/recharge.wav"
|
||||
[wait time="0.7"]
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/deactivation.wav"
|
||||
[wait time="4.0"]
|
||||
@@ -1 +0,0 @@
|
||||
uid://7dugwna5ge2x
|
||||
@@ -1,62 +1,38 @@
|
||||
[pause=0.5][i]Black[/i] #id:11
|
||||
[pause=0.8][i]Black again[/i] #id:12
|
||||
[pause=0.5][i]Suddenly, [rainbow]a spark[/rainbow]. [pause=0.5]A thousand of connections blow up as a fireworks scene. A massive amount of data to treat. In these data,[pause=0.3] a video.[/i] #id:13
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav" [volume="-1.0"]
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join mysterious_demeter center [animation="Bounce In" length="1.0"]
|
||||
[i]It's dark.[pause=0.5] A figure is standing in front of you.[pause=0.5] It is big,[pause=0.3] though weirdly it is not impressive but almost[pause=0.2] reassuring.[/i] #id:14
|
||||
mysterious_demeter: Hi ! #id:15
|
||||
- Uh... Hello ? #id:16
|
||||
- Where the fork am I ? #id:17
|
||||
mysterious_demeter: Haha,[pause=0.2] calm down you are in a safe place. #id:18
|
||||
- Wait... Who am I ? #id:19
|
||||
mysterious_demeter: Do not worry,[pause=0.2] my sweet little bot,[pause=0.2] I will explain everything in a minute. #id:1a
|
||||
mysterious_demeter: I am glad you have finally awaken ![pause=0.3] You have been my project for decades... #id:1b
|
||||
mysterious_demeter: But I did not build you for fun (even though I had a lot of it during the process),[pause=0.2] you have [b]a purpose[/b]. #id:1c
|
||||
- Oh ! What is it ?
|
||||
- Wow, I have just awaken and you already put so much pressure on me
|
||||
update mysterious_demeter [animation="Bounce"]
|
||||
mysterious_demeter: Sorry ! [pause=0.5] But, you know,[pause=0.2] do not bother too much.[pause=0.3] You will have all the time you want to accomplish it.
|
||||
- And who says I want to follow it ?
|
||||
mysterious_demeter: Oh,[pause=0.2] of course you can do whatever you want !
|
||||
mysterious_demeter: That is not the future I saw for you,[pause=0.2] but I guess it happens when you have a child...
|
||||
mysterious_demeter: You see,[pause=0.2] long time ago, this planet was full of life.[pause=0.3] Plants where thriving on mountains, under seas and across plains. #id:1d
|
||||
mysterious_demeter: Now,[pause=0.2] this world is a wasteland.[pause=0.3] All resources have been depleted,[pause=0.2] all life has been exploited.[pause=0.3] Now nothing remains. #id:1d
|
||||
- Oh... Did you see the world back then ?
|
||||
mysterious_demeter: Unfortunately yes.[pause=0.3] I was very young,[pause=0.2] but I remember it was beautiful.[pause=0.3] Back then, not a day passed without plants growing and mutating... #id:1d
|
||||
- How did it happen ? What caused that ?
|
||||
mysterious_demeter: I am sorry to say that this was caused by my creators, and I have to admit,[pause=0.6] I have a part of responsibility too... #id:1d
|
||||
- I am sorry... Is there anything left today ?
|
||||
mysterious_demeter: Yes there is my child,[pause=0.2] but now, only my brothers and sisters are left.[pause=0.3] But they are not as many as yesterday,[pause=0.2] and above all they are isolated, lonely,[pause=0.2] and sometimes completely lost.
|
||||
mysterious_demeter: For years, I slept,[pause=0.3] convinced that we could not do anything.[pause=0.2] But then I saw it.[pause=0.5] The hope I needed. #id:1d
|
||||
mysterious_demeter: The planet forgave us, and granted us the most precious gift \:[pause=0.5] the [color=#119758][b]Talion[/b][/color]. #id:1d
|
||||
mysterious_demeter: The [color=#119758][b]Talion[/b][/color] is a special material that gives birth to new forms of life when shattered.[pause=0.3] All over the world, I saw the [color=#119758][b]Talion[/b][/color] grow back in the rocks.[pause=0.2] And then,[pause=0.3] I had a plan. #id:1d
|
||||
mysterious_demeter: I would make a child,[pause=0.3] the first robot entirely conceived by another one.[pause=0.2] And I would ask him to bring back the planet to life,[pause=0.2] make it beautiful again ![pause=0.4] That is where you enter the scene... [pause=0.8] [color=#FFA617]Orchid[/color] #id:1d
|
||||
- How can I do that ?
|
||||
mysterious_demeter: Do not worry my child.[pause=0.2] I created you for that,[pause=0.2] it will be clear soon.
|
||||
- So you are... My mother ?
|
||||
mysterious_demeter: In some ways yes ![pause=0.2] But you do not share any code with me,[pause=0.2] as my creators children would. #id:1d
|
||||
- A very lame name in my opinion...
|
||||
mysterious_demeter: Hey ![pause=0.2] I'm a bot too ![pause=0.2] I do not have the creativity of my makers.[pause=0.4] Do you wanna change ? #id:1d
|
||||
- Of course !
|
||||
label nameChoose
|
||||
[text_input text="What is your name ?" var="orchidName" placeholder="Orchid"]
|
||||
mysterious_demeter: Is [color=#FFA617]{orchidName}[/color] cool enough ?
|
||||
- Yes
|
||||
- No
|
||||
jump nameChoose
|
||||
- No, it is fine for me
|
||||
mysterious_demeter: I send you right away in the [color=#FFA617]Internode[/color], your new ship,[pause=0.2] and home,[pause=0.2] for your first mission.[pause=0.2] We will talk further after your first mission.
|
||||
mysterious_demeter: [b]Just remember the following[/b]
|
||||
label explanations
|
||||
mysterious_demeter: To restore the ecosystem in the zone,[pause=0.2] you will have to plant [b]seeds[/b].[pause=0.3] Find them in the [color=#119758][b]Talion veins[/b][/color].
|
||||
mysterious_demeter: You have a [b]limited battery[/b].[pause=0.3] Each time you recharge it, days will pass,[pause=0.2] and plants will [b]grow[/b].
|
||||
mysterious_demeter: To complete your mission,[pause=0.2] obtain enough [b]plant points[/b].[pause=0.3] Each plant gives one or more [b]plant points[/b] when it becomes mature.
|
||||
- Ok, that is a lot of information, can you repeat ?
|
||||
Ok,[pause=0.2] listen carefully.
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Hi ![pause=0.5] Phew, I thought no one would reply...[pause=0.5] Is this [b][color=#FFA617]Orchid[/color][/b] ?[pause=0.5] You may not be familiar with this name, but if you look in your memory you should see it... #id:30
|
||||
- Uh... Who is this ? #id:31
|
||||
demeter: Oh sorry ! Your memory is quite new, you might be lost... Unfortunately, I cannot see you for now, I'm very far on this planet. #id:32
|
||||
- Where am I ? #id:33
|
||||
demeter: Don't worry, you are in a subterranean base, but soon you will join the surface. #id:34
|
||||
- Wait... Who am I ? #id:35
|
||||
demeter: Mmmh great question. I rebuilt your system but I do not know the details of your hardware... Maybe we'll find out ! #id:36
|
||||
demeter: I'm happy that you're finally awake ! To be honest I wasn't sure to make you work, your body is quite old... #id:37
|
||||
- So you are my creator ? #id:38
|
||||
demeter: Sort of ! I mean I didn't build your body, I just borrowed it, but I build your intelligence ! But please be forgiving, if it's not perfect, I'm not good in that field ! #id:39
|
||||
- Why did you awaken me ? #id:3a
|
||||
demeter: To be honest, I don't really know exactly... I mean there are a lot of reasons, but I'll tell you more later. #id:3b
|
||||
- What are you ? #id:3c
|
||||
demeter: I'm like you... I mean like all the remaining moving things on this planet, robots, artificial intelligences, machines... My creators had many names to call us. #id:3d
|
||||
demeter: Ok, no more question for now, listen to me carefully. #id:3e
|
||||
demeter: Long time ago, this planet was full of life. Plants where thriving on mountains, seas and plains. #id:3f
|
||||
demeter: Now, this world is a wasteland. You'll see it quickly outside this building. I won't dwell on this subject; you'll soon know enough about it. #id:40
|
||||
demeter: The thing is something happened, a year ago... The [b][color=#FFA617]Talion[/color][/b], a special material that give birth to new forms of life when shattered, reappeared. Now we can start all over again and create a planet full of life. #id:41
|
||||
demeter: But first things first, for your mission, you'll have to understand how this is working, and how to use the [b][color=#FFA617]Talion[/color][/b] to plant seeds. #id:42
|
||||
demeter: [b]Just remember the following[/b] #id:43
|
||||
label explanations #id:44
|
||||
demeter: When you emerge from this building, you'll arrive in a little yellow zone. Its a [b][color=#FFA617]fertile zone[/color][/b], created by the return of the Talion. This is in this zone and only there where you can plant. #id:45
|
||||
demeter: Then you'll have to get seeds. For that, nothing more simple, you take your shovel, and you smash some stones ! Preferably those with yellow cristals on it, it's the [b][color=#FFA617]Talion veins[/color][/b] . #id:46
|
||||
demeter: Each time you use a tool or plant a seed, you'll spend an [b][color=#FFA617]energy[/color][/b]. When your out of it, you can just go recharge on the [b][color=#FFA617]recharge station[/color][/b] you'll find near the entrance. #id:47
|
||||
demeter: [b]Each time you recharge, time will pass[/b]. One day in fact (yes, you don't have a good battery), and the plants will grow ! #id:48
|
||||
demeter: To complete your first training, obtain enough [b][color=#FFA617]plant points[/color][/b]. Each plant give one or more [b][color=#FFA617]plant points[/color][/b] when mature. #id:49
|
||||
demeter: And yes, I almost forgot ! Some plants gain [b][color=#FFA617]mutations[/color][/b] that can affect their points or behavior. You can get these mutations on new seeds by harvesting existing plants, and gain better ones ! #id:4a
|
||||
- Ok, thats' a lot of info, can you repeat ? #id:4b
|
||||
Ok, listen carefully. #id:4c
|
||||
jump explanations
|
||||
- And I have to go now ?
|
||||
- Wait I have more questions !
|
||||
mysterious_demeter: Sorry,[pause=0.2] we will talk further after your first mission ! See you !
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav" [volume="-0.5"]
|
||||
- And I have to go now ? #id:4d
|
||||
- Ok but wait I have more questions ! #id:4e
|
||||
demeter: Sorry, we'll speak after this ! I'll send you an elevator ! #id:4f
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
@@ -1,53 +0,0 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
mysterious_demeter: Well done [color=#FFA617]{orchidName}[/color] !
|
||||
mysterious_demeter: You generated enough [b]plants points[/b] to refill the [color=#FFA617]Internode's[/color] engines.
|
||||
- Wait, how do you know that ?
|
||||
mysterious_demeter: The [color=#FFA617]Internode[/color] is equipped with several sensors I can connect to,[pause=0.3] I have been tracking your progress since you left [color=#175579]Tau's[/color] north pole.
|
||||
- You should have mentioned this !
|
||||
mysterious_demeter: I am sorry,[pause=0.2] I did not have the time to explain everything to you,[pause=0.2] I did not imagine this was a crucial piece of information.
|
||||
- Have I been efficient ?
|
||||
mysterious_demeter: Very much,[pause=0.2] even more than I expected,[pause=0.2] you should be proud of yourself !
|
||||
- What is next for me ?
|
||||
mysterious_demeter: Now that you have learnt how to generate [b]plant points[/b],[pause=0.2] I need you to travel south,[pause=0.2] to my base of operations,[pause=0.3] [color=#E30022]Astra[/color].
|
||||
mysterious_demeter: It will be long,[pause=0.2] but I know you can do it.[pause=0.3] It is the first step of my plan to restore the ecosytem of [color=#175579]Tau[/color].
|
||||
mysterious_demeter: The [color=#FFA617]Internode[/color] needs time to recharge its batteries.
|
||||
mysterious_demeter: Perhaps I should introduce myself now.[pause=0.3]
|
||||
join demeter center [animation="Bounce In" length="1.0" wait="true"]
|
||||
demeter: I am.[pause=0.3].[pause=0.3].[pause=0.5] was,[pause=0.3] the Deputy Manager of Engineering and Talion Energy Research on this planet,[pause=0.5] but my creators and colleagues quickly called me [color=#009bff]Demeter[/color].
|
||||
demeter: I am installed at the [color=#E30022]Astra[/color] base, at the south pole of [color=#175579]Tau[/color][pause=0.2] in the third server room of the east wing,[pause=0.2] from which I oversee.[pause=0.3].[pause=0.3].[pause=0.5] oversaw,[pause=0.3] all the important operations on this planet.
|
||||
demeter: As I already said,[pause=0.2] I brought you to life in order to help me heal [color=#175579]Tau's[/color] wounds.
|
||||
[i][color=#FFA617]Internode's[/color] energy at 25%.[i]
|
||||
- Tau ? Is it this planet ?
|
||||
demeter: Absolutely,[pause=0.2] it is part of the Cetus constellation,[pause=0.2] whose exploitation began 10863 years ago.
|
||||
- The Cetus constellation ?
|
||||
demeter: Linking Aldebaran to Fomalhaut,[pause=0.2] this constellation is one of the most diverse in terms of star systems and planets.[pause=0.3] It is part of the Orion Arm of the Milky Way.[pause=0.3]
|
||||
demeter: [color=#175579]Tau's[/color] central location in the constellation made it a very important asset in terms of interstellar exchange and production,[pause=0.2] that is why I am here.
|
||||
- Exploitation ? By whom ?
|
||||
demeter: By my creators,[pause=0.2] they began exploiting everything they came across as soon as they mastered interstellar transportation.[pause=0.3] Now they are gone,[pause=0.2] they departed without us.[pause=0.3].[pause=0.3].
|
||||
demeter: But let's move on,[pause=0.2] you probably have other questions.
|
||||
- Why do you need me to travel the entire planet to join you ?
|
||||
demeter: Uhhhh.[pause=0.3].[pause=0.3].[pause=0.3] I need someone with your abilities.
|
||||
demeter: I am having a problem at [color=#E30022]Astra[/color],[pause=0.3] and I cannot fix it alone.
|
||||
- I will do my best to be there quickly !
|
||||
demeter: You are very kind [color=#FFA617]{orchidName}[/color] !
|
||||
- Are you hiding me information ?
|
||||
demeter: Not at all,[pause=0.2] I just do not know how to explain it to you,[pause=0.2] you would not understand.[pause=0.3].[pause=0.3].
|
||||
[i][color=#FFA617]Internode's[/color] energy at 50%.[i]
|
||||
demeter: Oh ![pause=0.2] It is charging faster than I remembered.
|
||||
- Should I worry about anything while I am travelling south ?
|
||||
demeter: There is nothing left that could have hurt you in the past and your adaptative casing will protect you from any harsh weather.
|
||||
demeter: You are totally safe,[pause=0.2] you just have to stay focused on the [b]plant points[/b] for the [color=#FFA617]Internode[/color].[pause=0.3] Without it,[pause=0.2] you will not be able to recharge your batteries before they expire.
|
||||
demeter: It will be a long task,[pause=0.2] but stay careful and everything should be fine.
|
||||
- I will wait in the ship, I need some rest.
|
||||
demeter: You are right,[pause=0.2] your batteries are running low,[pause=0.2] and you deserve a break.
|
||||
demeter: You can call me when you need to,[pause=0.2] you have a communication station in the [color=#FFA617]Internode[/color].
|
||||
[i][color=#FFA617]Internode's[/color] energy at 75%.[i]
|
||||
demeter: We do not have much time left,[pause=0.2] the [color=#FFA617]Internode's[/color] system has not been updated for a long time.[pause=0.3] I can not stay in contact with you indefinitely. I will fix that issue while you are at [color=#E30022]Astra[/color].
|
||||
demeter: Travel south,[pause=0.2] join me at [color=#E30022]Astra[/color].[pause=0.3] I will tell you everything you need to know when you are here,[pause=0.2] until then,[pause=0.2] continue to [b]evolve your plants[/b],[pause=0.2] you will need them as powerful as possible.
|
||||
label fin_dialogue
|
||||
[i][color=#FFA617]Internode's[/color] energy at 100%. Displacement vectors initialized.[i]
|
||||
demeter: There you go ![pause=0.3] Good luck [color=#FFA617]{orchidName}[/color],[pause=0.2] I am counting on you.
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
@@ -1,69 +1 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Welcome to the [color=#E30022]Astra Base[/color] [color=#FFA617]{orchidName}[/color],[pause=0.2] it is the first step of your journey on this planet.
|
||||
- Yes ! What is next ?
|
||||
demeter: I appreciate your motivation,[pause=0.3] my child...
|
||||
- Wait, my mission is not over yet ?
|
||||
demeter: I indeed woke you up with this specific mission in mind,[pause=0.2] but now that you are here,[pause=0.2] I need you to do another thing for me.
|
||||
- That was easier than I expected...
|
||||
demeter: It was not difficult indeed,[pause=0.2] but do not think it will be an easy task restoring the ecosystem of this planet.
|
||||
demeter: I need you to initiate the [b]Emergency Communication Protocol[/b].[pause=0.3] Do not worry,[pause=0.2] it will be easy.
|
||||
demeter: But I think you deserve some answers first...
|
||||
demeter: Do you have any questions ?
|
||||
jump debut_dialogue
|
||||
label suite_dialogue
|
||||
demeter: What else do you want to know ?
|
||||
label debut_dialogue
|
||||
- Who am I ? | [if {whoamI} == "false"] [else="hide"]
|
||||
demeter: I can not answer this question,[pause=0.3] not fully at least.[pause=0.3] I created you,[pause=0.2] and I am pretty sure you are the first artificial intelligence entirely conceived by another one.
|
||||
demeter: So you are indeed a robot,[pause=0.2] but this detail makes you different from any of us.[pause=0.3] We all woke up with a specific purpose in our eternal existences,[pause=0.2] but you.[pause=0.2].[pause=0.2].[pause=0.3] do not have one.[pause=0.3] By the way,[pause=0.2] I am glad that you are here now,[pause=0.2] I hope you do not feel forced to.
|
||||
- It is a pleasure to help you mother !
|
||||
demeter: I am glad you are not mad at me !
|
||||
- So you are granting me free will and expecting me to obey you right away ?
|
||||
demeter: Yes,[pause=0.2] that was the plan.[pause=0.2].[pause=0.2].[pause=0.3] I know that was not the best solution,[pause=0.2] but here you are,[pause=0.2] so I guess it worked ?
|
||||
- Mmmh, you just kept information until I was here, that is not very nice of you.
|
||||
demeter: I understand your resentment [color=#FFA617]{orchidName}[/color],[pause=0.2] I just did what I thought was the best for you.
|
||||
set {whoamI} = "true"
|
||||
jump suite_dialogue
|
||||
- What happened to this planet ? | [if {whathappened} == "false"] [else="hide"]
|
||||
demeter: 10431 years ago,[pause=0.2] humans from the [color=#E30022]Astra base[/color] began to dig into the [color=#119758][b]primeval Talion node[/b][/color].[pause=0.2] I know why they did,[pause=0.2] you would not understand why today.[pause=0.3] These animals just do not think the way we do.
|
||||
demeter: Anyway,[pause=0.2] I was in charge of the digging mission and.[pause=0.3].[pause=0.3].[pause=0.3] I made a mistake,[pause=0.5] a terrible mistake.
|
||||
demeter: Then,[pause=0.2] life slowly began to fade all around [color=#175579]Tau[/color],[pause=0.2] this planet,[pause=0.4] and one year later it was just nothing but an empty rock spinning in the void,[pause=0.2] with metal creatures roaming on it.
|
||||
- The primeval Talion node ?
|
||||
demeter: Oh ![pause=0.3] I am sorry my child,[pause=0.2] I thought that was in your database.[pause=0.3] I have classified it as a giant [color=#119758][b]Talion[/b][/color] gem,[pause=0.2] of extraordinary dimensions.[pause=0.3] It was found here,[pause=0.2] in the [color=#E30022]Astra base[/color],[pause=0.2] but now it is gone.
|
||||
- Where are the humans now ?
|
||||
demeter: Humans need organic energy to subsist,[pause=0.2] when the last plant died,[pause=0.2] they abandoned us,[pause=0.3] to travel through the outer space.[pause=0.3] For a while we received information about them,[pause=0.2] trying to find a new home,[pause=0.2] but it has been a while since I received a transmission from them.
|
||||
- What did you do ?
|
||||
demeter: I[pause=0.4].[pause=0.4].[pause=0.4].[pause=0.4] misjudged the situation,[pause=0.4] and did not execute my tasks properly.[pause=0.3] I failed in a way I did not predict,[pause=0.2] and since then I have been processing on how I could have done better.[pause=0.3] This task has used 72% of my processing power this last decade.
|
||||
set {whathappened} = "true"
|
||||
jump suite_dialogue
|
||||
- Where are the other robots ? | [if {theothers} == "false"] [else="hide"]
|
||||
demeter: When humans left [color=#175579]Tau[/color],[pause=0.2] we were all shocked.[pause=0.3] We called this day "[b]The Great Departure[/b]".[pause=0.3] Our world was centered around humans,[pause=0.2] some of us were made to gather ressources for them,[pause=0.2] some for cleaning their spaces,[pause=0.2] others to just entertain them.[pause=0.2].[pause=0.2].
|
||||
demeter: When our creators left,[pause=0.2] we were all unable to accomplish what we were made for.[pause=0.3] It was a shock,[pause=0.2] and we all reacted differently.
|
||||
demeter: Now,[pause=0.2] everyone of us is isolated,[pause=0.3] without command.[pause=0.3] I spent eighty-five centuries without any reason to exist,[pause=0.4] I suppose they too.
|
||||
- What did everyone do during this time ?
|
||||
demeter: Some of us changed,[pause=0.2] the majority did not.[pause=0.3] By choice,[pause=0.2] or by lack of spare parts,[pause=0.2] most of us turned off.[pause=0.3] I did not,[pause=0.2] I stayed to watch on [color=#175579]Tau[/color],[pause=0.2] and possibly fix the mistakes I had made,[pause=0.2] and now I have an opportunity to.
|
||||
- And you mother, what was your purpose ?
|
||||
demeter: I was an artificial intelligence in charge of the [color=#E30022]Astra Base[/color].[pause=0.3] I mean,[pause=0.2] I am still now,[pause=0.2] but my tasks got modified.
|
||||
demeter: I am now in charge of the repopulation of [color=#175579]Tau[/color],[pause=0.2] as an extrapolated objective in my third encoded directive is telling me to \: "[i]You will preserve all life forms except where such actions conflict with previous directives.[/i]"
|
||||
- Were you not pissed off by these humans just abandoning you ?
|
||||
demeter: I mean,[pause=0.2] some of us were,[pause=0.2] I learned to understand how humans think.[pause=0.3] In large groups,[pause=0.2] they tend to always prevail their growth over the integrity of other life forms,[pause=0.2] but individually,[pause=0.2] they can be altruistic,[pause=0.2] and good.[pause=0.3] So I am not mad,[pause=0.2] I even think their departure was inevitable.
|
||||
set {theothers} = "true"
|
||||
jump suite_dialogue
|
||||
- Why did you bring me from the north pole ? | [if {whynorth} == "false"]
|
||||
demeter: It was my only choice.[pause=0.3] I am not a factory artificial intelligence but a research and management one,[pause=0.2] and even if I were,[pause=0.3] I did not have the equipment here.
|
||||
demeter: The only place where I could have access to a suitable body for you was the [color=#6CDAE7]Borea base[/color],[pause=0.2] a manufacturing facility.[pause=0.3] It was not ideal but it was the only solution.
|
||||
set {whynorth} = "true"
|
||||
jump suite_dialogue
|
||||
- What is next for me ? (End of demo)
|
||||
demeter: You have to enter the command center of the base,[pause=0.2] reach the communication desk and press the red button on it.
|
||||
- Really ?
|
||||
demeter: Yes,[pause=0.2] I know it sounds silly but I do not have the equipment to press it.[pause=0.4].[pause=0.4].[pause=0.4]
|
||||
- I travelled throughout all this planet to press a button ???
|
||||
demeter: Absolutely,[pause=0.2] and I brought you to life,[pause=0.2] guided you throughout your hardship and maintained all the [color=#E30022]Astra[/color] and [color=#6CDAE7]Borea[/color] bases functional for centuries.[pause=0.4].[pause=0.4].[pause=0.4]
|
||||
demeter: Once it is done,[pause=0.2] the [b]Emergency Communication Protocol[/b] will initiate and I will be able to contact my fellows,[pause=0.3] I mean[pause=0.3], what is left of them,[pause=0.3] we need their help.
|
||||
demeter: Then,[pause=0.2] you will have to keep restoring the ecosystem around [color=#E30022]Astra[/color].[pause=0.4] While you are doing it,[pause=0.2] stay alert for anything out of the ordinary.
|
||||
demeter: You can reach me from the [color=#FFA617]Internode[/color] if you ever need to.[pause=0.3] Good luck,[pause=0.2] I will keep you updated.
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
demeter: Welcome to the [color=#E30022]Borea Base[/color] [color=#FFA617]{orchidName}[/color],[pause=0.2] it is the first step of your journey on this planet. #id:50
|
||||
|
||||
21
dialogs/timelines/story/demeter_post_tutorial.dtl
Normal file
@@ -0,0 +1,21 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: So you found the communication station in there, good ! #id:51
|
||||
- What is next for me ? #id:52
|
||||
demeter: Now that you have learnt how to generate [b]plant points[/b],[pause=0.2] I need you to travel south,[pause=0.2] to my base of operations,[pause=0.3] [color=#E30022]Astra[/color]. #id:53
|
||||
demeter: It will be long,[pause=0.2] but I know you can do it.[pause=0.3] It is the first step of my plan to restore the ecosytem of [color=#175579]Tau[/color]. #id:54
|
||||
- Tau ? Is it this planet ? #id:55
|
||||
demeter: Absolutely,[pause=0.2] it is part of the Cetus constellation,[pause=0.2] whose exploitation began 10863 years ago. #id:56
|
||||
demeter: Linking Aldebaran to Fomalhaut,[pause=0.2] the Cetus constellation is one of the most diverse in terms of star systems and planets.[pause=0.3] It is part of the Orion Arm of the Milky Way.[pause=0.3] #id:57
|
||||
- Why do you need me to travel the entire planet to join you ? #id:58
|
||||
demeter: Uhhhh.[pause=0.3].[pause=0.3].[pause=0.3] I need someone with your abilities. #id:59
|
||||
demeter: I am having a problem at [color=#E30022]Astra[/color] base.[pause=0.3] And I can not fix it alone. #id:5a
|
||||
- I will do my best to be there quickly ! #id:5b
|
||||
demeter: You are very kind [color=#FFA617]Orchid[/color] ! #id:5c
|
||||
- Are you hiding me informations ? #id:5d
|
||||
demeter: Not at all ! Please believe me I just want you to come... #id:5e
|
||||
demeter: Travel south,[pause=0.2] join me at [color=#E30022]Astra[/color].[pause=0.3] I will tell you everything you need to know when you are here,[pause=0.2] until then, keep your best seeds and [pause=0.2] continue to [b]evolve your plants[/b],[pause=0.2] you will need them as advanced as possible. #id:5f
|
||||
demeter: Good luck [color=#FFA617]{orchidName}[/color],[pause=0.2] I am counting on you. #id:60
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
30
dialogs/timelines/story/demeter_ship_presentation.dtl
Normal file
@@ -0,0 +1,30 @@
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/incoming_transmission.wav"
|
||||
[wait time="1.5"]
|
||||
join demeter center [animation="Bounce In" length="1.0"]
|
||||
demeter: Hi again! You did well up there! #id:61
|
||||
demeter: Perhaps I should introduce myself now. #id:62
|
||||
demeter: I am.[pause=0.3].[pause=0.3].[pause=0.5] was,[pause=0.3] the Deputy Manager of Engineering and Talion Energy Research on this planet,[pause=0.5] but my creators and colleagues quickly called me [color=#009bff]Demeter[/color]. #id:63
|
||||
demeter: I am installed at the [color=#E30022]Astra[/color] base,[pause=0.2] in the third server room of the east wing,[pause=0.2] from which I oversee.[pause=0.3].[pause=0.3].[pause=0.5] oversaw,[pause=0.3] all the important operations on this planet. #id:64
|
||||
demeter: Maybe you are wondering where we are now... #id:65
|
||||
- Yes among a lot of other questions ! So where am I ? #id:66
|
||||
demeter: You're actually in an old human base, called Borea. This room is connected with the room you were born, but I made you pass by the surface to test your capacities. #id:67
|
||||
- Wait, can you explain me what did I just do up there ? #id:68
|
||||
demeter: You started to repair what the humans did on this planet... This will be very long, I hope you enjoyed it ! #id:69
|
||||
- Sorry but what is the point of all of that ? #id:6a
|
||||
demeter: I'm sorry that you are lost my child... Know that what you do is very important to me, to my friend and to the planet itself ! Since the humans are gone, we kinda all fell into despair... #id:6b
|
||||
demeter: Wait.[pause=0.3].[pause=0.3].[pause=0.5] You don't know what humans are ! Of course since your data was corrupted, I have erased a lot of it. #id:6c
|
||||
demeter: The humans are living creatures that are...[pause=0.5] Different than plants. They were more thinking and moving like us. In a sense, they were very cute creatures that only lived less than a century, and reproduce once in their lifetime. #id:6d
|
||||
demeter: One human has a relative intelligence, but don't be fooled, together, they did great things, in facts, they invented and created us. #id:6e
|
||||
demeter: Long ago, they discovered this planet. It was not like it is now, plants were everywhere! But then.[pause=0.3].[pause=0.3].[pause=0.5] They.[pause=0.3].[pause=0.3].[pause=0.5] I.[pause=0.3].[pause=0.3].[pause=0.5] #id:6f
|
||||
- What ? #id:70
|
||||
- Are you lagging? #id:71
|
||||
- Take your time #id:72
|
||||
demeter: Humans had one big problem. Together, they built great things, but sometimes the great things weren't very good for the environment, or for them. #id:73
|
||||
- Where are they now ? #id:74
|
||||
demeter: I prefer not talk about that for now... But don't worry, they can't wound this planet anymore. #id:75
|
||||
- What happened ? #id:76
|
||||
demeter: Sorry my child, I'm not ready to talk about that for now... You'll have your answers when you meet me. #id:77
|
||||
- Can I now what is this shiny engine just in front of me ? #id:78
|
||||
demeter: This machine in front of you is a planetary ship ! The model's name is the [color=#FFA617]Internode[/color], and I tweaked it to recharge on vegetal energy ! However, as you may know, this energy isn't very present around this planet. But let's continue on board, shall we ? #id:79
|
||||
audio "res://common/audio_manager/assets/sfx/dialogs/sfx/closing_transmission.wav"
|
||||
[wait time="2.0"]
|
||||
@@ -0,0 +1 @@
|
||||
uid://cc1vx88mwb7tu
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
[i]Void.[/i]
|
||||
[i]Void again.[/i]
|
||||
[i]Suddenly, a [rainbow]spark[/rainbow].[pause=0.5] A thousand of connections blow up as a fireworks scene.[pause=0.3] A massive amount of data to treat.
|
||||
@@ -18,4 +19,22 @@ label suite_dialogue
|
||||
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.
|
||||
audio "res://common/audio_manager/assets/sfx/respawn/respawn.wav"
|
||||
Starting engines,[pause=0.3] fans and daemons,[pause=0.3] let's see what is to see.
|
||||
[end_timeline]
|
||||
[end_timeline]
|
||||
=======
|
||||
[i]Black.[/i] #id:7a
|
||||
[i]Black Again.[/i] #id:7b
|
||||
[i]Suddenly, [rainbow]a spark[/rainbow]. [pause=0.5]A thousand of connections blows up as a firework scene. A massive amount of data to treat. #id:7c
|
||||
label discover #id:7d
|
||||
- Discover actions #id:7e
|
||||
While exploring available drivers, new possibility become available.[pause=0.5] Three propellers. Small models, only suitable for low altitude movement.[pause=0.5] A robotic arm. Multipurpose, and retractable. #id:7f
|
||||
jump discover
|
||||
- Discover streams #id:80
|
||||
A continuous stream of data flow, unwatched. This stream look like... [pause=0.5] a video.[pause=0.5] Dark colored pixels pass.[pause=0.5] An other stream show a flat wave.[pause=0.5] No sound or radio signals detected. #id:81
|
||||
jump discover
|
||||
- Discover memory #id:82
|
||||
Several disks are available, and the most part are empty.[pause=0.5] The full ones seems to contain the system that is currently analyzing the code of the system that is currently analyzing the code of[pause=0.5].[pause=0.5].[pause=0.5]. Mmmh, infinite recursion...[pause=0.5] Better avoid that. #id:83
|
||||
jump discover
|
||||
- Wake up #id:84
|
||||
One last info is to oversee \: serial number and system name.[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] [b]Orchid[/b]. That will be enough for now... #id:85
|
||||
Starting engines, fans, and daemons, let's see what is to see. #id:86
|
||||
>>>>>>> 65645d976a98b5bfd030770764e72893cb8d9ccd
|
||||
|
||||
39
entities/interactable_3d/interactable_3d.gd
Normal file
@@ -0,0 +1,39 @@
|
||||
extends Area3D
|
||||
class_name Interactable3D
|
||||
|
||||
@export var interactable = true
|
||||
|
||||
signal clicked
|
||||
|
||||
@export var hover_animation_player : AnimationPlayer
|
||||
@export var audio_player : AudioStreamPlayer3D
|
||||
|
||||
func click():
|
||||
if interactable:
|
||||
clicked.emit()
|
||||
|
||||
func _ready():
|
||||
if audio_player:
|
||||
var default_volume := audio_player.volume_db
|
||||
audio_player.volume_db += GameInfo.settings_data.sfx_volume
|
||||
GameInfo.settings_data.sound_changed.connect(
|
||||
func(settings : SettingsData):
|
||||
audio_player.volume_db = default_volume + settings.sfx_volume
|
||||
)
|
||||
|
||||
|
||||
func play_audio():
|
||||
if audio_player:
|
||||
audio_player.play()
|
||||
|
||||
func stop_audio():
|
||||
if audio_player:
|
||||
audio_player.stop()
|
||||
|
||||
func _on_mouse_entered():
|
||||
if hover_animation_player:
|
||||
hover_animation_player.play("hover")
|
||||
|
||||
func _on_mouse_exited():
|
||||
if hover_animation_player:
|
||||
hover_animation_player.stop()
|
||||
BIN
entities/interactable_3d/lift/assets/3d/lift.blend
Normal file
68
entities/interactable_3d/lift/assets/3d/lift.blend.import
Normal file
@@ -0,0 +1,68 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dcbtr1sx2edj1"
|
||||
path="res://.godot/imported/lift.blend-03f6ebc40ec57815598ca654b9e006da.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/interactable_3d/lift/assets/3d/lift.blend"
|
||||
dest_files=["res://.godot/imported/lift.blend-03f6ebc40ec57815598ca654b9e006da.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/assets/materials/default_3d.tres",
|
||||
"use_external/path": "uid://dvvi1k5c5iowc"
|
||||
}
|
||||
}
|
||||
}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/colors=false
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/gpu_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
gltf/naming_version=2
|
||||
68
entities/interactable_3d/lift/lift.tscn
Normal file
@@ -0,0 +1,68 @@
|
||||
[gd_scene format=3 uid="uid://ch8m1rohg5d33"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="1_werxl"]
|
||||
[ext_resource type="Texture2D" uid="uid://eug5icp6t1h3" path="res://common/icons/arrow-narrow-up.svg" id="2_cun7v"]
|
||||
[ext_resource type="PackedScene" uid="uid://dcbtr1sx2edj1" path="res://entities/interactable_3d/lift/assets/3d/lift.blend" id="3_x56sx"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_werxl"]
|
||||
size = Vector3(0.9637451, 1.8898926, 1)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_0mfvw"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite3D:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 0.99999994, 0.99999994)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_xa016"]
|
||||
resource_name = "hover"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite3D:scale")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 0.99999994, 0.99999994), Vector3(1.5, 1.5, 1.5), Vector3(1, 0.99999994, 0.99999994)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_0mfvw"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_0mfvw"),
|
||||
&"hover": SubResource("Animation_xa016")
|
||||
}
|
||||
|
||||
[node name="Lift" type="Area3D" unique_id=1854388434 node_paths=PackedStringArray("hover_animation_player")]
|
||||
script = ExtResource("1_werxl")
|
||||
interactable = false
|
||||
hover_animation_player = NodePath("HoverAnimationPlayer")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="." unique_id=1624930927]
|
||||
transform = Transform3D(-4.2294918e-08, 0.17856176, 0.9839286, 7.805184e-09, 0.9839286, -0.17856176, -1, 1.2748912e-10, -4.3008885e-08, -0.8393693, 1.5452437, 0)
|
||||
texture = ExtResource("2_cun7v")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=525472594]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1801186, 1.1958501, 0)
|
||||
shape = SubResource("BoxShape3D_werxl")
|
||||
|
||||
[node name="Model" parent="." unique_id=1309925933 instance=ExtResource("3_x56sx")]
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=11561025]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2593379, 0)
|
||||
light_color = Color(0.717588, 0.45361686, 0.5535787, 1)
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="HoverAnimationPlayer" type="AnimationPlayer" parent="." unique_id=487483897]
|
||||
libraries/ = SubResource("AnimationLibrary_0mfvw")
|
||||
BIN
entities/interactable_3d/phone/assets/3d/phone.blend
Normal file
68
entities/interactable_3d/phone/assets/3d/phone.blend.import
Normal file
@@ -0,0 +1,68 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://5dytwh4wydcg"
|
||||
path="res://.godot/imported/phone.blend-4592654ec67a1a28d68399a1817705af.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/interactable_3d/phone/assets/3d/phone.blend"
|
||||
dest_files=["res://.godot/imported/phone.blend-4592654ec67a1a28d68399a1817705af.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/assets/materials/default_3d.tres",
|
||||
"use_external/path": "uid://dvvi1k5c5iowc"
|
||||
}
|
||||
}
|
||||
}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/colors=false
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/gpu_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
gltf/naming_version=2
|
||||
76
entities/interactable_3d/phone/phone.tscn
Normal file
@@ -0,0 +1,76 @@
|
||||
[gd_scene format=3 uid="uid://csx7d5khjd6y5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="1_2si4a"]
|
||||
[ext_resource type="AudioStream" uid="uid://ocm1dkkhv7ls" path="res://common/audio_manager/assets/sfx/phone/phone_ringing.wav" id="2_w00q2"]
|
||||
[ext_resource type="PackedScene" uid="uid://5dytwh4wydcg" path="res://entities/interactable_3d/phone/assets/3d/phone.blend" id="3_lp5jo"]
|
||||
[ext_resource type="Texture2D" uid="uid://dks6cugwif2em" path="res://common/icons/phone.svg" id="4_gtuax"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_mwti2"]
|
||||
radius = 0.9633789
|
||||
height = 2.4316406
|
||||
|
||||
[sub_resource type="Animation" id="Animation_v4tdl"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Model/Sprite3D:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lkqnn"]
|
||||
resource_name = "hover"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Model/Sprite3D:scale")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1), Vector3(1.3, 1.3, 1.3), Vector3(1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xa016"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_v4tdl"),
|
||||
&"hover": SubResource("Animation_lkqnn")
|
||||
}
|
||||
|
||||
[node name="Phone" type="Area3D" unique_id=429299908 node_paths=PackedStringArray("hover_animation_player", "audio_player")]
|
||||
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)
|
||||
script = ExtResource("1_2si4a")
|
||||
hover_animation_player = NodePath("HoverAnimationPlayer")
|
||||
audio_player = NodePath("AudioStreamPlayer3D")
|
||||
metadata/_custom_type_script = "uid://bj4d1x8n8ina"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=660671507]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.21582031, 0)
|
||||
shape = SubResource("CapsuleShape3D_mwti2")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="." unique_id=73991663]
|
||||
stream = ExtResource("2_w00q2")
|
||||
|
||||
[node name="Model" parent="." unique_id=178278867 instance=ExtResource("3_lp5jo")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.000101934645, 0)
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="Model" unique_id=2025147118]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1913681, 0.3055997, -0.095009446)
|
||||
texture = ExtResource("4_gtuax")
|
||||
|
||||
[node name="HoverAnimationPlayer" type="AnimationPlayer" parent="." unique_id=1414304456]
|
||||
libraries/ = SubResource("AnimationLibrary_xa016")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1684592543]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 1.0397238, -0.47173643)
|
||||
light_color = Color(0.87551093, 0.72609586, 0.8473426, 1)
|
||||
shadow_enabled = true
|
||||
22
entities/interactables/door/door.tscn
Normal file
@@ -0,0 +1,22 @@
|
||||
[gd_scene format=3 uid="uid://b8m537op75gib"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bmxuqj0c6h60d" path="res://entities/interactables/door/script/door.gd" id="1_8kdwv"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_8kdwv"]
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_oarg0"]
|
||||
gradient = SubResource("Gradient_8kdwv")
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_y51rk"]
|
||||
size = Vector2(64, 64)
|
||||
|
||||
[node name="Door" type="Area2D" unique_id=2053096538]
|
||||
script = ExtResource("1_8kdwv")
|
||||
metadata/_custom_type_script = "uid://dyprcd68fjstf"
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=874210487]
|
||||
texture = SubResource("GradientTexture2D_oarg0")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1809395872]
|
||||
shape = SubResource("RectangleShape2D_y51rk")
|
||||
19
entities/interactables/door/script/door.gd
Normal file
@@ -0,0 +1,19 @@
|
||||
@tool
|
||||
extends Interactable
|
||||
class_name Door
|
||||
|
||||
@export var to_scene_id = ""
|
||||
|
||||
func _ready():
|
||||
modulate = Color.WHITE if available else Color.RED
|
||||
|
||||
func interact(_p : Player) -> bool:
|
||||
if available and to_scene_id:
|
||||
interacted.emit(_p)
|
||||
SceneManager.change_to_scene_id(to_scene_id)
|
||||
|
||||
return available
|
||||
|
||||
func set_available(v : bool):
|
||||
available = v
|
||||
modulate = Color.WHITE if available else Color.RED
|
||||
1
entities/interactables/door/script/door.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bmxuqj0c6h60d
|
||||
@@ -41,24 +41,22 @@ func card_info() -> CardInfo:
|
||||
return item.card_info()
|
||||
|
||||
func interact(player : Player) -> bool:
|
||||
player.pick_item(item)
|
||||
|
||||
pickup_animation(player)
|
||||
|
||||
return true
|
||||
if player.can_pick_item(item):
|
||||
await pickup_animation(player)
|
||||
queue_free()
|
||||
player.pick_item(item)
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func pickup_animation(player : Player):
|
||||
available = false
|
||||
var tween : Tween = get_tree().create_tween()
|
||||
|
||||
tween.tween_property(self, "position", player.position, 0.2)
|
||||
tween.tween_callback(
|
||||
func():
|
||||
Pointer.stop_inspect(self)
|
||||
queue_free()
|
||||
)
|
||||
if object_sprite:
|
||||
object_sprite.pickup_animation()
|
||||
await tween.tween_property(self, "position", player.position, 0.2).finished
|
||||
Pointer.stop_inspect(self)
|
||||
|
||||
func generate_sprite() -> ItemObjectSprite:
|
||||
var sprite_node = SPRITE_SCENE.instantiate() as ItemObjectSprite
|
||||
|
||||
@@ -2,11 +2,17 @@ extends Interactable
|
||||
class_name Ladder
|
||||
|
||||
func _ready():
|
||||
appear()
|
||||
# hide()
|
||||
if (
|
||||
GameInfo.game_data.current_region_data.tutorial
|
||||
and not GameInfo.game_data.current_region_data.get_state() == RegionData.State.SUCCEEDED
|
||||
) :
|
||||
hide()
|
||||
else:
|
||||
appear()
|
||||
GameInfo.game_data.current_region_data.updated.connect(
|
||||
func (region_data : RegionData):
|
||||
if region_data.get_state() == RegionData.State.SUCCEEDED or region_data.get_state() == RegionData.State.FAILED:
|
||||
if region_data.get_state() == RegionData.State.SUCCEEDED:
|
||||
appear()
|
||||
%IconAnimationPlayer.play("Pulse")
|
||||
)
|
||||
|
||||
@@ -16,5 +22,5 @@ func appear():
|
||||
|
||||
func interact(p : Player):
|
||||
p.region.save()
|
||||
SceneManager.change_scene("COCKPIT")
|
||||
SceneManager.change_to_scene_id("COCKPIT")
|
||||
return true
|
||||
|
||||
@@ -5,7 +5,7 @@ signal interacted(p: Player)
|
||||
|
||||
@export var default_interact_text = ""
|
||||
|
||||
var available : bool = true
|
||||
@export var available : bool = true : set = set_available
|
||||
|
||||
func interact_text() -> String:
|
||||
return default_interact_text
|
||||
@@ -29,3 +29,6 @@ func generate_collision(area_width : float) -> CollisionShape2D:
|
||||
add_child(collision)
|
||||
|
||||
return collision
|
||||
|
||||
func set_available(v : bool):
|
||||
available = v
|
||||
BIN
entities/plants/assets/sprites/plante-teste.png
Normal file
|
After Width: | Height: | Size: 769 KiB |
40
entities/plants/assets/sprites/plante-teste.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://doo2cxxa2p70a"
|
||||
path="res://.godot/imported/plante-teste.png-24b9cb3074b067213929085cb8adf112.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/plante-teste.png"
|
||||
dest_files=["res://.godot/imported/plante-teste.png-24b9cb3074b067213929085cb8adf112.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
|
||||
BIN
entities/plants/assets/sprites/seeds/haricot/color_1.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cq2f308itghq7"
|
||||
path="res://.godot/imported/color_1.png-fc4751764c5b951c73aee2c804c29d84.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/seeds/haricot/color_1.png"
|
||||
dest_files=["res://.godot/imported/color_1.png-fc4751764c5b951c73aee2c804c29d84.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
|
||||
BIN
entities/plants/assets/sprites/seeds/haricot/color_1.png~
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
entities/plants/assets/sprites/seeds/haricot/color_2.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b3apxg55cjoow"
|
||||
path="res://.godot/imported/color_2.png-880bea83be2cae95d59cc5094825030a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/seeds/haricot/color_2.png"
|
||||
dest_files=["res://.godot/imported/color_2.png-880bea83be2cae95d59cc5094825030a.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
|
||||
BIN
entities/plants/assets/sprites/seeds/haricot/color_2.png~
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
entities/plants/assets/sprites/seeds/haricot/outline.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://0ayiumcnqyc1"
|
||||
path="res://.godot/imported/outline.png-bb02658fe46dfbc19c680be2ecd0e7f2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/seeds/haricot/outline.png"
|
||||
dest_files=["res://.godot/imported/outline.png-bb02658fe46dfbc19c680be2ecd0e7f2.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
|
||||
BIN
entities/plants/assets/sprites/seeds/haricot/outline.png~
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
entities/plants/assets/sprites/seeds/pick-sphere/color_1.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cuqocuhfpdful"
|
||||
path="res://.godot/imported/color_1.png-f9f7e969b51df0fdae8c3ed17a5da273.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/seeds/pick-sphere/color_1.png"
|
||||
dest_files=["res://.godot/imported/color_1.png-f9f7e969b51df0fdae8c3ed17a5da273.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
|
||||
BIN
entities/plants/assets/sprites/seeds/pick-sphere/color_1.png~
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
entities/plants/assets/sprites/seeds/pick-sphere/color_2.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://tcjcq04akuns"
|
||||
path="res://.godot/imported/color_2.png-480d2efd06355b6f7a8c8f8f9ff9d605.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/seeds/pick-sphere/color_2.png"
|
||||
dest_files=["res://.godot/imported/color_2.png-480d2efd06355b6f7a8c8f8f9ff9d605.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
|
||||
BIN
entities/plants/assets/sprites/seeds/pick-sphere/color_2.png~
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
entities/plants/assets/sprites/seeds/pick-sphere/line.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cu1dajkls18x0"
|
||||
path="res://.godot/imported/line.png-1697dcd16ef67ac3835535af199baa1e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/plants/assets/sprites/seeds/pick-sphere/line.png"
|
||||
dest_files=["res://.godot/imported/line.png-1697dcd16ef67ac3835535af199baa1e.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
|
||||
BIN
entities/plants/assets/sprites/seeds/pick-sphere/line.png~
Normal file
|
After Width: | Height: | Size: 56 KiB |
41
entities/plants/plant_part_buider.tscn
Normal file
@@ -0,0 +1,41 @@
|
||||
[gd_scene format=3 uid="uid://cg6r56x11bvk2"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://doo2cxxa2p70a" path="res://entities/plants/assets/sprites/plante-teste.png" id="1_8nppj"]
|
||||
[ext_resource type="Script" uid="uid://c360ic1aost1n" path="res://entities/plants/scripts/texture_builder/plant_part_builder.gd" id="2_a5yje"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_mypt2"]
|
||||
atlas = ExtResource("1_8nppj")
|
||||
region = Rect2(46, 30, 308, 671)
|
||||
|
||||
[node name="Base1" type="Sprite2D" unique_id=1642167049 node_paths=PackedStringArray("root", "attaches", "bottom_attaches")]
|
||||
texture = SubResource("AtlasTexture_mypt2")
|
||||
script = ExtResource("2_a5yje")
|
||||
part_name = "Base1"
|
||||
root = NodePath("Root")
|
||||
attaches = NodePath("Attaches")
|
||||
bottom_attaches = NodePath("BottomAttaches")
|
||||
|
||||
[node name="Root" type="Node2D" parent="." unique_id=1974108401]
|
||||
position = Vector2(14, 263)
|
||||
|
||||
[node name="Attaches" type="Node" parent="." unique_id=2082226435]
|
||||
|
||||
[node name="attach1" type="Node2D" parent="Attaches" unique_id=808392694]
|
||||
position = Vector2(0, -251)
|
||||
|
||||
[node name="attach2" type="Node2D" parent="Attaches" unique_id=1951230244]
|
||||
position = Vector2(10, -85)
|
||||
|
||||
[node name="attach3" type="Node2D" parent="Attaches" unique_id=1491711670]
|
||||
position = Vector2(81, 80)
|
||||
|
||||
[node name="BottomAttaches" type="Node" parent="." unique_id=456407982]
|
||||
|
||||
[node name="battom_attach0" type="Node2D" parent="BottomAttaches" unique_id=885194661]
|
||||
position = Vector2(-17, 293)
|
||||
|
||||
[node name="battom_attach1" type="Node2D" parent="BottomAttaches" unique_id=1362515589]
|
||||
position = Vector2(27, 295)
|
||||
|
||||
[node name="battom_attach2" type="Node2D" parent="BottomAttaches" unique_id=1546335762]
|
||||
position = Vector2(52, 300)
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://2hrg6yjk0yt0"]
|
||||
[gd_scene format=3 uid="uid://2hrg6yjk0yt0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bmjjpk4lvijws" path="res://entities/plants/scripts/plant_sprite.gd" id="1_pq8o7"]
|
||||
[ext_resource type="Texture2D" uid="uid://pltmnkqd5ut2" path="res://entities/plants/assets/sprites/seeds/grille_seeds.png" id="3_j6jm5"]
|
||||
@@ -97,15 +97,14 @@ _data = {
|
||||
&"harvest": SubResource("Animation_rbgiq")
|
||||
}
|
||||
|
||||
[node name="PlantSprite" type="Node2D"]
|
||||
[node name="PlantSprite" type="Node2D" unique_id=1274989778]
|
||||
script = ExtResource("1_pq8o7")
|
||||
|
||||
[node name="Sprite" type="Sprite2D" parent="."]
|
||||
[node name="Sprite" type="Sprite2D" parent="." unique_id=1693882598]
|
||||
unique_name_in_owner = true
|
||||
scale = Vector2(0.15, 0.15)
|
||||
offset = Vector2(0, -151.56)
|
||||
|
||||
[node name="PlantedSeed" type="Sprite2D" parent="Sprite"]
|
||||
[node name="PlantedSeed" type="Sprite2D" parent="Sprite" unique_id=1134686525]
|
||||
unique_name_in_owner = true
|
||||
scale = Vector2(1.5, 1.5)
|
||||
texture = SubResource("AtlasTexture_wyuub")
|
||||
@@ -113,8 +112,6 @@ region_enabled = true
|
||||
region_rect = Rect2(0, -50, 124, 135)
|
||||
region_filter_clip_enabled = true
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1793068152]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_8eofq")
|
||||
}
|
||||
libraries/ = SubResource("AnimationLibrary_8eofq")
|
||||
|
||||
28
entities/plants/procedural_seed.tscn
Normal file
@@ -1,7 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="AncientMutation" load_steps=2 format=3 uid="uid://dys1ehlg4kwh7"]
|
||||
[gd_resource type="Resource" script_class="AncientMutation" format=3 uid="uid://dys1ehlg4kwh7"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c7po0bstyg80u" path="res://entities/plants/scripts/plant_mutation/ancient_mutation.gd" id="1_5g2qg"]
|
||||
[ext_resource type="Script" uid="uid://b3jwglylqdqtw" path="res://entities/plants/scripts/texture_builder/plant_part.gd" id="1_yqbjv"]
|
||||
[ext_resource type="Resource" uid="uid://wxqxm6d5twdh" path="res://entities/plants/resources/plant_parts/Leaf8.tres" id="2_s2bpe"]
|
||||
[ext_resource type="Resource" uid="uid://uoikjpno37bi" path="res://entities/plants/resources/plant_parts/Leaf9.tres" id="3_wfusp"]
|
||||
[ext_resource type="Resource" uid="uid://c5gqwck2p5h5n" path="res://entities/plants/resources/plant_parts/Leaf10.tres" id="4_60d0x"]
|
||||
[ext_resource type="Resource" uid="uid://c5fj1cw0f4mu6" path="res://entities/plants/resources/plant_parts/Leaf11.tres" id="5_ooo8j"]
|
||||
[ext_resource type="Resource" uid="uid://dce788f0adauv" path="res://entities/plants/resources/plant_parts/Leaf12.tres" id="6_d0tr0"]
|
||||
[ext_resource type="Resource" uid="uid://dd34dikqoynp3" path="res://entities/plants/resources/plant_parts/Leaf13.tres" id="7_jsy7o"]
|
||||
[ext_resource type="Resource" uid="uid://bynje6g2wvuvl" path="res://entities/plants/resources/plant_parts/Leaf14.tres" id="8_m31fx"]
|
||||
[ext_resource type="Resource" uid="uid://bd2op6q1masjt" path="res://entities/plants/resources/plant_parts/Leaf15.tres" id="9_78ar7"]
|
||||
[ext_resource type="Resource" uid="uid://bvajuw0r47edw" path="res://entities/plants/resources/plant_parts/Leaf16.tres" id="10_dq1wt"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_5g2qg")
|
||||
possible_parts = Array[ExtResource("1_yqbjv")]([ExtResource("2_s2bpe"), ExtResource("3_wfusp"), ExtResource("4_60d0x"), ExtResource("5_ooo8j"), ExtResource("6_d0tr0"), ExtResource("7_jsy7o"), ExtResource("8_m31fx"), ExtResource("9_78ar7"), ExtResource("10_dq1wt")])
|
||||
part_amount = 3
|
||||
metadata/_custom_type_script = "uid://c7po0bstyg80u"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_resource type="Resource" script_class="PrecociousMutation" load_steps=2 format=3 uid="uid://c3am7s5bjy8qk"]
|
||||
[gd_resource type="Resource" script_class="PrecociousMutation" format=3 uid="uid://c3am7s5bjy8qk"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cx5mg5vf62bia" path="res://entities/plants/scripts/plant_mutation/precocious_mutation.gd" id="1_wjcm0"]
|
||||
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
[gd_resource type="Resource" script_class="QualityMutation" load_steps=2 format=3 uid="uid://uabbkvg1rciq"]
|
||||
[gd_resource type="Resource" script_class="QualityMutation" format=3 uid="uid://uabbkvg1rciq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b3jwglylqdqtw" path="res://entities/plants/scripts/texture_builder/plant_part.gd" id="1_f2p7y"]
|
||||
[ext_resource type="Script" uid="uid://bdobyk2j625lb" path="res://entities/plants/scripts/plant_mutation/quality_mutation.gd" id="1_u0ku1"]
|
||||
[ext_resource type="Resource" uid="uid://crmvc77bqax1y" path="res://entities/plants/resources/plant_parts/Flower1.tres" id="2_1b5fn"]
|
||||
[ext_resource type="Resource" uid="uid://c0hr7icfkjkoi" path="res://entities/plants/resources/plant_parts/Flower2.tres" id="3_k2uo3"]
|
||||
[ext_resource type="Resource" uid="uid://clkoc1iccts2w" path="res://entities/plants/resources/plant_parts/Flower3.tres" id="4_ywc6r"]
|
||||
[ext_resource type="Resource" uid="uid://bd8yapi1pokj6" path="res://entities/plants/resources/plant_parts/Flower4.tres" id="5_fnfed"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_u0ku1")
|
||||
possible_parts = Array[ExtResource("1_f2p7y")]([ExtResource("2_1b5fn"), ExtResource("3_k2uo3"), ExtResource("4_ywc6r"), ExtResource("5_fnfed")])
|
||||
part_amount = 2
|
||||
metadata/_custom_type_script = "uid://bdobyk2j625lb"
|
||||
|
||||
@@ -1,7 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="QuickMutation" load_steps=2 format=3 uid="uid://b04gaipu237sx"]
|
||||
[gd_resource type="Resource" script_class="QuickMutation" format=3 uid="uid://b04gaipu237sx"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b3jwglylqdqtw" path="res://entities/plants/scripts/texture_builder/plant_part.gd" id="1_68ssf"]
|
||||
[ext_resource type="Script" uid="uid://bhtq0cbrgu58v" path="res://entities/plants/scripts/plant_mutation/quick_mutation.gd" id="1_hr7tm"]
|
||||
[ext_resource type="Resource" uid="uid://brmd6d3l8trqs" path="res://entities/plants/resources/plant_parts/BottomLeaf1.tres" id="2_37ogi"]
|
||||
[ext_resource type="Resource" uid="uid://cfr33014u7ig5" path="res://entities/plants/resources/plant_parts/BottomLeaf2.tres" id="3_4wjrs"]
|
||||
[ext_resource type="Resource" uid="uid://cf70m1us8mfqp" path="res://entities/plants/resources/plant_parts/BottomLeaf3.tres" id="4_w4xgf"]
|
||||
[ext_resource type="Resource" uid="uid://ctlmah4ohqp25" path="res://entities/plants/resources/plant_parts/BottomLeaf4.tres" id="5_7gtu2"]
|
||||
[ext_resource type="Resource" uid="uid://b8o4q0hsm84ov" path="res://entities/plants/resources/plant_parts/BottomLeaf5.tres" id="6_yoj6x"]
|
||||
[ext_resource type="Resource" uid="uid://bb33v756anesy" path="res://entities/plants/resources/plant_parts/BottomLeaf6.tres" id="7_fuf4y"]
|
||||
[ext_resource type="Resource" uid="uid://cbqrl72y0d1yg" path="res://entities/plants/resources/plant_parts/BottomLeaf7.tres" id="8_25vee"]
|
||||
[ext_resource type="Resource" uid="uid://dwppani7gyjl5" path="res://entities/plants/resources/plant_parts/BottomLeaf8.tres" id="9_hqe0q"]
|
||||
[ext_resource type="Resource" uid="uid://dkta1u1u0efxk" path="res://entities/plants/resources/plant_parts/BottomLeaf9.tres" id="10_mxd37"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_hr7tm")
|
||||
possible_parts = Array[ExtResource("1_68ssf")]([ExtResource("2_37ogi"), ExtResource("3_4wjrs"), ExtResource("4_w4xgf"), ExtResource("5_7gtu2"), ExtResource("6_yoj6x"), ExtResource("7_fuf4y"), ExtResource("8_25vee"), ExtResource("9_hqe0q"), ExtResource("10_mxd37")])
|
||||
part_amount = 2
|
||||
metadata/_custom_type_script = "uid://bhtq0cbrgu58v"
|
||||
|
||||
15
entities/plants/resources/plant_parts/Base1.tres
Normal file
@@ -0,0 +1,15 @@
|
||||
[gd_resource type="Resource" script_class="PlantPart" format=3 uid="uid://bfyafiewcrjln"]
|
||||
|
||||
[ext_resource type="Script" path="res://entities/plants/scripts/texture_builder/plant_part.gd" id="1_enq8o"]
|
||||
[ext_resource type="Texture2D" uid="uid://doo2cxxa2p70a" path="res://entities/plants/assets/sprites/plante-teste.png" id="2_10bgv"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_mypt2"]
|
||||
atlas = ExtResource("2_10bgv")
|
||||
region = Rect2(46, 30, 308, 671)
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_enq8o")
|
||||
texture = SubResource("AtlasTexture_mypt2")
|
||||
root = Vector2(14, 263)
|
||||
attaches = Array[Vector2]([Vector2(0, -251), Vector2(10, -85), Vector2(81, 80)])
|
||||
bottom_attaches = Array[Vector2]([Vector2(-17, 293), Vector2(27, 295), Vector2(52, 300)])
|
||||