diff --git a/addons/dialogue_manager/DialogueManager.cs b/addons/dialogue_manager/DialogueManager.cs index b0243987..c7b7a5c2 100644 --- a/addons/dialogue_manager/DialogueManager.cs +++ b/addons/dialogue_manager/DialogueManager.cs @@ -116,6 +116,11 @@ namespace DialogueManagerRuntime return instance; } + public static Resource CreateResourceFromText(string text) + { + return (Resource)Instance.Call("create_resource_from_text", text); + } + public static async Task GetNextDialogueLine(Resource dialogueResource, string key = "", Array? extraGameStates = null) { var instance = (Node)Instance.Call("_bridge_get_new_instance"); diff --git a/addons/dialogue_manager/assets/icon.svg.import b/addons/dialogue_manager/assets/icon.svg.import index e1d4421d..3b6fd5ec 100644 --- a/addons/dialogue_manager/assets/icon.svg.import +++ b/addons/dialogue_manager/assets/icon.svg.import @@ -2,9 +2,10 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bqx8vajneh2p" +uid="uid://d3lr2uas6ax8v" path="res://.godot/imported/icon.svg-17eb5d3e2a3cfbe59852220758c5b7bd.ctex" metadata={ +"has_editor_variant": true, "vram_texture": false } @@ -33,5 +34,5 @@ process/hdr_clamp_exposure=false process/size_limit=0 detect_3d/compress_to=1 svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogue_manager/assets/responses_menu.svg.import b/addons/dialogue_manager/assets/responses_menu.svg.import index cb0a0ba1..83355fc7 100644 --- a/addons/dialogue_manager/assets/responses_menu.svg.import +++ b/addons/dialogue_manager/assets/responses_menu.svg.import @@ -2,9 +2,10 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cft7tdpn1gr6c" +uid="uid://drjfciwitjm83" path="res://.godot/imported/responses_menu.svg-87cf63ca685d53616205049572f4eb8f.ctex" metadata={ +"has_editor_variant": true, "vram_texture": false } @@ -33,5 +34,5 @@ process/hdr_clamp_exposure=false process/size_limit=0 detect_3d/compress_to=1 svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogue_manager/assets/update.svg.import b/addons/dialogue_manager/assets/update.svg.import index 4ae4b97d..2d8171a3 100644 --- a/addons/dialogue_manager/assets/update.svg.import +++ b/addons/dialogue_manager/assets/update.svg.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bm4dr64q385t0" +uid="uid://d3baj6rygkb3f" path="res://.godot/imported/update.svg-f1628866ed4eb2e13e3b81f75443687e.ctex" metadata={ "vram_texture": false diff --git a/addons/dialogue_manager/components/dialogue_cache.gd b/addons/dialogue_manager/components/dialogue_cache.gd index fed75079..5aa9a573 100644 --- a/addons/dialogue_manager/components/dialogue_cache.gd +++ b/addons/dialogue_manager/components/dialogue_cache.gd @@ -22,6 +22,8 @@ var _cache: Dictionary = {} var _update_dependency_timer: Timer = Timer.new() var _update_dependency_paths: PackedStringArray = [] +var _files_marked_for_reimport: PackedStringArray = [] + func _ready() -> void: add_child(_update_dependency_timer) @@ -30,14 +32,24 @@ func _ready() -> void: _build_cache() -func reimport_files(files: PackedStringArray = []) -> void: - if files.is_empty(): files = get_files() +func mark_files_for_reimport(files: PackedStringArray) -> void: + for file in files: + if not _files_marked_for_reimport.has(file): + _files_marked_for_reimport.append(file) + + +func reimport_files(and_files: PackedStringArray = []) -> void: + for file in and_files: + if not _files_marked_for_reimport.has(file): + _files_marked_for_reimport.append(file) + + if _files_marked_for_reimport.is_empty(): return var file_system: EditorFileSystem = Engine.get_meta("DialogueManagerPlugin") \ .get_editor_interface() \ .get_resource_filesystem() - file_system.reimport_files(files) + file_system.reimport_files(_files_marked_for_reimport) ## Add a dialogue file to the cache. diff --git a/addons/dialogue_manager/components/download_update_panel.tscn b/addons/dialogue_manager/components/download_update_panel.tscn index baa8ba45..f3f45236 100644 --- a/addons/dialogue_manager/components/download_update_panel.tscn +++ b/addons/dialogue_manager/components/download_update_panel.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://qdxrxv3c3hxk"] [ext_resource type="Script" path="res://addons/dialogue_manager/components/download_update_panel.gd" id="1_4tm1k"] -[ext_resource type="Texture2D" uid="uid://bm4dr64q385t0" path="res://addons/dialogue_manager/assets/update.svg" id="2_4o2m6"] +[ext_resource type="Texture2D" uid="uid://d3baj6rygkb3f" path="res://addons/dialogue_manager/assets/update.svg" id="2_4o2m6"] [node name="DownloadUpdatePanel" type="Control"] layout_mode = 3 diff --git a/addons/dialogue_manager/components/errors_panel.tscn b/addons/dialogue_manager/components/errors_panel.tscn index fbe638c7..956552b1 100644 --- a/addons/dialogue_manager/components/errors_panel.tscn +++ b/addons/dialogue_manager/components/errors_panel.tscn @@ -2,7 +2,7 @@ [ext_resource type="Script" path="res://addons/dialogue_manager/components/errors_panel.gd" id="1_nfm3c"] -[sub_resource type="Image" id="Image_art5m"] +[sub_resource type="Image" id="Image_wy5pj"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 93, 93, 55, 255, 97, 97, 58, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 98, 98, 47, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 46, 255, 93, 93, 236, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -12,7 +12,7 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_s6fxl"] -image = SubResource("Image_art5m") +image = SubResource("Image_wy5pj") [node name="ErrorsPanel" type="HBoxContainer"] visible = false diff --git a/addons/dialogue_manager/components/files_list.tscn b/addons/dialogue_manager/components/files_list.tscn index f9bf2de1..9d6f8547 100644 --- a/addons/dialogue_manager/components/files_list.tscn +++ b/addons/dialogue_manager/components/files_list.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://dnufpcdrreva3"] [ext_resource type="Script" path="res://addons/dialogue_manager/components/files_list.gd" id="1_cytii"] -[ext_resource type="Texture2D" uid="uid://bqx8vajneh2p" path="res://addons/dialogue_manager/assets/icon.svg" id="2_3ijx1"] +[ext_resource type="Texture2D" uid="uid://d3lr2uas6ax8v" path="res://addons/dialogue_manager/assets/icon.svg" id="2_3ijx1"] [node name="FilesList" type="VBoxContainer"] anchors_preset = 15 diff --git a/addons/dialogue_manager/dialogue_label.gd b/addons/dialogue_manager/dialogue_label.gd index 053c8f99..3a6caeb9 100644 --- a/addons/dialogue_manager/dialogue_label.gd +++ b/addons/dialogue_manager/dialogue_label.gd @@ -5,6 +5,7 @@ ## A RichTextLabel specifically for use with [b]Dialogue Manager[/b] dialogue. class_name DialogueLabel extends RichTextLabel + ## Emitted for each letter typed out. signal spoke(letter: String, letter_index: int, speed: float) @@ -12,10 +13,11 @@ signal spoke(letter: String, letter_index: int, speed: float) signal paused_typing(duration: float) ## Emitted when the player skips the typing of dialogue. -signal skipped_typing +signal skipped_typing() ## Emitted when typing finishes. -signal finished_typing +signal finished_typing() + # The action to press to skip typing. @export var skip_action: StringName = &"ui_cancel" @@ -27,24 +29,25 @@ signal finished_typing @export var pause_at_characters: String = ".?!" ## Don't auto pause if the character after the pause is one of these. -@export var skip_pause_at_character_if_followed_by: String = ')"' +@export var skip_pause_at_character_if_followed_by: String = ")\"" ## Don't auto pause after these abbreviations (only if "." is in `pause_at_characters`).[br] ## Abbreviations are limitted to 5 characters in length [br] ## Does not support multi-period abbreviations (ex. "p.m.") -@export -var skip_pause_at_abbreviations: PackedStringArray = ["Mr", "Mrs", "Ms", "Dr", "etc", "eg", "ex"] +@export var skip_pause_at_abbreviations: PackedStringArray = ["Mr", "Mrs", "Ms", "Dr", "etc", "eg", "ex"] ## The amount of time to pause when exposing a character present in `pause_at_characters`. @export var seconds_per_pause_step: float = 0.3 var _already_mutated_indices: PackedInt32Array = [] + ## The current line of dialogue. var dialogue_line: set(next_dialogue_line): dialogue_line = next_dialogue_line custom_minimum_size = Vector2.ZERO + text = "" text = dialogue_line.text get: return dialogue_line @@ -85,12 +88,7 @@ func _unhandled_input(event: InputEvent) -> void: # Note: this will no longer be reached if using Dialogue Manager > 2.32.2. To make skip handling # simpler (so all of mouse/keyboard/joypad are together) it is now the responsibility of the # dialogue balloon. - if ( - self.is_typing - and visible_ratio < 1 - and InputMap.has_action(skip_action) - and event.is_action_pressed(skip_action) - ): + if self.is_typing and visible_ratio < 1 and InputMap.has_action(skip_action) and event.is_action_pressed(skip_action): get_viewport().set_input_as_handled() skip_typing() @@ -128,8 +126,7 @@ func skip_typing() -> void: # Type out the next character(s) func _type_next(delta: float, seconds_needed: float) -> void: - if _is_awaiting_mutation: - return + if _is_awaiting_mutation: return if visible_characters == get_total_character_count(): return @@ -137,8 +134,7 @@ func _type_next(delta: float, seconds_needed: float) -> void: if _last_mutation_index != visible_characters: _last_mutation_index = visible_characters _mutate_inline_mutations(visible_characters) - if _is_awaiting_mutation: - return + if _is_awaiting_mutation: return var additional_waiting_seconds: float = _get_pause(visible_characters) @@ -154,11 +150,7 @@ func _type_next(delta: float, seconds_needed: float) -> void: else: visible_characters += 1 if visible_characters <= get_total_character_count(): - spoke.emit( - get_parsed_text()[visible_characters - 1], - visible_characters - 1, - _get_speed(visible_characters) - ) + spoke.emit(get_parsed_text()[visible_characters - 1], visible_characters - 1, _get_speed(visible_characters)) # See if there's time to type out some more in this frame seconds_needed += seconds_per_step * (1.0 / _get_speed(visible_characters)) if seconds_needed > delta: @@ -198,23 +190,19 @@ func _mutate_inline_mutations(index: int) -> void: _already_mutated_indices.append(index) _is_awaiting_mutation = true # The DialogueManager can't be referenced directly here so we need to get it by its path - await Engine.get_singleton("DialogueManager").mutate( - inline_mutation[1], dialogue_line.extra_game_states, true - ) + await Engine.get_singleton("DialogueManager").mutate(inline_mutation[1], dialogue_line.extra_game_states, true) _is_awaiting_mutation = false # Determine if the current autopause character at the cursor should qualify to pause typing. func _should_auto_pause() -> bool: - if visible_characters == 0: - return false + if visible_characters == 0: return false var parsed_text: String = get_parsed_text() # Avoid outofbounds when the label auto-translates and the text changes to one shorter while typing out # Note: visible characters can be larger than parsed_text after a translation event - if visible_characters >= parsed_text.length(): - return false + if visible_characters >= parsed_text.length(): return false # Ignore pause characters if they are next to a non-pause character if parsed_text[visible_characters] in skip_pause_at_character_if_followed_by.split(): @@ -231,19 +219,13 @@ func _should_auto_pause() -> bool: if "." in pause_at_characters and parsed_text[visible_characters - 1] == ".": for abbreviation in skip_pause_at_abbreviations: if visible_characters >= abbreviation.length(): - var previous_characters: String = parsed_text.substr( - visible_characters - abbreviation.length() - 1, abbreviation.length() - ) + var previous_characters: String = parsed_text.substr(visible_characters - abbreviation.length() - 1, abbreviation.length()) if previous_characters == abbreviation: return false # Ignore two non-"." characters next to each other var other_pause_characters: PackedStringArray = pause_at_characters.replace(".", "").split() - if ( - visible_characters > 1 - and parsed_text[visible_characters - 1] in other_pause_characters - and parsed_text[visible_characters] in other_pause_characters - ): + if visible_characters > 1 and parsed_text[visible_characters - 1] in other_pause_characters and parsed_text[visible_characters] in other_pause_characters: return false return parsed_text[visible_characters - 1] in pause_at_characters.split() diff --git a/addons/dialogue_manager/dialogue_manager.gd b/addons/dialogue_manager/dialogue_manager.gd index 1ceede8d..13cd3b63 100644 --- a/addons/dialogue_manager/dialogue_manager.gd +++ b/addons/dialogue_manager/dialogue_manager.gd @@ -12,6 +12,9 @@ const DialogueManagerParseResult = preload("./components/parse_result.gd") const ResolvedLineData = preload("./components/resolved_line_data.gd") +## Emitted when a dialogue balloon is created and dialogue starts +signal dialogue_started(resource: DialogueResource) + ## Emitted when a title is encountered while traversing dialogue, usually when jumping from a ## goto line signal passed_title(title: String) @@ -142,6 +145,10 @@ func get_resolved_line_data(data: Dictionary, extra_game_states: Array = []) -> for replacement in data.text_replacements: var value = await resolve(replacement.expression.duplicate(true), extra_game_states) var index: int = text.find(replacement.value_in_text) + if index == -1: + # The replacement wasn't found but maybe the regular quotes have been replaced + # by special quotes while translating. + index = text.replace("“", "\"").replace("”", "\"").find(replacement.value_in_text) if index > -1: text = text.substr(0, index) + str(value) + text.substr(index + replacement.value_in_text.length()) @@ -265,6 +272,7 @@ func show_example_dialogue_balloon(resource: DialogueResource, title: String = " var balloon: Node = load(_get_example_balloon_path()).instantiate() get_current_scene.call().add_child(balloon) balloon.start(resource, title, extra_game_states) + dialogue_started.emit(resource) return balloon @@ -274,6 +282,7 @@ func show_dialogue_balloon(resource: DialogueResource, title: String = "", extra var balloon_path: String = DialogueSettings.get_setting(&"balloon_path", _get_example_balloon_path()) if not ResourceLoader.exists(balloon_path): balloon_path = _get_example_balloon_path() + dialogue_started.emit(resource) return show_dialogue_balloon_scene(balloon_path, resource, title, extra_game_states) @@ -285,8 +294,7 @@ func show_dialogue_balloon_scene(balloon_scene, resource: DialogueResource, titl balloon_scene = balloon_scene.instantiate() var balloon: Node = balloon_scene - if balloon.get_parent() == null: - get_current_scene.call().add_child(balloon) + get_current_scene.call().add_child.call_deferred(balloon) if balloon.has_method(&"start"): balloon.start(resource, title, extra_game_states) elif balloon.has_method(&"Start"): diff --git a/addons/dialogue_manager/dialogue_reponses_menu.gd b/addons/dialogue_manager/dialogue_reponses_menu.gd index 69a56db9..d666b2ef 100644 --- a/addons/dialogue_manager/dialogue_reponses_menu.gd +++ b/addons/dialogue_manager/dialogue_reponses_menu.gd @@ -130,11 +130,11 @@ func _on_response_mouse_entered(item: Control) -> void: func _on_response_gui_input(event: InputEvent, item: Control, response) -> void: if "Disallowed" in item.name: return - get_viewport().set_input_as_handled() - if event is InputEventMouseButton and event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT: + get_viewport().set_input_as_handled() response_selected.emit(response) elif event.is_action_pressed(&"ui_accept" if next_action.is_empty() else next_action) and item in get_menu_items(): + get_viewport().set_input_as_handled() response_selected.emit(response) diff --git a/addons/dialogue_manager/dialogue_resource.gd b/addons/dialogue_manager/dialogue_resource.gd index 8c597025..1020ce8f 100644 --- a/addons/dialogue_manager/dialogue_resource.gd +++ b/addons/dialogue_manager/dialogue_resource.gd @@ -4,6 +4,7 @@ ## A collection of dialogue lines for use with [code]DialogueManager[/code]. class_name DialogueResource extends Resource + const _DialogueManager = preload("./dialogue_manager.gd") const DialogueLine = preload("./dialogue_line.gd") @@ -29,18 +30,12 @@ const DialogueLine = preload("./dialogue_line.gd") ## Get the next printable line of dialogue, starting from a referenced line ([code]title[/code] can ## be a title string or a stringified line number). Runs any mutations along the way and then returns ## the first dialogue line encountered. -func get_next_dialogue_line( - title: String, - extra_game_states: Array = [], - mutation_behaviour: _DialogueManager.MutationBehaviour = _DialogueManager.MutationBehaviour.Wait -) -> DialogueLine: - return await Engine.get_singleton("DialogueManager").get_next_dialogue_line( - self, title, extra_game_states, mutation_behaviour - ) +func get_next_dialogue_line(title: String, extra_game_states: Array = [], mutation_behaviour: _DialogueManager.MutationBehaviour = _DialogueManager.MutationBehaviour.Wait) -> DialogueLine: + return await Engine.get_singleton("DialogueManager").get_next_dialogue_line(self, title, extra_game_states, mutation_behaviour) ## Get the list of any titles found in the file. -func get_titles() -> Array: +func get_titles() -> PackedStringArray: return titles.keys() @@ -63,4 +58,4 @@ func get_ordered_titles() -> Array: func _to_string() -> String: - return '' % [",".join(titles.keys())] + return "" % [",".join(titles.keys())] diff --git a/addons/dialogue_manager/example_balloon/ExampleBalloon.cs b/addons/dialogue_manager/example_balloon/ExampleBalloon.cs index 17cdd928..28358040 100644 --- a/addons/dialogue_manager/example_balloon/ExampleBalloon.cs +++ b/addons/dialogue_manager/example_balloon/ExampleBalloon.cs @@ -122,6 +122,11 @@ namespace DialogueManagerRuntime public async void Start(Resource dialogueResource, string title, Array extraGameStates = null) { + if (!IsNodeReady()) + { + await ToSignal(this, SignalName.Ready); + } + temporaryGameStates = extraGameStates ?? new Array(); isWaitingForInput = false; resource = dialogueResource; diff --git a/addons/dialogue_manager/example_balloon/example_balloon.gd b/addons/dialogue_manager/example_balloon/example_balloon.gd index 5c1d86d0..a3dc9df1 100644 --- a/addons/dialogue_manager/example_balloon/example_balloon.gd +++ b/addons/dialogue_manager/example_balloon/example_balloon.gd @@ -114,6 +114,8 @@ func _notification(what: int) -> void: ## Start some dialogue func start(dialogue_resource: DialogueResource, title: String, extra_game_states: Array = []) -> void: + if not is_node_ready(): + await ready temporary_game_states = [self] + extra_game_states is_waiting_for_input = false resource = dialogue_resource diff --git a/addons/dialogue_manager/plugin.cfg b/addons/dialogue_manager/plugin.cfg index 4f69c570..a6538d2b 100644 --- a/addons/dialogue_manager/plugin.cfg +++ b/addons/dialogue_manager/plugin.cfg @@ -3,5 +3,5 @@ name="Dialogue Manager" description="A simple but powerful branching dialogue system" author="Nathan Hoad" -version="2.44.1" +version="2.45.0" script="plugin.gd" diff --git a/addons/dialogue_manager/plugin.gd b/addons/dialogue_manager/plugin.gd index 2ab632f3..f89fad4d 100644 --- a/addons/dialogue_manager/plugin.gd +++ b/addons/dialogue_manager/plugin.gd @@ -51,6 +51,22 @@ func _enter_tree() -> void: add_tool_menu_item("Create copy of dialogue example balloon...", _copy_dialogue_balloon) + # Make sure the current balloon has a UID unique from the example balloon's + var balloon_path: String = DialogueSettings.get_setting("balloon_path", "") + if balloon_path != "" and FileAccess.file_exists(balloon_path): + var is_small_window: bool = ProjectSettings.get_setting("display/window/size/viewport_width") < 400 + var example_balloon_file_name: String = "small_example_balloon.tscn" if is_small_window else "example_balloon.tscn" + var example_balloon_path: String = get_plugin_path() + "/example_balloon/" + example_balloon_file_name + var example_balloon_uid: String = ResourceUID.id_to_text(ResourceLoader.get_resource_uid(example_balloon_path)) + var balloon_uid: String = ResourceUID.id_to_text(ResourceLoader.get_resource_uid(balloon_path)) + if example_balloon_uid == balloon_uid: + var new_balloon_uid: String = ResourceUID.id_to_text(ResourceUID.create_id()) + var contents: String = FileAccess.get_file_as_string(balloon_path) + contents = contents.replace(example_balloon_uid, new_balloon_uid) + var balloon_file: FileAccess = FileAccess.open(balloon_path, FileAccess.WRITE) + balloon_file.store_string(contents) + balloon_file.close() + # Prevent the project from showing as unsaved even though it was only just opened if DialogueSettings.get_setting("try_suppressing_startup_unsaved_indicator", false) \ and Engine.get_physics_frames() == 0 \ @@ -140,6 +156,8 @@ func _build() -> bool: if DialogueSettings.get_user_value("is_running_test_scene", true): return true if dialogue_cache != null: + dialogue_cache.reimport_files() + var files_with_errors = dialogue_cache.get_files_with_errors() if files_with_errors.size() > 0: for dialogue_file in files_with_errors: @@ -322,10 +340,15 @@ func _copy_dialogue_balloon() -> void: # Copy the balloon scene file and change the script reference var is_small_window: bool = ProjectSettings.get_setting("display/window/size/viewport_width") < 400 var example_balloon_file_name: String = "small_example_balloon.tscn" if is_small_window else "example_balloon.tscn" + var example_balloon_path: String = plugin_path + "/example_balloon/" + example_balloon_file_name var example_balloon_script_file_name: String = "ExampleBalloon.cs" if is_dotnet else "example_balloon.gd" - var file: FileAccess = FileAccess.open(plugin_path + "/example_balloon/" + example_balloon_file_name, FileAccess.READ) - var file_contents: String = file.get_as_text().replace(plugin_path + "/example_balloon/example_balloon.gd", balloon_script_path) - file = FileAccess.open(balloon_path, FileAccess.WRITE) + var file_contents: String = FileAccess.get_file_as_string(example_balloon_path).replace(plugin_path + "/example_balloon/example_balloon.gd", balloon_script_path) + # Give the balloon a unique UID + var example_balloon_uid: String = ResourceUID.id_to_text(ResourceLoader.get_resource_uid(example_balloon_path)) + var new_balloon_uid: String = ResourceUID.id_to_text(ResourceUID.create_id()) + file_contents = file_contents.replace(example_balloon_uid, new_balloon_uid) + # Save the new balloon + var file: FileAccess = FileAccess.open(balloon_path, FileAccess.WRITE) file.store_string(file_contents) file.close() diff --git a/addons/dialogue_manager/test_scene.gd b/addons/dialogue_manager/test_scene.gd index 782087a7..a8089114 100644 --- a/addons/dialogue_manager/test_scene.gd +++ b/addons/dialogue_manager/test_scene.gd @@ -1,20 +1,17 @@ class_name BaseDialogueTestScene extends Node2D + const DialogueSettings = preload("./settings.gd") const DialogueResource = preload("./dialogue_resource.gd") + @onready var title: String = DialogueSettings.get_user_value("run_title") @onready var resource: DialogueResource = load(DialogueSettings.get_user_value("run_resource_path")) func _ready(): var screen_index: int = DisplayServer.get_primary_screen() - DisplayServer.window_set_position( - ( - Vector2(DisplayServer.screen_get_position(screen_index)) - + (DisplayServer.screen_get_size(screen_index) - DisplayServer.window_get_size()) * 0.5 - ) - ) + DisplayServer.window_set_position(Vector2(DisplayServer.screen_get_position(screen_index)) + (DisplayServer.screen_get_size(screen_index) - DisplayServer.window_get_size()) * 0.5) DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) # Normally you can just call DialogueManager directly but doing so before the plugin has been diff --git a/addons/dialogue_manager/test_scene.tscn b/addons/dialogue_manager/test_scene.tscn index ed82cae2..f2bbd8d3 100644 --- a/addons/dialogue_manager/test_scene.tscn +++ b/addons/dialogue_manager/test_scene.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://drar5wok5b8ec"] +[gd_scene load_steps=2 format=3] [ext_resource type="Script" path="res://addons/dialogue_manager/test_scene.gd" id="1_yupoh"] + [node name="TestScene" type="Node2D"] script = ExtResource("1_yupoh") diff --git a/addons/dialogue_manager/views/main_view.gd b/addons/dialogue_manager/views/main_view.gd index 597c19c7..15486022 100644 --- a/addons/dialogue_manager/views/main_view.gd +++ b/addons/dialogue_manager/views/main_view.gd @@ -295,7 +295,7 @@ func save_files() -> void: save_file(path, false) if saved_files.size() > 0: - Engine.get_meta("DialogueCache").reimport_files(saved_files) + Engine.get_meta("DialogueCache").mark_files_for_reimport(saved_files) # Save a file @@ -564,7 +564,10 @@ func generate_translations_keys() -> void: else: text = l.substr(l.find(":") + 1) - lines[i] = line.replace(text, text + " [ID:%s]" % key) + text = text.replace("\n", "!NEWLINE!") + line = line.replace("\\n", "!NEWLINE!") + + lines[i] = line.replace(text, text + " [ID:%s]" % key).replace("!NEWLINE!", "\\n") known_keys[key] = text code_edit.text = "\n".join(lines) @@ -834,6 +837,7 @@ func import_translations_from_csv(path: String) -> void: code_edit.set_cursor(cursor) parser.free() + # Re-parse the dialogue to update the titles _on_code_edit_text_changed() @@ -1085,7 +1089,8 @@ func _on_settings_view_script_button_pressed(path: String) -> void: func _on_test_button_pressed() -> void: - save_file(current_file_path) + save_file(current_file_path, false) + Engine.get_meta("DialogueCache").reimport_files([current_file_path]) if errors_panel.errors.size() > 0: errors_dialog.popup_centered() diff --git a/addons/dialogue_manager/views/main_view.tscn b/addons/dialogue_manager/views/main_view.tscn index fc661f9f..2ab80044 100644 --- a/addons/dialogue_manager/views/main_view.tscn +++ b/addons/dialogue_manager/views/main_view.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://cbuf1q3xsse3q"] +[gd_scene load_steps=16 format=3 uid="uid://cbuf1q3xsse3q"] [ext_resource type="Script" path="res://addons/dialogue_manager/views/main_view.gd" id="1_h6qfq"] [ext_resource type="PackedScene" uid="uid://civ6shmka5e8u" path="res://addons/dialogue_manager/components/code_edit.tscn" id="2_f73fm"] @@ -7,13 +7,11 @@ [ext_resource type="PackedScene" uid="uid://co8yl23idiwbi" path="res://addons/dialogue_manager/components/update_button.tscn" id="2_ph3vs"] [ext_resource type="PackedScene" uid="uid://gr8nakpbrhby" path="res://addons/dialogue_manager/components/search_and_replace.tscn" id="6_ylh0t"] [ext_resource type="PackedScene" uid="uid://cs8pwrxr5vxix" path="res://addons/dialogue_manager/components/errors_panel.tscn" id="7_5cvl4"] -[ext_resource type="FontFile" uid="uid://dr8bp6p7byb37" path="res://asset/font/字体/方正楷体简体.TTF" id="7_dpqa4"] [ext_resource type="Script" path="res://addons/dialogue_manager/components/code_edit_syntax_highlighter.gd" id="7_necsa"] -[ext_resource type="FontFile" uid="uid://255whp7fuig5" path="res://asset/font/字体/三极行楷简体-粗.ttf" id="8_iqnmi"] [ext_resource type="PackedScene" uid="uid://cpg4lg1r3ff6m" path="res://addons/dialogue_manager/views/settings_view.tscn" id="9_8bf36"] [ext_resource type="PackedScene" uid="uid://0n7hwviyyly4" path="res://addons/dialogue_manager/components/find_in_files.tscn" id="10_yold3"] -[sub_resource type="Image" id="Image_ybciq"] +[sub_resource type="Image" id="Image_68x0r"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -22,14 +20,22 @@ data = { "width": 16 } -[sub_resource type="ImageTexture" id="ImageTexture_jjt2y"] -image = SubResource("Image_ybciq") +[sub_resource type="ImageTexture" id="ImageTexture_ka3gk"] +image = SubResource("Image_68x0r") -[sub_resource type="FontVariation" id="FontVariation_d3ufv"] -fallbacks = Array[Font]([ExtResource("8_iqnmi")]) -base_font = ExtResource("7_dpqa4") +[sub_resource type="Image" id="Image_j5bhl"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} -[sub_resource type="SyntaxHighlighter" id="SyntaxHighlighter_q4u2v"] +[sub_resource type="ImageTexture" id="ImageTexture_57eek"] +image = SubResource("Image_j5bhl") + +[sub_resource type="SyntaxHighlighter" id="SyntaxHighlighter_bxc68"] script = ExtResource("7_necsa") [node name="MainView" type="Control"] @@ -62,6 +68,7 @@ metadata/_edit_layout_mode = 1 unique_name_in_owner = true layout_mode = 2 size_flags_vertical = 3 +dragger_visibility = 1 [node name="SidePanel" type="VBoxContainer" parent="Margin/Content"] custom_minimum_size = Vector2(150, 0) @@ -75,55 +82,47 @@ layout_mode = 2 unique_name_in_owner = true layout_mode = 2 tooltip_text = "Start a new file" -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="OpenButton" type="MenuButton" parent="Margin/Content/SidePanel/Toolbar"] unique_name_in_owner = true layout_mode = 2 tooltip_text = "Open a file" -icon = SubResource("ImageTexture_jjt2y") -item_count = 10 +item_count = 9 popup/item_0/text = "Open..." -popup/item_0/icon = SubResource("ImageTexture_jjt2y") +popup/item_0/icon = SubResource("ImageTexture_ka3gk") popup/item_0/id = 100 -popup/item_1/text = "Quick open..." -popup/item_1/icon = SubResource("ImageTexture_jjt2y") +popup/item_1/icon = SubResource("ImageTexture_ka3gk") popup/item_1/id = 101 popup/item_2/id = -1 popup/item_2/separator = true -popup/item_3/text = "res://asset/dialogue/c02.dialogue" -popup/item_3/icon = SubResource("ImageTexture_jjt2y") +popup/item_3/text = "res://examples/dialogue.dialogue" +popup/item_3/icon = SubResource("ImageTexture_ka3gk") popup/item_3/id = 3 -popup/item_4/text = "res://asset/dialogue/c01.dialogue" -popup/item_4/icon = SubResource("ImageTexture_jjt2y") +popup/item_4/text = "res://examples/dialogue_with_input.dialogue" +popup/item_4/icon = SubResource("ImageTexture_ka3gk") popup/item_4/id = 4 -popup/item_5/text = "res://asset/dialogue/item_description.dialogue" -popup/item_5/icon = SubResource("ImageTexture_jjt2y") +popup/item_5/text = "res://examples/dialogue_for_point_n_click.dialogue" +popup/item_5/icon = SubResource("ImageTexture_ka3gk") popup/item_5/id = 5 -popup/item_6/text = "res://asset/dialogue/c02.dialogue" -popup/item_6/icon = SubResource("ImageTexture_jjt2y") +popup/item_6/text = "res://examples/dialogue_for_visual_novel.dialogue" +popup/item_6/icon = SubResource("ImageTexture_ka3gk") popup/item_6/id = 6 -popup/item_7/text = "res://asset/dialogue/c01.dialogue" -popup/item_7/icon = SubResource("ImageTexture_jjt2y") -popup/item_7/id = 7 -popup/item_8/id = -1 -popup/item_8/separator = true -popup/item_9/text = "Clear recent files" -popup/item_9/id = 102 +popup/item_7/id = -1 +popup/item_7/separator = true +popup/item_8/text = "Clear recent files" +popup/item_8/id = 102 [node name="SaveAllButton" type="Button" parent="Margin/Content/SidePanel/Toolbar"] unique_name_in_owner = true layout_mode = 2 disabled = true -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="FindInFilesButton" type="Button" parent="Margin/Content/SidePanel/Toolbar"] unique_name_in_owner = true layout_mode = 2 tooltip_text = "Find in files..." -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="Bookmarks" type="VSplitContainer" parent="Margin/Content/SidePanel"] @@ -132,6 +131,7 @@ size_flags_vertical = 3 [node name="FilesList" parent="Margin/Content/SidePanel/Bookmarks" instance=ExtResource("2_npj2k")] unique_name_in_owner = true +visible = false layout_mode = 2 size_flags_vertical = 3 @@ -140,6 +140,7 @@ unique_name_in_owner = true [node name="TitleList" parent="Margin/Content/SidePanel/Bookmarks" instance=ExtResource("2_onb4i")] unique_name_in_owner = true +visible = false layout_mode = 2 [node name="CodePanel" type="VBoxContainer" parent="Margin/Content"] @@ -153,72 +154,72 @@ layout_mode = 2 [node name="InsertButton" type="MenuButton" parent="Margin/Content/CodePanel/Toolbar"] unique_name_in_owner = true layout_mode = 2 +disabled = true text = "Insert" -icon = SubResource("ImageTexture_jjt2y") item_count = 15 popup/item_0/text = "Wave BBCode" -popup/item_0/icon = SubResource("ImageTexture_jjt2y") +popup/item_0/icon = SubResource("ImageTexture_57eek") popup/item_1/text = "Shake BBCode" -popup/item_1/icon = SubResource("ImageTexture_jjt2y") +popup/item_1/icon = SubResource("ImageTexture_57eek") popup/item_1/id = 1 popup/item_2/id = -1 popup/item_2/separator = true popup/item_3/text = "Typing pause" -popup/item_3/icon = SubResource("ImageTexture_jjt2y") +popup/item_3/icon = SubResource("ImageTexture_57eek") popup/item_3/id = 3 popup/item_4/text = "Typing speed change" -popup/item_4/icon = SubResource("ImageTexture_jjt2y") +popup/item_4/icon = SubResource("ImageTexture_57eek") popup/item_4/id = 4 popup/item_5/text = "Auto advance" -popup/item_5/icon = SubResource("ImageTexture_jjt2y") +popup/item_5/icon = SubResource("ImageTexture_57eek") popup/item_5/id = 5 popup/item_6/text = "Templates" popup/item_6/id = -1 popup/item_6/separator = true popup/item_7/text = "Title" -popup/item_7/icon = SubResource("ImageTexture_jjt2y") +popup/item_7/icon = SubResource("ImageTexture_57eek") popup/item_7/id = 6 popup/item_8/text = "Dialogue" -popup/item_8/icon = SubResource("ImageTexture_jjt2y") +popup/item_8/icon = SubResource("ImageTexture_57eek") popup/item_8/id = 7 popup/item_9/text = "Response" -popup/item_9/icon = SubResource("ImageTexture_jjt2y") +popup/item_9/icon = SubResource("ImageTexture_57eek") popup/item_9/id = 8 popup/item_10/text = "Random lines" -popup/item_10/icon = SubResource("ImageTexture_jjt2y") +popup/item_10/icon = SubResource("ImageTexture_57eek") popup/item_10/id = 9 popup/item_11/text = "Random text" -popup/item_11/icon = SubResource("ImageTexture_jjt2y") +popup/item_11/icon = SubResource("ImageTexture_57eek") popup/item_11/id = 10 popup/item_12/text = "Actions" popup/item_12/id = -1 popup/item_12/separator = true popup/item_13/text = "Jump to title" -popup/item_13/icon = SubResource("ImageTexture_jjt2y") +popup/item_13/icon = SubResource("ImageTexture_57eek") popup/item_13/id = 11 popup/item_14/text = "End dialogue" -popup/item_14/icon = SubResource("ImageTexture_jjt2y") +popup/item_14/icon = SubResource("ImageTexture_57eek") popup/item_14/id = 12 [node name="TranslationsButton" type="MenuButton" parent="Margin/Content/CodePanel/Toolbar"] unique_name_in_owner = true layout_mode = 2 +disabled = true text = "Translations" -icon = SubResource("ImageTexture_jjt2y") item_count = 5 popup/item_0/text = "Generate line IDs" -popup/item_0/icon = SubResource("ImageTexture_jjt2y") +popup/item_0/icon = SubResource("ImageTexture_57eek") popup/item_0/id = 100 popup/item_1/id = -1 popup/item_1/separator = true popup/item_2/text = "Save character names to CSV..." -popup/item_2/icon = SubResource("ImageTexture_jjt2y") +popup/item_2/icon = SubResource("ImageTexture_57eek") popup/item_2/id = 201 popup/item_3/text = "Save lines to CSV..." -popup/item_3/icon = SubResource("ImageTexture_jjt2y") +popup/item_3/icon = SubResource("ImageTexture_57eek") popup/item_3/id = 202 popup/item_4/text = "Import line changes from CSV..." -popup/item_4/icon = SubResource("ImageTexture_jjt2y") +popup/item_4/icon = SubResource("ImageTexture_57eek") popup/item_4/id = 203 [node name="Separator" type="VSeparator" parent="Margin/Content/CodePanel/Toolbar"] @@ -228,15 +229,15 @@ layout_mode = 2 unique_name_in_owner = true layout_mode = 2 tooltip_text = "Search for text" +disabled = true toggle_mode = true -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="TestButton" type="Button" parent="Margin/Content/CodePanel/Toolbar"] unique_name_in_owner = true layout_mode = 2 tooltip_text = "Test dialogue" -icon = SubResource("ImageTexture_jjt2y") +disabled = true flat = true [node name="Separator3" type="VSeparator" parent="Margin/Content/CodePanel/Toolbar"] @@ -246,7 +247,6 @@ layout_mode = 2 unique_name_in_owner = true layout_mode = 2 tooltip_text = "Settings" -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="Spacer2" type="Control" parent="Margin/Content/CodePanel/Toolbar"] @@ -258,7 +258,6 @@ unique_name_in_owner = true layout_mode = 2 tooltip_text = "Support Dialogue Manager" text = "Sponsor" -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="Separator4" type="VSeparator" parent="Margin/Content/CodePanel/Toolbar"] @@ -268,14 +267,13 @@ layout_mode = 2 unique_name_in_owner = true layout_mode = 2 text = "Docs" -icon = SubResource("ImageTexture_jjt2y") flat = true [node name="VersionLabel" type="Label" parent="Margin/Content/CodePanel/Toolbar"] unique_name_in_owner = true modulate = Color(1, 1, 1, 0.490196) layout_mode = 2 -text = "v2.44.1" +text = "v2.42.2" vertical_alignment = 1 [node name="UpdateButton" parent="Margin/Content/CodePanel/Toolbar" instance=ExtResource("2_ph3vs")] @@ -288,538 +286,53 @@ layout_mode = 2 [node name="CodeEdit" parent="Margin/Content/CodePanel" instance=ExtResource("2_f73fm")] unique_name_in_owner = true +visible = false layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -theme_override_colors/current_line_color = Color(1, 1, 1, 0.07) -theme_override_colors/background_color = Color(0.1155, 0.132, 0.1595, 1) -theme_override_colors/font_color = Color(0.8025, 0.81, 0.8225, 1) -theme_override_fonts/font = SubResource("FontVariation_d3ufv") -theme_override_font_sizes/font_size = 28 +theme_override_colors/current_line_color = Color(0.266667, 0.278431, 0.352941, 0.243137) +theme_override_colors/background_color = Color(0.156863, 0.164706, 0.211765, 1) +theme_override_colors/font_color = Color(0.972549, 0.972549, 0.94902, 1) +theme_override_font_sizes/font_size = 14 theme_override_colors/bookmark_color = Color(1, 0.333333, 0.333333, 1) -text = "#场景一 -~ c02_s01_menpai -##孤寂的氛围 -(芦昌路26弄3号) [ID:芦昌路26] -吕萍: “这是梦里的那栋楼” [ID:c02_吕萍_001_梦楼] -=> END +text = "~ start + +Nathan: Hi, I'm Nathan and this is Coco. +Coco: Meow. +Nathan: Here are some response options. +- First one + Nathan: You picked the first one. +- Second one + Nathan: You picked the second one. +- Start again => start +- End the conversation => END +Nathan: I hope this example is helpful. +Coco: Meow. -~ c02_s01_xunren -(似乎是一张寻人启示) [ID:tf6373b1461] -(脸的部分被撕掉了,看不清) [ID:tace136aa1d] -=> END - -#~ c02_s01_boy1 -#(男孩在玩弹珠) -#吕萍: “小朋友,先让一让好哇,让姐姐先进去” -#=> END - -#~ c02_s01_boy2 -#男孩: “我在等人......” -#=> END -# -#~ c02_s01_boy3 -#吕萍: “......诶?” -#(小男孩突然跑开) -#=> END - -#场景二 -~ c02_s02_tianqi -吕萍: “冷飕飕的,早知道多穿一件出来了”[next=4.2] [ID:t80736c88c5] -=> END - - -~ c02_s02_xuanchuanhua -(几张卫生宣传画) [ID:t8b921a1f0d] -=> END - -~ c02_s02_laoshudong -(一个老鼠洞) [ID:tb3c5bdf8fa] -(在这种楼里挺常见的) [ID:t67b292ac79] -=> END - -~ c02_s02_shuyihaibao -(十几年前的报纸) [ID:tc0b1d09ad5] -=> END - - -#场景三 -~ c02_s03_tianqi -吕萍: “天色变暗了”[next=3] [ID:t697159b817] -=> END - -~ c02_s03_xunren -(又是那张寻人启示) [ID:t10093c48d6] -=> END - -~ c02_s03_baoweishi -(锁住了) [ID:t33de979333] -=> END - -~ c02_s03_tiemen -(锁住了) [ID:t060613cc71] -=> END - -~ c02_s03_1014 -(锁住了) [ID:t4c83f86ec3] -=> END - -~ c02_s03_1015 -(锁住了) [ID:ta4d131091f] -=> END - -~ c02_s03_blood -(干掉的血迹) [ID:t53107de49e] -=> END - -~ c02_s03_yaoshi -(有什么东西) [ID:t6bf59cddd7] -=> END - -~ c02_s03_shuhuan -(墙上的海报被撕掉了) [ID:tde8f5415c3] -=> END - -~ c02_s03_mimi -吕萍: “这么冷的天,怎么这树的叶子还这么茂盛” [ID:tfbff76fa77] -#=> END -[wait=3][next=1] [ID:t88c78480dd] -~ c02_s03_mimi3 -吕萍: “咪咪?” [ID:ta853571b30] -吕萍: “好多老鼠” [ID:t300a11f578] -=> END - -~ c02_s03_shushu -吕萍: “去,去” [ID:t3c391a329c] -=> END - -~ c02_s03_mimi2 -吕萍: “你好乖啊” [ID:tac301a659a] -(咕噜咕噜) [ID:t648fa1c8e2] -=> END - -~ c02_s03_mimi2_2 -吕萍: “诶?怎么走了” [ID:t9a6f86b1ba] -=> END - -~ c02_s03_jing -(井里有一股臭味) [ID:t70d94938c8] -=> END - -~ c02_s03_xiaomaotou -吕萍: “这是什么东西?” [ID:t827e03aa77] -=> END - -~ c02_s03_xiaomaotou_2 -吕萍: “嘶......我的头又开始痛了”[next=6.1] [ID:t5ec7026aa0] -=> END - - -#[color=MEDIUM_SPRING_GREEN]小蝶[/color] - - -#场景四 -~ c02_s04_fartherandgirl -[color=MEDIUM_SPRING_GREEN]???:[/color] “爸爸,我昨晚听到有大老鼠在床边叫”[next=5] [ID:tabd2edb27e] -[color=POWDER_BLUE]???:[/color] “囡囡不怕哦,你把妈妈给你做的娃娃放在床边”[next=5][ID:ta308681a21] -[color=POWDER_BLUE]???:[/color] “老鼠就不敢过来了”[next=1.6] [ID:ta66609d55b] -[color=MEDIUM_SPRING_GREEN]???:[/color] “嗯!爸爸什么时候让妈妈教我唱歌呀”[next=5] [ID:t38603155aa] -[color=POWDER_BLUE]???:[/color] “妈妈生病嗓子坏了,等忙完这一阵,爸爸教你唱,好吗”[next=7.5] [ID:tbce77569eb] -[color=POWDER_BLUE]???:[/color] “走吧,爸爸带你去把药喝了”[next=3] [ID:t4bf2f8b7dc] -[color=MEDIUM_SPRING_GREEN]???:[/color] “喝完药我要吃话梅糖!”[next=3.4] [ID:t9d9d410a0b] -[color=POWDER_BLUE]???:[/color] “你就记得糖”[next=4] [ID:t0e40b0a6ca] -=> END - - -~ c02_s04_lvping_02 -吕萍: “我刚才眼花了吗” [ID:t13ffd6841d] -吕萍: “这些人从哪儿来的” [ID:t2b7f492af2] -吕萍: “......” [ID:t43e3e802fb] -吕萍: “找个人问一下吧” [ID:tc4e755f8cc] -=> END - -~ c02_s04_yaoche -(车上放了一些中药材) [ID:t198fd11186] -=> END - -~ c02_s04_louti -(排队的人堵住了上楼的路) [ID:t2f080e7e4f] -=> END - -~ c02_s04_lishi_01 -吕萍: “你好,请问陆先生住在这里吗” [ID:tef94e4cddf] -[color=SKY_BLUE]???:[/color] “啊?你爸妈忙的又没空管你啦” [ID:tefe6342ef5] -[color=SKY_BLUE]???:[/color] “死了滚,生意都被你家抢没了” [ID:t8ac1e1d74d] -吕萍: “她在说什么......” [ID:t385ad205e6] -=> END - -~ c02_s04_lishi_02 -[color=SKY_BLUE]???:[/color] “册那,都趁早死死掉算了”[next=3] [ID:t0ad0a91e1f] -=> END - -~ c02_s04_xiazi -吕萍: “呃......你好,请问......” [ID:te52e87e435] -[color=BURLYWOOD]???:[/color] “祸福在己,当自求;兴衰有数,莫强留” [ID:tb39e6e2176] -吕萍: “......” [ID:t0c7b5487e7] -=> END! - -~ c02_s04_pangzi_01 -[color=DARK_KHAKI]???:[/color] “老方,小朋友又不懂,和她讲这些干嘛” [ID:t55e158aa73] -[color=DARK_KHAKI]???:[/color] “小蝶啊,回头记得带妈妈来叔叔这儿买肉啊” [ID:t0e5a348b5f] -[color=DARK_KHAKI]???:[/color] “外面没的买,叔叔这里多的是” [ID:tbc55af8bf7] -吕萍: “这些人是在跟我说话吗” [ID:t0a091a2712] -=> END! - -~ c02_s04_pangzi_02 -[color=DARK_KHAKI]???:[/color] “来来来,过来,过来” [ID:te49f3f6290] -=> END - -~ c02_s04_pangzi_03 -[color=DARK_KHAKI]???:[/color] “悄悄和你讲,让你妈妈来我这里买肉,给你们家便宜点” [ID:t0b675d22e8] -[color=DARK_KHAKI]???:[/color] “不行到时候我给你们把肉送到家里去,好哇” [ID:t6699cc4d89] -吕萍: “呃,不用......不用了......” [ID:te8b6cac261] -=> END - -~ c02_s04_boy -小男孩: “喂,那只成天跟着你的小猫去哪里啦” [ID:t7c47b8f2ea] -小男孩: “好可爱的,也抱来给我们摸摸呗” [ID:tbcb3f3a5c8] -吕萍: “猫?你说的是那只黑色的猫吗?” [ID:t91bffb0a56] -小男孩: “对啊对啊,哦对了,你有绳子嘛” [ID:t6ebd045126] -=> END - -~ c02_s04_boy01 -小男孩: “对了,你有绳子嘛” [ID:tcb8871c993] -=> END - -~ c02_s04_boy02 -小男孩: “嘿嘿,一会儿我们要在常年青下玩游戏,这次就叫上你吧” [ID:tafbb065366] -=> END - -~ xuzhang_01_04_wanglaizi -[color=SKY_BLUE]???:[/color] “真的假的?你钻进去啦,你这个体型进的去哒?”[next=5] [ID:t9f383266ad] -[color=INDIAN_RED]???:[/color] “你声音轻点,这种事情不要大呼小叫的”[next=4] [ID:t84153d1302] -#[color=INDIAN_RED]???:[/color] “这种事情不要大呼小叫的”[next=4] [ID:t4eac89d661] -[color=SKY_BLUE]???:[/color] “快说说,你都看到啥了”[next=4] [ID:t50ee4564c0] -[color=INDIAN_RED]???:[/color] “他们养了只老鼠,要死掉了”[next=2.5] [ID:t42919f1d5e] -[color=INDIAN_RED]???:[/color] “没看到过这么大的老鼠”[next=2] [ID:tb25a6cfd1d] -[color=SKY_BLUE]???:[/color] “啊?!”[next=1] [ID:td2e2e976b7] -[color=SKY_BLUE]???:[/color] “我就说他们家不对劲”[next=3] [ID:t8c2a311801] -[color=INDIAN_RED]???:[/color] “晚点我要去找趟瞎子,这东西他比我们懂”[next=4] [ID:t7dbddc808e] -[color=SKY_BLUE]???:[/color] “嗯,那你到时候记得......”[next=2] [ID:tb2fd086d70] -[color=INDIAN_RED]???:[/color] “好了,其他的回去讲”[next=3] [ID:t86d98df806] -=> END - - -#场景五 -~ c02_s05_jinmen -吕萍: “1014......刚刚那个小男孩说的就是这间吧” [ID:t2c185335a3] -吕萍: “这不是个空房间吗?” [ID:t203b58cab5] -=> END - -~ c02_s05_men -(最好还是先不要出去) [ID:t7ff84c6134] -=> END - -~ c02_s05_chuang -(太阳快落山了) [ID:t2f3f184fe8] -=> END - -~ c02_s05_rili -(民国六年十月十五日) [ID:t96fe0e898a] -=> END - -~ c02_s05_lijian -(打不开) [ID:t18551dadd7] -=> END - -~ c02_s05_liefeng -(一个洞,里面好像还有空间) [ID:tb37ff31a1b] -=> END - - -#场景六 -~ c02_s06_xiangzi -(工具箱) [ID:t6290eed263] -(应该能找到有用的东西) [ID:t42468d2f1f] -=> END - -~ c02_s06_gaoshi -(公寓告示) [ID:t1fc2a3944c] -=> END - -~ c02_s06_lijian -(通往里间的门) [ID:t0e2886f21e] -(打不开) [ID:t6742e43e04] -=> END - -#场景七 -~ c02_s07_guahua -(挂画) [ID:t57fa48a9de] -=> END - -~ c02_s07_huamingce -(花名册) [ID:t4018c7f508] -=> END - -~ c02_s07_huamingce02 -吕萍: “陆仁,小蝶,吕......萍” [ID:tcee1769bea] -吕萍: “和他说的一样,为什么” [ID:t01705be451] -=> END - -#场景八 -~ c02_s08_kaitou01 -吕萍: “怎么突然变暗了”[next=3.5] [ID:tbb8eaaac33] -=> END - -~ c02_s08_kaitou02 -吕萍: “嗯?玩具在发光”[next=3.5] [ID:t3f088c65fc] -=> END - -~ c02_s08_rili -(罪) [ID:tecab2324ef] -=> END - -~ c02_s08_men -(门上有什么东西) [ID:tb8be4f8529] -=> END - - -~ c02_s08_fangjian1 -吕萍: “房间怎么还没有到头”[next=3.3] [ID:t585e87c2fb] -=> END - -~ c02_s08_zhitiao1 -(纸条) [ID:ta468951404] -=> END - -~ c02_s08_zhitiao2 -吕萍: “头好痛”[next=4] [ID:tb9f4a5c023] -=> END - -~ c02_s08_fangjian2 -吕萍: “......”[next=auto] [ID:tfab540faa7] -吕萍: “这......到底是怎么回事”[next=4.1] [ID:t6a9fae7f94] -吕萍: “我是在......做梦吗?”[next=4.1] [ID:t44b63ca9c1] -=> END - -~ c02_s08_xiaodie01 -[color=MEDIUM_SPRING_GREEN]???:[/color]: “爸爸什么时候让妈妈教我唱歌呀”[next=auto] [ID:tba2d3b254f] -[color=POWDER_BLUE]???:[/color]: “妈妈嗓子坏了,爸爸教你唱吧”[next=4] [ID:tddb946d7ab] -[color=POWDER_BLUE]???:[/color]: “走吧,去把药喝了”[next=3.6] [ID:t26758aff7d] -=> END - -~ c02_s08_xiaodie02 -[color=MEDIUM_SPRING_GREEN]???:[/color]: “妈妈,爸爸什么时候能让我出去玩呀”[next=auto] [ID:tfd98f18577] -=> END - -~ c02_s08_xiaodie03 -[color=MEDIUM_SPRING_GREEN]???:[/color]: “妈妈,我房间里好像有一只大老鼠”[next=auto] [ID:td708807bf4] -[color=MEDIUM_SPRING_GREEN]???:[/color]: “妈妈,我怕”[next=auto] [ID:t56894aa36d] -=> END - -~ c02_s08_jiewei01 -[color=AQUA]???:[/color]: “小蝶”[next=2.1] [ID:t0bd0b50791] -=> END - -~ c02_s08_jiewei02 -[color=AQUA]???:[/color]: “醒醒”[next=2] [ID:t7c7439fb6a] -=> END - -~ c02_s08_jiewei03 -吕萍: “太吵了,不要吵了”[next=3.3] [ID:te61a43eed3] -=> END - -~ c02_s08_jiewei04 -吕萍: “不要再说了!”[next=1.6] [ID:t96238696c3] -=> END - -~ c02_s08_jiewei05 -吕萍: “不要!”[next=2] [ID:t5cf3356bb1] -=> END - -~ c02_s09_zhitiao -(纸条) [ID:tda6ab6a3dd] -=> END - -~ c02_s09_1014 -(锁住了) [ID:t371e88b879] -=> END - -~ c02_s09_1015 -(奠) [ID:t1207196450] -=> END - -~ c02_s09_xiaochan -(寻人启事) [ID:t4d609b2543] -(失踪的小孩名叫夏小蝉) [ID:t236739888b] -=> END - -# 场景十 -~ c02_s10_boy01 -吕萍: “你是刚刚门口那个小弟弟” [ID:t38152eaaf2] -男孩: “小蝶,你终于还是回来了” [ID:te1c5e11fdb] -吕萍: “我们认识吗?” [ID:td8476fc7cb] -吕萍: “为什么......你们都叫我小蝶” [ID:t6125b684d7] -男孩: “在你被送去孤儿院之前,我们就已经认识了” [ID:t0fd4743492] -男孩: “你爸爸叫陆仁,那件事之后,他就把你妈妈的名字给了你” [ID:t3795fee445] -男孩: “这些年来,我一直在这里等你,我们当初说好的,就在这里,你还记得吗?” [ID:t5e9e91d222] -吕萍: “你说的是……真的假的” [ID:t8504465ab1] -吕萍: “那个时候的事情,我一点也想不起来啊,你怎么......” [ID:tefe78da40f] -吕萍: “不对,不可能,你这么小,不可能知道当年发生了什么” [ID:t481232f0f7] -吕萍: “你到底是谁” [ID:td85ad730d3] -男孩: “不要害怕,我的名字叫小蝉,记得吗,小蝉” [ID:tf1a514bbe9] -吕萍: “不不不,你不要瞎说,我不记得什么小蝉” [ID:t263510936d] -吕萍: “我是来找我亲生父母的,你肯定知道他们在哪儿对不对” [ID:t4d7070829c] -男孩: “还是想不起来吗” [ID:tc28d032c92] -男孩: “没关系,我会帮你的” [ID:t67dfca0c26] -男孩: “我们现在没有办法离开这里,这栋楼已经不是当年的样子了” [ID:t6b5d5a9a88] -男孩: “你现在在这里一定要小心” [ID:t7051f8e365] -=> END - -~ c02_s10_boy02 -吕萍: “诶?等一下”[next=2] [ID:tde7799b60e] -=> END - -~ c02_s10_boy03 -男孩: “去1014” [ID:t06808e83df] -=> END - - -~ c02_s10_cat -吕萍: “咪咪?又是你” [ID:t36141ef025] -=> END - -~ c02_s10_men -吕萍: “这是......一面墙?” [ID:t664febbf8f] -=> END - -~ c02_s11_cat -(小猫的尸体已经干了) [ID:t59e8199879] -=> END - -# 场景十二 -~ c02_s12_kaitou -吕萍: “这是......通到什么地方去的” [ID:t7ce574125c] -=> END - -~ c02_s12_yingbi -(几块大洋) [ID:t94b10f6270] -=> END - -~ c02_s12_laoshu -(死掉的老鼠) [ID:td9593e553b] -=> END - -~ c02_s12_hua -(石缝里开了几束花) [ID:t70c8da9593] -=> END - -~ c02_s12_jiewei -(石壁另一头好像还有空间) [ID:t9b1714f00a] -=> END - -# 场景十三 -~ c02_s13_rili -(民国六年十二月二十一日) [ID:t9e9a33285a] -=> END - -~ c02_s13_fartherandmother -[color=POWDER_BLUE]陆仁:[/color]: “你也不要太担心了,柜子我上了把锁”[next=4.3] [ID:t7147becd3a] -[color=POWDER_BLUE]陆仁:[/color]: “回头我再去问问看,说不定就是楼里的人偷的”[next=auto] [ID:tcad5305ba4] -[wait=1][next=6] [ID:t5dea58cccc] -[wait=1][next=3] [ID:t6e6d4ac32e] -[color=POWDER_BLUE]陆仁:[/color]: “你不要管他们怎么说,病确实是治好了,我们自己心里知道就可以了”[next=7.3] [ID:tcaf8437dab] -[color=POWDER_BLUE]陆仁:[/color]: “对了,昨天小蝶说她听到你做的那个娃娃开口说话了,不知道是怎么回事”[next=8.7] [ID:t39af521c31] -[color=POWDER_BLUE]陆仁:[/color]: “是不是应该让她和其他的小朋友一起多去玩玩,不要成天呆在家里”[next=6.7] [ID:t9af43f17ec] -[wait=1][next=4] [ID:tc88352dcea] -[wait=1][next=4] [ID:t78c1bab20c] -[color=POWDER_BLUE]陆仁:[/color]: “嗯......这个我也不是很懂的,那么到时候你和她说吧”[next=7.8] [ID:t3ab35a0776] -[color=POWDER_BLUE]陆仁:[/color]: “走吧,外面还有好多人等着呢,时间差不多再看几个今天就休息了”[next=8.3] [ID:t04cdb8c71c] -=> END - -~ c02_s13_lock -(锁住了) [ID:t4b7e29f605] -=> END - -~ c02_s13_xiangkuang -(相框) [ID:t05a04e53c5] -=> END - -~ c02_s13_xin1 -(一些患者的感谢信) [ID:t9ea994fc2b] -=> END - -# -#~ c02_s13_shengyin -#吕萍: “进来的地方......好像有声音” -#=> END - -~ c02_s13_shu -(一本被撕掉的书) [ID:t2f53cff3ba] -=> END - -~ c02_s13_xiaomaoshenti -(里面有什么东西) [ID:t2292f56db2] -=> END - -~ c02_s13_shi -(戏台上面刻了一首诗) [ID:td1b7d3133c] -=> END - -~ c02_s13_suo -(锁开了) [ID:t4bf2612ba6] -=> END - - -~ c02_s14_huangguodong -(口袋里有东西) [ID:te513bf86b9] -=> END - - -~ c02_s15_wu -(雾太大了,看不清路)[next=auto] [ID:t809fb0c8dc] -=> END - - -~ c02_s15_boy -男孩: “你终于还是回来了”[next=4] [ID:t726c5cec0b] -=> END - - -~ c02_s16_bayinhe -(是个八音盒) [ID:t08bce48c30] -=> END - -~ c02_s16_bayinhe2 -(祝女儿早日康复) [ID:t744229d4f8] -=> END - -~ c02_s15_fuzhou -(这图案和我手臂上的一摸一样) [ID:t2b3f3cc8b0] => END" scroll_smooth = true -syntax_highlighter = SubResource("SyntaxHighlighter_q4u2v") +syntax_highlighter = SubResource("SyntaxHighlighter_bxc68") [node name="ErrorsPanel" parent="Margin/Content/CodePanel" instance=ExtResource("7_5cvl4")] unique_name_in_owner = true layout_mode = 2 [node name="NewDialog" type="FileDialog" parent="."] -size = Vector2i(1200, 1000) -min_size = Vector2i(1200, 1000) +size = Vector2i(900, 750) +min_size = Vector2i(600, 500) dialog_hide_on_ok = true filters = PackedStringArray("*.dialogue ; Dialogue") [node name="SaveDialog" type="FileDialog" parent="."] -size = Vector2i(1200, 1000) -min_size = Vector2i(1200, 1000) +size = Vector2i(900, 750) +min_size = Vector2i(600, 500) dialog_hide_on_ok = true filters = PackedStringArray("*.dialogue ; Dialogue") [node name="OpenDialog" type="FileDialog" parent="."] title = "Open a File" -size = Vector2i(1200, 1000) -min_size = Vector2i(1200, 1000) +size = Vector2i(900, 750) +min_size = Vector2i(600, 500) ok_button_text = "Open" dialog_hide_on_ok = true file_mode = 0 @@ -827,20 +340,20 @@ filters = PackedStringArray("*.dialogue ; Dialogue") [node name="QuickOpenDialog" type="ConfirmationDialog" parent="."] title = "Quick open" -size = Vector2i(800, 1200) -min_size = Vector2i(800, 1200) +size = Vector2i(600, 900) +min_size = Vector2i(400, 600) ok_button_text = "Open" [node name="QuickOpenFilesList" parent="QuickOpenDialog" instance=ExtResource("2_npj2k")] [node name="ExportDialog" type="FileDialog" parent="."] -size = Vector2i(1200, 1000) -min_size = Vector2i(1200, 1000) +size = Vector2i(900, 750) +min_size = Vector2i(600, 500) [node name="ImportDialog" type="FileDialog" parent="."] title = "Open a File" -size = Vector2i(1200, 1000) -min_size = Vector2i(1200, 1000) +size = Vector2i(900, 750) +min_size = Vector2i(600, 500) ok_button_text = "Open" file_mode = 0 filters = PackedStringArray("*.csv ; Translation CSV") @@ -851,10 +364,10 @@ dialog_text = "You have errors in your script. Fix them and then try again." [node name="SettingsDialog" type="AcceptDialog" parent="."] title = "Settings" -size = Vector2i(2000, 1200) +size = Vector2i(1000, 600) unresizable = true -min_size = Vector2i(2000, 1200) -max_size = Vector2i(2000, 1200) +min_size = Vector2i(1000, 600) +max_size = Vector2i(1000, 600) ok_button_text = "Done" [node name="SettingsView" parent="SettingsDialog" instance=ExtResource("9_8bf36")] @@ -878,8 +391,8 @@ dialog_text = "You're now up to date!" [node name="FindInFilesDialog" type="AcceptDialog" parent="."] title = "Find in files" -size = Vector2i(1600, 1200) -min_size = Vector2i(1600, 1200) +size = Vector2i(1200, 900) +min_size = Vector2i(800, 600) ok_button_text = "Done" [node name="FindInFiles" parent="FindInFilesDialog" node_paths=PackedStringArray("main_view", "code_edit") instance=ExtResource("10_yold3")] diff --git a/scene/dialog/balloon.gd b/scene/dialog/balloon.gd index a06368e4..2cc25409 100755 --- a/scene/dialog/balloon.gd +++ b/scene/dialog/balloon.gd @@ -173,6 +173,8 @@ func _notification(what: int) -> void: ## Start some dialogue func start(dialogue_resource: DialogueResource, title: String, extra_game_states: Array = []) -> void: + if not is_node_ready(): + await ready temporary_game_states = [self] + extra_game_states is_waiting_for_input = false resource = dialogue_resource diff --git a/scene/dialog/balloon_debug.gd b/scene/dialog/balloon_debug.gd index 30590dfc..74e53a2e 100644 --- a/scene/dialog/balloon_debug.gd +++ b/scene/dialog/balloon_debug.gd @@ -131,6 +131,8 @@ func _notification(what: int) -> void: ## Start some dialogue func start(dialogue_resource: DialogueResource, title: String, extra_game_states: Array = []) -> void: + if not is_node_ready(): + await ready temporary_game_states = [self] + extra_game_states is_waiting_for_input = false resource = dialogue_resource