This commit is contained in:
2025-08-31 17:53:17 -05:00
parent 6d75b33775
commit aea5158d6e
161 changed files with 13444 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
extends Resource
class_name MTCharacterData
@export var id: String = ""
@export var name: String = ""
@export var avatar: Texture2D = null
@export var variants: Dictionary = {}

View File

@@ -0,0 +1 @@
uid://crm8hyh7nn5vb

View File

@@ -0,0 +1,307 @@
extends Node
var is_during_dialog = false
var is_during_cinematic = false
var variables := {
}
var options_visited_global := {
}
var options_visited_dialog := {
}
var time = 0
var gametime_offset = 0
var gametime_year = 1
@onready var gametime = epoch_to_game_time(time)
func set_variable(var_name: String, var_value) -> void:
variables[var_name] = var_value
func get_variable(var_name: String, default = 0.0):
if var_name in variables:
return variables[var_name]
else:
return default
func set_option_visited(option: DialogNodeOptionData, visited: bool):
options_visited_global[option.resource_scene_unique_id] = visited
options_visited_dialog[option.resource_scene_unique_id] = visited
func get_option_visited_global(option: DialogNodeOptionData) -> bool:
if not option.resource_scene_unique_id in options_visited_global:
return false
return options_visited_global[option.resource_scene_unique_id]
func get_option_visited_dialog(option: DialogNodeOptionData) -> bool:
if not option.resource_scene_unique_id in options_visited_dialog:
return false
return options_visited_dialog[option.resource_scene_unique_id]
func reset_options_visited_dialog():
options_visited_dialog.clear()
# ==============================================================================
# LOCALE
var default_locale := "en"
var current_locale := ""
func set_locale(locale_code: String):
current_locale = locale_code
if current_locale == default_locale:
current_locale = ""
func set_default_locale(locale_code: String):
default_locale = locale_code
if current_locale == default_locale:
current_locale = ""
func set_locale_automatic(def_locale: String = default_locale):
default_locale = def_locale
var locale = OS.get_locale_language()
set_locale(locale)
func set_locale_from_project(def_locale: String = default_locale):
default_locale = def_locale
var locale = TranslationServer.get_locale()
if "_" in locale:
locale = locale.left(locale.find("_"))
set_locale(locale)
# ==============================================================================
# TIME
func set_game_year(year: int) -> void:
gametime_year = year
var dt = {
"year": year,
"month": 1,
"day": 1,
"hour": 0,
"minute": 0,
"second": 0
}
gametime_offset = Time.get_unix_time_from_datetime_dict(dt)
gametime = epoch_to_game_time(time)
##
# Returns datetime in game reference (that is,
# start of game is 01/01/0001 00:00:00)
# Can be seen as "elapsed gameplay time"
func epoch_to_game_time(epoch_time: int) -> Dictionary:
# Date time dictionary has the format:
# {
# "year": ...,
# "month": ...,
# "day": ...,
# "weekday": ...,
# "hour": ...,
# "minute": ...,
# "second": ...
# }
# Custom values added here are:
# "time": String hour/minute in format HH:MM
# "date": String day/month in format DD/MM
# "date_inv": String day/month in format MM/DD
var dt = Time.get_datetime_dict_from_unix_time(gametime_offset + epoch_time)
dt["year"] -= gametime_year-1 # year - 1, so starts at year 1
dt["time"] = "%02d:%02d" % [dt["hour"], dt["minute"]]
dt["date"] = "%02d/%02d" % [dt["day"], dt["month"]]
dt["date_inv"] = "%02d/%02d" % [dt["month"], dt["day"]]
dt["weekday_name"] = MTDefs.WeekdayNames[dt["weekday"]]
dt["wday_name"] = MTDefs.WeekdayNamesShort[dt["weekday"]]
return dt
# Converts day, month, year to unix epoch time
func game_time_to_epoch(p_gametime: Dictionary) -> int:
p_gametime["year"] += gametime_year-1 # Year 1 is base,
return Time.get_unix_time_from_datetime_dict(p_gametime) - gametime_offset
func update_gametime_dict():
gametime = epoch_to_game_time(time)
# Converts day, month, year to unix epoch time
func date_to_int(day: int, month: int, year: int) -> int:
return game_time_to_epoch({
"year": year, "month": month, "day": day,
"hour": 0, "minute": 0, "second": 0
})
# Converts hour, minute to float fractional hour
# Example: 2, 30 becomes 2.5
func time_to_float(hour: int, minute: int) -> float:
return float(hour) + float(minute)/60.0
func time_to_string(epoch_time: int, simplified: bool = true) -> String:
# Date time dictionary has the format:
# {
# "year": ...,
# "month": ...,
# "day": ...,
# "weekday": ...,
# "hour": ...,
# "minute": ...,
# "second": ...
# }
var dt = epoch_to_game_time(epoch_time)
var res = ""
# Simplified version is Weekday HH:MM
if (simplified):
res = MTDefs.WeekdayNames[dt['weekday']].left(3)
res += " %02d:%02d" % [dt['hour'], dt['minute']]
# Non-simplified is Weekday, DD of MonthName HH:MM
else:
res = MTDefs.WeekdayNames[dt['weekday']]
res += ", "+str(dt['day'])
res += " "+MTDefs.MonthNames[dt['month']]
res += " %02d:%02d" % [dt['hour'], dt['minute']]
return res
func split_time(value: String) -> Array:
# TODO: this is not very efficient code. To be rewritten to run faster
var nums_psa = Array(str(value).split(':'))
while nums_psa.size() < 2:
nums_psa.append(0)
var nums = [int(nums_psa[0]), int(nums_psa[1])]
if (nums[0] < 0) or (nums[0] > 23):
nums[0] = 0
if (nums[1] < 0) or (nums[1] > 59):
nums[1] = 0
return [nums[0], nums[1]]
func split_date(value: String) -> Array:
# TODO: this is not very efficient code. To be rewritten to run faster
var nums_psa = Array(str(value).split('/'))
while nums_psa.size() < 2:
nums_psa.append(1)
var nums = [int(nums_psa[0]), int(nums_psa[1])]
if (nums[0] < 1) or (nums[0] > 31):
nums[0] = 1
if (nums[1] < 1) or (nums[1] > 12):
nums[1] = 1
return [nums[0], nums[1]]
func print_date(value: String) -> String:
var nums = split_date(value)
var day = "%02d" % nums[0]
var month = MTDefs.MonthNames[nums[1]].left(3)
return day+' '+month
func print_weekday(value):
while value > 6:
value -= 7
return MTDefs.WeekdayNames[value]
func split_string_autodetect_rn(value: String) -> Array:
var result = []
value = str(value)
if "\r\n" in value:
# Windows style
result = value.split("\r\n")
elif "\r" in value:
# MacOS style
result = value.split("\r")
else:
# Unix style
result = value.split("\n")
return result
func next_time_at_time(time_value: String) -> int:
var asked_time = split_time(time_value)
# We calculate epoch time value for the requested hour happening today
# if we are before this time, this is what we want
var ingame_time_as_today = game_time_to_epoch({
"year": gametime["year"],
"month": gametime["month"],
"day": gametime["day"],
"hour": asked_time[0],
"minute": asked_time[1],
"second": 0
})
if time <= ingame_time_as_today:
return ingame_time_as_today
# If we are after this time, we want the same time but tomorrow
# so we add 24 hours
else:
return ingame_time_as_today + 24*60*60 # seconds
func next_time_at_weekday(weekday: int) -> int:
# First we find the weekday delta handling when the requested weekday
# is lower (or equal) than current one
var asked_weekday = weekday if weekday > gametime["weekday"] else weekday + 7
var weekday_delta = asked_weekday - gametime["weekday"]
# Find time for midnight of today
var ingame_midnight_today = game_time_to_epoch({
"year": gametime["year"],
"month": gametime["month"],
"day": gametime["day"],
"hour": 0,
"minute": 0,
"second": 0
})
# Finally we just offset the weekday_delta days into the future
return ingame_midnight_today + weekday_delta*24*60*60 # seconds
func export_game_data() -> Dictionary:
var visited_options := {}
for item_ui in options_visited_global:
visited_options[item_ui] = "1" if options_visited_global[item_ui] else "0"
var result = {
"time": time,
"gametime_offset": gametime_offset,
"gametime_year": gametime_year,
"variables": variables,
"visited_options": visited_options,
}
return result
func import_game_data(data: Dictionary) -> void:
if ("time" in data):
time = int(round(float(data["time"])))
if ("gametime_offset" in data):
gametime_offset = int(round(float(data["gametime_offset"])))
if ("gametime_year" in data):
gametime_year = int(round(float(data["gametime_year"])))
options_visited_global.clear()
if "visited_options" in data:
var visited_dict: Dictionary = data["visited_options"]
for item_ui in visited_dict:
# If coming from a saved file, item_ui will never be StringName
# but this Dictionary might be coming from a serialized Resource (bad idea, but still)
if (item_ui is String) or (item_ui is StringName):
options_visited_global[item_ui] = (not visited_dict[item_ui] in [false, "false", 0, 0.0, "0", "0.0", "no"])
variables.clear()
for variable_name in data["variables"]:
if variable_name is String:
var value = data["variables"][variable_name]
if typeof(value) in [TYPE_INT, TYPE_FLOAT, TYPE_STRING]:
# All numeric values can be safely assumed float (as per JSON)
# since all methods using them do proper casting
variables[variable_name] = value
# Silently ignore everything else

