diff --git a/Assets/Aseprite Files/Game Icon.aseprite b/Assets/Aseprite Files/Game Icon.aseprite new file mode 100644 index 0000000..79200aa Binary files /dev/null and b/Assets/Aseprite Files/Game Icon.aseprite differ diff --git a/Debug/Unit Testing/Scripts/base_test_runner.gd b/Debug/Unit Testing/Scripts/base_test_runner.gd new file mode 100644 index 0000000..2d1b874 --- /dev/null +++ b/Debug/Unit Testing/Scripts/base_test_runner.gd @@ -0,0 +1,28 @@ +extends Node +class_name BaseTestRunner + + +func _ready() -> void: + var methods := self.get_method_list() + for method in methods: + var method_name: String = method["name"] + if method_name.left(5).to_lower() != "test_": + continue + + var return_dict: Dictionary = method["return"] + var return_type: int = return_dict["type"] + + if return_type != 1: + print_rich("[color=yellow]Skipping Unit Test Method '%s'. Reason: Return type is not bool[/color]" % method_name) + continue + + var args: Array = method["args"] + if not args.is_empty(): + print_rich("[color=yellow]Skipping Unit Test Method '%s', Reason: Method requires arguments.[/color]" % method_name) + continue + + var result: bool = call(method_name) + if result: + print_rich("[color=green]%s: Success![/color]" % method_name) + else: + print_rich("[color=red]%s: Failure...[/color]" % method_name) diff --git a/Debug/Unit Testing/Scripts/base_test_runner.gd.uid b/Debug/Unit Testing/Scripts/base_test_runner.gd.uid new file mode 100644 index 0000000..948c923 --- /dev/null +++ b/Debug/Unit Testing/Scripts/base_test_runner.gd.uid @@ -0,0 +1 @@ +uid://bsewsmjxlup47 diff --git a/Debug/Unit Testing/Scripts/base_test_runner.tscn b/Debug/Unit Testing/Scripts/base_test_runner.tscn new file mode 100644 index 0000000..4372386 --- /dev/null +++ b/Debug/Unit Testing/Scripts/base_test_runner.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://rl2o7alqg7w4"] + +[node name="BaseTestRunner" type="Node" unique_id=1916529975] diff --git a/Debug/Unit Testing/Scripts/json_parsing_tests.gd b/Debug/Unit Testing/Scripts/json_parsing_tests.gd new file mode 100644 index 0000000..3c44ae4 --- /dev/null +++ b/Debug/Unit Testing/Scripts/json_parsing_tests.gd @@ -0,0 +1,14 @@ +extends BaseTestRunner + + +func Test_1() -> bool: + var json_string = "{\"Key\": false}" + var json = JSON.new() + var parse_result := json.parse(json_string) + if parse_result != OK: + return false + return true + + +func Test_2() -> String: + return '' diff --git a/Debug/Unit Testing/Scripts/json_parsing_tests.gd.uid b/Debug/Unit Testing/Scripts/json_parsing_tests.gd.uid new file mode 100644 index 0000000..d19ab00 --- /dev/null +++ b/Debug/Unit Testing/Scripts/json_parsing_tests.gd.uid @@ -0,0 +1 @@ +uid://xrexdmk7d1qx diff --git a/Debug/Unit Testing/json_parsing_tests.tscn b/Debug/Unit Testing/json_parsing_tests.tscn new file mode 100644 index 0000000..661f09e --- /dev/null +++ b/Debug/Unit Testing/json_parsing_tests.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://c23ct3b1nmih7"] + +[ext_resource type="Script" uid="uid://xrexdmk7d1qx" path="res://Debug/Unit Testing/Scripts/json_parsing_tests.gd" id="1_beu12"] + +[node name="JsonParsingTests" type="Node" unique_id=2014332517] +script = ExtResource("1_beu12") diff --git a/Debug/under_construction_block.tscn b/Debug/Utility Objects/under_construction_block.tscn similarity index 100% rename from Debug/under_construction_block.tscn rename to Debug/Utility Objects/under_construction_block.tscn diff --git a/Entities/Characters/Animals/Chicken/Scripts/npc_chicken.gd b/Entities/Characters/Animals/Chicken/Scripts/npc_chicken.gd index 0e7c199..0dde697 100644 --- a/Entities/Characters/Animals/Chicken/Scripts/npc_chicken.gd +++ b/Entities/Characters/Animals/Chicken/Scripts/npc_chicken.gd @@ -5,6 +5,10 @@ enum States { PECKING } +@export var minimum_pecking_schedule_gap := 8.0 +@export var maximum_pecking_schedule_gap := 25.0 +@export var should_log_pecking_schedule := false + @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D var current_state := States.IDLE @@ -23,11 +27,12 @@ func _process(delta: float) -> void: animated_sprite_2d.play("pecking") await animated_sprite_2d.animation_finished animated_sprite_2d.play("idle") - pecking_sched = randf_range(8.0, 25.0) + pecking_sched = randf_range(minimum_pecking_schedule_gap, maximum_pecking_schedule_gap) pecking_timer = 0 current_state = States.IDLE _print_sched() func _print_sched() -> void: - print("%s Pecking Schedule: %f" % [name, pecking_sched]) + if should_log_pecking_schedule: + print("%s Pecking Schedule: %f" % [name, pecking_sched]) diff --git a/Entities/Map Objects/Chests/Scripts/Bases/chest_base.gd b/Entities/Map Objects/Chests/Scripts/Bases/chest_base.gd index 215736d..3aee472 100644 --- a/Entities/Map Objects/Chests/Scripts/Bases/chest_base.gd +++ b/Entities/Map Objects/Chests/Scripts/Bases/chest_base.gd @@ -1,6 +1,7 @@ extends StaticBody2D class_name BaseChest +signal ChestOpened signal OpeningAnimationStarted @export var is_open := false @@ -8,7 +9,12 @@ signal OpeningAnimationStarted # Public Methods func Open() -> void: is_open = true + ChestOpened.emit() func OpenAlreadyOpened() -> void: pass + + +func SetOpenedFromLoad() -> void: + is_open = true diff --git a/Entities/Map Objects/Chests/Scripts/item_chest_01.gd b/Entities/Map Objects/Chests/Scripts/item_chest_01.gd index 48a8e6d..6200fb6 100644 --- a/Entities/Map Objects/Chests/Scripts/item_chest_01.gd +++ b/Entities/Map Objects/Chests/Scripts/item_chest_01.gd @@ -27,6 +27,11 @@ func OpenAlreadyOpened() -> void: already_opened_message_dialogue_trigger.Trigger() +func SetOpenedFromLoad() -> void: + super.SetOpenedFromLoad() + chest_01_sprite.play("opened") + + # Private Methods func _ready() -> void: if is_open: diff --git a/Entities/Map Objects/Gates/Spike Gate/Scripts/spike_gate.gd b/Entities/Map Objects/Gates/Spike Gate/Scripts/spike_gate.gd index ba9a7e8..7e9de6c 100644 --- a/Entities/Map Objects/Gates/Spike Gate/Scripts/spike_gate.gd +++ b/Entities/Map Objects/Gates/Spike Gate/Scripts/spike_gate.gd @@ -1,5 +1,7 @@ extends StaticBody2D +signal Opened + @onready var sprite: AnimatedSprite2D = $AnimatedSprite2D @onready var collision_shape_2d: CollisionShape2D = $CollisionShape2D @@ -15,3 +17,5 @@ func OpenGate() -> void: collision_shape_2d.set_deferred("disabled", true) sprite.play("open") + + Opened.emit() diff --git a/Entities/Map Objects/Gates/Spike Gate/spike_gate.tscn b/Entities/Map Objects/Gates/Spike Gate/spike_gate.tscn index a069542..6d5fc63 100644 --- a/Entities/Map Objects/Gates/Spike Gate/spike_gate.tscn +++ b/Entities/Map Objects/Gates/Spike Gate/spike_gate.tscn @@ -395,6 +395,6 @@ shape = SubResource("RectangleShape2D_5ttkm") y_sort_enabled = true position = Vector2(0, 15) sprite_frames = SubResource("SpriteFrames_pki7h") -animation = &"closed" +animation = &"open" autoplay = "closed" offset = Vector2(0, -15) diff --git a/Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd b/Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd index 64da718..61e446c 100644 --- a/Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd +++ b/Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd @@ -4,6 +4,9 @@ extends Node2D @export var spawn_markers: Node2D @export var destination_markers: Node2D +# Debug +@export var should_log_schedule := false + @export_range(0.0, 60.0) var minimum_schedule_gap := 20.0 @export_range(1.0, 61.0) var maximum_schedule_gap := 60.0 @@ -25,7 +28,8 @@ func _ready() -> void: # At spawn, we might want to spawn some leaves sooner... _spawn_schedule -= randf_range(0.0, _spawn_schedule) _spawn_schedule = max(0, _spawn_schedule) - print("%s - Leaf Spawn Schedule: %f" % [get_parent().name, _spawn_schedule]) + + _log_schedule() func _process(delta: float) -> void: @@ -33,6 +37,7 @@ func _process(delta: float) -> void: if _spawn_timer >= _spawn_schedule: _spawn_timer = 0.0 _set_random_spawn_schedule() + _log_schedule() var spawn := _get_random_spawn_point() var destination := _get_random_destination_point() @@ -76,3 +81,8 @@ func _get_random_destination_point() -> Vector2: var offset := Vector2(randf_range(-5.0, 5.0), randf_range(-5.0, 5.0)) return marker.position + offset + + +func _log_schedule() -> void: + if should_log_schedule: + print("%s - Leaf Spawn Schedule: %f" % [get_parent().name, _spawn_schedule]) diff --git a/Game Icon.png b/Game Icon.png new file mode 100644 index 0000000..e76724d Binary files /dev/null and b/Game Icon.png differ diff --git a/Game Icon.png.import b/Game Icon.png.import new file mode 100644 index 0000000..571b2b4 --- /dev/null +++ b/Game Icon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ckbsqf4p5xu44" +path="res://.godot/imported/Game Icon.png-1ecac6caff9b7691e845293f1a955d2a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Game Icon.png" +dest_files=["res://.godot/imported/Game Icon.png-1ecac6caff9b7691e845293f1a955d2a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Maps/Forest Dungeon Entrance/path_to_dungeon_01.tscn b/Maps/Forest Dungeon Entrance/path_to_dungeon_01.tscn index 9fee71a..7b14875 100644 --- a/Maps/Forest Dungeon Entrance/path_to_dungeon_01.tscn +++ b/Maps/Forest Dungeon Entrance/path_to_dungeon_01.tscn @@ -11,6 +11,8 @@ [ext_resource type="PackedScene" uid="uid://byp273amg5ji8" path="res://Entities/Map Objects/Chests/Item Chests/item_chest_01 (Wooden).tscn" id="5_bnsbe"] [ext_resource type="Texture2D" uid="uid://bf6llktwqhs8l" path="res://Assets/Sprites/Door Fade.png" id="5_jett5"] [ext_resource type="PackedScene" uid="uid://did853bh5xeic" path="res://Maps/Connectors/spawn_marker_connector.tscn" id="5_lphfo"] +[ext_resource type="PackedScene" uid="uid://w4mh31se58f4" path="res://Persistence/Connectors/chest_persistence_connector.tscn" id="6_l5trr"] +[ext_resource type="PackedScene" uid="uid://c5ymu08jotbfp" path="res://Persistence/Connectors/gate_persistence_connector.tscn" id="7_0w1de"] [ext_resource type="PackedScene" uid="uid://be6xfndyj4ckx" path="res://Entities/Map Objects/Trees/tree_02.tscn" id="7_ycf72"] [ext_resource type="PackedScene" uid="uid://cc3qat6un2323" path="res://Entities/Map Objects/Trees/tree_01.tscn" id="8_yab5j"] [ext_resource type="PackedScene" uid="uid://bcx1d8kvp7o0h" path="res://Entities/Map Objects/Trees/tree_03.tscn" id="9_lwurn"] @@ -25,7 +27,7 @@ [ext_resource type="PackedScene" uid="uid://coaf2ndwb6h61" path="res://Entities/Map Objects/Decorative/Signs/wooden_sign_02.tscn" id="19_jtncl"] [ext_resource type="PackedScene" uid="uid://cla2d3gii8qda" path="res://Entities/Map Objects/Loading Zone/interactive_loading_zone.tscn" id="20_c5vrl"] [ext_resource type="PackedScene" uid="uid://b60nr4wfvijpf" path="res://Entities/Map Objects/Dialogue/dialogue_trigger.tscn" id="20_x6da4"] -[ext_resource type="PackedScene" uid="uid://c7rjjlamkqhnw" path="res://Debug/under_construction_block.tscn" id="26_4lnhp"] +[ext_resource type="PackedScene" uid="uid://c7rjjlamkqhnw" path="res://Debug/Utility Objects/under_construction_block.tscn" id="26_4lnhp"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_lwurn"] size = Vector2(768, 494) @@ -63,25 +65,33 @@ size = Vector2(10, 7) [node name="Map 01" type="Node2D" unique_id=411453136] y_sort_enabled = true -[node name="Connectors" type="Node" parent="." unique_id=1365901208] +[node name="Map Connectors" type="Node" parent="." unique_id=1365901208] -[node name="Chest Interaction Connector" parent="Connectors" unique_id=625804018 node_paths=PackedStringArray("player") instance=ExtResource("1_jtncl")] +[node name="Chest Interaction Connector" parent="Map Connectors" unique_id=625804018 node_paths=PackedStringArray("player") instance=ExtResource("1_jtncl")] player = NodePath("../../Player") -[node name="Arrow Spawner" parent="Connectors" unique_id=627092886 node_paths=PackedStringArray("player", "arrow_parent") instance=ExtResource("2_jtncl")] +[node name="Arrow Spawner" parent="Map Connectors" unique_id=627092886 node_paths=PackedStringArray("player", "arrow_parent") instance=ExtResource("2_jtncl")] player = NodePath("../../Player") arrow_parent = NodePath("../../Objects/Projectiles") -[node name="Bench Interaction Connector" parent="Connectors" unique_id=541204437 node_paths=PackedStringArray("player") instance=ExtResource("3_x6da4")] +[node name="Bench Interaction Connector" parent="Map Connectors" unique_id=541204437 node_paths=PackedStringArray("player") instance=ExtResource("3_x6da4")] player = NodePath("../../Player") -[node name="Interactive Loading Zone Connector" parent="Connectors" unique_id=833475826 node_paths=PackedStringArray("player") instance=ExtResource("4_4lnhp")] +[node name="Interactive Loading Zone Connector" parent="Map Connectors" unique_id=833475826 node_paths=PackedStringArray("player") instance=ExtResource("4_4lnhp")] player = NodePath("../../Player") -[node name="Spawn Marker Connector" parent="Connectors" unique_id=807187299 node_paths=PackedStringArray("player", "markers") instance=ExtResource("5_lphfo")] +[node name="Spawn Marker Connector" parent="Map Connectors" unique_id=807187299 node_paths=PackedStringArray("player", "markers") instance=ExtResource("5_lphfo")] player = NodePath("../../Player") markers = NodePath("../../Spawn Markers") +[node name="Persistence Connectors" type="Node" parent="." unique_id=1245900932] + +[node name="Chest Persistence Connector" parent="Persistence Connectors" unique_id=281805027 instance=ExtResource("6_l5trr")] +chests = Array[NodePath]([NodePath("../../Objects/Chests/Item Chest 01 - 1"), NodePath("../../Objects/Chests/Item Chest 01 - 2"), NodePath("../../Objects/Chests/Item Chest 01 - 3")]) + +[node name="GatePersistenceConnector" parent="Persistence Connectors" unique_id=1082904286 instance=ExtResource("7_0w1de")] +gates = Array[NodePath]([NodePath("../../Objects/Spike Gate"), NodePath("../../Objects/Spike Gate2")]) + [node name="Camera Limit Connector" type="Area2D" parent="." unique_id=1290795384 node_paths=PackedStringArray("camera_to_limit")] collision_layer = 0 collision_mask = 0 @@ -340,7 +350,7 @@ destination_marker_name = "Entrance" position = Vector2(278, 474) [node name="Player" parent="." unique_id=1502234578 instance=ExtResource("4_4igim")] -position = Vector2(89, 450) +position = Vector2(656, 498) [node name="Camera2D" type="Camera2D" parent="Player" unique_id=1115720225] position = Vector2(0, 1) @@ -385,7 +395,7 @@ position = Vector2(760, 312) [node name="Under Construction Block12" parent="Debug" unique_id=1005752992 instance=ExtResource("26_4lnhp")] position = Vector2(760, 328) -[connection signal="SitOnBenchTriggered" from="Connectors/Bench Interaction Connector" to="Player" method="OnSitOnFurnitureTriggered"] +[connection signal="SitOnBenchTriggered" from="Map Connectors/Bench Interaction Connector" to="Player" method="OnSitOnFurnitureTriggered"] [connection signal="TargetHit" from="Objects/ArrowTarget" to="Objects/Spike Gate" method="OpenGate"] [connection signal="TargetHit" from="Objects/ArrowTarget" to="Objects/Spike Gate2" method="OpenGate"] [connection signal="PressurePlateTripped" from="Objects/PressurePlate" to="Objects/Spike Gate" method="OpenGate"] diff --git a/Persistence/Connectors/Scripts/chest_persistence_connector.gd b/Persistence/Connectors/Scripts/chest_persistence_connector.gd new file mode 100644 index 0000000..ff306d7 --- /dev/null +++ b/Persistence/Connectors/Scripts/chest_persistence_connector.gd @@ -0,0 +1,21 @@ +extends Node + +@export var chests: Array[NodePath] + +# Private Methods +func _ready() -> void: + for relative_node_path in chests: + var chest: BaseChest = get_node(relative_node_path) + var node_path := chest.get_path() + chest.ChestOpened.connect(func(): _on_chest_opened(chest)) + + if PersistenceManager.HasData(node_path): + var chest_opened: bool = PersistenceManager.GetData(node_path) + if chest_opened: + chest.call_deferred("SetOpenedFromLoad") + + +func _on_chest_opened(chest: BaseChest) -> void: + var node_path := chest.get_path() + PersistenceManager.UpdateData(node_path, true) + PersistenceManager.SaveToDisk() diff --git a/Persistence/Connectors/Scripts/chest_persistence_connector.gd.uid b/Persistence/Connectors/Scripts/chest_persistence_connector.gd.uid new file mode 100644 index 0000000..69a3c3c --- /dev/null +++ b/Persistence/Connectors/Scripts/chest_persistence_connector.gd.uid @@ -0,0 +1 @@ +uid://75g2fysjrqji diff --git a/Persistence/Connectors/Scripts/gate_persistence_connector.gd b/Persistence/Connectors/Scripts/gate_persistence_connector.gd new file mode 100644 index 0000000..3769aed --- /dev/null +++ b/Persistence/Connectors/Scripts/gate_persistence_connector.gd @@ -0,0 +1,40 @@ +extends Node + +@export var gates: Array[NodePath] + +# Private Methods +func _ready() -> void: + for node_path in gates: + _handle_spike_gate(node_path) + + +func _handle_spike_gate(node_path: NodePath) -> bool: + var node := get_node(node_path) + node_path = node.get_path() + if not node.name.begins_with("Spike Gate"): + return false + + # Connect Signal + node.connect("Opened", func(): _on_spike_gate_opened(node)) + + if not PersistenceManager.HasData(node_path): + return true + + var is_open: bool = PersistenceManager.GetData(node_path) + if not is_open: + return true + + var collision_shape: CollisionShape2D = node.get_node("CollisionShape2D") + var animated_sprite: AnimatedSprite2D = node.get_node("AnimatedSprite2D") + + node.set_deferred("is_open", true) + collision_shape.set_deferred("disabled", true) + animated_sprite.call_deferred("play", "open") + + return true + + +func _on_spike_gate_opened(node: Node) -> void: + var path := node.get_path() + PersistenceManager.UpdateData(path, true) + PersistenceManager.SaveToDisk() diff --git a/Persistence/Connectors/Scripts/gate_persistence_connector.gd.uid b/Persistence/Connectors/Scripts/gate_persistence_connector.gd.uid new file mode 100644 index 0000000..b048cfd --- /dev/null +++ b/Persistence/Connectors/Scripts/gate_persistence_connector.gd.uid @@ -0,0 +1 @@ +uid://brsiegtrne15y diff --git a/Persistence/Connectors/chest_persistence_connector.tscn b/Persistence/Connectors/chest_persistence_connector.tscn new file mode 100644 index 0000000..f52da8e --- /dev/null +++ b/Persistence/Connectors/chest_persistence_connector.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://w4mh31se58f4"] + +[ext_resource type="Script" uid="uid://75g2fysjrqji" path="res://Persistence/Connectors/Scripts/chest_persistence_connector.gd" id="1_hytou"] + +[node name="Chest Persistence Connector" type="Node" unique_id=281805027] +script = ExtResource("1_hytou") diff --git a/Persistence/Connectors/gate_persistence_connector.tscn b/Persistence/Connectors/gate_persistence_connector.tscn new file mode 100644 index 0000000..69aa900 --- /dev/null +++ b/Persistence/Connectors/gate_persistence_connector.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://c5ymu08jotbfp"] + +[ext_resource type="Script" uid="uid://brsiegtrne15y" path="res://Persistence/Connectors/Scripts/gate_persistence_connector.gd" id="1_0smsr"] + +[node name="GatePersistenceConnector" type="Node" unique_id=1082904286] +script = ExtResource("1_0smsr") diff --git a/Persistence/persistence_manager.gd b/Persistence/persistence_manager.gd new file mode 100644 index 0000000..5421910 --- /dev/null +++ b/Persistence/persistence_manager.gd @@ -0,0 +1,51 @@ +extends Node + +var _save_dictionary: Dictionary[NodePath, Variant] = {} + +# Public Methods +func UpdateData(node_path: NodePath, value: Variant) -> void: + _save_dictionary[node_path] = value + + +func GetData(node_path: NodePath) -> Variant: + if not _save_dictionary.has(node_path): + return null + return _save_dictionary[node_path] + + +func HasData(node_path: NodePath) -> bool: + return _save_dictionary.has(node_path) + + +func SaveToDisk() -> void: + var save_file := FileAccess.open("user://savegame.save", FileAccess.WRITE) + var json := JSON.stringify(_save_dictionary) + + save_file.store_line(json) + + +func LoadFromDisk() -> void: + if not FileAccess.file_exists("user://savegame.save"): + return + var save_file = FileAccess.open("user://savegame.save", FileAccess.READ) + print("Loading save file from path: %s" % save_file.get_path_absolute()) + var line := save_file.get_line() + var json = JSON.new() + var parse_result := json.parse(line) + if parse_result != OK: + print("Parsing result when loading file: [%s] in %s at line %d" % [json.get_error_message(), line, json.get_error_line()]) + return + + var data_dict: Dictionary = json.data + var node_dict: Dictionary[NodePath, Variant] + for key in data_dict: + var value: Variant = data_dict[key] + var node_path := NodePath(key) + node_dict[node_path] = value + + _save_dictionary = node_dict + + +# Private Methods +func _ready() -> void: + LoadFromDisk() diff --git a/Persistence/persistence_manager.gd.uid b/Persistence/persistence_manager.gd.uid new file mode 100644 index 0000000..0bad277 --- /dev/null +++ b/Persistence/persistence_manager.gd.uid @@ -0,0 +1 @@ +uid://dl2kg1qu0ymi7 diff --git a/project.godot b/project.godot index 9b4c1a9..b71a6a5 100644 --- a/project.godot +++ b/project.godot @@ -11,10 +11,10 @@ config_version=5 [application] config/name="Archipelago Game" -config/version="beta-1.3" +config/version="beta-1.4" run/main_scene="uid://dqgxg3i307lvr" config/features=PackedStringArray("4.6", "Forward Plus") -config/icon="res://icon.svg" +config/icon="uid://ckbsqf4p5xu44" [autoload] @@ -23,6 +23,7 @@ GameManager="*uid://cb4tuxriixfqs" GroupUtils="*uid://bk7o4drbfh24p" MapLoader="*uid://c4jogxtdi3m13" InputManager="*uid://dnbg1dpjcq6vk" +PersistenceManager="*uid://dl2kg1qu0ymi7" [dotnet] @@ -37,6 +38,7 @@ folder_colors={ "res://Global Managers/": "red", "res://Main/": "gray", "res://Maps/": "green", +"res://Persistence/": "blue", "res://Resources/": "orange", "res://Scripts/": "red", "res://UI/": "yellow"