Compare commits

...

26 Commits

Author SHA1 Message Date
Katharina Ziolkowski 746ac58329 Merge pull request 'Feature: Quest system' (#11) from feature/quest_system into develop
9 months ago
cblech a9cb20c8bc Fixed journal references
9 months ago
cblech 32249fde86 Made quest visuals
9 months ago
cblech 27e137bc02 Made quest usable
9 months ago
cblech 01daddee3b Made basic quest setup
9 months ago
Jonathan ba512508f8 Merge pull request 'feature/farm_scene_rework' (#10) from feature/farm_scene_rework into develop
9 months ago
Katharina Ziolkowski 09ef508f49 Fixed field creation bug
9 months ago
Katharina Ziolkowski a54003c658 Made ground noise texture more seamless
9 months ago
Katharina Ziolkowski fbad33213c Finalized new watering can mechanic with vfx and ui
9 months ago
Katharina Ziolkowski 35c7e9a25e WIP Wasserstand UI
9 months ago
Katharina Ziolkowski 57896e37df Fixed background music loop and added audio mixers
9 months ago
Katharina Ziolkowski 242879159a Fixed sfx binding in farming scene
9 months ago
Katharina Ziolkowski 7ef9fe53b2 Added SignalVisualizer plugin
9 months ago
Katharina Ziolkowski 600d9cfca1 Made items activate directly when picked up
9 months ago
Katharina Ziolkowski 48796de1ba Changed dialogic background color to black and opacity to 168 sothat there is a visible dark overlay during dialogues
9 months ago
Katharina Ziolkowski 4a0b2cd550 Improved Inventory UI (more in the middle, adapt to viewport size, new selector image)
9 months ago
Katharina Ziolkowski ba429d7b84 wip improving inventory layout
9 months ago
Katharina Ziolkowski e33776daeb ESC closes inventory now.
9 months ago
Katharina Ziolkowski 9cfd3bd6f4 Improving farm outside scene performance
9 months ago
Katharina Ziolkowski c36d0b5866 reduced VRAM load by more than 50%
9 months ago
Katharina Ziolkowski bcdba7b812 Fixed Vesna sliding issue
9 months ago
Katharina Ziolkowski 7467ec56d9 Fixed ordering issues in indoor scene
10 months ago
Katharina Ziolkowski 990494e8b0 Adjusted indoor speed
10 months ago
Katharina Ziolkowski c6e0cfe4d9 Fixed Button layout behaviour
10 months ago
Katharina Ziolkowski 4e010220bf Improved performance of the first indoor scene
10 months ago
Katharina Ziolkowski ccc4eb759e Added new house image to farming scene
10 months ago

@ -0,0 +1 @@
<svg height="24" viewBox="0 0 16 16" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a1 1 0 0 0 -1 1v5h-2c-1.108 0-2 .892-2 2v1h10v-1c0-1.108-.892-2-2-2h-2v-5a1 1 0 0 0 -1-1zm-5 10v4l10-1v-3z" fill="#e0e0e0"/></svg>

After

Width:  |  Height:  |  Size: 227 B

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bmnff63evbdhv"
path="res://.godot/imported/Clear.svg-d661617e27b91e3580171e3447fde514.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/SignalVisualizer/Clear.svg"
dest_files=["res://.godot/imported/Clear.svg-d661617e27b91e3580171e3447fde514.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

@ -0,0 +1,58 @@
class_name SignalConnection extends Object
# Properties
# |===================================|
# |===================================|
# |===================================|
var signal_id: int
var source_node_name: String
var destination_node_name: String
var method_signature: String
var description: String :
get:
return "ID: {signal_id} Source: {source_node_name} Destination: {destination_node_name} Method: {method_signature}".format({
"signal_id": signal_id,
"source_node_name": source_node_name,
"destination_node_name": destination_node_name,
"method_signature": method_signature,
})
var dictionary_key: String :
get:
return "{signal_id}__{source_node_name}__{destination_node_name}__{method_signature}".format({ "signal_id": signal_id, "source_node_name": source_node_name, "destination_node_name": destination_node_name, "method_signature": method_signature.replace("::", "_") })
var dictionary_representation: Dictionary :
get:
return {
"signal_id": signal_id,
"source_node_name": source_node_name,
"destination_node_name": destination_node_name,
"method_signature": method_signature,
}
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _init(signal_id: int, source_node_name: String, destination_node_name: String, method_signature: String):
self.signal_id = signal_id
self.source_node_name = source_node_name
self.destination_node_name = destination_node_name
self.method_signature = method_signature
# Signals
# |===================================|
# |===================================|
# |===================================|
# Methods
# |===================================|
# |===================================|
# |===================================|

@ -0,0 +1,56 @@
class_name SignalDescription extends Object
# Properties
# |===================================|
# |===================================|
# |===================================|
var id: int:
get:
if _source_id != null:
return _source_id
return get_instance_id()
var node_name: String
var signal_name: String
var description: String :
get:
return "ID: {id} Node: {node_name} Signal: {signal_name}".format({
"id": id,
"node_name": node_name,
"signal_name": signal_name,
})
var dictionary_representation: Dictionary :
get:
return {
"id": id,
"node_name": node_name,
"signal_name": signal_name,
}
var _source_id = null
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _init(node_name: String, signal_name: String):
self.node_name = node_name
self.signal_name = signal_name
# Signals
# |===================================|
# |===================================|
# |===================================|
# Methods
# |===================================|
# |===================================|
# |===================================|

@ -0,0 +1,53 @@
class_name SignalGraph extends Object
# Properties
# |===================================|
# |===================================|
# |===================================|
var name: String
var signals: Array[SignalDescription]
var edges: Array[SignalConnection]
var description: String :
get:
return "Signals: {signals}\nEdges: {edges}".format({
"signals": signals.map(func (item): return item.description),
"edges": edges.map(func (item): return item.description),
})
var dictionary_representation: Dictionary :
get:
return {
"name": name,
"signals": signals.map(func (element): return element.dictionary_representation),
"edges": edges.map(func (element): return element.dictionary_representation),
}
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _init(name: String, signals: Array[SignalDescription] = [], edges: Array[SignalConnection] = []):
self.name = name
self.signals = signals
self.edges = edges
# Signals
# |===================================|
# |===================================|
# |===================================|
# Methods
# |===================================|
# |===================================|
# |===================================|
func get_source_signal_for_edge(edge: SignalConnection) -> SignalDescription:
var result = signals.filter(func (item): return item.id == edge.signal_id)
if result.size() > 0:
return result[0]
return null

@ -0,0 +1,170 @@
@tool
class_name SignalGraphUtility
static var SignalGraphNode = preload("res://addons/SignalVisualizer/Visualizer/signal_graph_node.tscn")
static var GraphNodeItem = preload("res://addons/SignalVisualizer/Visualizer/signal_graph_node_item.tscn")
const SOURCE_COLOR: Color = Color.SKY_BLUE
const DESTINATION_COLOR: Color = Color.CORAL
const CONNECTION_TYPE: int = 0
#region Methods
static func create_signal_graph(name: String, signals: Array, edges: Array) -> SignalGraph:
var signal_graph = SignalGraph.new(name)
for signal_item in signals:
var new_signal_description = SignalDescription.new(signal_item.node_name, signal_item.signal_name)
new_signal_description._source_id = signal_item.id
signal_graph.signals.append(new_signal_description)
for connection in edges:
var new_edge = SignalConnection.new(connection.signal_id, connection.source_node_name, connection.destination_node_name, connection.method_signature)
signal_graph.edges.append(new_edge)
return signal_graph
static func create_signal_graph_from_node(root_node: Node, is_persistent_only: bool = false):
var signal_graph = SignalGraph.new(root_node.scene_file_path)
var all_nodes: Array[Node] = _gather_nodes_from_node(root_node)
var signals: Array[SignalDescription] = []
var edges: Array[SignalConnection] = []
for node in all_nodes:
for signal_item in node.get_signal_list():
var existing_signals = []
var connection_list = node.get_signal_connection_list(signal_item["name"] as String)
if connection_list.size() > 0:
for connection in connection_list:
var enabled_flags = connection["flags"] == CONNECT_PERSIST if is_persistent_only else true
var should_display_connection = "name" in connection["callable"].get_object() and not connection["callable"].get_object().name.begins_with("@") and enabled_flags
if should_display_connection:
var signal_description: SignalDescription
var filtered_signals = existing_signals.filter(func (element): return element.signal_name == signal_item.name and element.node_name == node.name)
if filtered_signals.size() == 1:
signal_description = filtered_signals[0]
else:
signal_description = SignalDescription.new(node.name, signal_item.name)
existing_signals.append(signal_description)
signals.append(signal_description)
var signal_edge = SignalConnection.new(signal_description.id, signal_description.node_name, connection["callable"].get_object().name, connection["callable"].get_method())
if not signal_graph.edges.any(func (element): return element.signal_id == signal_description.id):
edges.append(signal_edge)
var temp_signals = {}
for item in signals:
temp_signals[item.id] = item
var temp_edges = {}
for item in edges:
temp_edges[item.dictionary_key] = item
signal_graph.signals.assign(temp_signals.keys().map(func (key): return temp_signals[key]))
signal_graph.edges.assign(temp_edges.keys().map(func (key): return temp_edges[key]))
return signal_graph
static func generate_signal_graph_nodes(signal_graph: SignalGraph, graph_node: GraphEdit, open_script_callable: Callable):
var graph_nodes: Dictionary = {}
for signal_item in signal_graph.signals:
var current_graph_node: SignalGraphNode
if graph_nodes.has(signal_item.node_name):
current_graph_node = graph_nodes[signal_item.node_name]
if not current_graph_node:
current_graph_node = SignalGraphNode.instantiate()
current_graph_node.title = signal_item.node_name
current_graph_node.name = _get_graph_node_name(signal_item.node_name)
graph_node.add_child(current_graph_node)
graph_nodes[signal_item.node_name] = current_graph_node
for edge in signal_graph.edges:
var destination_graph_node: SignalGraphNode
if graph_nodes.has(edge.destination_node_name):
destination_graph_node = graph_nodes[edge.destination_node_name]
else:
destination_graph_node = SignalGraphNode.instantiate()
destination_graph_node.title = edge.destination_node_name
destination_graph_node.name = _get_graph_node_name(edge.destination_node_name)
graph_node.add_child(destination_graph_node)
graph_nodes[edge.destination_node_name] = destination_graph_node
var source_signal = signal_graph.get_source_signal_for_edge(edge)
if source_signal != null:
var source_graph_node: SignalGraphNode = graph_nodes[edge.source_node_name] as SignalGraphNode
if not source_graph_node.has_source_signal_description(source_signal.signal_name, edge.destination_node_name):
var source_signal_label = Label.new()
source_signal_label.text = source_signal.signal_name
source_signal_label.name = "source_" + source_signal.signal_name + "_" + edge.destination_node_name
source_graph_node.add_child(source_signal_label)
var destination_signal_name = "destination_" + source_signal.signal_name + "_" + edge.method_signature.replace("::", "__")
var has_destination = destination_graph_node.has_destination_signal_description(source_signal.signal_name, edge.method_signature)
if not has_destination:
var destination_signal_item = GraphNodeItem.instantiate()
destination_signal_item.signal_data = SignalGraphNodeItem.Metadata.new(source_signal.signal_name, edge.method_signature, edge.destination_node_name)
destination_signal_item.text = edge.method_signature
destination_signal_item.name = destination_signal_name
destination_signal_item.open_script.connect(open_script_callable)
destination_graph_node.add_child(destination_signal_item)
for edge in signal_graph.edges:
var source_signal = signal_graph.get_source_signal_for_edge(edge)
if source_signal != null:
var source_graph_node: SignalGraphNode = graph_nodes[edge.source_node_name] as SignalGraphNode
var destination_graph_node: SignalGraphNode = graph_nodes[edge.destination_node_name] as SignalGraphNode
var from_port = source_graph_node.get_source_slot(source_signal.signal_name, edge.destination_node_name)
var to_port = destination_graph_node.get_destination_slot(source_signal.signal_name, edge.method_signature)
source_graph_node.set_slot(from_port, false, CONNECTION_TYPE, Color.BLACK, true, CONNECTION_TYPE, SOURCE_COLOR)
destination_graph_node.set_slot(to_port, true, CONNECTION_TYPE, DESTINATION_COLOR, false, CONNECTION_TYPE, Color.BLACK)
var from_slot_index = source_graph_node.get_next_source_slot(source_signal.signal_name, edge.destination_node_name)
var to_slot_index = destination_graph_node.get_next_destination_slot(source_signal.signal_name, edge.method_signature)
if from_port >= 0 and to_port >= 0:
graph_node.connect_node(source_graph_node.name, from_slot_index, destination_graph_node.name, to_slot_index)
else:
print(">>> Invalid Connection Request")
static func generate_signal_graph_tree(signal_graph: SignalGraph, tree_node: Tree):
var root = tree_node.create_item()
root.set_text(0, signal_graph.name)
var tree_items: Dictionary = {}
for signal_item in signal_graph.signals:
var node_tree_item: TreeItem
if tree_items.has(signal_item.node_name):
node_tree_item = tree_items[signal_item.node_name] as TreeItem
else:
node_tree_item = tree_node.create_item(root)
node_tree_item.set_text(0, signal_item.node_name)
tree_items[signal_item.node_name] = node_tree_item
var signal_tree_item = tree_node.create_item(node_tree_item)
signal_tree_item.set_text(0, signal_item.signal_name)
for edge in signal_graph.edges.filter(func (item): return item.signal_id == signal_item.id):
var signal_connection_tree_item = tree_node.create_item(signal_tree_item)
signal_connection_tree_item.set_text(0, edge.destination_node_name + "::" + edge.method_signature)
static func _get_graph_node_name(name: String) -> String:
return "{node_name}_graph_node".format({ "node_name": name })
static func _gather_nodes_from_node(root_node: Node) -> Array[Node]:
var node_list: Array[Node] = [root_node]
return node_list + __gather_nodes_from_node(root_node)
static func __gather_nodes_from_node(node: Node) -> Array[Node]:
var nodes: Array[Node] = []
for child in node.get_children(false):
nodes.append(child)
nodes += __gather_nodes_from_node(child)
return nodes
#endregion

@ -0,0 +1,146 @@
extends Node
# Properties
# |===================================|
# |===================================|
# |===================================|
var _signal_graph: SignalGraph
var _lambda_map: Dictionary = {}
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _ready():
if OS.is_debug_build():
EngineDebugger.register_message_capture("signal_debugger", _on_signal_debugger_message_capture)
# Signals
# |===================================|
# |===================================|
# |===================================|
func _on_signal_debugger_message_capture(message: String, data: Array) -> bool:
if message == "start":
_signal_graph = generate_signal_graph()
for signal_item in _signal_graph.signals:
_connect_to_signal(signal_item)
EngineDebugger.send_message(
"signal_debugger:generated_graph",
[[_signal_graph.signals.map(func (item): return item.dictionary_representation), _signal_graph.edges.map(func (item): return item.dictionary_representation)]]
)
if message == "stop" and _signal_graph:
for signal_item in _signal_graph.signals:
_disconnect_from_signal(signal_item)
if message == "invoke_signal" and data.size() == 2:
var node_name = data[0]
var signal_name = data[1]
var root_node = get_tree().current_scene
var node = root_node if root_node.name == node_name else root_node.find_child(node_name)
if node:
var connection_list = node.get_signal_connection_list(signal_name)
for connection in connection_list:
var callable = connection["callable"]
var bound_args = callable.get_bound_arguments()
var bound_args_count = callable.get_bound_arguments_count()
var method = callable.get_method()
callable.callv([node])
return true
func _on_signal_execution(signal_name: String, node_name: String, args):
EngineDebugger.send_message(
"signal_debugger:signal_executed",
[Time.get_datetime_string_from_system(), node_name, signal_name]
)
# Methods
# |===================================|
# |===================================|
# |===================================|
func generate_signal_graph() -> SignalGraph:
var graph = SignalGraphUtility.create_signal_graph_from_node(get_tree().current_scene)
return graph
#var signal_graph = SignalGraph.new(get_tree().current_scene.name)
#var all_nodes: Array[Node] = _gather_nodes_in_scene()
#var signals: Array[SignalDescription] = []
#var edges: Array[SignalConnection] = []
#
#for node in all_nodes:
#for signal_item in node.get_signal_list():
#var existing_signals = []
#var connection_list = node.get_signal_connection_list(signal_item["name"] as String)
#if connection_list.size() > 0:
#for connection in connection_list:
#var should_display_connection = "name" in connection["callable"].get_object() and not connection["callable"].get_object().name.begins_with("@")
#if should_display_connection:
#var signal_description: SignalDescription
#var filtered_signals = existing_signals.filter(func (element): return element.signal_name == signal_item.name and element.node_name == node.name)
#if filtered_signals.size() == 1:
#signal_description = filtered_signals[0]
#else:
#signal_description = SignalDescription.new(node.name, signal_item.name)
#existing_signals.append(signal_description)
#signals.append(signal_description)
#
#var signal_edge = SignalConnection.new(signal_description.id, signal_description.node_name, connection["callable"].get_object().name, connection["callable"].get_method())
#if not signal_graph.edges.any(func (element): return element.signal_id == signal_description.id):
#edges.append(signal_edge)
#
#var temp_signals = {}
#for item in signals:
#temp_signals[item.id] = item
#
#var temp_edges = {}
#for item in edges:
#temp_edges[item.dictionary_key] = item
#
#signal_graph.signals.assign(temp_signals.keys().map(func (key): return temp_signals[key]))
#signal_graph.edges.assign(temp_edges.keys().map(func (key): return temp_edges[key]))
#
#return signal_graph
#func _gather_nodes_in_scene() -> Array[Node]:
#var scene_root = get_tree().current_scene
#var node_list: Array[Node] = [scene_root]
#return node_list + _gather_nodes_from_node(scene_root)
#
#func _gather_nodes_from_node(node: Node) -> Array[Node]:
#var nodes: Array[Node] = []
#for child in node.get_children(false):
#nodes.append(child)
#nodes += _gather_nodes_from_node(child)
#
#return nodes
func _connect_to_signal(signal_item: SignalDescription):
var root_node = get_tree().current_scene
var _execute: Callable = func (args = []): _on_signal_execution(signal_item.signal_name, signal_item.node_name, args)
if root_node.name == signal_item.node_name:
root_node.connect(signal_item.signal_name, _execute)
_lambda_map[signal_item] = _execute
else:
var child = root_node.find_child(signal_item.node_name)
if child:
child.connect(signal_item.signal_name, _execute)
_lambda_map[signal_item] = _execute
func _disconnect_from_signal(signal_item: SignalDescription):
var root_node = get_tree().current_scene
if root_node.name == signal_item.node_name:
var callable = _lambda_map[signal_item]
if callable:
root_node.disconnect(signal_item.signal_name, callable)
_lambda_map.erase(signal_item)
else:
var child = root_node.find_child(signal_item.node_name)
if child:
var callable = _lambda_map[signal_item]
if callable:
child.disconnect(signal_item.signal_name, callable)
_lambda_map.erase(signal_item)

@ -0,0 +1,97 @@
[gd_scene load_steps=5 format=3 uid="uid://cbsmvov8u78q"]
[ext_resource type="Script" path="res://addons/SignalVisualizer/Debugger/signal_debugger_panel.gd" id="1_66cpc"]
[ext_resource type="Texture2D" uid="uid://be3nwoioa311t" path="res://addons/SignalVisualizer/Play.svg" id="2_2wkuv"]
[ext_resource type="Texture2D" uid="uid://oo1oq2colx5b" path="res://addons/SignalVisualizer/Stop.svg" id="3_bg5eu"]
[ext_resource type="Texture2D" uid="uid://bmnff63evbdhv" path="res://addons/SignalVisualizer/Clear.svg" id="4_vg63r"]
[node name="SignalDebugger" type="Control"]
clip_contents = true
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_66cpc")
start_icon = ExtResource("2_2wkuv")
stop_icon = ExtResource("3_bg5eu")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
clip_contents = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
custom_minimum_size = Vector2(2.08165e-12, 50)
layout_mode = 2
theme_override_constants/separation = 8
[node name="ActionButton" type="Button" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
disabled = true
text = "Start"
icon = ExtResource("2_2wkuv")
[node name="ClearAllButton" type="Button" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Clear All"
icon = ExtResource("4_vg63r")
[node name="Spacer" type="Control" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="ClearLogsButton" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Clear Logs"
icon = ExtResource("4_vg63r")
[node name="HSplitContainer" type="HSplitContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="SignalTree" type="Tree" parent="VBoxContainer/HSplitContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(250, 2.08165e-12)
layout_mode = 2
columns = 2
allow_reselect = true
allow_rmb_select = true
hide_root = true
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HSplitContainer"]
layout_mode = 2
[node name="TabBar" type="TabBar" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
layout_mode = 2
tab_count = 2
tab_0/title = "Signal Log"
tab_1/title = "Signal Graph"
[node name="LogLabel" type="RichTextLabel" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_colors/default_color = Color(0.690196, 0.690196, 0.690196, 1)
bbcode_enabled = true
scroll_following = true
[node name="Graph" type="GraphEdit" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
size_flags_vertical = 3
[connection signal="pressed" from="VBoxContainer/HBoxContainer/ActionButton" to="." method="_on_action_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/ClearAllButton" to="." method="_on_clear_all_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/ClearLogsButton" to="." method="_on_clear_logs_button_pressed"]
[connection signal="item_selected" from="VBoxContainer/HSplitContainer/SignalTree" to="." method="_on_signal_tree_item_selected"]
[connection signal="tab_changed" from="VBoxContainer/HSplitContainer/VBoxContainer/TabBar" to="." method="_on_tab_bar_tab_changed"]

@ -0,0 +1,192 @@
@tool
class_name SignalDebuggerPanel extends Control
signal open_script(node_name: String, method_signature: String)
signal start_signal_debugging
signal stop_signal_debugging
var SignalGraphNode = preload("res://addons/SignalVisualizer/Visualizer/signal_graph_node.tscn")
var GraphNodeItem = preload("res://addons/SignalVisualizer/Visualizer/signal_graph_node_item.tscn")
const SOURCE_COLOR: Color = Color.SKY_BLUE
const DESTINATION_COLOR: Color = Color.CORAL
const CONNECTION_TYPE: int = 0
enum Tabs {
LOG,
GRAPH
}
# Properties
# |===================================|
# |===================================|
# |===================================|
@export var start_icon: Texture2D
@export var stop_icon: Texture2D
@onready var action_button: Button = %ActionButton
@onready var clear_all_button: Button = %ClearAllButton
@onready var signal_tree: Tree = %SignalTree
@onready var log_label: RichTextLabel = %LogLabel
@onready var graph_node: GraphEdit = %Graph
var is_started: bool = false :
get: return is_started
set(new_value):
is_started = new_value
_update_action_button()
var _signals: Array = []
var _signal_filter: Array = []
var _is_stack_trace_enabled: bool = false
var _debugger_tab_state: Tabs = Tabs.LOG
var _graph: SignalGraph
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _ready():
disable()
_handle_tab_update(0)
# Signals
# |===================================|
# |===================================|
# |===================================|
func _on_action_button_pressed():
if is_started:
stop()
else:
start()
func _on_clear_all_button_pressed():
log_label.clear()
signal_tree.clear()
graph_node.clear_connections()
for child in graph_node.get_children():
if child is SignalGraphNode:
child.queue_free()
func _on_clear_logs_button_pressed():
log_label.clear()
func _on_signal_tree_item_selected():
# Updates the checkmark button
var selected_item = signal_tree.get_selected()
var is_checked = selected_item.is_checked(1)
selected_item.set_checked(1, (not is_checked))
# Add / Remove signal from filters
var selected_signal = _signals.filter(func (element): return element.signal_name == selected_item.get_text(0))[0]
if _signal_filter.has(selected_signal.signal_name):
var selected_index = _signal_filter.find(selected_signal.signal_name)
_signal_filter.remove_at(selected_index)
else:
_signal_filter.append(selected_signal.signal_name)
func _on_tab_bar_tab_changed(tab: int):
_handle_tab_update(tab)
func _on_stack_trace_button_pressed():
_is_stack_trace_enabled = not _is_stack_trace_enabled
func _on_open_signal_in_script(data: SignalGraphNodeItem.Metadata):
open_script.emit(data.node_name, data.method_signature)
# Methods
# |===================================|
# |===================================|
# |===================================|
func enable():
action_button.disabled = false
func disable():
action_button.disabled = true
func start():
if not is_started:
is_started = true
action_button.icon = stop_icon
start_signal_debugging.emit()
log_label.append_text("[color=#B0B0B0]Signal Debugging Started...[/color]")
log_label.newline()
log_label.newline()
func stop():
if is_started:
is_started = false
action_button.icon = start_icon
stop_signal_debugging.emit()
log_label.newline()
log_label.append_text("[color=#B0B0B0]Signal Debugging Stopped[/color]")
log_label.newline()
log_label.newline()
func create_tree_from_signals(signals: Array):
_signals = signals
var root = signal_tree.create_item()
root.set_text(0, "Signals")
var tree_items: Dictionary = {}
for signal_item in signals:
var node_tree_item: TreeItem
if tree_items.has(signal_item.node_name):
node_tree_item = tree_items[signal_item.node_name] as TreeItem
else:
node_tree_item = signal_tree.create_item(root)
node_tree_item.set_text(0, signal_item.node_name)
node_tree_item.set_selectable(0, false)
node_tree_item.set_selectable(1, false)
tree_items[signal_item.node_name] = node_tree_item
var signal_tree_item = signal_tree.create_item(node_tree_item)
signal_tree_item.set_text(0, signal_item.signal_name)
signal_tree_item.set_cell_mode(1, TreeItem.CELL_MODE_CHECK)
signal_tree_item.set_checked(1, true)
signal_tree_item.set_selectable(0, false)
signal_tree_item.set_selectable(1, true)
func create_signal_graph(signals: Array, edges: Array):
_graph = SignalGraphUtility.create_signal_graph(get_tree().edited_scene_root.scene_file_path, signals, edges)
SignalGraphUtility.generate_signal_graph_nodes(_graph, graph_node, _on_open_signal_in_script)
func log_signal_execution(time: String, node_name: String, signal_name: String):
if _signal_filter != null and _signal_filter.has(signal_name):
return
if not log_label.text.is_empty():
log_label.newline()
log_label.append_text(
"[color=#FFCC00]{time}[/color]\t\t{node_name}\t\t{signal_name}".format({ "time": time, "node_name": node_name, "signal_name": signal_name })
)
log_label.newline()
func _handle_tab_update(selected_tab_index: int):
match selected_tab_index:
1:
_debugger_tab_state = Tabs.GRAPH
_:
_debugger_tab_state = Tabs.LOG
match _debugger_tab_state:
Tabs.LOG:
log_label.show()
graph_node.hide()
Tabs.GRAPH:
log_label.hide()
graph_node.show()
func _update_action_button():
if is_started:
action_button.text = "Stop"
action_button.modulate = Color("#ff3b30")
else:
action_button.text = "Start"
action_button.modulate = Color.WHITE

@ -0,0 +1 @@
<svg height="24" width="24" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M11 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM6.732 5A2 2 0 0 1 7 6v1.117L9.268 6A2 2 0 0 1 9 5V3.883zM2 5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm5 3.883V10a2 2 0 0 1-.268 1L9 12.117V11a2 2 0 0 1 .268-1zM11 10a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1z" fill="#8eef97"/></svg>

After

Width:  |  Height:  |  Size: 437 B

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bxj8ep08wbnm6"
path="res://.godot/imported/GraphEdit.svg-90dae61e8e0b157ab8eff95fe4b91e53.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/SignalVisualizer/GraphEdit.svg"
dest_files=["res://.godot/imported/GraphEdit.svg-90dae61e8e0b157ab8eff95fe4b91e53.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

@ -0,0 +1 @@
<svg height="24" viewBox="0 0 16 16" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M4 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 4 4z" fill="#e0e0e0"/></svg>

After

Width:  |  Height:  |  Size: 184 B

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://be3nwoioa311t"
path="res://.godot/imported/Play.svg-a446691ffcef211028bb160b5a2d6ff1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/SignalVisualizer/Play.svg"
dest_files=["res://.godot/imported/Play.svg-a446691ffcef211028bb160b5a2d6ff1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

@ -0,0 +1,162 @@
@tool
extends EditorPlugin
class SignalDebuggerPlugin extends EditorDebuggerPlugin:
var SignalDebuggerPanelScene = preload("res://addons/SignalVisualizer/Debugger/SignalDebugger.tscn")
signal open_script
signal start_signal_debugging
signal stop_signal_debugging
var debugger_panel
func _has_capture(prefix) -> bool:
return prefix == "signal_debugger"
func _capture(message, data, session_id) -> bool:
if message == "signal_debugger:signal_executed":
if data.size() == 3:
var time = data[0]
var node_name = data[1]
var signal_name = data[2]
debugger_panel.log_signal_execution(time, node_name, signal_name)
return true
if message == "signal_debugger:generated_graph":
if data.size() == 1:
var signals = data[0][0] as Array
var edges = data[0][1] as Array
debugger_panel.create_tree_from_signals(signals)
debugger_panel.create_signal_graph(signals, edges)
return true
return false
func _setup_session(session_id):
debugger_panel = SignalDebuggerPanelScene.instantiate()
var session = get_session(session_id)
debugger_panel.name = "Signal Debugger"
debugger_panel.open_script.connect(func (arg1, arg2): open_script.emit(arg1, arg2))
debugger_panel.start_signal_debugging.connect(func (): start_signal_debugging.emit())
debugger_panel.stop_signal_debugging.connect(func (): stop_signal_debugging.emit())
session.started.connect(
func ():
debugger_panel.enable()
)
session.stopped.connect(
func ():
debugger_panel.stop()
debugger_panel.disable()
stop_signal_debugging.emit()
)
session.add_session_tab(debugger_panel)
var SignalVisualizerDockScene = preload("res://addons/SignalVisualizer/Visualizer/signal_visualizer_dock.tscn")
class ScriptMethodReference:
var script_reference: Script
var line_number: int
# Properties
# |===================================|
# |===================================|
# |===================================|
var dock: Control
var debugger: SignalDebuggerPlugin
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _enter_tree():
dock = SignalVisualizerDockScene.instantiate()
debugger = SignalDebuggerPlugin.new()
dock.open_script.connect(_on_open_signal_in_script)
add_control_to_bottom_panel(dock, "Signal Visualizer")
debugger.start_signal_debugging.connect(_on_debugger_start_signal_debugging)
debugger.stop_signal_debugging.connect(_on_debugger_stop_signal_debugging)
debugger.open_script.connect(_on_open_signal_in_script)
add_debugger_plugin(debugger)
if not ProjectSettings.has_setting("autoload/Signal_Debugger"):
add_autoload_singleton("Signal_Debugger", "res://addons/SignalVisualizer/Debugger/SignalDebugger.gd")
func _exit_tree():
remove_control_from_bottom_panel(dock)
dock.free()
remove_debugger_plugin(debugger)
remove_autoload_singleton("Signal_Debugger")
# Signals
# |===================================|
# |===================================|
# |===================================|
func _on_open_signal_in_script(node_name: String, method_signature: String):
var node: Node
if get_tree().edited_scene_root.name == node_name:
node = get_tree().edited_scene_root
else:
node = get_tree().edited_scene_root.find_child(node_name)
if node != null:
var script: Script = node.get_script()
if script != null:
var editor = get_editor_interface()
var method_reference = _find_method_reference_in_script(script, method_signature)
if method_reference != null:
editor.edit_script(method_reference.script_reference, method_reference.line_number, 0)
editor.set_main_screen_editor("Script")
else:
push_warning("Requested method in script ({script}) for node ({name}) is not available.".format({ "name": node_name, "script": script.name }))
else:
push_warning("Requested script for node ({name}) is not available.".format({ "name": node_name }))
else:
push_warning("Requested script for node ({name}) is not available.".format({ "name": node_name }))
func _on_debugger_start_signal_debugging():
for session in debugger.get_sessions():
session.send_message("signal_debugger:start", [])
func _on_debugger_stop_signal_debugging():
for session in debugger.get_sessions():
session.send_message("signal_debugger:stop", [])
# Methods
# |===================================|
# |===================================|
# |===================================|
func _find_method_reference_in_script(script: Script, method_signature: String) -> ScriptMethodReference:
var line_number = __find_method_line_number_in_script(script, method_signature)
if line_number == -1:
var base_script = script.get_base_script()
if base_script:
return _find_method_reference_in_script(base_script, method_signature)
var reference = ScriptMethodReference.new()
reference.script_reference = script
reference.line_number = line_number
return reference
func __find_method_line_number_in_script(script: Script, method_signature: String) -> int:
var line_number = 0
var found = false
for line in script.source_code.split("\n", true):
line_number += 1
if line.contains(method_signature):
found = true
return line_number
return -1

@ -0,0 +1 @@
<svg height="24" viewBox="0 0 16 16" width="24" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" height="10" width="10" rx="1" fill="#e0e0e0"/></svg>

After

Width:  |  Height:  |  Size: 154 B

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://oo1oq2colx5b"
path="res://.godot/imported/Stop.svg-e085086fb31c334bc2f02ca2bffba522.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/SignalVisualizer/Stop.svg"
dest_files=["res://.godot/imported/Stop.svg-e085086fb31c334bc2f02ca2bffba522.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

@ -0,0 +1,31 @@
@tool
extends Label
# Properties
# |===================================|
# |===================================|
# |===================================|
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
# Signals
# |===================================|
# |===================================|
# |===================================|
# Methods
# |===================================|
# |===================================|
# |===================================|
func get_text_size() -> Vector2:
return get_theme_default_font().get_string_size(text)

@ -0,0 +1,94 @@
@tool
class_name SignalGraphNode extends GraphNode
# Properties
# |===================================|
# |===================================|
# |===================================|
var connections: Array = [] :
get: return connections
set(new_value):
connections = new_value
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _ready():
selectable = true
resizable = true
draggable = true
# Signals
# |===================================|
# |===================================|
# |===================================|
func _on_resize_request(new_minsize):
size = new_minsize
# Methods
# |===================================|
# |===================================|
# |===================================|
func has_source_signal_description(signal_name: String, destination_node_name: String) -> bool:
for child in get_children():
if child.name == "source_" + signal_name + "_" + destination_node_name:
return true
return false
func get_source_slot(signal_name: String, destination_node_name: String) -> int:
var index = 0
for child in get_children():
if child.name == "source_" + signal_name + "_" + destination_node_name:
return index
index += 1
return -1
func get_next_source_slot(signal_name: String, destination_node_name: String) -> int:
var index = 0
for child in get_children():
if child.name.begins_with("source_"):
if child.name == "source_" + signal_name + "_" + destination_node_name:
return index
index += 1
return -1
func has_destination_signal_description(signal_name: String, method_signature: String) -> bool:
for child in get_children():
if child.name == "destination_" + signal_name + "_" + _sanitize_method_signature(method_signature):
return true
return false
func get_destination_slot(signal_name: String, method_signature: String) -> int:
var index = 0
for child in get_children():
if child.name == "destination_" + signal_name + "_" + _sanitize_method_signature(method_signature):
return index
index += 1
return -1
func get_next_destination_slot(signal_name: String, method_signature: String) -> int:
var index = 0
for child in get_children():
if child.name.begins_with("destination_"):
if child.name == "destination_" + signal_name + "_" + _sanitize_method_signature(method_signature):
return index
index += 1
return -1
func _sanitize_method_signature(signature: String) -> String:
return signature.replace("::", "__")

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://cq10iaub18e54"]
[ext_resource type="Script" path="res://addons/SignalVisualizer/Visualizer/signal_graph_node.gd" id="1_ovklj"]
[node name="SignalGraphNode" type="GraphNode"]
custom_minimum_size = Vector2(100, 50)
offset_right = 232.0
offset_bottom = 54.0
resizable = true
script = ExtResource("1_ovklj")
[connection signal="resize_request" from="." to="." method="_on_resize_request"]

@ -0,0 +1,57 @@
@tool
class_name SignalGraphNodeItem extends Control
signal open_script(metadata: SignalGraphNodeItem.Metadata)
class Metadata:
var signal_name: String
var method_signature: String
var node_name: String
func _init(signal_name: String, method_signature: String, node_name: String):
self.signal_name = signal_name
self.method_signature = method_signature
self.node_name = node_name
# Properties
# |===================================|
# |===================================|
# |===================================|
@onready var label: Label = %DescriptionLabel
var signal_data: Metadata = null
var text: String = "" :
get: return text
set(new_value):
text = new_value
if label:
label.text = text
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
func _ready():
_update()
# Signals
# |===================================|
# |===================================|
# |===================================|
func _on_open_signal_in_script_button_pressed():
open_script.emit(signal_data)
# Methods
# |===================================|
# |===================================|
# |===================================|
func _update():
label.text = text
var text_size = label.get_text_size()
custom_minimum_size = Vector2((text_size.x * 2) + 50, text_size.y * 3)

@ -0,0 +1,43 @@
[gd_scene load_steps=3 format=3 uid="uid://b2lwtwp6kpwtb"]
[ext_resource type="Script" path="res://addons/SignalVisualizer/Visualizer/signal_graph_node_item.gd" id="1_jrd34"]
[ext_resource type="Script" path="res://addons/SignalVisualizer/Visualizer/resizable_label.gd" id="2_4wwd5"]
[node name="SignalItem" type="Control"]
clip_contents = true
custom_minimum_size = Vector2(51, 23)
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource("1_jrd34")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
custom_minimum_size = Vector2(100, 50)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="DescriptionLabel" type="Label" parent="HBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 50)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
vertical_alignment = 1
clip_text = true
script = ExtResource("2_4wwd5")
[node name="OpenSignalInScriptButton" type="Button" parent="HBoxContainer"]
layout_mode = 2
text = "Open"
flat = true
[connection signal="pressed" from="HBoxContainer/OpenSignalInScriptButton" to="." method="_on_open_signal_in_script_button_pressed"]

@ -0,0 +1,67 @@
@tool
extends Control
signal open_script(node_name: String, method_signature: String)
var SignalGraphNode = preload("res://addons/SignalVisualizer/Visualizer/signal_graph_node.tscn")
var GraphNodeItem = preload("res://addons/SignalVisualizer/Visualizer/signal_graph_node_item.tscn")
# Properties
# |===================================|
# |===================================|
# |===================================|
const SOURCE_COLOR: Color = Color.SKY_BLUE
const DESTINATION_COLOR: Color = Color.CORAL
const CONNECTION_TYPE: int = 0
@onready var arrange_nodes_checkbox: CheckBox = %ArrangeNodesCheckBox
@onready var signal_details_checkbox: CheckBox = %SignalDetailsCheckBox
@onready var signal_tree: Tree = %SignalTree
@onready var graph: GraphEdit = %Graph
# Lifecycle
# |===================================|
# |===================================|
# |===================================|
# Signals
# |===================================|
# |===================================|
# |===================================|
func _on_clear_graph_button_pressed():
clear()
func _on_generate_graph_button_pressed():
clear()
var scene_signal_graph = SignalGraphUtility.create_signal_graph_from_node(get_tree().edited_scene_root, true)
SignalGraphUtility.generate_signal_graph_nodes(scene_signal_graph, graph, _on_open_signal_in_script)
SignalGraphUtility.generate_signal_graph_tree(scene_signal_graph, signal_tree)
if arrange_nodes_checkbox.button_pressed:
graph.arrange_nodes()
func _on_open_signal_in_script(data: SignalGraphNodeItem.Metadata):
open_script.emit(data.node_name, data.method_signature)
# Methods
# |===================================|
# |===================================|
# |===================================|
func clear():
_clear_graph_nodes()
_clear_tree()
func _clear_graph_nodes():
graph.clear_connections()
for child in graph.get_children():
if child is SignalGraphNode:
child.queue_free()
func _clear_tree():
signal_tree.clear()

@ -0,0 +1,78 @@
[gd_scene load_steps=5 format=3 uid="uid://dppfamjc0ji40"]
[ext_resource type="Script" path="res://addons/SignalVisualizer/Visualizer/signal_visualizer_dock.gd" id="1_akar5"]
[ext_resource type="Texture2D" uid="uid://bmnff63evbdhv" path="res://addons/SignalVisualizer/Clear.svg" id="2_m8bsv"]
[ext_resource type="Texture2D" uid="uid://bxj8ep08wbnm6" path="res://addons/SignalVisualizer/GraphEdit.svg" id="3_dtmqs"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ae0jg"]
[node name="SignalVisualizerDock" type="Control"]
clip_contents = true
custom_minimum_size = Vector2(2.08165e-12, 200)
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_akar5")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
clip_contents = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
clip_contents = true
custom_minimum_size = Vector2(2.08165e-12, 50)
layout_mode = 2
theme_override_constants/separation = 8
alignment = 2
[node name="ArrangeNodesCheckBox" type="CheckBox" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Arrange Nodes"
[node name="SignalDetailsCheckBox" type="CheckBox" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Signal Details"
[node name="Panel" type="Panel" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_styles/panel = SubResource("StyleBoxEmpty_ae0jg")
[node name="ClearGraphButton" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Clear Graph"
icon = ExtResource("2_m8bsv")
[node name="GenerateGraphButton" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Generate Graph"
icon = ExtResource("3_dtmqs")
[node name="HSplitContainer" type="HSplitContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="SignalTree" type="Tree" parent="VBoxContainer/HSplitContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(200, 2.08165e-12)
layout_mode = 2
column_titles_visible = true
[node name="Graph" type="GraphEdit" parent="VBoxContainer/HSplitContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
[connection signal="pressed" from="VBoxContainer/HBoxContainer/ClearGraphButton" to="." method="_on_clear_graph_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/GenerateGraphButton" to="." method="_on_generate_graph_button_pressed"]

@ -0,0 +1,7 @@
[plugin]
name="SignalVisualizer"
description="Visual the current scene's signal connections as a graph. Debug the current running scene's signals with automatic logging in a new debugger panel."
author="MiniGameDev"
version="1.7.0"
script="SignalVisualizer.gd"

@ -21,5 +21,5 @@ anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2 mouse_filter = 2
color = Color(1, 1, 1, 0) color = Color(0, 0, 0, 0.658824)
script = ExtResource("2_ghan2") script = ExtResource("2_ghan2")

@ -10,3 +10,4 @@ corner_radius_top_left = 5
corner_radius_top_right = 5 corner_radius_top_right = 5
corner_radius_bottom_right = 5 corner_radius_bottom_right = 5
corner_radius_bottom_left = 5 corner_radius_bottom_left = 5
shadow_color = Color(0, 0, 0, 0.772549)

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://65e44yde224q"
path="res://.godot/imported/Babushka_house_01.png-2abdaa4b7145961a1de62ba9271ec19d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/farm/Babushka_house_01.png"
dest_files=["res://.godot/imported/Babushka_house_01.png-2abdaa4b7145961a1de62ba9271ec19d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 KiB

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 KiB

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 895 KiB

After

Width:  |  Height:  |  Size: 395 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvu5dybw31uxn"
path="res://.godot/imported/Circle.png-1776eabbad99f201f3fa20f90655dedf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Circle.png"
dest_files=["res://.godot/imported/Circle.png-1776eabbad99f201f3fa20f90655dedf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 538 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://u0dku75l17re"
path="res://.godot/imported/UI_bag_export_highlight_01.png-75e9e14d3080a5afb41b921dc593da52.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/UI_bag_export_highlight_01.png"
dest_files=["res://.godot/imported/UI_bag_export_highlight_01.png-75e9e14d3080a5afb41b921dc593da52.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bag1xalfh731d"
path="res://.godot/imported/UI_bag_export_highlight_02.png-3c40cc6d764913cde7bcc1bd97f1eb6d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/UI_bag_export_highlight_02.png"
dest_files=["res://.godot/imported/UI_bag_export_highlight_02.png-3c40cc6d764913cde7bcc1bd97f1eb6d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxptule8n38ph"
path="res://.godot/imported/UI_bag_export_highlight_03.png-d901f8d53fc4b996a469e8098ea5900b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/UI_bag_export_highlight_03.png"
dest_files=["res://.godot/imported/UI_bag_export_highlight_03.png-d901f8d53fc4b996a469e8098ea5900b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l0k3vh3kdprp"
path="res://.godot/imported/Tropfen-ui-1.png-ffd2adc2dec240ddecc1432b18c1c0f0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Watercan-ui/Tropfen-ui-1.png"
dest_files=["res://.godot/imported/Tropfen-ui-1.png-ffd2adc2dec240ddecc1432b18c1c0f0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://t4w7axbof7bq"
path="res://.godot/imported/Tropfen-ui-2.png-f4fdc398383d494823a9c23512b5d46c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Watercan-ui/Tropfen-ui-2.png"
dest_files=["res://.godot/imported/Tropfen-ui-2.png-f4fdc398383d494823a9c23512b5d46c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://di2npqkvvst6x"
path="res://.godot/imported/Tropfen-ui-3.png-3b58039a60642d36367527f2d94654fa.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Watercan-ui/Tropfen-ui-3.png"
dest_files=["res://.godot/imported/Tropfen-ui-3.png-3b58039a60642d36367527f2d94654fa.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://clti3basli30"
path="res://.godot/imported/Tropfen-ui-4.png-e2c1542b620809f430977af3bdacd86f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Watercan-ui/Tropfen-ui-4.png"
dest_files=["res://.godot/imported/Tropfen-ui-4.png-e2c1542b620809f430977af3bdacd86f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://n1v4hgd467wp"
path="res://.godot/imported/Tropfen-ui-5.png-ee46a9fd4d81820f6fec9c30046a3b47.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Watercan-ui/Tropfen-ui-5.png"
dest_files=["res://.godot/imported/Tropfen-ui-5.png-ee46a9fd4d81820f6fec9c30046a3b47.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l5ym7gi82l1b"
path="res://.godot/imported/Tropfen-ui-6.png-2fee37aa3fbbde454a4d1b4f8ee350e6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/Watercan-ui/Tropfen-ui-6.png"
dest_files=["res://.godot/imported/Tropfen-ui-6.png-2fee37aa3fbbde454a4d1b4f8ee350e6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://70twb0i3e2wo"
path="res://.godot/imported/journal_note.png-456d095624ebf40e3c23543b3d0f829a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/journal_note.png"
dest_files=["res://.godot/imported/journal_note.png-456d095624ebf40e3c23543b3d0f829a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d0anh3hdk0clc"
path="res://.godot/imported/journal_standard.png-09a8c39fc0e5420f9430aff7f945ae55.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/journal_standard.png"
dest_files=["res://.godot/imported/journal_standard.png-09a8c39fc0e5420f9430aff7f945ae55.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2q3xgw8xj880"
path="res://.godot/imported/quest_note.png-857ff56cb8cdd8e4401bb6320261518e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/ui/UI/quest_note.png"
dest_files=["res://.godot/imported/quest_note.png-857ff56cb8cdd8e4401bb6320261518e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

@ -0,0 +1,16 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://b6dwkmkyb0axk"]
[resource]
bus/0/volume_db = -5.93075
bus/1/name = &"Music"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = -17.6573
bus/1/send = &"Master"
bus/2/name = &"SFX"
bus/2/solo = false
bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
bus/2/send = &"Master"

@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="DialogicStyle" load_steps=20 format=3 uid="uid://f7q6jac5tsk8"] [gd_resource type="Resource" script_class="DialogicStyle" load_steps=21 format=3 uid="uid://f7q6jac5tsk8"]
[ext_resource type="Script" uid="uid://dfx2htp24tuvm" path="res://addons/dialogic/Resources/dialogic_style_layer.gd" id="1_0jwhi"] [ext_resource type="Script" uid="uid://dfx2htp24tuvm" path="res://addons/dialogic/Resources/dialogic_style_layer.gd" id="1_0jwhi"]
[ext_resource type="PackedScene" uid="uid://c1k5m0w3r40xf" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/full_background_layer.tscn" id="2_8wrfq"] [ext_resource type="PackedScene" uid="uid://c1k5m0w3r40xf" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/full_background_layer.tscn" id="2_8wrfq"]
@ -40,6 +40,7 @@ scene = ExtResource("5_reo2u")
overrides = { overrides = {
"box_animation_in": "1", "box_animation_in": "1",
"box_animation_out": "1", "box_animation_out": "1",
"box_panel": "\"vn_textbox_default_panel.tres\"",
"name_label_alignment": "2", "name_label_alignment": "2",
"name_label_box_modulate": "Color(1, 1, 1, 1)", "name_label_box_modulate": "Color(1, 1, 1, 1)",
"name_label_box_panel": "\"res://dialog/Babushka_NPC_Namebox_background.tres\"", "name_label_box_panel": "\"res://dialog/Babushka_NPC_Namebox_background.tres\"",
@ -70,10 +71,15 @@ script = ExtResource("1_0jwhi")
scene = ExtResource("9_4c2uo") scene = ExtResource("9_4c2uo")
overrides = {} overrides = {}
[sub_resource type="Resource" id="Resource_0jwhi"]
script = ExtResource("1_0jwhi")
scene = ExtResource("6_i6h15")
overrides = {}
[resource] [resource]
script = ExtResource("10_e3ue2") script = ExtResource("10_e3ue2")
name = "NPC_narrative" name = "NPC_narrative"
layer_list = Array[String](["10", "11", "12", "13", "14", "15", "16", "17"]) layer_list = Array[String](["10", "11", "12", "13", "14", "15", "16", "17", "18"])
layer_info = { layer_info = {
"": SubResource("Resource_wg0yj"), "": SubResource("Resource_wg0yj"),
"10": SubResource("Resource_uxnk3"), "10": SubResource("Resource_uxnk3"),
@ -83,8 +89,9 @@ layer_info = {
"14": SubResource("Resource_clhbu"), "14": SubResource("Resource_clhbu"),
"15": SubResource("Resource_umvdi"), "15": SubResource("Resource_umvdi"),
"16": SubResource("Resource_ci2ul"), "16": SubResource("Resource_ci2ul"),
"17": SubResource("Resource_sadu5") "17": SubResource("Resource_sadu5"),
"18": SubResource("Resource_0jwhi")
} }
base_overrides = {} base_overrides = {}
layers = Array[ExtResource("1_0jwhi")]([]) layers = Array[ExtResource("1_0jwhi")]([])
metadata/_latest_layer = "" metadata/_latest_layer = "14"

@ -0,0 +1,20 @@
[gd_scene load_steps=2 format=3 uid="uid://cqcs80xsgygeb"]
[ext_resource type="PackedScene" uid="uid://2q1n6g2kj5er" path="res://prefabs/UI/Quest/QuestLog.tscn" id="1_7u5et"]
[node name="Book" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="QuestLog" parent="." instance=ExtResource("1_7u5et")]
layout_mode = 1
offset_left = 247.0
offset_top = 72.0
offset_right = -205.0
offset_bottom = -76.0
grow_horizontal = 1
grow_vertical = 1

@ -1,66 +1,47 @@
[gd_scene load_steps=7 format=3 uid="uid://cgjc4wurbgimy"] [gd_scene load_steps=10 format=3 uid="uid://cgjc4wurbgimy"]
[ext_resource type="Script" uid="uid://hg7jay2kt441" path="res://scripts/CSharp/Common/Inventory/InventoryUi.cs" id="1_6wusm"] [ext_resource type="Script" uid="uid://hg7jay2kt441" path="res://scripts/CSharp/Common/Inventory/InventoryUi.cs" id="1_6wusm"]
[ext_resource type="Texture2D" uid="uid://3ln8aleyxgp1" path="res://art/ui/UI/UI_bag_export_01.png" id="3_vvo7l"] [ext_resource type="Texture2D" uid="uid://3ln8aleyxgp1" path="res://art/ui/UI/UI_bag_export_01.png" id="3_vvo7l"]
[ext_resource type="Texture2D" uid="uid://dcidjcsqk12p1" path="res://art/ui/UI/UI_bag_export_02.png" id="4_df8i8"] [ext_resource type="Texture2D" uid="uid://u0dku75l17re" path="res://art/ui/UI/UI_bag_export_highlight_01.png" id="5_df8i8"]
[ext_resource type="Texture2D" uid="uid://c7wqla0mbu3np" path="res://art/ui/babushka_ui_tmp_inventory_select.png" id="4_tiss4"]
[ext_resource type="PackedScene" uid="uid://c0kmdjeqkqrwv" path="res://prefabs/UI/Inventory/Slot.tscn" id="5_u7kje"] [ext_resource type="PackedScene" uid="uid://c0kmdjeqkqrwv" path="res://prefabs/UI/Inventory/Slot.tscn" id="5_u7kje"]
[ext_resource type="Script" uid="uid://cvkw4qd2hxksi" path="res://scripts/GdScript/dialogic_toggle.gd" id="6_n5apg"] [ext_resource type="Script" uid="uid://7wwid23tc8as" path="res://scripts/CSharp/Common/Quest/QuestMessagePopup.cs" id="6_n5apg"]
[ext_resource type="Texture2D" uid="uid://bag1xalfh731d" path="res://art/ui/UI/UI_bag_export_highlight_02.png" id="6_u7kje"]
[ext_resource type="Texture2D" uid="uid://cxptule8n38ph" path="res://art/ui/UI/UI_bag_export_highlight_03.png" id="7_l3npx"]
[ext_resource type="PackedScene" uid="uid://2q1n6g2kj5er" path="res://prefabs/UI/Quest/QuestLog.tscn" id="7_vvo7l"]
[ext_resource type="Texture2D" uid="uid://qwia360i1ir1" path="res://art/ui/UI/inventory_active.png" id="8_df8i8"]
[node name="CanvasLayer" type="CanvasLayer"] [node name="CanvasLayer" type="CanvasLayer"]
layer = 90 layer = 90
follow_viewport_enabled = true
[node name="DialogicToggle" type="Node2D" parent="." node_paths=PackedStringArray("itemToToggle")] [node name="DialogicToggle" type="Node2D" parent="."]
scale = Vector2(0.7, 0.7) scale = Vector2(0.7, 0.7)
script = ExtResource("6_n5apg")
itemToToggle = NodePath("../Inventory")
[node name="Inventory" type="Control" parent="."] [node name="Inventory" type="Control" parent="." node_paths=PackedStringArray("_headerSlots")]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 8
anchor_right = 1.0 anchor_left = 0.5
anchor_bottom = 1.0 anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
scale = Vector2(0.7, 0.7) scale = Vector2(0.7, 0.7)
size_flags_vertical = 8
script = ExtResource("1_6wusm") script = ExtResource("1_6wusm")
metadata/_edit_use_anchors_ = true _headerSlots = []
[node name="SlotsContainer" type="Control" parent="Inventory"] [node name="SlotsContainer" type="Control" parent="Inventory"]
custom_minimum_size = Vector2(500, 0)
layout_mode = 1 layout_mode = 1
anchors_preset = 13 anchors_preset = 8
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5 anchor_right = 0.5
anchor_bottom = 1.0 anchor_bottom = 0.5
grow_horizontal = 2 offset_left = -250.0
grow_vertical = 2 offset_right = 250.0
[node name="SlotSelectContainer" type="Control" parent="Inventory/SlotsContainer"]
custom_minimum_size = Vector2(900, 100)
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -450.0
offset_top = -115.0
offset_right = 450.0
offset_bottom = -15.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 0 grow_vertical = 0
scale = Vector2(0.7, 0.7)
[node name="Selector" type="TextureRect" parent="Inventory/SlotsContainer/SlotSelectContainer"]
z_index = 10
custom_minimum_size = Vector2(100, 100)
layout_mode = 0
offset_left = 1.0
offset_right = 101.0
offset_bottom = 100.0
texture = ExtResource("4_tiss4")
expand_mode = 1
[node name="SlotsMover" type="Control" parent="Inventory/SlotsContainer"] [node name="SlotsMover" type="Control" parent="Inventory/SlotsContainer"]
custom_minimum_size = Vector2(900, 610) custom_minimum_size = Vector2(900, 610)
@ -75,6 +56,7 @@ offset_right = 200.0
offset_bottom = -1.0 offset_bottom = -1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 0 grow_vertical = 0
mouse_filter = 2
[node name="BackgroundContainer" type="Control" parent="Inventory/SlotsContainer/SlotsMover"] [node name="BackgroundContainer" type="Control" parent="Inventory/SlotsContainer/SlotsMover"]
layout_mode = 1 layout_mode = 1
@ -90,8 +72,9 @@ layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_left = -305.0 offset_left = 435.0
offset_right = 303.0 offset_right = 339.0
offset_bottom = 30.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2 mouse_filter = 2
@ -103,6 +86,9 @@ layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_left = -356.0
offset_right = -452.0
offset_bottom = 30.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2 mouse_filter = 2
@ -115,11 +101,53 @@ layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_left = -142.429
offset_top = 1.85717
offset_right = -808.428
offset_bottom = -774.143
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
scale = Vector2(1.7, 1.7)
mouse_filter = 2 mouse_filter = 2
texture = ExtResource("4_df8i8") texture = ExtResource("5_df8i8")
expand_mode = 3 expand_mode = 1
stretch_mode = 3
flip_h = true
[node name="TextureRect4" type="TextureRect" parent="Inventory/SlotsContainer/SlotsMover/BackgroundContainer"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 303.286
offset_top = 209.0
offset_right = -362.714
offset_bottom = -567.0
grow_horizontal = 2
grow_vertical = 2
scale = Vector2(1.7, 1.7)
mouse_filter = 2
texture = ExtResource("6_u7kje")
expand_mode = 1
stretch_mode = 3
flip_h = true
[node name="TextureRect5" type="TextureRect" parent="Inventory/SlotsContainer/SlotsMover/BackgroundContainer"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 474.714
offset_top = 754.714
offset_right = -191.286
offset_bottom = -21.2858
grow_horizontal = 2
grow_vertical = 2
scale = Vector2(1.7, 1.7)
mouse_filter = 2
texture = ExtResource("7_l3npx")
expand_mode = 1
stretch_mode = 3
flip_h = true flip_h = true
[node name="Slots" type="Control" parent="Inventory/SlotsContainer/SlotsMover"] [node name="Slots" type="Control" parent="Inventory/SlotsContainer/SlotsMover"]
@ -128,53 +156,75 @@ layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_top = 496.0 offset_left = -48.5714
offset_bottom = 496.0 offset_top = 501.0
offset_right = -48.5714
offset_bottom = 501.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
[node name="Slot" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 2.85714
offset_top = -54.2857
offset_right = 102.857
offset_bottom = 45.7143
[node name="Slot2" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot2" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 100.0 offset_left = 102.857
offset_right = 200.0 offset_top = -54.2857
offset_right = 202.857
offset_bottom = 45.7143
[node name="Slot3" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot3" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 201.0 offset_left = 203.857
offset_right = 301.0 offset_top = -54.2857
offset_right = 303.857
offset_bottom = 45.7143
[node name="Slot4" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot4" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 301.0 offset_left = 303.857
offset_right = 401.0 offset_top = -54.2857
offset_right = 403.857
offset_bottom = 45.7143
[node name="Slot5" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot5" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 401.0 offset_left = 403.857
offset_right = 501.0 offset_top = -54.2857
offset_right = 503.857
offset_bottom = 45.7143
[node name="Slot6" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot6" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 501.0 offset_left = 503.857
offset_right = 601.0 offset_top = -54.2857
offset_right = 603.857
offset_bottom = 45.7143
[node name="Slot7" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot7" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 601.0 offset_left = 603.857
offset_right = 701.0 offset_top = -54.2857
offset_right = 703.857
offset_bottom = 45.7143
[node name="Slot8" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot8" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 702.0 offset_left = 704.857
offset_right = 802.0 offset_top = -54.2857
offset_right = 804.857
offset_bottom = 45.7143
[node name="Slot9" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot9" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
offset_left = 802.0 offset_left = 804.857
offset_right = 902.0 offset_top = -54.2857
offset_right = 904.857
offset_bottom = 45.7143
[node name="Slot10" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")] [node name="Slot10" parent="Inventory/SlotsContainer/SlotsMover/Slots" instance=ExtResource("5_u7kje")]
layout_mode = 1 layout_mode = 1
@ -371,3 +421,64 @@ offset_left = 703.0
offset_top = 512.0 offset_top = 512.0
offset_right = 803.0 offset_right = 803.0
offset_bottom = 612.0 offset_bottom = 612.0
[node name="SlotSelectContainer" type="Control" parent="Inventory/SlotsContainer/SlotsMover"]
custom_minimum_size = Vector2(900, 100)
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -497.0
offset_top = -164.0
offset_right = 403.0
offset_bottom = -64.0
grow_horizontal = 2
grow_vertical = 0
[node name="Selector" type="TextureRect" parent="Inventory/SlotsContainer/SlotsMover/SlotSelectContainer"]
z_index = 10
custom_minimum_size = Vector2(100, 100)
layout_mode = 0
offset_right = 100.0
offset_bottom = 100.0
texture = ExtResource("8_df8i8")
expand_mode = 1
[node name="QuestLogRoot" parent="." instance=ExtResource("7_vvo7l")]
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
grow_vertical = 0
[node name="ColorRect" type="ColorRect" parent="Control"]
custom_minimum_size = Vector2(200, 200)
layout_mode = 0
offset_left = 150.0
offset_top = -250.0
offset_right = 350.0
offset_bottom = -50.0
color = Color(1, 1, 0.584314, 1)
script = ExtResource("6_n5apg")
_showPosition = Vector2(150, -250)
_hidePosition = Vector2(150, 50)
[node name="Text" type="Label" parent="Control/ColorRect"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 20.0
offset_top = 20.0
offset_right = -20.0
offset_bottom = -20.0
grow_horizontal = 2
grow_vertical = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
text = "Switch to Unity"
horizontal_alignment = 1
vertical_alignment = 1

@ -0,0 +1,67 @@
[gd_scene load_steps=3 format=3 uid="uid://1iqqwh7d6xoh"]
[ext_resource type="Script" uid="uid://dwhee40ksubke" path="res://scripts/CSharp/Common/Quest/QuestListItemUi.cs" id="1_svwef"]
[ext_resource type="Texture2D" uid="uid://cvu5dybw31uxn" path="res://art/ui/UI/Circle.png" id="2_qlq3v"]
[node name="QuestListItem" type="Control"]
custom_minimum_size = Vector2(0, 40)
layout_mode = 3
anchors_preset = 0
offset_right = 300.0
offset_bottom = 30.0
script = ExtResource("1_svwef")
[node name="TitleButton" type="Button" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
flat = true
[node name="HBoxContainer" type="HBoxContainer" parent="TitleButton"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="TitleButton/HBoxContainer"]
layout_mode = 2
theme_override_constants/margin_left = 30
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 30
theme_override_constants/margin_bottom = 0
[node name="DotText" type="Label" parent="TitleButton/HBoxContainer/MarginContainer"]
layout_mode = 2
size_flags_vertical = 1
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 17
text = "•"
vertical_alignment = 1
[node name="TitleText" type="Label" parent="TitleButton/HBoxContainer"]
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 17
text = "Switch to Unity"
vertical_alignment = 1
autowrap_mode = 2
[node name="Circled" type="TextureRect" parent="TitleButton"]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_qlq3v")
[connection signal="pressed" from="TitleButton" to="." method="ClickedTitleButton"]

@ -0,0 +1,162 @@
[gd_scene load_steps=6 format=3 uid="uid://2q1n6g2kj5er"]
[ext_resource type="Script" uid="uid://c7ilqe2fmjyvx" path="res://scripts/CSharp/Common/Quest/QuestListUi.cs" id="1_17sli"]
[ext_resource type="Script" uid="uid://o1qpo0wdqlw3" path="res://scripts/CSharp/Common/Quest/QuestLog.cs" id="1_vc33n"]
[ext_resource type="PackedScene" uid="uid://1iqqwh7d6xoh" path="res://prefabs/UI/Quest/QuestListItem.tscn" id="2_fswdj"]
[ext_resource type="Texture2D" uid="uid://d0anh3hdk0clc" path="res://art/ui/UI/journal_standard.png" id="2_wdbu4"]
[ext_resource type="Script" uid="uid://b8mywolvj2yq7" path="res://scripts/CSharp/Common/Quest/QuestDescriptionUi.cs" id="4_1vy15"]
[node name="QuestLogRoot" type="Control"]
layout_mode = 3
anchors_preset = 0
[node name="MovingLog" type="Control" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 460.0
offset_top = -615.0
offset_right = 1460.0
offset_bottom = -54.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
mouse_filter = 2
script = ExtResource("1_vc33n")
_closedPos = Vector2(460, -615)
_openedPos = Vector2(460, 240)
[node name="Background" type="Control" parent="MovingLog"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TextureRect" type="TextureRect" parent="MovingLog/Background"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_wdbu4")
expand_mode = 2
stretch_mode = 5
[node name="MarginContainer" type="MarginContainer" parent="MovingLog"]
layout_mode = 2
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 160
theme_override_constants/margin_top = 60
theme_override_constants/margin_right = 160
theme_override_constants/margin_bottom = 60
[node name="ReferenceRect" type="ReferenceRect" parent="MovingLog/MarginContainer"]
layout_mode = 2
[node name="QuestLog" type="HBoxContainer" parent="MovingLog/MarginContainer/ReferenceRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="LeftPage" type="Control" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog"]
layout_mode = 2
size_flags_horizontal = 3
[node name="MarginContainer" type="MarginContainer" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/LeftPage"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 15
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 15
[node name="ReferenceRect" type="ReferenceRect" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/LeftPage/MarginContainer"]
layout_mode = 2
border_color = Color(1.49205e-06, 0.62774, 0.489941, 1)
[node name="VBoxContainer2" type="VBoxContainer" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/LeftPage/MarginContainer/ReferenceRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/LeftPage/MarginContainer/ReferenceRect/VBoxContainer2"]
custom_minimum_size = Vector2(0, 60.975)
layout_mode = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 31
text = "Quests"
horizontal_alignment = 1
vertical_alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/LeftPage/MarginContainer/ReferenceRect/VBoxContainer2"]
layout_mode = 2
size_flags_vertical = 3
script = ExtResource("1_17sli")
_questListItemPrefab = ExtResource("2_fswdj")
[node name="RightPage" type="Control" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog"]
layout_mode = 2
size_flags_horizontal = 3
[node name="MarginContainer" type="MarginContainer" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/RightPage"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 15
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 15
[node name="ReferenceRect" type="ReferenceRect" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/RightPage/MarginContainer"]
layout_mode = 2
border_color = Color(1.49205e-06, 0.62774, 0.489941, 1)
[node name="VBoxContainer2" type="VBoxContainer" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/RightPage/MarginContainer/ReferenceRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/RightPage/MarginContainer/ReferenceRect/VBoxContainer2"]
custom_minimum_size = Vector2(0, 60.975)
layout_mode = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 31
text = "Details"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Description" type="RichTextLabel" parent="MovingLog/MarginContainer/ReferenceRect/QuestLog/RightPage/MarginContainer/ReferenceRect/VBoxContainer2"]
layout_mode = 2
size_flags_vertical = 3
theme_override_colors/default_color = Color(0, 0, 0, 1)
bbcode_enabled = true
text = "[center][font_size=24]Find 10 Mushroms[/font_size][/center]
Collect 10 mushroms in the forrest by the bushes down the road with the singn that says \"to the mushroms\" and has a small mushrom logo on it. Its realy hard to miss."
script = ExtResource("4_1vy15")
[connection signal="DetailQuestChanged" from="MovingLog" to="MovingLog/MarginContainer/ReferenceRect/QuestLog/RightPage/MarginContainer/ReferenceRect/VBoxContainer2/Description" method="UpdateText"]

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
[gd_scene load_steps=47 format=3 uid="uid://dfvgp1my5rydh"] [gd_scene load_steps=48 format=3 uid="uid://dfvgp1my5rydh"]
[ext_resource type="Texture2D" uid="uid://c34012j5ukiuf" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0001.png" id="1_03m0b"] [ext_resource type="Texture2D" uid="uid://c34012j5ukiuf" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0001.png" id="1_03m0b"]
[ext_resource type="Script" uid="uid://d2486x6upmwqq" path="res://scripts/GdScript/dialogic_starter.gd" id="1_at1n1"] [ext_resource type="Script" uid="uid://d2486x6upmwqq" path="res://scripts/GdScript/dialogic_starter.gd" id="1_at1n1"]
@ -182,10 +182,13 @@ animations = [{
"speed": 15.0 "speed": 15.0
}] }]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_aqu1t"]
radius = 202.0
height = 404.0
[node name="Yeli" type="Node2D"] [node name="Yeli" type="Node2D"]
z_index = 1 z_index = 1
y_sort_enabled = true y_sort_enabled = true
position = Vector2(0, 322)
script = ExtResource("1_at1n1") script = ExtResource("1_at1n1")
[node name="InteractionArea" parent="." instance=ExtResource("42_ahrat")] [node name="InteractionArea" parent="." instance=ExtResource("42_ahrat")]
@ -219,6 +222,12 @@ offset = Vector2(0, -450)
[node name="DialogicToggle" type="Node2D" parent="."] [node name="DialogicToggle" type="Node2D" parent="."]
script = ExtResource("44_aqu1t") script = ExtResource("44_aqu1t")
[node name="AnimatableBody2D" type="AnimatableBody2D" parent="."]
position = Vector2(0, -172)
[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatableBody2D"]
shape = SubResource("CapsuleShape2D_aqu1t")
[connection signal="Interacted" from="InteractionArea" to="TalkingControl" method="ToggleTalking"] [connection signal="Interacted" from="InteractionArea" to="TalkingControl" method="ToggleTalking"]
[connection signal="Talking" from="TalkingControl" to="." method="open"] [connection signal="Talking" from="TalkingControl" to="." method="open"]
[connection signal="timelineEnded" from="DialogicToggle" to="TalkingControl" method="ToggleTalking"] [connection signal="timelineEnded" from="DialogicToggle" to="TalkingControl" method="ToggleTalking"]

@ -49,7 +49,6 @@ autowrap_mode = 3
shape = SubResource("CircleShape2D_tlhp6") shape = SubResource("CircleShape2D_tlhp6")
[node name="Label" parent="InteractionArea2" index="1"] [node name="Label" parent="InteractionArea2" index="1"]
visible = true
z_index = 5 z_index = 5
offset_left = -68.0 offset_left = -68.0
offset_top = -111.0 offset_top = -111.0

@ -13,14 +13,21 @@ config_version=5
config/name="Babushka" config/name="Babushka"
run/main_scene="uid://bopv10dqm1knc" run/main_scene="uid://bopv10dqm1knc"
config/features=PackedStringArray("4.4", "C#", "Forward Plus") config/features=PackedStringArray("4.4", "C#", "Forward Plus")
run/max_fps=120
boot_splash/fullsize=false boot_splash/fullsize=false
boot_splash/image="uid://utam4axkvutc" boot_splash/image="uid://utam4axkvutc"
config/icon="uid://b2smanpdo1y5e" config/icon="uid://b2smanpdo1y5e"
[audio]
buses/default_bus_layout="uid://b6dwkmkyb0axk"
[autoload] [autoload]
Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd" Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd"
InventoryManager="*res://scripts/CSharp/Common/Inventory/InventoryManager.cs" InventoryManager="*res://scripts/CSharp/Common/Inventory/InventoryManager.cs"
QuestManager="*res://scripts/CSharp/Common/Quest/QuestManager.cs"
Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd"
[dialogic] [dialogic]
@ -93,7 +100,7 @@ movie_writer/movie_file="/home/kaddi/Documents/Repos/Godot/Babushka/_clips/clip.
[editor_plugins] [editor_plugins]
enabled=PackedStringArray("res://addons/anthonyec.camera_preview/plugin.cfg", "res://addons/dialogic/plugin.cfg") enabled=PackedStringArray("res://addons/SignalVisualizer/plugin.cfg", "res://addons/anthonyec.camera_preview/plugin.cfg", "res://addons/dialogic/plugin.cfg")
[file_customization] [file_customization]
@ -157,6 +164,11 @@ interact={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null)
] ]
} }
ui_inventory_journal_open_close={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":74,"key_label":0,"unicode":106,"location":0,"echo":false,"script":null)
]
}
ui_inventory_open_close={ ui_inventory_open_close={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null)
@ -182,6 +194,11 @@ item={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
] ]
} }
ui_inventory_close={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[internationalization] [internationalization]

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://0aruj4lm74n6"]
[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_kisdg"]
[resource]
script = ExtResource("1_kisdg")
id = "test_01"
title = "First Testing Quest"
description = "Do the first thing you do to complete this quest"
metadata/_custom_type_script = "uid://vji5lp4qc8pp"

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://be1dmc6d2mxl5"]
[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_t87fj"]
[resource]
script = ExtResource("1_t87fj")
id = "test_02"
title = "Second Testing Quest"
description = "Second my ass. Do what ever. I don't care"
metadata/_custom_type_script = "uid://vji5lp4qc8pp"

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://tmmnsg1bge2"]
[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_y0umc"]
[resource]
script = ExtResource("1_y0umc")
id = "test_03"
title = "Third Testing Quest"
description = "I'd like to apologize for the second quest, he has some bad manners"
metadata/_custom_type_script = "uid://vji5lp4qc8pp"

@ -1,8 +1,8 @@
[gd_scene load_steps=69 format=3 uid="uid://gigb28qk8t12"] [gd_scene load_steps=79 format=3 uid="uid://gigb28qk8t12"]
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="1_7wfwe"] [ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="1_7wfwe"]
[ext_resource type="Texture2D" uid="uid://8sr11ex30n0m" path="res://art/mockups/Kenney_Backgrounds/Samples/uncolored_hills.png" id="2_7b2ri"] [ext_resource type="Texture2D" uid="uid://8sr11ex30n0m" path="res://art/mockups/Kenney_Backgrounds/Samples/uncolored_hills.png" id="2_7b2ri"]
[ext_resource type="Texture2D" uid="uid://c7f3t65jskd6v" path="res://art/mockups/house_prototype.png" id="2_lhtpe"] [ext_resource type="PackedScene" uid="uid://bm21nqepnwaik" path="res://scenes/IndoorTest2.tscn" id="2_taxvr"]
[ext_resource type="Texture2D" uid="uid://be1nofeo7an0" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud2.png" id="3_r34wi"] [ext_resource type="Texture2D" uid="uid://be1nofeo7an0" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud2.png" id="3_r34wi"]
[ext_resource type="Texture2D" uid="uid://o6vnf7n7qp8o" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud6.png" id="4_xh22q"] [ext_resource type="Texture2D" uid="uid://o6vnf7n7qp8o" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud6.png" id="4_xh22q"]
[ext_resource type="Texture2D" uid="uid://cc0o84q5u437k" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud7.png" id="5_k3wpj"] [ext_resource type="Texture2D" uid="uid://cc0o84q5u437k" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud7.png" id="5_k3wpj"]
@ -37,12 +37,19 @@
[ext_resource type="Resource" uid="uid://datee0flk1e84" path="res://resources/items/scythe.tres" id="29_wtdui"] [ext_resource type="Resource" uid="uid://datee0flk1e84" path="res://resources/items/scythe.tres" id="29_wtdui"]
[ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="32_2nee2"] [ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="32_2nee2"]
[ext_resource type="Script" uid="uid://cssdu8viimwm6" path="res://scripts/CSharp/Common/SceneTransition.cs" id="34_e5b7x"] [ext_resource type="Script" uid="uid://cssdu8viimwm6" path="res://scripts/CSharp/Common/SceneTransition.cs" id="34_e5b7x"]
[ext_resource type="PackedScene" uid="uid://bm21nqepnwaik" path="res://scenes/IndoorTest2.tscn" id="35_taxvr"] [ext_resource type="Texture2D" uid="uid://65e44yde224q" path="res://art/farm/Babushka_house_01.png" id="36_e5b7x"]
[ext_resource type="AudioStream" uid="uid://cfqg50am0swb7" path="res://audio/Music/Farming_90BPM_69Bars_Loop.wav" id="37_8ey8m"] [ext_resource type="AudioStream" uid="uid://cfqg50am0swb7" path="res://audio/Music/Farming_90BPM_69Bars_Loop.wav" id="37_8ey8m"]
[ext_resource type="AudioStream" uid="uid://dku1rq5cocisg" path="res://audio/Music/Farming_90BPM_69Bars.wav" id="37_di1ed"] [ext_resource type="AudioStream" uid="uid://dku1rq5cocisg" path="res://audio/Music/Farming_90BPM_69Bars.wav" id="37_di1ed"]
[ext_resource type="Shader" uid="uid://braevmqauoek7" path="res://shader/swaying_plant.gdshader" id="37_taxvr"]
[ext_resource type="AudioStream" uid="uid://fsiypqhql67w" path="res://audio/sfx/Farming/SFX_GettingWater_01.wav" id="39_di1ed"] [ext_resource type="AudioStream" uid="uid://fsiypqhql67w" path="res://audio/sfx/Farming/SFX_GettingWater_01.wav" id="39_di1ed"]
[ext_resource type="AudioStream" uid="uid://foyw26hq1qp5" path="res://audio/sfx/Farming/SFX_GettingWater_02.wav" id="40_ceriq"] [ext_resource type="AudioStream" uid="uid://foyw26hq1qp5" path="res://audio/sfx/Farming/SFX_GettingWater_02.wav" id="40_ceriq"]
[ext_resource type="Script" uid="uid://cfnrd5k1k0gxw" path="res://scripts/CSharp/Common/AudioPlayer.cs" id="40_w3jkj"] [ext_resource type="Script" uid="uid://cfnrd5k1k0gxw" path="res://scripts/CSharp/Common/AudioPlayer.cs" id="40_w3jkj"]
[ext_resource type="Script" uid="uid://clxb3n668oud3" path="res://scripts/CSharp/Common/Audio/AudioDebugger.cs" id="42_1nkjm"]
[ext_resource type="AudioStream" uid="uid://vcftvrpi6c7k" path="res://audio/sfx/Farming/SFX_Harke_03_Solo.wav" id="42_wtw65"]
[ext_resource type="AudioStream" uid="uid://bxh5m04vdo0sr" path="res://audio/sfx/Farming/SFX_Harke_04_Solo.wav" id="43_1nkjm"]
[ext_resource type="AudioStream" uid="uid://dapsknn486aee" path="res://audio/sfx/Farming/SFX_WateringPlants_01.wav" id="45_lbk0f"]
[ext_resource type="AudioStream" uid="uid://dnyne8wov50so" path="res://audio/sfx/Farming/SFX_WateringPlants_02.wav" id="46_2rjny"]
[ext_resource type="AudioStream" uid="uid://c43a6x43jkikl" path="res://audio/sfx/Farming/SFX_GettingWater_Well_01_Reverb.wav" id="49_d77e7"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_wtdui"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_wtdui"]
shader = ExtResource("13_7p0hq") shader = ExtResource("13_7p0hq")
@ -77,9 +84,13 @@ shader_parameter/noise = SubResource("NoiseTexture2D_d53cn")
[sub_resource type="Gradient" id="Gradient_eryax"] [sub_resource type="Gradient" id="Gradient_eryax"]
offsets = PackedFloat32Array(0, 0.743902, 1) offsets = PackedFloat32Array(0, 0.743902, 1)
colors = PackedColorArray(0.315758, 0.221537, 0.271709, 1, 0.443137, 0.4, 0.360784, 1, 0.686275, 0.556863, 0.47451, 1) colors = PackedColorArray(0.22, 0.1078, 0.16764, 1, 0.443137, 0.4, 0.360784, 1, 0.6, 0.4853, 0.414, 1)
[sub_resource type="FastNoiseLite" id="FastNoiseLite_wgikv"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_wgikv"]
frequency = 0.0296
fractal_octaves = 7
fractal_gain = 0.795
domain_warp_enabled = true
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_e5alv"] [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_e5alv"]
seamless = true seamless = true
@ -113,14 +124,14 @@ shader_parameter/hue_shift = 0.0
shader_parameter/saturation_mult = 1.0 shader_parameter/saturation_mult = 1.0
shader_parameter/value_mult = 1.0 shader_parameter/value_mult = 1.0
shader_parameter/brightness_add = 0.0 shader_parameter/brightness_add = 0.0
shader_parameter/contrast_mult = 1.183 shader_parameter/contrast_mult = 1.128
[sub_resource type="RectangleShape2D" id="RectangleShape2D_0sfl7"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_0sfl7"]
size = Vector2(728, 368) size = Vector2(1041, 368)
[sub_resource type="CircleShape2D" id="CircleShape2D_p6n74"] [sub_resource type="CircleShape2D" id="CircleShape2D_p6n74"]
resource_local_to_scene = true resource_local_to_scene = true
radius = 600.0 radius = 371.058
[sub_resource type="CircleShape2D" id="CircleShape2D_2nee2"] [sub_resource type="CircleShape2D" id="CircleShape2D_2nee2"]
resource_local_to_scene = true resource_local_to_scene = true
@ -131,12 +142,18 @@ resource_local_to_scene = true
radius = 300.0 radius = 300.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lhtpe"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_lhtpe"]
shader = ExtResource("13_7p0hq")
shader_parameter/hue_shift = 0.0 [sub_resource type="ShaderMaterial" id="ShaderMaterial_bcdgk"]
shader_parameter/saturation_mult = 1.0 shader = ExtResource("37_taxvr")
shader_parameter/value_mult = 1.068 shader_parameter/speed = 1.0
shader_parameter/brightness_add = 0.0 shader_parameter/minStrength = 0.05
shader_parameter/contrast_mult = 0.913 shader_parameter/maxStrength = 0.154
shader_parameter/strengthScale = 100.0
shader_parameter/interval = 3.5
shader_parameter/detail = 2.095
shader_parameter/distortion = 1.0
shader_parameter/heightOffset = 0.0
shader_parameter/offset = 1.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2nee2"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_2nee2"]
size = Vector2(5905, 1176) size = Vector2(5905, 1176)
@ -147,18 +164,28 @@ size = Vector2(7340, 1192)
[sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_ceriq"] [sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_ceriq"]
loop = false loop = false
stream_count = 2 stream_count = 1
stream_0 = ExtResource("37_di1ed") stream_0 = ExtResource("37_di1ed")
stream_1 = ExtResource("37_8ey8m")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ceriq"] [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ceriq"]
streams_count = 2 streams_count = 2
stream_0/stream = ExtResource("42_wtw65")
stream_1/stream = ExtResource("43_1nkjm")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_p4qqi"]
streams_count = 2
stream_0/stream = ExtResource("45_lbk0f")
stream_1/stream = ExtResource("46_2rjny")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_618my"]
streams_count = 3
stream_0/stream = ExtResource("39_di1ed") stream_0/stream = ExtResource("39_di1ed")
stream_1/stream = ExtResource("40_ceriq") stream_1/stream = ExtResource("40_ceriq")
stream_2/stream = ExtResource("49_d77e7")
[node name="BabushkaSceneFarmOutside2d" type="Node2D"] [node name="BabushkaSceneFarmOutside2d" type="Node2D"]
script = ExtResource("34_e5b7x") script = ExtResource("34_e5b7x")
_sceneToLoad = ExtResource("35_taxvr") _sceneToLoad = ExtResource("2_taxvr")
[node name="ParallaxBackground" type="ParallaxBackground" parent="."] [node name="ParallaxBackground" type="ParallaxBackground" parent="."]
@ -226,7 +253,7 @@ offset = Vector2(0, -100)
[node name="background layer 3" type="ParallaxLayer" parent="ParallaxBackground"] [node name="background layer 3" type="ParallaxLayer" parent="ParallaxBackground"]
position = Vector2(18, -713) position = Vector2(18, -713)
motion_scale = Vector2(0.25, 0.25) motion_scale = Vector2(0.25, 0.25)
motion_mirroring = Vector2(7200, 0) motion_mirroring = Vector2(5424, 0)
[node name="Kenney assets" type="Node2D" parent="ParallaxBackground/background layer 3"] [node name="Kenney assets" type="Node2D" parent="ParallaxBackground/background layer 3"]
position = Vector2(0, -39) position = Vector2(0, -39)
@ -323,13 +350,13 @@ texture = ExtResource("12_6b2nr")
[node name="JelenaMockupBg01" type="Sprite2D" parent="ParallaxBackground/background layer 3"] [node name="JelenaMockupBg01" type="Sprite2D" parent="ParallaxBackground/background layer 3"]
visible = false visible = false
position = Vector2(3552, 1296) position = Vector2(3552, 1296)
scale = Vector2(1.7404, 1.77563) scale = Vector2(3, 3.062)
texture = ExtResource("11_vbdb2") texture = ExtResource("11_vbdb2")
[node name="background layer 4" type="ParallaxLayer" parent="ParallaxBackground"] [node name="background layer 4" type="ParallaxLayer" parent="ParallaxBackground"]
position = Vector2(0, -82) position = Vector2(0, -82)
motion_scale = Vector2(0.5, 0.5) motion_scale = Vector2(0.5, 0.5)
motion_mirroring = Vector2(10500, 0) motion_mirroring = Vector2(10480, 0)
[node name="Kenney Assets" type="Node2D" parent="ParallaxBackground/background layer 4"] [node name="Kenney Assets" type="Node2D" parent="ParallaxBackground/background layer 4"]
visible = false visible = false
@ -447,13 +474,13 @@ texture = ExtResource("14_d53cn")
[node name="JelenaMockupBg02" type="Sprite2D" parent="ParallaxBackground/background layer 4"] [node name="JelenaMockupBg02" type="Sprite2D" parent="ParallaxBackground/background layer 4"]
material = SubResource("ShaderMaterial_wtdui") material = SubResource("ShaderMaterial_wtdui")
position = Vector2(2668, 726) position = Vector2(2668, 726)
scale = Vector2(1.3, 1.3) scale = Vector2(2.75, 2.75)
texture = ExtResource("13_0qu0h") texture = ExtResource("13_0qu0h")
[node name="JelenaMockupBg03" type="Sprite2D" parent="ParallaxBackground/background layer 4"] [node name="JelenaMockupBg03" type="Sprite2D" parent="ParallaxBackground/background layer 4"]
material = SubResource("ShaderMaterial_wtdui") material = SubResource("ShaderMaterial_wtdui")
position = Vector2(7965, 728) position = Vector2(7923, 727)
scale = Vector2(1.3, 1.3) scale = Vector2(2.75, 2.75)
texture = ExtResource("13_0qu0h") texture = ExtResource("13_0qu0h")
[node name="back back trees layer" type="ParallaxLayer" parent="ParallaxBackground"] [node name="back back trees layer" type="ParallaxLayer" parent="ParallaxBackground"]
@ -579,7 +606,7 @@ position = Vector2(1791.5, 1448)
texture = ExtResource("14_mrwmr") texture = ExtResource("14_mrwmr")
flip_h = true flip_h = true
region_enabled = true region_enabled = true
region_rect = Rect2(149, 15, 464, 478) region_rect = Rect2(130, 0, 201, 278)
[node name="bush3" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] [node name="bush3" type="Sprite2D" parent="ParallaxBackground/back back trees layer"]
material = SubResource("ShaderMaterial_8ey8m") material = SubResource("ShaderMaterial_8ey8m")
@ -587,7 +614,7 @@ position = Vector2(1255.5, 1392)
texture = ExtResource("14_mrwmr") texture = ExtResource("14_mrwmr")
flip_h = true flip_h = true
region_enabled = true region_enabled = true
region_rect = Rect2(-6, 996, 467, 429) region_rect = Rect2(0, 604, 248, 228)
[node name="bush4" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] [node name="bush4" type="Sprite2D" parent="ParallaxBackground/back back trees layer"]
material = SubResource("ShaderMaterial_8ey8m") material = SubResource("ShaderMaterial_8ey8m")
@ -595,14 +622,14 @@ position = Vector2(5471.5, 1432)
texture = ExtResource("14_mrwmr") texture = ExtResource("14_mrwmr")
flip_h = true flip_h = true
region_enabled = true region_enabled = true
region_rect = Rect2(2319, 1079, 353, 327) region_rect = Rect2(1837, 651, 139, 180)
[node name="bush5" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] [node name="bush5" type="Sprite2D" parent="ParallaxBackground/back back trees layer"]
material = SubResource("ShaderMaterial_8ey8m") material = SubResource("ShaderMaterial_8ey8m")
position = Vector2(5007.5, 1312) position = Vector2(5007.5, 1312)
texture = ExtResource("14_mrwmr") texture = ExtResource("14_mrwmr")
region_enabled = true region_enabled = true
region_rect = Rect2(2489, 707, 269, 224) region_rect = Rect2(1368, 673, 186, 136)
[node name="bush6" type="Sprite2D" parent="ParallaxBackground/back back trees layer"] [node name="bush6" type="Sprite2D" parent="ParallaxBackground/back back trees layer"]
material = SubResource("ShaderMaterial_8ey8m") material = SubResource("ShaderMaterial_8ey8m")
@ -611,7 +638,7 @@ scale = Vector2(0.575, 0.575)
texture = ExtResource("14_mrwmr") texture = ExtResource("14_mrwmr")
flip_h = true flip_h = true
region_enabled = true region_enabled = true
region_rect = Rect2(605, 877, 597, 537) region_rect = Rect2(358, 523, 345, 289)
[node name="back tree bois layer 5" type="ParallaxLayer" parent="ParallaxBackground"] [node name="back tree bois layer 5" type="ParallaxLayer" parent="ParallaxBackground"]
visible = false visible = false
@ -832,19 +859,21 @@ material = SubResource("ShaderMaterial_2vojv")
position = Vector2(7237, 3307) position = Vector2(7237, 3307)
texture = ExtResource("21_ualyd") texture = ExtResource("21_ualyd")
offset = Vector2(0, -800) offset = Vector2(0, -800)
region_enabled = true
region_rect = Rect2(0, 0, 1504, 1686)
[node name="StaticBody2D" type="StaticBody2D" parent="YSorted/Brünnen"] [node name="StaticBody2D" type="StaticBody2D" parent="YSorted/Brünnen"]
collision_mask = 4 collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="YSorted/Brünnen/StaticBody2D"] [node name="CollisionShape2D" type="CollisionShape2D" parent="YSorted/Brünnen/StaticBody2D"]
position = Vector2(116, -224) position = Vector2(145.5, -224)
shape = SubResource("RectangleShape2D_0sfl7") shape = SubResource("RectangleShape2D_0sfl7")
[node name="InteractionArea" parent="YSorted/Brünnen" instance=ExtResource("27_klb81")] [node name="InteractionArea" parent="YSorted/Brünnen" instance=ExtResource("27_klb81")]
_id = 1 _id = 1
[node name="CollisionShape3D" parent="YSorted/Brünnen/InteractionArea/Area2D" index="0"] [node name="CollisionShape3D" parent="YSorted/Brünnen/InteractionArea/Area2D" index="0"]
position = Vector2(80, -368) position = Vector2(146, -130)
shape = SubResource("CircleShape2D_p6n74") shape = SubResource("CircleShape2D_p6n74")
[node name="HoeGenericPickup" parent="YSorted" instance=ExtResource("25_hukxv")] [node name="HoeGenericPickup" parent="YSorted" instance=ExtResource("25_hukxv")]
@ -863,6 +892,9 @@ position = Vector2(8192, 3507)
[node name="SpawnWithItem" parent="YSorted/CanGenericPickup" index="0"] [node name="SpawnWithItem" parent="YSorted/CanGenericPickup" index="0"]
_blueprint = ExtResource("28_ipqaa") _blueprint = ExtResource("28_ipqaa")
[node name="InteractionArea2" parent="YSorted/CanGenericPickup" index="3"]
position = Vector2(0, -159)
[node name="CollisionShape3D" parent="YSorted/CanGenericPickup/InteractionArea2/Area2D" index="0"] [node name="CollisionShape3D" parent="YSorted/CanGenericPickup/InteractionArea2/Area2D" index="0"]
shape = SubResource("CircleShape2D_ipqaa") shape = SubResource("CircleShape2D_ipqaa")
@ -902,24 +934,60 @@ position = Vector2(-60, 122)
position = Vector2(-8213, 84) position = Vector2(-8213, 84)
[node name="House Mockup" type="Sprite2D" parent="YSorted/Farm visuals/Static"] [node name="House Mockup" type="Sprite2D" parent="YSorted/Farm visuals/Static"]
y_sort_enabled = true
material = SubResource("ShaderMaterial_lhtpe") material = SubResource("ShaderMaterial_lhtpe")
position = Vector2(5280, 1600) position = Vector2(5986, 1718.25)
scale = Vector2(5, 5) scale = Vector2(4.5, 3.725)
texture = ExtResource("2_lhtpe") texture = ExtResource("36_e5b7x")
[node name="StaticBody2D" type="StaticBody2D" parent="YSorted/Farm visuals/Static/House Mockup"] [node name="StaticBody2D" type="StaticBody2D" parent="YSorted/Farm visuals/Static/House Mockup"]
collision_layer = 2 collision_layer = 2
collision_mask = 6 collision_mask = 6
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="YSorted/Farm visuals/Static/House Mockup/StaticBody2D"] [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="YSorted/Farm visuals/Static/House Mockup/StaticBody2D"]
position = Vector2(-257.6, 236.8) position = Vector2(-252.56, 231.32)
polygon = PackedVector2Array(232, -4.80005, 0, 0, 0, -96, -262.4, -97.6, -265.6, -260.8, -310.4, -260.8, -235.2, -321.6, -124.8, -323.2, -57.6, -424, 84.8, -436.8, 118.4, -452.8, 136, -436.8, 726.4, -452.8, 817.6, -299.2, 785.6, -291.2, 785.6, -108.8, 241.6, -94.4) polygon = PackedVector2Array(247.227, 43.5123, 44.7822, 43.5123, -87.2178, 45.123, -104.329, -55.2797, -154.107, -73.5347, -160.107, -380.38, -175.44, -400.783, -63.44, -512.461, 97.8934, -541.991, 261.671, -599.172, 374.782, -526.421, 502.338, -526.421, 637.893, -396.488, 598.56, -360.783, 596.338, -58.2327, 528.782, -58.2327, 501.449, 45.9283)
disabled = true
[node name="EnterHouseInteraction" parent="YSorted/Farm visuals/Static" instance=ExtResource("27_klb81")] [node name="EnterHouseInteraction" parent="YSorted/Farm visuals/Static" instance=ExtResource("27_klb81")]
position = Vector2(7178, 1965) position = Vector2(5839, 2349)
scale = Vector2(2.425, 2.425) scale = Vector2(2.425, 2.425)
[node name="bush" type="Sprite2D" parent="YSorted/Farm visuals/Static"]
material = SubResource("ShaderMaterial_bcdgk")
position = Vector2(4313, 2633)
scale = Vector2(2, 2)
texture = ExtResource("14_mrwmr")
offset = Vector2(0, -237)
region_enabled = true
region_rect = Rect2(130, 0, 201, 278)
[node name="bush2" type="Sprite2D" parent="YSorted/Farm visuals/Static"]
material = SubResource("ShaderMaterial_bcdgk")
position = Vector2(4590, 2971)
scale = Vector2(2, 2)
texture = ExtResource("14_mrwmr")
offset = Vector2(0, -196)
region_enabled = true
region_rect = Rect2(1699, 76, 280, 230)
[node name="bush4" type="Sprite2D" parent="YSorted/Farm visuals/Static"]
material = SubResource("ShaderMaterial_bcdgk")
position = Vector2(7300, 2912)
scale = Vector2(2, 2)
texture = ExtResource("14_mrwmr")
offset = Vector2(0, -172)
region_enabled = true
region_rect = Rect2(0, 604, 248, 228)
[node name="bush3" type="Sprite2D" parent="YSorted/Farm visuals/Static"]
material = SubResource("ShaderMaterial_bcdgk")
position = Vector2(7053, 2891)
scale = Vector2(2, 2)
texture = ExtResource("14_mrwmr")
offset = Vector2(0, -50)
region_enabled = true
region_rect = Rect2(1464, 419, 144, 115)
[node name="FieldParent" type="Node2D" parent="YSorted/Farm visuals"] [node name="FieldParent" type="Node2D" parent="YSorted/Farm visuals"]
position = Vector2(53, 20) position = Vector2(53, 20)
scale = Vector2(1, 0.993819) scale = Vector2(1, 0.993819)
@ -944,50 +1012,81 @@ follow_viewport_enabled = false
[node name="Inventory" parent="CanvasLayer" index="1"] [node name="Inventory" parent="CanvasLayer" index="1"]
anchors_preset = 7 anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0 anchor_top = 1.0
anchor_right = 0.5 anchor_bottom = 1.0
offset_left = -172.8 offset_left = -116.0
offset_top = -194.4 offset_top = -53.0
offset_right = 172.8 offset_right = 231.82
offset_bottom = 141.4
grow_vertical = 0 grow_vertical = 0
size_flags_horizontal = 4 size_flags_horizontal = 6
size_flags_vertical = 8 size_flags_vertical = 10
_inventoryOpenedOffset = -600.0
[node name="SlotsMover" parent="CanvasLayer/Inventory/SlotsContainer" index="0"]
anchors_preset = 7
anchor_left = 0.5
anchor_right = 0.5
offset_left = -450.0
offset_top = -610.0
offset_right = 450.0
offset_bottom = 0.0
[node name="TextureRect2" parent="CanvasLayer/Inventory/SlotsContainer/SlotsMover/BackgroundContainer" index="1"]
offset_left = -360.339
offset_top = 0.228533
offset_right = -456.339
offset_bottom = 30.2285
[node name="Audio" type="Node" parent="."] [node name="Audio" type="Node" parent="."]
[node name="Background Music" type="AudioStreamPlayer2D" parent="Audio"] [node name="Background Music Ramp up" type="AudioStreamPlayer2D" parent="Audio"]
position = Vector2(4002, 2030) position = Vector2(4002, 2030)
stream = SubResource("AudioStreamPlaylist_ceriq") stream = SubResource("AudioStreamPlaylist_ceriq")
volume_db = -15.0
autoplay = true autoplay = true
max_distance = 1e+06 max_distance = 1e+06
bus = &"Music"
area_mask = 33
playback_type = 1
script = ExtResource("42_1nkjm")
[node name="Background Music loop" type="AudioStreamPlayer2D" parent="Audio"]
position = Vector2(4002, 2030)
stream = ExtResource("37_8ey8m")
max_distance = 1e+06
bus = &"Music"
area_mask = 33
playback_type = 1
script = ExtResource("42_1nkjm")
[node name="SFX" type="Node" parent="Audio"] [node name="SFX" type="Node" parent="Audio"]
[node name="Farming SFX" type="AudioStreamPlayer2D" parent="Audio/SFX"] [node name="Farming SFX" type="AudioStreamPlayer2D" parent="Audio/SFX"]
stream = SubResource("AudioStreamRandomizer_ceriq") stream = SubResource("AudioStreamRandomizer_ceriq")
max_distance = 2e+07 max_distance = 2e+07
playback_type = 2
script = ExtResource("40_w3jkj") script = ExtResource("40_w3jkj")
[node name="Watering SFX" type="AudioStreamPlayer2D" parent="Audio/SFX"] [node name="Watering SFX" type="AudioStreamPlayer2D" parent="Audio/SFX"]
stream = SubResource("AudioStreamRandomizer_ceriq") stream = SubResource("AudioStreamRandomizer_p4qqi")
max_distance = 2e+07 max_distance = 2e+07
playback_type = 2
script = ExtResource("40_w3jkj") script = ExtResource("40_w3jkj")
[node name="FillWater SFX2" type="AudioStreamPlayer2D" parent="Audio/SFX"] [node name="FillWater SFX2" type="AudioStreamPlayer2D" parent="Audio/SFX"]
stream = SubResource("AudioStreamRandomizer_ceriq") stream = SubResource("AudioStreamRandomizer_618my")
max_distance = 2e+07 max_distance = 2e+07
playback_type = 2
script = ExtResource("40_w3jkj") script = ExtResource("40_w3jkj")
[connection signal="FilledWateringCan" from="YSorted/Vesna" to="Audio/SFX/FillWater SFX2" method="PlayOneShot"] [connection signal="FilledWateringCan" from="YSorted/Vesna" to="Audio/SFX/FillWater SFX2" method="PlayOneShot"]
[connection signal="WateringField" from="YSorted/Vesna/FarmingControls" to="Audio/SFX/Watering SFX" method="PlayOneShot"] [connection signal="WateringField" from="YSorted/Vesna/FarmingControls" to="Audio/SFX/Watering SFX" method="PlayOneShot"]
[connection signal="InteractedTool" from="YSorted/Brünnen/InteractionArea" to="YSorted/Vesna" method="TryFillWateringCan"] [connection signal="InteractedTool" from="YSorted/Brünnen/InteractionArea" to="YSorted/Vesna" method="TryFillWateringCan"]
[connection signal="SuccessfulPickUp" from="YSorted/CanGenericPickup" to="YSorted/Vesna" method="HandlePickUp"]
[connection signal="SuccessfulPickUp" from="YSorted/RakeGenericPickup" to="YSorted/Vesna" method="HandlePickUp"]
[connection signal="Interacted" from="YSorted/Farm visuals/Static/EnterHouseInteraction" to="." method="LoadScene"] [connection signal="Interacted" from="YSorted/Farm visuals/Static/EnterHouseInteraction" to="." method="LoadScene"]
[connection signal="FieldCreated" from="YSorted/Farm visuals/FieldParent" to="Audio/SFX/Farming SFX" method="PlayOneShot"] [connection signal="FieldCreated" from="YSorted/Farm visuals/FieldParent" to="Audio/SFX/Farming SFX" method="PlayOneShot"]
[connection signal="mouse_entered" from="YSorted/Farm visuals/FieldParent/Area2D" to="YSorted/Farm visuals/FieldParent" method="MouseEnteredAllowedArea"] [connection signal="input_event" from="YSorted/Farm visuals/FieldParent/Area2D" to="YSorted/Vesna/FarmingControls" method="InputEventPressedOn"]
[connection signal="mouse_exited" from="YSorted/Farm visuals/FieldParent/Area2D" to="YSorted/Farm visuals/FieldParent" method="MouseExitedAllowedArea"] [connection signal="finished" from="Audio/Background Music Ramp up" to="Audio/Background Music loop" method="PlayFromOffset"]
[editable path="YSorted/Vesna"] [editable path="YSorted/Vesna"]
[editable path="YSorted/Brünnen/InteractionArea"] [editable path="YSorted/Brünnen/InteractionArea"]

@ -19,13 +19,24 @@ grow_vertical = 2
texture = ExtResource("1_qerdf") texture = ExtResource("1_qerdf")
expand_mode = 2 expand_mode = 2
stretch_mode = 6 stretch_mode = 6
metadata/_edit_use_anchors_ = true
[node name="Start" type="Button" parent="CanvasLayer/TextureRect"] [node name="Start" type="Button" parent="CanvasLayer/TextureRect"]
offset_left = 571.0 custom_minimum_size = Vector2(100, 30)
offset_top = 559.0 layout_mode = 1
offset_right = 617.0 anchors_preset = 7
offset_bottom = 590.0 anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -76.0
offset_top = -98.0
offset_right = 24.0
offset_bottom = -67.0
grow_horizontal = 2
grow_vertical = 0
scale = Vector2(2, 2) scale = Vector2(2, 2)
text = "Start" text = "Start"
icon_alignment = 1
[connection signal="pressed" from="CanvasLayer/TextureRect/Start" to="." method="LoadScene"] [connection signal="pressed" from="CanvasLayer/TextureRect/Start" to="." method="LoadScene"]

@ -20,14 +20,14 @@
[sub_resource type="RectangleShape2D" id="RectangleShape2D_a2ood"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_a2ood"]
resource_local_to_scene = true resource_local_to_scene = true
size = Vector2(7680, 1336) size = Vector2(3836, 1086)
[sub_resource type="Animation" id="Animation_j5d18"] [sub_resource type="Animation" id="Animation_j5d18"]
length = 0.001 length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("Room assets/hand:scale") tracks/0/path = NodePath("BackWall/Room assets/hand:scale")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
@ -51,7 +51,7 @@ tracks/1/keys = {
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = false tracks/2/enabled = false
tracks/2/path = NodePath("Room assets/eyes:visible") tracks/2/path = NodePath("BackWall/Room assets/eyes:visible")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
@ -67,7 +67,7 @@ length = 4.0
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("Room assets/hand:scale") tracks/0/path = NodePath("BackWall/Room assets/hand:scale")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
@ -91,7 +91,7 @@ tracks/1/keys = {
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("Room assets/eyes:visible") tracks/2/path = NodePath("BackWall/Room assets/eyes:visible")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
@ -115,16 +115,78 @@ radius = 300.0
y_sort_enabled = true y_sort_enabled = true
script = ExtResource("1_aivb2") script = ExtResource("1_aivb2")
[node name="Foreground" type="Node" parent="."]
[node name="Table" type="Sprite2D" parent="Foreground"]
y_sort_enabled = true
position = Vector2(-1888, 1112)
texture = ExtResource("3_je1cl")
offset = Vector2(0, -200)
region_enabled = true
region_rect = Rect2(1012, 1743, 1470, 417)
[node name="Chair" type="Sprite2D" parent="Foreground"]
y_sort_enabled = true
position = Vector2(-3032, 2096)
texture = ExtResource("4_hjjhl")
offset = Vector2(216, -1064)
region_enabled = true
region_rect = Rect2(1534, 1976, 379, 184)
[node name="Chair2" type="Sprite2D" parent="Foreground"]
y_sort_enabled = true
position = Vector2(-1064, 2064)
texture = ExtResource("4_hjjhl")
offset = Vector2(184, -1056)
region_enabled = true
region_rect = Rect2(1534, 1976, 379, 184)
[node name="Samowar" type="Sprite2D" parent="Foreground"]
z_index = 1
y_sort_enabled = true
position = Vector2(-1904, 1192)
texture = ExtResource("13_j5d18")
offset = Vector2(0, -800)
region_enabled = true
region_rect = Rect2(2093, 49, 421, 630)
[node name="FrontCollider" type="StaticBody2D" parent="Foreground"]
position = Vector2(-4344, 3056)
scale = Vector2(2, 2)
[node name="CollisionShape2D" type="CollisionShape2D" parent="Foreground/FrontCollider"]
position = Vector2(950, -419)
shape = SubResource("RectangleShape2D_a2ood")
[node name="SideColliderLeft" type="StaticBody2D" parent="."]
position = Vector2(-4344, 3056)
scale = Vector2(2, 2)
[node name="CollisionShape2D" type="CollisionShape2D" parent="SideColliderLeft"]
position = Vector2(-2892, -1168)
shape = SubResource("RectangleShape2D_a2ood")
[node name="SideColliderRight" type="StaticBody2D" parent="."]
position = Vector2(10992, 2856)
scale = Vector2(2, 2)
[node name="CollisionShape2D" type="CollisionShape2D" parent="SideColliderRight"]
position = Vector2(-2892, -1168)
shape = SubResource("RectangleShape2D_a2ood")
[node name="BackWall" type="Node" parent="."] [node name="BackWall" type="Node" parent="."]
[node name="Room01Walls2" type="Sprite2D" parent="BackWall"] [node name="Room01Walls2" type="Sprite2D" parent="BackWall"]
z_index = -100 z_index = -100
position = Vector2(-1072, -264) position = Vector2(4992, -487)
scale = Vector2(2, 2)
texture = ExtResource("3_a2ood") texture = ExtResource("3_a2ood")
offset = Vector2(-2768, 264) offset = Vector2(-2768, 264)
[node name="wall 1" type="Sprite2D" parent="BackWall"] [node name="wall 1" type="Sprite2D" parent="BackWall"]
z_index = -100 z_index = -100
position = Vector2(-4368, 40)
scale = Vector2(2, 2)
texture = ExtResource("3_a2ood") texture = ExtResource("3_a2ood")
flip_h = true flip_h = true
region_rect = Rect2(111, 292, 3323, 2160) region_rect = Rect2(111, 292, 3323, 2160)
@ -132,129 +194,124 @@ region_rect = Rect2(111, 292, 3323, 2160)
[node name="StaticBody2D" type="StaticBody2D" parent="BackWall/wall 1"] [node name="StaticBody2D" type="StaticBody2D" parent="BackWall/wall 1"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="BackWall/wall 1/StaticBody2D"] [node name="CollisionShape2D" type="CollisionShape2D" parent="BackWall/wall 1/StaticBody2D"]
position = Vector2(-1912, -396) position = Vector2(950, -419)
shape = SubResource("RectangleShape2D_a2ood") shape = SubResource("RectangleShape2D_a2ood")
[node name="Room01DorrR" type="Sprite2D" parent="BackWall"] [node name="Room01DorrR" type="Sprite2D" parent="BackWall"]
z_index = -50 z_index = -50
position = Vector2(-744, 16) position = Vector2(936, -216)
texture = ExtResource("5_8o6or") texture = ExtResource("5_8o6or")
region_enabled = true
region_rect = Rect2(3161, 313, 679, 1050)
[node name="Room01DioorL" type="Sprite2D" parent="BackWall"] [node name="Room01DioorL" type="Sprite2D" parent="BackWall"]
z_index = -50 z_index = -50
position = Vector2(-3288, 8) position = Vector2(-3296, 48)
texture = ExtResource("8_wuntg") texture = ExtResource("8_wuntg")
region_enabled = true
region_rect = Rect2(0, 0, 3840, 2160)
[node name="Room01Pechka" type="Sprite2D" parent="BackWall"] [node name="Room01Pechka" type="Sprite2D" parent="BackWall"]
z_index = -80 z_index = -80
position = Vector2(-752, 0) position = Vector2(-224, -392)
texture = ExtResource("9_aivb2") texture = ExtResource("9_aivb2")
region_enabled = true
region_rect = Rect2(2236, 0, 724, 1392)
[node name="Room01Window2" type="Sprite2D" parent="BackWall"] [node name="Room01Window2" type="Sprite2D" parent="BackWall"]
z_index = -50 z_index = -50
position = Vector2(-2952, 16) position = Vector2(-3192, -344)
texture = ExtResource("6_j5d18") texture = ExtResource("6_j5d18")
region_enabled = true
region_rect = Rect2(1020, 338, 607, 757)
[node name="Room01Window3" type="Sprite2D" parent="BackWall"] [node name="Room01Window3" type="Sprite2D" parent="BackWall"]
z_index = -50 z_index = -50
position = Vector2(-944, -8) position = Vector2(-1792, -336)
texture = ExtResource("6_j5d18") texture = ExtResource("6_j5d18")
region_enabled = true
region_rect = Rect2(1020, 338, 607, 757)
[node name="Room01PechkaDoor" type="Sprite2D" parent="BackWall"] [node name="Room01PechkaDoor" type="Sprite2D" parent="BackWall"]
z_index = -50 z_index = -50
position = Vector2(-710, 0) position = Vector2(-248, -96)
texture = ExtResource("10_835kg") texture = ExtResource("10_835kg")
region_enabled = true
region_rect = Rect2(2360, 864, 356, 251)
[node name="Room01Chugun" type="Sprite2D" parent="BackWall"] [node name="Room01Chugun" type="Sprite2D" parent="BackWall"]
z_index = -40 z_index = -40
position = Vector2(-736, 8) position = Vector2(16, -560)
texture = ExtResource("11_atjbs") texture = ExtResource("11_atjbs")
region_enabled = true
region_rect = Rect2(2469, 459, 247, 131)
[node name="Room01Shelf" type="Sprite2D" parent="BackWall"] [node name="Room01Shelf" type="Sprite2D" parent="BackWall"]
z_index = -50 z_index = -50
position = Vector2(-832, 56) position = Vector2(-880, -416)
texture = ExtResource("8_8o6or") texture = ExtResource("8_8o6or")
region_enabled = true
region_rect = Rect2(1846, 471, 348, 490)
[node name="Player2d" parent="." instance=ExtResource("2_a2ood")] [node name="Bench" type="Sprite2D" parent="BackWall"]
position = Vector2(-1464, 136) z_index = -10
[node name="CharacterBody2D" parent="Player2d" index="0"]
_speed = 500.0
[node name="Animated Sprites" parent="Player2d/CharacterBody2D/visuals" index="0"]
z_index = 50
[node name="Room01Table" type="Sprite2D" parent="."]
y_sort_enabled = true y_sort_enabled = true
position = Vector2(-2056, 888) position = Vector2(-3240, 224)
texture = ExtResource("3_je1cl")
offset = Vector2(192, -848)
[node name="Room01Chair" type="Sprite2D" parent="."]
position = Vector2(-2792, 1096)
texture = ExtResource("4_hjjhl")
offset = Vector2(216, -1064)
[node name="Room01Chair2" type="Sprite2D" parent="."]
position = Vector2(-1304, 1080)
texture = ExtResource("4_hjjhl")
offset = Vector2(184, -1056)
[node name="Room01Bench" type="Sprite2D" parent="."]
position = Vector2(-3280, 24)
texture = ExtResource("7_ciwvv") texture = ExtResource("7_ciwvv")
flip_h = true flip_h = true
region_enabled = true
region_rect = Rect2(1156, 1185, 940, 189)
[node name="Room01Bench2" type="Sprite2D" parent="."] [node name="Bench2" type="Sprite2D" parent="BackWall"]
position = Vector2(-784, 40) z_index = -10
position = Vector2(-1824, 224)
texture = ExtResource("7_ciwvv") texture = ExtResource("7_ciwvv")
[node name="Room assets" type="Node" parent="."]
[node name="Samowar" type="Sprite2D" parent="Room assets"]
y_sort_enabled = true
position = Vector2(-2000, 696)
texture = ExtResource("13_j5d18")
offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2085, 40, 446, 654) region_rect = Rect2(1156, 1185, 940, 189)
[node name="wood" type="Sprite2D" parent="Room assets"] [node name="Room assets" type="Node" parent="BackWall"]
[node name="wood" type="Sprite2D" parent="BackWall/Room assets"]
z_index = -10
y_sort_enabled = true y_sort_enabled = true
position = Vector2(-176, 560) position = Vector2(-177, 554.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
offset = Vector2(0, -296) offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2244, 763, 274, 91) region_rect = Rect2(2244, 763, 274, 91)
[node name="Domovoi" type="Sprite2D" parent="Room assets"] [node name="Domovoi" type="Sprite2D" parent="BackWall/Room assets"]
z_index = -10
y_sort_enabled = true y_sort_enabled = true
position = Vector2(336, 480) position = Vector2(335, 474.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
offset = Vector2(0, -296) offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(3157, 688, 131, 221) region_rect = Rect2(3157, 688, 118.519, 221)
[node name="vase" type="Sprite2D" parent="Room assets"] [node name="vase" type="Sprite2D" parent="BackWall/Room assets"]
z_index = -10
y_sort_enabled = true y_sort_enabled = true
position = Vector2(-712, 72) position = Vector2(-857, -37.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
offset = Vector2(0, -296) offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2748, 432, 174, 191) region_rect = Rect2(2748, 432, 174, 191)
[node name="candle" type="Sprite2D" parent="Room assets"] [node name="candle" type="Sprite2D" parent="BackWall/Room assets"]
z_index = -10
y_sort_enabled = true y_sort_enabled = true
position = Vector2(-272, -56) position = Vector2(-425, -77.5)
rotation = -0.0663225 rotation = -0.0663225
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
offset = Vector2(0, -296) offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2624, 435, 49, 76) region_rect = Rect2(2624, 435, 49, 76)
[node name="hand" type="Sprite2D" parent="Room assets"] [node name="hand" type="Sprite2D" parent="BackWall/Room assets"]
z_index = -10
y_sort_enabled = true y_sort_enabled = true
position = Vector2(48.5969, 11.68) position = Vector2(47.5969, 6.18)
rotation = -0.0663225 rotation = -0.0663225
scale = Vector2(1e-05, 1e-05) scale = Vector2(1e-05, 1e-05)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
@ -262,23 +319,24 @@ offset = Vector2(43.3898, 128.128)
region_enabled = true region_enabled = true
region_rect = Rect2(3362, 139, 101, 269) region_rect = Rect2(3362, 139, 101, 269)
[node name="SpiritAnimation" type="AnimationPlayer" parent="Room assets/hand"] [node name="SpiritAnimation" type="AnimationPlayer" parent="BackWall/Room assets/hand"]
active = false active = false
root_node = NodePath("../../..") root_node = NodePath("../../../..")
libraries = { libraries = {
&"": SubResource("AnimationLibrary_ciwvv") &"": SubResource("AnimationLibrary_ciwvv")
} }
playback_auto_capture = false playback_auto_capture = false
[node name="herbsline" type="Sprite2D" parent="Room assets"] [node name="herbsline" type="Sprite2D" parent="BackWall/Room assets"]
z_index = -10
y_sort_enabled = true y_sort_enabled = true
position = Vector2(440, -168) position = Vector2(287, -157.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
offset = Vector2(0, -296) offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2964, 137, 321, 213) region_rect = Rect2(2964, 137, 321, 213)
[node name="herb 1" type="Sprite2D" parent="Room assets/herbsline"] [node name="herb 1" type="Sprite2D" parent="BackWall/Room assets/herbsline"]
y_sort_enabled = true y_sort_enabled = true
position = Vector2(-72, 136) position = Vector2(-72, 136)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
@ -286,7 +344,7 @@ offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2600, 165, 127, 199) region_rect = Rect2(2600, 165, 127, 199)
[node name="herb 2" type="Sprite2D" parent="Room assets/herbsline"] [node name="herb 2" type="Sprite2D" parent="BackWall/Room assets/herbsline"]
y_sort_enabled = true y_sort_enabled = true
position = Vector2(64, 80) position = Vector2(64, 80)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
@ -294,31 +352,31 @@ offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2761, 161, 135, 199) region_rect = Rect2(2761, 161, 135, 199)
[node name="eyes" type="Sprite2D" parent="Room assets"] [node name="eyes" type="Sprite2D" parent="BackWall/Room assets"]
visible = false visible = false
z_index = -10
position = Vector2(32, -72) position = Vector2(32, -72)
scale = Vector2(0.4, 0.4) scale = Vector2(0.4, 0.4)
texture = ExtResource("14_j5d18") texture = ExtResource("14_j5d18")
region_enabled = true region_enabled = true
region_rect = Rect2(2647, 15, 286, 183) region_rect = Rect2(2647, 15, 286, 183)
[node name="offerings" type="Node2D" parent="Room assets"] [node name="offerings" type="Node2D" parent="BackWall/Room assets"]
visible = false
[node name="apple" type="Sprite2D" parent="Room assets/offerings"] [node name="apple" type="Sprite2D" parent="BackWall/Room assets/offerings"]
position = Vector2(229.5, 331.5) position = Vector2(229.5, 331.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
region_enabled = true region_enabled = true
region_rect = Rect2(2822, 764, 93, 87) region_rect = Rect2(2822, 764, 93, 87)
[node name="bread" type="Sprite2D" parent="Room assets/offerings"] [node name="bread" type="Sprite2D" parent="BackWall/Room assets/offerings"]
z_index = -1 z_index = -1
position = Vector2(157.5, 339.5) position = Vector2(157.5, 339.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
region_enabled = true region_enabled = true
region_rect = Rect2(2951, 783, 155, 78) region_rect = Rect2(2951, 783, 155, 78)
[node name="plate" type="Sprite2D" parent="Room assets/offerings"] [node name="plate" type="Sprite2D" parent="BackWall/Room assets/offerings"]
z_index = -20 z_index = -20
position = Vector2(189.5, 659.5) position = Vector2(189.5, 659.5)
texture = ExtResource("13_j5d18") texture = ExtResource("13_j5d18")
@ -326,21 +384,28 @@ offset = Vector2(0, -296)
region_enabled = true region_enabled = true
region_rect = Rect2(2576, 802, 219, 64) region_rect = Rect2(2576, 802, 219, 64)
[node name="Vesna" parent="." instance=ExtResource("2_a2ood")]
position = Vector2(-1464, 136)
[node name="Yeli" parent="." instance=ExtResource("15_ciwvv")] [node name="Yeli" parent="." instance=ExtResource("15_ciwvv")]
position = Vector2(-2912, 432) position = Vector2(-2912, 432)
[node name="CollisionShape3D" parent="Yeli/InteractionArea/Area2D" index="0"] [node name="CollisionShape3D" parent="Yeli/InteractionArea/Area2D" index="0"]
position = Vector2(-205.348, 131.907)
shape = SubResource("CircleShape2D_wuntg") shape = SubResource("CircleShape2D_wuntg")
[node name="TalkingControl" parent="Yeli" index="1"] [node name="TalkingControl" parent="Yeli" index="1"]
_timelinesToPlay = PackedStringArray("yeli_intro_05") _timelinesToPlay = PackedStringArray("yeli_intro_05")
[node name="AnimatedSprite" parent="Yeli/TalkingControl" index="0"]
position = Vector2(-576, 368)
[node name="dialogic_toggle" type="Node2D" parent="Yeli"] [node name="dialogic_toggle" type="Node2D" parent="Yeli"]
script = ExtResource("17_835kg") script = ExtResource("17_835kg")
metadata/_custom_type_script = "uid://cvkw4qd2hxksi" metadata/_custom_type_script = "uid://cvkw4qd2hxksi"
[connection signal="timelineEnded" from="Yeli/dialogic_toggle" to="." method="Quit"] [connection signal="timelineEnded" from="Yeli/dialogic_toggle" to="." method="Quit"]
[editable path="Player2d"] [editable path="Vesna"]
[editable path="Yeli"] [editable path="Yeli"]
[editable path="Yeli/InteractionArea"] [editable path="Yeli/InteractionArea"]

@ -0,0 +1,15 @@
[gd_scene load_steps=6 format=3 uid="uid://dbpsqfedlku4f"]
[ext_resource type="PackedScene" uid="uid://cqcs80xsgygeb" path="res://prefabs/UI/Book/Book.tscn" id="1_bd7dq"]
[ext_resource type="Script" uid="uid://cg0oqug38c81n" path="res://scripts/CSharp/Common/Quest/QuestTestingScript.cs" id="2_sv6jn"]
[ext_resource type="Resource" uid="uid://0aruj4lm74n6" path="res://resources/quests/test_01.tres" id="3_nhtae"]
[ext_resource type="Resource" uid="uid://be1dmc6d2mxl5" path="res://resources/quests/test_02.tres" id="4_kr4yw"]
[ext_resource type="Resource" uid="uid://tmmnsg1bge2" path="res://resources/quests/test_03.tres" id="5_4cktu"]
[node name="BabushkaTestsBook" type="Node"]
[node name="Book" parent="." instance=ExtResource("1_bd7dq")]
[node name="QuestTesting" type="Node" parent="."]
script = ExtResource("2_sv6jn")
_questsToActivate = Array[Object]([ExtResource("3_nhtae"), ExtResource("4_kr4yw"), ExtResource("5_4cktu")])

@ -0,0 +1,193 @@
[gd_scene load_steps=6 format=3 uid="uid://c4ns2ixo8k2ih"]
[ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="1_opxcj"]
[ext_resource type="Script" uid="uid://cldtt4atgymm5" path="res://scripts/CSharp/Common/Quest/QuestTrigger.cs" id="3_sx4ix"]
[ext_resource type="Resource" uid="uid://0aruj4lm74n6" path="res://resources/quests/test_01.tres" id="4_qyyck"]
[ext_resource type="Resource" uid="uid://be1dmc6d2mxl5" path="res://resources/quests/test_02.tres" id="5_sokiv"]
[ext_resource type="Resource" uid="uid://tmmnsg1bge2" path="res://resources/quests/test_03.tres" id="6_ajsa7"]
[node name="BabushkaTestsQuests" type="Node2D"]
[node name="CanvasLayer" parent="." instance=ExtResource("1_opxcj")]
[node name="CanvasLayer2" type="CanvasLayer" parent="."]
layer = 128
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer2"]
offset_left = 71.0
offset_top = 53.0
offset_right = 571.0
offset_bottom = 353.0
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer2/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
alignment = 1
[node name="Label" type="Label" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "Quest 1"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Active" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Active"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer/Active"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("4_qyyck")
toStatus = 1
makeCurrent = true
[node name="Done" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Done"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer/Done"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("4_qyyck")
toStatus = 2
[node name="Cancle" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Cancle"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer/Cancle"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("4_qyyck")
toStatus = 3
[node name="Hide" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Hide
"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer/Hide"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("4_qyyck")
[node name="HBoxContainer2" type="HBoxContainer" parent="CanvasLayer2/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
alignment = 1
[node name="Label" type="Label" parent="CanvasLayer2/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "Quest 2"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Active" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
text = "Active"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer2/Active"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("5_sokiv")
toStatus = 1
[node name="Done" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
text = "Done"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer2/Done"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("5_sokiv")
toStatus = 2
[node name="Cancle" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
text = "Cancle"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer2/Cancle"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("5_sokiv")
toStatus = 3
[node name="Hide" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
text = "Hide
"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer2/Hide"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("5_sokiv")
[node name="HBoxContainer3" type="HBoxContainer" parent="CanvasLayer2/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
alignment = 1
[node name="Label" type="Label" parent="CanvasLayer2/VBoxContainer/HBoxContainer3"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "Quest 3"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Active" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer3"]
layout_mode = 2
size_flags_horizontal = 3
text = "Active"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer3/Active"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("6_ajsa7")
toStatus = 1
[node name="Done" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer3"]
layout_mode = 2
size_flags_horizontal = 3
text = "Done"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer3/Done"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("6_ajsa7")
toStatus = 2
[node name="Cancle" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer3"]
layout_mode = 2
size_flags_horizontal = 3
text = "Cancle"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer3/Cancle"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("6_ajsa7")
toStatus = 3
[node name="Hide" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer3"]
layout_mode = 2
size_flags_horizontal = 3
text = "Hide
"
[node name="QuestSetter" type="Node" parent="CanvasLayer2/VBoxContainer/HBoxContainer3/Hide"]
script = ExtResource("3_sx4ix")
questResource = ExtResource("6_ajsa7")
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer/Active" to="CanvasLayer2/VBoxContainer/HBoxContainer/Active/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer/Done" to="CanvasLayer2/VBoxContainer/HBoxContainer/Done/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer/Cancle" to="CanvasLayer2/VBoxContainer/HBoxContainer/Cancle/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer/Hide" to="CanvasLayer2/VBoxContainer/HBoxContainer/Hide/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer2/Active" to="CanvasLayer2/VBoxContainer/HBoxContainer2/Active/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer2/Done" to="CanvasLayer2/VBoxContainer/HBoxContainer2/Done/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer2/Cancle" to="CanvasLayer2/VBoxContainer/HBoxContainer2/Cancle/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer2/Hide" to="CanvasLayer2/VBoxContainer/HBoxContainer2/Hide/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer3/Active" to="CanvasLayer2/VBoxContainer/HBoxContainer3/Active/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer3/Done" to="CanvasLayer2/VBoxContainer/HBoxContainer3/Done/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer3/Cancle" to="CanvasLayer2/VBoxContainer/HBoxContainer3/Cancle/QuestSetter" method="Trigger"]
[connection signal="pressed" from="CanvasLayer2/VBoxContainer/HBoxContainer3/Hide" to="CanvasLayer2/VBoxContainer/HBoxContainer3/Hide/QuestSetter" method="Trigger"]

@ -0,0 +1,15 @@
using Godot;
using System;
/// <summary>
/// Takes the current contents of a AudioStreamPlayer and offers visualization and control.
/// </summary>
public partial class AudioDebugger : AudioStreamPlayer2D
{
[Export] private float _offset_in_seconds_to_play = 0;
public void PlayFromOffset()
{
Play(_offset_in_seconds_to_play);
}
}

@ -10,6 +10,7 @@ public partial class Player2D : CharacterBody2D
[Export] private float _speed = 100f; [Export] private float _speed = 100f;
[Export] private AnimatedSprite2D _sprite; [Export] private AnimatedSprite2D _sprite;
[Export] private SceneTree.GroupCallFlags _fieldFlags; [Export] private SceneTree.GroupCallFlags _fieldFlags;
[Export] private CpuParticles2D _wateringParticles;
// -1 means no tool. // -1 means no tool.
private int _toolID = -1; private int _toolID = -1;
@ -43,45 +44,55 @@ public partial class Player2D : CharacterBody2D
if (!_canHandleInput) if (!_canHandleInput)
return; return;
if (Input.IsActionPressed("move_right")) bool right = Input.IsActionPressed("move_right");
bool left = Input.IsActionPressed("move_left");
bool up = Input.IsActionPressed("move_up");
bool down = Input.IsActionPressed("move_down");
bool walkingAnimationPicked = false;
if (up)
{ {
Velocity = new Vector2(_speed, 0); Velocity = new Vector2(0, -_speed);
MoveAndSlide(); MoveAndSlide();
_sprite.FlipH = false; _sprite.Animation = "back walking" + _toolString;
_sprite.Animation = "side walking" + _toolString;
anyActionPressed = true; anyActionPressed = true;
_lastDirection = Vector2.Right; _lastDirection = Vector2.Up;
walkingAnimationPicked = true;
} }
if (Input.IsActionPressed("move_left")) if (down && !walkingAnimationPicked)
{ {
Velocity = new Vector2(-_speed, 0); Velocity = new Vector2(0, _speed);
MoveAndSlide(); MoveAndSlide();
_sprite.FlipH = true; _sprite.Animation = "front walking" + _toolString;
_sprite.Animation = "side walking" + _toolString;
anyActionPressed = true; anyActionPressed = true;
_lastDirection = Vector2.Left; _lastDirection = Vector2.Down;
walkingAnimationPicked = true;
} }
if (Input.IsActionPressed("move_up")) if (right && !walkingAnimationPicked)
{ {
Velocity = new Vector2(0, -_speed); Velocity = new Vector2(_speed, 0);
MoveAndSlide(); MoveAndSlide();
_sprite.Animation = "back walking" + _toolString; _sprite.FlipH = false;
_sprite.Animation = "side walking" + _toolString;
anyActionPressed = true; anyActionPressed = true;
_lastDirection = Vector2.Up; _lastDirection = Vector2.Right;
walkingAnimationPicked = true;
} }
if (Input.IsActionPressed("move_down")) if (left && !walkingAnimationPicked)
{ {
Velocity = new Vector2(0, _speed); Velocity = new Vector2(-_speed, 0);
MoveAndSlide(); MoveAndSlide();
_sprite.Animation = "front walking" + _toolString; _sprite.FlipH = true;
_sprite.Animation = "side walking" + _toolString;
anyActionPressed = true; anyActionPressed = true;
_lastDirection = Vector2.Down; _lastDirection = Vector2.Left;
walkingAnimationPicked = true;
} }
if (Input.IsActionPressed("interact2")) if (Input.IsActionPressed("interact2"))
{ {
_sprite.Animation = "back interact"; _sprite.Animation = "back interact";
@ -89,12 +100,14 @@ public partial class Player2D : CharacterBody2D
_lastDirection = Vector2.Up; _lastDirection = Vector2.Up;
} }
/*
if (Input.IsActionPressed("item")) if (Input.IsActionPressed("item"))
{ {
_sprite.Animation = "diagonal item"; _sprite.Animation = "diagonal item";
anyActionPressed = true; anyActionPressed = true;
_lastDirection = Vector2.Right; _lastDirection = Vector2.Right;
} }
*/
if (anyActionPressed) if (anyActionPressed)
{ {
@ -144,6 +157,7 @@ public partial class Player2D : CharacterBody2D
_sprite.Animation = "diagonal wateringcan"; _sprite.Animation = "diagonal wateringcan";
_sprite.Play(); _sprite.Play();
_canHandleInput = false; _canHandleInput = false;
_wateringParticles.Emitting = true;
Task.Run(DelayedInputHandlerReset); Task.Run(DelayedInputHandlerReset);
} }
} }
@ -151,6 +165,7 @@ public partial class Player2D : CharacterBody2D
private async Task DelayedInputHandlerReset() private async Task DelayedInputHandlerReset()
{ {
await Task.Delay(1000); await Task.Delay(1000);
_wateringParticles.Emitting = false;
_canHandleInput = true; _canHandleInput = true;
} }

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save