View File

@@ -0,0 +1 @@
uid://d02cnw1l6owsy

View File

@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://domdph40m3s8i"]
[ext_resource type="Script" uid="uid://d02cnw1l6owsy" path="res://addons/madtalk/runtime/MadTalkGlobals.gd" id="1_tbidr"]
[node name="MadTalkGlobals" type="Node"]
script = ExtResource("1_tbidr")

View File

@@ -0,0 +1,912 @@
[gd_resource type="Resource" script_class="DialogData" load_steps=73 format=3 uid="uid://dxkjjrap15vxu"]
[ext_resource type="Script" uid="uid://bw2q2eucjkylk" path="res://addons/madtalk/components/resources/DialogData.gd" id="1_giduu"]
[ext_resource type="Script" uid="uid://c2bv5lwcvdmrb" path="res://addons/madtalk/components/resources/DialogNodeItemData.gd" id="2_48vp3"]
[ext_resource type="Script" uid="uid://bfg2ff7c0tanh" path="res://addons/madtalk/components/resources/DialogNodeOptionData.gd" id="3_dways"]
[ext_resource type="Script" uid="uid://b2mrnotqjr75d" path="res://addons/madtalk/components/resources/DialogNodeData.gd" id="4_f2ijm"]
[ext_resource type="Script" uid="uid://butd1fwy4a2hn" path="res://addons/madtalk/components/resources/DialogSheetData.gd" id="5_vkpn8"]
[sub_resource type="Resource" id="1"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = "foo"
message_speaker_variant = ""
message_voice_clip = ""
message_text = "This is an example sheet. You can rename and use it, or discard and create your own."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="4"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Would you like to see more dialog messages?"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 1
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="5"]
script = ExtResource("3_dways")
text = "Yes"
text_locales = {}
connected_to_id = 8
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="6"]
script = ExtResource("3_dways")
text = "No"
text_locales = {}
connected_to_id = -1
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="2"]
script = ExtResource("4_f2ijm")
sequence_id = 0
position = Vector2(-20, 120)
comment = ""
items = [SubResource("1"), SubResource("4")]
options = [SubResource("5"), SubResource("6")]
continue_sequence_id = -1
continue_port_index = -1
[sub_resource type="Resource" id="v4udn"]
script = ExtResource("2_48vp3")
item_type = 2
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = ""
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 1
effect_values = ["my_var", 5.0]
[sub_resource type="Resource" id="Resource_jrxya"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "my_var was set to: <<my_var>>
{{if my_var < 4: Since it's less than 4, you see this message.}}
{{if my_var < 6: Since it's less than 6, you see this message.}}"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_ixt6j"]
script = ExtResource("4_f2ijm")
sequence_id = 6
position = Vector2(920, 120)
comment = ""
items = [SubResource("v4udn"), SubResource("Resource_jrxya")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="7"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = "bar"
message_speaker_variant = ""
message_voice_clip = ""
message_text = "The speaker IDs are \"foo\" and \"bar\", but the display names are \"Maria\" and \"Francesco\"."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="8"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = "bar"
message_speaker_variant = ""
message_voice_clip = ""
message_text = "This is so you can have fancy nice looking display names, but you don't have to type them all the time in the system."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="9"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "A blank speaker ID is valid. If there are no characters with blank ID, it's treated as empty name."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="Resource_j2kw6"]
script = ExtResource("4_f2ijm")
sequence_id = 8
position = Vector2(460, 60)
comment = ""
items = [SubResource("7"), SubResource("8"), SubResource("9")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="3"]
script = ExtResource("5_vkpn8")
sheet_id = "1_start_here"
sheet_description = "Demonstration sheet. You can delete this in your game, or repurpose it."
next_sequence_id = 9
nodes = [SubResource("2"), SubResource("Resource_ixt6j"), SubResource("Resource_j2kw6")]
[sub_resource type="Resource" id="Resource_vx7w3"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "This example demonstrates the bare minimum nodes you need for the dialog to work."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_duvjw"]
script = ExtResource("4_f2ijm")
sequence_id = 0
position = Vector2(0, 0)
comment = ""
items = [SubResource("Resource_vx7w3")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="Resource_sxgqo"]
script = ExtResource("5_vkpn8")
sheet_id = "bare_minimum"
sheet_description = ""
next_sequence_id = 2
nodes = [SubResource("Resource_duvjw")]
[sub_resource type="Resource" id="12"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "If you do not assign a node to Dialog Button Container (dialog_buttons_container), automatic menu will not be enabled.
In this case, if you want menu options, you have to process the menu externally.
(You can, however, have dialogs without menus: simply never use menu options.)"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="13"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "If you [b][i]do[/i][/b] use menu options in the dialog sheet, and do not assign a node for automatic menus and also do not handle the menu externally, then menus will not work (attempting to show menu options will cause the dialog to get stuck)."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="16"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Processing the menu externally is easy:
When the dialog reaches a menu, the [color=#99ff00][b]external_menu_requested([color=#ff9955]options, metadata[/color])[/b][/color] signal is called, where [color=#ff9955][b]options[/b][/color] is an Array with the menu options, and [color=#ff9955][b]metadata[/b][/color] is an Array of Dictionaries.
Each item has a [color=#99ffff][b]text[/b][/color] property containing the text for that option, from the dialog sheet.
So [b][color=#ff9955]options[[color=#ffff00]0[/color]][/color].[color=#99ffff]text[/color][/b] is the text for first option, and [b][color=#ff9955]metadata[lb][color=#ffff00]0[/color][rb][lb][color=#ffff99]\"enabled\"[/color][rb][/color][/b] is the bool indicating if that option is enabled, etc."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="17"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "The menu will then pause and wait for your code to select one of the options from that array.
You take the input from the player in any way you like, and then select an option by calling the method [b][color=#9999ff]select_menu_option( [color=#ffff00]index[/color] )[/color][/b] where the argument is the index of the desired option from the [color=#ff9955][b]options[/b][/color] array.
Selecting an invalid index is simply ignored."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="18"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Using external menus, the option text can be used as IDs, as CSV lines packing several fields, or any other purpose you like, since building the menu is up to you.
This way you can have more control and flexibility, while still having all the dialog managed by MadTalk."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="14"]
script = ExtResource("4_f2ijm")
sequence_id = 0
position = Vector2(0, 0)
comment = ""
items = [SubResource("12"), SubResource("13"), SubResource("16"), SubResource("17"), SubResource("18")]
options = []
continue_sequence_id = 1
continue_port_index = 0
[sub_resource type="Resource" id="19"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Please select an option with double click."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 1
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="20"]
script = ExtResource("3_dways")
text = "red,PokaTola"
text_locales = {}
connected_to_id = 2
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="21"]
script = ExtResource("3_dways")
text = "red,PokaTola Diet"
text_locales = {}
connected_to_id = 3
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="22"]
script = ExtResource("3_dways")
text = "blue,Zepsi"
text_locales = {}
connected_to_id = 4
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="23"]
script = ExtResource("3_dways")
text = "blue,Zepsi Zero"
text_locales = {}
connected_to_id = 5
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="25"]
script = ExtResource("3_dways")
text = "green,Buaraná Ankartida"
text_locales = {}
connected_to_id = 6
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="26"]
script = ExtResource("3_dways")
text = "yellow,Strike"
text_locales = {}
connected_to_id = 7
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="24"]
script = ExtResource("4_f2ijm")
sequence_id = 1
position = Vector2(600, 40)
comment = ""
items = [SubResource("19")]
options = [SubResource("20"), SubResource("21"), SubResource("22"), SubResource("23"), SubResource("25"), SubResource("26")]
continue_sequence_id = -1
continue_port_index = -1
[sub_resource type="Resource" id="27"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You have selected the normal PokaTola"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="28"]
script = ExtResource("4_f2ijm")
sequence_id = 2
position = Vector2(1280, -320)
comment = ""
items = [SubResource("27")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="29"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You have selected the Diet PokaTola"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="30"]
script = ExtResource("4_f2ijm")
sequence_id = 3
position = Vector2(1280, -120)
comment = ""
items = [SubResource("29")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="31"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You have selecteed the normal Zepsi"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="32"]
script = ExtResource("4_f2ijm")
sequence_id = 4
position = Vector2(1280, 80)
comment = ""
items = [SubResource("31")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="33"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You have selected the Diet Zepsi"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="34"]
script = ExtResource("4_f2ijm")
sequence_id = 5
position = Vector2(1280, 280)
comment = ""
items = [SubResource("33")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="35"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Good choice! You have selected the Buaraná Ankartida"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="36"]
script = ExtResource("4_f2ijm")
sequence_id = 6
position = Vector2(1280, 480)
comment = ""
items = [SubResource("35")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="37"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You have selected the Strike"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 0
condition_values = []
effect_type = 0
effect_values = []
[sub_resource type="Resource" id="38"]
script = ExtResource("4_f2ijm")
sequence_id = 7
position = Vector2(1280, 680)
comment = ""
items = [SubResource("37")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="15"]
script = ExtResource("5_vkpn8")
sheet_id = "external_menu"
sheet_description = ""
next_sequence_id = 8
nodes = [SubResource("14"), SubResource("24"), SubResource("28"), SubResource("30"), SubResource("32"), SubResource("34"), SubResource("36"), SubResource("38")]
[sub_resource type="Resource" id="Resource_rlxbw"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Hello! Welcome to the localized example!
Warning: the next message will play an audio clip."
message_voice_clip_locales = {}
message_text_locales = {
"es": "¡Hola! ¡Bienvenido al ejemplo localizado!
Advertencia: el siguiente mensaje reproducirá un clip de audio.",
"pt": "Olá! Seja bem vindo ao teste localizado!
Aviso: a próxima mensagem reproduzirá um clipe de áudio."
}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_quvr4"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = "res://example_scene/voices/example_localized_en.ogg"
message_text = "You are now seeing messages in English, because either this is your system language, or because your language is not included in this test."
message_voice_clip_locales = {
"es": "res://example_scene/voices/example_localized_es.ogg",
"pt": "res://example_scene/voices/example_localized_pt.ogg"
}
message_text_locales = {
"es": "Ahora estás viendo los mensajes en español, porque este es el idioma de tu sistema.",
"pt": "Você está agora vendo mensagens em Português, porque esse é o idioma do seu sistema."
}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_w6lj3"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "Thank you for playing this test!"
message_voice_clip_locales = {}
message_text_locales = {
"es": "¡Gracias por jugar esta prueba!",
"pt": "Obrigado por jogar esse teste!"
}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_dlpdt"]
script = ExtResource("3_dways")
text = "First option"
text_locales = {
"": "First option",
"es": "Primera opción",
"pt": "Primeira opção"
}
connected_to_id = -1
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_x0nqb"]
script = ExtResource("3_dways")
text = "Second option"
text_locales = {
"": "Second option",
"es": "Segunda opción",
"pt": "Segunda opção"
}
connected_to_id = -1
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_ml5yl"]
script = ExtResource("4_f2ijm")
sequence_id = 0
position = Vector2(0, 0)
comment = ""
items = [SubResource("Resource_rlxbw"), SubResource("Resource_quvr4"), SubResource("Resource_w6lj3")]
options = [SubResource("Resource_dlpdt"), SubResource("Resource_x0nqb")]
continue_sequence_id = -1
continue_port_index = -1
[sub_resource type="Resource" id="Resource_cvf4j"]
script = ExtResource("5_vkpn8")
sheet_id = "localized"
sheet_description = ""
next_sequence_id = 2
nodes = [SubResource("Resource_ml5yl")]
[sub_resource type="Resource" id="Resource_gfy7a"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You will now be presented with menu options."
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_5plx1"]
script = ExtResource("3_dways")
text = "Option 1"
text_locales = {
"": "Option 1"
}
connected_to_id = 1
is_conditional = true
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_4ierx"]
script = ExtResource("3_dways")
text = "Second option"
text_locales = {
"": "Second option"
}
connected_to_id = 2
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_c0esp"]
script = ExtResource("3_dways")
text = "Another cool option"
text_locales = {
"": "Another cool option"
}
connected_to_id = 3
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_28bfi"]
script = ExtResource("4_f2ijm")
sequence_id = 0
position = Vector2(40, 20)
comment = ""
items = [SubResource("Resource_gfy7a")]
options = [SubResource("Resource_5plx1"), SubResource("Resource_4ierx"), SubResource("Resource_c0esp")]
continue_sequence_id = -1
continue_port_index = -1
[sub_resource type="Resource" id="Resource_dyln1"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You selected option 1"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_v4udn"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "This option also has another menu. Select your option:"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_kur6e"]
script = ExtResource("3_dways")
text = "Yes"
text_locales = {
"": "Yes"
}
connected_to_id = 0
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_gi4cx"]
script = ExtResource("3_dways")
text = "Uh... no?"
text_locales = {
"": "Uh... no?"
}
connected_to_id = -1
is_conditional = false
condition_variable = ""
condition_operator = "="
condition_value = ""
autodisable_mode = 0
inactive_mode = 0
[sub_resource type="Resource" id="Resource_wn6qm"]
script = ExtResource("4_f2ijm")
sequence_id = 1
position = Vector2(60, -320)
comment = ""
items = [SubResource("Resource_dyln1"), SubResource("Resource_v4udn")]
options = [SubResource("Resource_kur6e"), SubResource("Resource_gi4cx")]
continue_sequence_id = -1
continue_port_index = -1
[sub_resource type="Resource" id="Resource_qsky1"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You selected the second option"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_5vhe7"]
script = ExtResource("4_f2ijm")
sequence_id = 2
position = Vector2(640, 120)
comment = ""
items = [SubResource("Resource_qsky1")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="Resource_xshh7"]
script = ExtResource("2_48vp3")
item_type = 0
connected_to_id = -1
message_speaker_id = ""
message_speaker_variant = ""
message_voice_clip = ""
message_text = "You selected the cool option"
message_voice_clip_locales = {}
message_text_locales = {}
message_hide_on_end = 0
condition_type = 10
condition_values = []
effect_type = 10
effect_values = []
[sub_resource type="Resource" id="Resource_pnwrx"]
script = ExtResource("4_f2ijm")
sequence_id = 3
position = Vector2(640, 340)
comment = ""
items = [SubResource("Resource_xshh7")]
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="Resource_s3y14"]
script = ExtResource("5_vkpn8")
sheet_id = "minimum_menu"
sheet_description = ""
next_sequence_id = 4
nodes = [SubResource("Resource_28bfi"), SubResource("Resource_wn6qm"), SubResource("Resource_5vhe7"), SubResource("Resource_pnwrx")]
[sub_resource type="Resource" id="kur6e"]
script = ExtResource("4_f2ijm")
sequence_id = 0
position = Vector2(0, 0)
comment = ""
items = []
options = []
continue_sequence_id = -1
continue_port_index = 0
[sub_resource type="Resource" id="Resource_mjnvi"]
script = ExtResource("5_vkpn8")
sheet_id = "new_sheet_1"
sheet_description = ""
next_sequence_id = 1
nodes = [SubResource("kur6e")]
[resource]
script = ExtResource("1_giduu")
version = 1.0
sheets = {
"1_start_here": SubResource("3"),
"bare_minimum": SubResource("Resource_sxgqo"),
"external_menu": SubResource("15"),
"localized": SubResource("Resource_cvf4j"),
"minimum_menu": SubResource("Resource_s3y14"),
"new_sheet_1": SubResource("Resource_mjnvi")
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
uid://c6av3xe4m2ujl