diff --git a/addons/escoria-core/game/core-scripts/esc/_test/test_esc_compiler.gd b/addons/escoria-core/game/core-scripts/esc/_test/test_esc_compiler.gd index 22d1d5dd..792eadef 100644 --- a/addons/escoria-core/game/core-scripts/esc/_test/test_esc_compiler.gd +++ b/addons/escoria-core/game/core-scripts/esc/_test/test_esc_compiler.gd @@ -42,7 +42,7 @@ func _test_basic() -> bool: assert(subject.name == "say") assert(subject.parameters.size() == 2) assert(subject.parameters[0] == "player") - assert(subject.parameters[1] == "Test") + assert(subject.parameters[1] == '"Test"') subject = script.events["test"].statements[0].statements[1] assert(subject is ESCGroup) @@ -55,14 +55,14 @@ func _test_basic() -> bool: assert(subject.name == "say") assert(subject.parameters.size() == 2) assert(subject.parameters[0] == "player") - assert(subject.parameters[1] == "Test2 BLANK") + assert(subject.parameters[1] == '"Test2 BLANK"') subject = script.events["test"].statements[0].statements[2] assert(subject is ESCCommand) assert(subject.name == "say") assert(subject.parameters.size() == 2) assert(subject.parameters[0] == "player") - assert(subject.parameters[1] == "Test3") + assert(subject.parameters[1] == '"Test3"') assert(subject.conditions.size() == 1) assert(subject.conditions[0].flag == "test2") @@ -77,12 +77,12 @@ func _test_basic() -> bool: subject = script.events["test"].statements[1].statements[1] assert(subject is ESCCommand) assert(subject.name == "say") - assert(subject.parameters[1] == "Test 6") + assert(subject.parameters[1] == '"Test 6"') subject = script.events["test"].statements[1].statements[2] assert(subject is ESCCommand) assert(subject.name == "say") - assert(subject.parameters[1] == "TEST:Test 7") + assert(subject.parameters[1] == "TEST:\"Test 7\"") return true @@ -245,11 +245,11 @@ func _test_dialog() -> bool: assert(subject[1] is ESCCommand) assert(subject[1].name == "say") assert(subject[1].parameters.size() == 2) - assert(subject[1].parameters[1] == "testb") + assert(subject[1].parameters[1] == '"testb"') assert(subject[2] is ESCCommand) assert(subject[2].name == "say") assert(subject[2].parameters.size() == 2) - assert(subject[2].parameters[1] == "testb?") + assert(subject[2].parameters[1] == '"testb?"') subject = script.events["test"].statements[0].options[1] assert(subject is ESCDialogOption) diff --git a/addons/escoria-core/game/core-scripts/esc/commands/say.gd b/addons/escoria-core/game/core-scripts/esc/commands/say.gd index 1684e331..832b45df 100644 --- a/addons/escoria-core/game/core-scripts/esc/commands/say.gd +++ b/addons/escoria-core/game/core-scripts/esc/commands/say.gd @@ -29,6 +29,11 @@ func configure() -> ESCCommandArgumentDescriptor: null, null, "" + ], + [ + true, + false, + true ] ) diff --git a/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd b/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd index 8531ea20..8514e7a0 100644 --- a/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd +++ b/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd @@ -219,9 +219,7 @@ func _compile(lines: Array) -> Array: returned.append(dialog_option) elif command_regex.search(line): var command = ESCCommand.new(line) - if command.is_valid(): - escoria.logger.trace("Line is the command %s" % command.name) - returned.append(command) + returned.append(command) else: escoria.logger.report_errors( "Invalid ESC line detected", diff --git a/addons/escoria-core/game/core-scripts/esc/types/esc_command.gd b/addons/escoria-core/game/core-scripts/esc/types/esc_command.gd index adea2b14..082f5a4b 100644 --- a/addons/escoria-core/game/core-scripts/esc/types/esc_command.gd +++ b/addons/escoria-core/game/core-scripts/esc/types/esc_command.gd @@ -44,18 +44,18 @@ func _init(command_string): for parameter in parsed_parameters.split(" "): if parameter.begins_with('"') and parameter.ends_with('"'): parameters.append( - parameter.substr(1, parameter.length() - 2) + parameter ) elif ":" in parameter and '"' in parameter: quote_open = true - parameter_values.append(parameter.replace('"', '')) + parameter_values.append(parameter) elif parameter.begins_with('"'): quote_open = true - parameter_values.append(parameter.substr(1)) + parameter_values.append(parameter) elif parameter.ends_with('"'): quote_open = false parameter_values.append( - parameter.substr(0, len(parameter) - 1) + parameter.substr(0, len(parameter)) ) parameters.append(parameter_values.join(" ")) parameter_values.resize(0) diff --git a/addons/escoria-core/game/core-scripts/esc/types/esc_command_argument_descriptor.gd b/addons/escoria-core/game/core-scripts/esc/types/esc_command_argument_descriptor.gd index b3713d5b..ce1c50f1 100644 --- a/addons/escoria-core/game/core-scripts/esc/types/esc_command_argument_descriptor.gd +++ b/addons/escoria-core/game/core-scripts/esc/types/esc_command_argument_descriptor.gd @@ -14,13 +14,22 @@ var types: Array = [] # The default values for the arguments var defaults: Array = [] +# Wether to strip quotes on specific arguments +var strip_quotes: Array = [] + # Initialize the descriptor -func _init(p_min_args: int = 0, p_types: Array = [], p_defaults: Array = []): +func _init( + p_min_args: int = 0, + p_types: Array = [], + p_defaults: Array = [], + p_strip_quotes: Array = [true] +): min_args = p_min_args types = p_types defaults = p_defaults - + strip_quotes = p_strip_quotes + # Combine the default argument values with the given arguments func prepare_arguments(arguments: Array) -> Array: @@ -30,7 +39,16 @@ func prepare_arguments(arguments: Array) -> Array: complete_arguments[index] = escoria.utils.get_typed_value( arguments[index] ) + var strip = strip_quotes[0] + if strip_quotes.size() == complete_arguments.size(): + strip = strip_quotes[index] + if strip and typeof(complete_arguments[index]) == TYPE_STRING: + complete_arguments[index] = complete_arguments[index].replace( + '"', + '' + ) + return complete_arguments diff --git a/addons/escoria-core/game/scenes/dialogs/esc_dialog_player.gd b/addons/escoria-core/game/scenes/dialogs/esc_dialog_player.gd index d6b59e7e..a1bcd159 100644 --- a/addons/escoria-core/game/scenes/dialogs/esc_dialog_player.gd +++ b/addons/escoria-core/game/scenes/dialogs/esc_dialog_player.gd @@ -4,7 +4,7 @@ class_name ESCDialogPlayer # A regular expression that separates the translation key from the text -const KEYTEXT_REGEX = "^((?[^:]+):)?(?.+)" +const KEYTEXT_REGEX = "^((?[^:]+):)?\"(?.+)\"" # Emitted when an answer as chosem diff --git a/project.godot b/project.godot index 44f6e409..921c7b32 100644 --- a/project.godot +++ b/project.godot @@ -690,7 +690,7 @@ sound/sfx_volume=1 sound/speech_volume=1 sound/master_volume=1 main/command_directories=[ "res://addons/escoria-core/game/core-scripts/esc/commands" ] -debug/log_level="DEBUG" +debug/log_level="TRACE" platform/skip_cache=false platform/skip_cache.mobile=true ui/items_autoregister_path="res://game/items/inventory"