diff --git a/data/quests/quest.gd b/data/quest.gd similarity index 93% rename from data/quests/quest.gd rename to data/quest.gd index 29e0d2b..26b9e40 100644 --- a/data/quests/quest.gd +++ b/data/quest.gd @@ -14,11 +14,13 @@ enum Status{ } enum Locations{ + VOID, NESTORS_WOODS } class Event: var enemy_types: Dictionary[String, PackedScene] = { + "feral pig": preload("res://templates/enemies/feral_pig.tscn"), "goo": preload("res://templates/enemies/goo.tscn") } enum Type{ @@ -299,11 +301,15 @@ func is_eligible(member : Adventurer) -> bool: func is_taken() -> bool: return status == Status.TAKEN -func location_name() -> String: +static func location_name(location : Locations) -> String: match(location): + Locations.VOID: return "The Endless Void" Locations.NESTORS_WOODS: return "Nestor's Woods" return "ERROR" +func get_location_name() -> String: + return Quest.location_name(location) + func difficulty_name() -> String: match(difficulty): 0: return "None" @@ -330,7 +336,16 @@ static func load_quest_list() -> void: dir.list_dir_end() static func generate(parameters : Dictionary) -> Quest: - return null + var candidates : Array[Quest] = [] + var l = list + for q in list: + if parameters.location != -1 and q.location != parameters.location: + continue + if q.difficulty < parameters.min_difficulty or q.difficulty > parameters.max_difficulty: + continue + candidates.append(q) + var choice : Quest = candidates.pick_random() + return choice.duplicate() func save() -> Dictionary: var d : Dictionary = {} diff --git a/data/quests/quest.gd.uid b/data/quest.gd.uid similarity index 100% rename from data/quests/quest.gd.uid rename to data/quest.gd.uid diff --git a/data/quests/ann-marie-nestor2.gd b/data/quests/ann-marie-nestor2.gd new file mode 100644 index 0000000..e4d998c --- /dev/null +++ b/data/quests/ann-marie-nestor2.gd @@ -0,0 +1,42 @@ +extends Quest + +func _init() -> void: + name = "[1] A Quest for Nestor's Woods that Ann Marie Promised Me" + super._init() + +func setup() -> void: + + var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5] + var num_events = 3 # event_weights.pick_random() + #The first event is guaranteed to be at the 50% mark. + var first : bool = true + var pranges : Array = [] + var margin : float = 0.1 + for i in range(num_events): + var evt : Quest.Event = Quest.Event.new() + evt.type = Quest.Event.Type.COMBAT + evt.enemies = ["goo"] + evt.time = 5 + if first: + #Make invisible + evt.progress_point = .5 + pranges.append([margin, evt.progress_point-margin]) + pranges.append([evt.progress_point+margin, 1 - margin]) + first = false + else: + evt.hidden = true + pranges.shuffle() + var range = pranges.pop_back() + evt.progress_point = randf_range(range[0], range[1]) + if evt.progress_point - range[0] >= 2 * margin: + pranges.append([range[0], evt.progress_point - margin]) + if range[1] - evt.progress_point >= 2 * margin: + pranges.append([evt.progress_point + margin, range[1]]) + events.append(evt) + events.sort_custom(func(a,b): return a.progress_point < b.progress_point) + desc = "One day Ann Marie will write me." + location = Quest.Locations.NESTORS_WOODS + rewards = {"exp":10, "gold":5} + guild_rewards = {"glory":10, "gold":5} + covenant_cost = 5 + diff --git a/data/quests/ann-marie-nestor2.gd.uid b/data/quests/ann-marie-nestor2.gd.uid new file mode 100644 index 0000000..f2cdb32 --- /dev/null +++ b/data/quests/ann-marie-nestor2.gd.uid @@ -0,0 +1 @@ +uid://w6t0lkkxmbl2 diff --git a/data/quests/feral_pigs.gd b/data/quests/feral_pigs.gd new file mode 100644 index 0000000..97b98b7 --- /dev/null +++ b/data/quests/feral_pigs.gd @@ -0,0 +1,49 @@ +extends Quest + +func _init() -> void: + name = "Fight of the Feral Pigs" + location = Quest.Locations.NESTORS_WOODS + difficulty = 1 + super._init() + +func setup() -> void: + + var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3] + var num_events = event_weights.pick_random() + #The first event is guaranteed to be at the 50% mark. + var first : bool = true + var pranges : Array = [] + var margin : float = 0.1 + for i in range(num_events): + var evt : Quest.Event = Quest.Event.new() + evt.type = Quest.Event.Type.COMBAT + evt.enemies = [] + for j in range(randi() %3 + 1): + evt.enemies.append("feral pig") + evt.time = 600 + evt.completed.connect(_on_combat_complete.bind(evt)) + if first: + #Make invisible + evt.progress_point = .5 + pranges.append([margin, evt.progress_point-margin]) + pranges.append([evt.progress_point+margin, 1 - margin]) + first = false + else: + evt.hidden = true + pranges.shuffle() + var range = pranges.pop_back() + evt.progress_point = randf_range(range[0], range[1]) + if evt.progress_point - range[0] >= 2 * margin: + pranges.append([range[0], evt.progress_point - margin]) + if range[1] - evt.progress_point >= 2 * margin: + pranges.append([evt.progress_point + margin, range[1]]) + events.append(evt) + events.sort_custom(func(a,b): return a.progress_point < b.progress_point) + desc = "Pigs got out of Old John’s farm again. Poor fella don’t know up from down– at his age, he can’t help it. Trouble is, pigs are causing trouble in them there woods and John sure ain’t takin’ care of it. Handle 'em for us, would you?" + location = Quest.Locations.NESTORS_WOODS + rewards = {"exp":10, "gold":5} + guild_rewards = {"glory":5, "gold":5} + covenant_cost = 5 + +func _on_combat_complete(event : Quest.Event) -> void: + rewards.gold += 2 * len(event.enemies) diff --git a/data/quests/feral_pigs.gd.uid b/data/quests/feral_pigs.gd.uid new file mode 100644 index 0000000..38f85b5 --- /dev/null +++ b/data/quests/feral_pigs.gd.uid @@ -0,0 +1 @@ +uid://nnl5qvb3csr0 diff --git a/data/quests/sticky_situation.gd b/data/quests/sticky_situation.gd index 2b50d23..68686ff 100644 --- a/data/quests/sticky_situation.gd +++ b/data/quests/sticky_situation.gd @@ -1,7 +1,11 @@ extends Quest -func setup() -> void: +func _init() -> void: name = "A Sticky Situation" + location = Quest.Locations.VOID + super._init() + +func setup() -> void: var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5] var num_events = 3 # event_weights.pick_random() #The first event is guaranteed to be at the 50% mark. diff --git a/dialogic/test-style.tres b/dialogic/test-style.tres index b744773..9749862 100644 --- a/dialogic/test-style.tres +++ b/dialogic/test-style.tres @@ -61,4 +61,4 @@ layer_info = { "16": SubResource("Resource_qx0md"), "17": SubResource("Resource_dv5be") } -metadata/_latest_layer = "13" +metadata/_latest_layer = "" diff --git a/dialogic/timelines/guild_entrance.dtl b/dialogic/timelines/guild_entrance.dtl index f18c1de..a036c23 100644 --- a/dialogic/timelines/guild_entrance.dtl +++ b/dialogic/timelines/guild_entrance.dtl @@ -2,6 +2,8 @@ And after that, all that was left was to... just open the guild gate, I guess? It took me a little while to find the thing in the middle of Nestor's Woods despite growing up there. I knew Guildhalls were hidden in another dimension, but I'd always pictured the Guild Gates would be more... magical looking? do Game.switch_scenes("first_guildhall") player: (Wow this is a mess... nobody's been here for a while. I should...) +- Stuff + Stuff stuff. - set up some lights. Hey, no touching! This isn't your home! Get out! - clean it out. diff --git a/external/animated-flower.png b/external/animated-flower.png new file mode 100644 index 0000000..268e68b Binary files /dev/null and b/external/animated-flower.png differ diff --git a/external/animated-flower.png.import b/external/animated-flower.png.import new file mode 100644 index 0000000..5b4271b --- /dev/null +++ b/external/animated-flower.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bl05n76gr2dae" +path="res://.godot/imported/animated-flower.png-97452da660b05abe194469bd94b63006.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/animated-flower.png" +dest_files=["res://.godot/imported/animated-flower.png-97452da660b05abe194469bd94b63006.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/external/boar.png b/external/boar.png new file mode 100644 index 0000000..38bdcdb Binary files /dev/null and b/external/boar.png differ diff --git a/external/boar.png.import b/external/boar.png.import new file mode 100644 index 0000000..c9f026d --- /dev/null +++ b/external/boar.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://op4td4qm3tx5" +path="res://.godot/imported/boar.png-0161cfc5f286f436bdc0954a6e815cd6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/boar.png" +dest_files=["res://.godot/imported/boar.png-0161cfc5f286f436bdc0954a6e815cd6.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/scenes/map.tscn b/scenes/map.tscn index 7eee998..e899ac4 100644 --- a/scenes/map.tscn +++ b/scenes/map.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=12 format=3 uid="uid://dlmodaf4nojin"] +[gd_scene load_steps=13 format=3 uid="uid://dlmodaf4nojin"] [ext_resource type="Texture2D" uid="uid://jhaiu4lbwswl" path="res://external/test-map.png" id="1_2klcf"] [ext_resource type="Texture2D" uid="uid://dy3o1xtqg03at" path="res://external/map-region-ninepatch.png" id="1_2lpho"] +[ext_resource type="Script" uid="uid://c2jtg58mno7fj" path="res://scripts/map.gd" id="1_nakos"] [ext_resource type="PackedScene" uid="uid://dqt38n43p58vx" path="res://templates/map_pin.tscn" id="2_paxxb"] [ext_resource type="Shader" uid="uid://m6q35taes6nx" path="res://shaders/map_point.gdshader" id="3_2lpho"] [ext_resource type="Script" uid="uid://bhahhdhn3a7kr" path="res://scripts/map_cloud.gd" id="5_nakos"] @@ -36,13 +37,14 @@ shader_parameter/fringe_color = SubResource("GradientTexture1D_0cso3") shader_parameter/fringe_threshold = 0.10000000000582077 shader_parameter/threshold = 0.361 -[node name="Control" type="Control"] +[node name="Map" type="Control"] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +script = ExtResource("1_nakos") [node name="NinePatchRect6" type="NinePatchRect" parent="."] modulate = Color(0.38170326, 0.38170323, 0.38170323, 1) @@ -147,6 +149,7 @@ offset_top = 641.0 offset_right = 717.0 offset_bottom = 711.0 label = "Spire" +id = null locked_brief = "" unlocked_brief = "" @@ -167,7 +170,7 @@ offset_bottom = 188.0 mouse_filter = 2 [node name="Label" parent="Spire Pin/CanvasGroup/Banner" index="0"] -text = "" +text = "Spire" [node name="Nestor\'s Woods Pin" parent="." instance=ExtResource("2_paxxb")] layout_mode = 0 @@ -177,6 +180,7 @@ offset_right = 214.0 offset_bottom = 452.0 primed = true label = "Nestor's Woods" +id = 1 locked_brief = "" unlocked_brief = "" @@ -188,6 +192,7 @@ offset_right = -64.0 offset_bottom = 150.0 primed = true label = "Iko Gorge" +id = null locked_brief = "Mysterious cliffs in the frozen north." unlocked_brief = "One of the few northernmost lands uninhabited by [giants]. The snowy creatures of the Iko region run rampant here. Some say they are protected by the [giant] goddess, [Nakari]." @@ -213,6 +218,7 @@ offset_top = 303.0 offset_right = 507.0 offset_bottom = 373.0 label = "" +id = null locked_brief = "" unlocked_brief = "" @@ -223,6 +229,7 @@ offset_top = 585.0 offset_right = 349.0 offset_bottom = 655.0 label = "Echo Valley Monastery" +id = null locked_brief = "" unlocked_brief = "" @@ -233,6 +240,7 @@ offset_top = 596.0 offset_right = -152.0 offset_bottom = 666.0 label = "Crystal Cave" +id = null locked_brief = "" unlocked_brief = "" @@ -507,6 +515,34 @@ patch_margin_right = 4 patch_margin_bottom = 4 script = ExtResource("5_nakos") +[node name="Cloud31" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 377.0 +offset_top = 967.0 +offset_right = 938.0 +offset_bottom = 1313.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud38" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 635.0 +offset_top = 834.0 +offset_right = 1196.0 +offset_bottom = 1180.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + [node name="Cloud21" type="NinePatchRect" parent="Clouds"] modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) layout_mode = 0 @@ -549,6 +585,34 @@ patch_margin_right = 4 patch_margin_bottom = 4 script = ExtResource("5_nakos") +[node name="Cloud39" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1286.0 +offset_top = 720.0 +offset_right = 1847.0 +offset_bottom = 1066.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud37" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 846.0 +offset_top = 447.0 +offset_right = 1407.0 +offset_bottom = 793.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + [node name="Cloud24" type="NinePatchRect" parent="Clouds"] modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) layout_mode = 0 @@ -563,6 +627,90 @@ patch_margin_right = 4 patch_margin_bottom = 4 script = ExtResource("5_nakos") +[node name="Cloud28" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1339.0 +offset_top = 879.0 +offset_right = 1900.0 +offset_bottom = 1225.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud32" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1589.0 +offset_top = 760.0 +offset_right = 2150.0 +offset_bottom = 1106.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud29" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1443.0 +offset_top = 596.0 +offset_right = 2004.0 +offset_bottom = 942.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud40" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1255.0 +offset_top = 216.0 +offset_right = 1816.0 +offset_bottom = 562.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud30" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1497.0 +offset_top = 308.0 +offset_right = 2058.0 +offset_bottom = 654.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud35" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1597.0 +offset_top = 144.0 +offset_right = 2158.0 +offset_bottom = 490.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + [node name="Cloud25" type="NinePatchRect" parent="Clouds"] modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) layout_mode = 0 @@ -577,6 +725,20 @@ patch_margin_right = 4 patch_margin_bottom = 4 script = ExtResource("5_nakos") +[node name="Cloud36" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1094.0 +offset_top = -86.0 +offset_right = 1655.0 +offset_bottom = 260.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + [node name="Cloud26" type="NinePatchRect" parent="Clouds"] modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) layout_mode = 0 @@ -605,5 +767,33 @@ patch_margin_right = 4 patch_margin_bottom = 4 script = ExtResource("5_nakos") +[node name="Cloud33" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1817.0 +offset_top = -157.0 +offset_right = 2378.0 +offset_bottom = 189.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + +[node name="Cloud34" type="NinePatchRect" parent="Clouds"] +modulate = Color(0.84532857, 0.74155146, 0.35449484, 1) +layout_mode = 0 +offset_left = 1501.0 +offset_top = -254.0 +offset_right = 2062.0 +offset_bottom = 92.0 +texture = ExtResource("1_2lpho") +patch_margin_left = 4 +patch_margin_top = 4 +patch_margin_right = 4 +patch_margin_bottom = 4 +script = ExtResource("5_nakos") + [editable path="Spire Pin"] [editable path="Iko Gorge Pin"] diff --git a/scripts/enemy.gd b/scripts/enemy.gd index 1bcdbd1..8bd5bb1 100644 --- a/scripts/enemy.gd +++ b/scripts/enemy.gd @@ -1,5 +1,21 @@ class_name Enemy extends QuestSprite +static var list : Dictionary[String, PackedScene] = {} + +static func load_enemy_list() -> void: + var folder_path = "res://templates/enemies" + var dir = DirAccess.open(folder_path) + if dir: + dir.list_dir_begin() + var filename = dir.get_next() + while filename != "": + if not dir.current_is_dir(): + var template : PackedScene = ResourceLoader.load(folder_path.path_join(filename)) + if template: + list[template.name] = template + filename = dir.get_next() + dir.list_dir_end() + func attack(target : QuestSprite) -> void: print("Attack by %s to %s" % [name, target.name]) diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd index 53d380e..7f24c17 100644 --- a/scripts/game_manager.gd +++ b/scripts/game_manager.gd @@ -1,5 +1,6 @@ extends Node + var player_data : Adventurer = null var player : Player = null var panel : GamePanel = null @@ -28,7 +29,10 @@ func _process(delta: float) -> void: confirm_end_shift() if Input.is_action_just_pressed("test"): test_save() - + + + + func add_quest_progress_bar(quest : Quest) -> void: panel.add_quest_progress_bar(quest) diff --git a/scripts/generate_quest_dialog.gd b/scripts/generate_quest_dialog.gd index 45d43d9..a9128ee 100644 --- a/scripts/generate_quest_dialog.gd +++ b/scripts/generate_quest_dialog.gd @@ -2,21 +2,23 @@ extends Control var quest : Quest - +var selected_location : Quest.Locations = -1 +var min_difficulty : int = 0 +var max_difficulty : int = 5 +@onready var map : QuestMap = $Map func generate_quest() -> void: - quest = Quest.new() - quest.name = "A Test Quest" - quest.location = Quest.Locations.NESTORS_WOODS - quest.difficulty = 1 - quest.length = 60 - quest.rewards = {"exp":100,"gold":1} + quest = Quest.generate({ + "location":selected_location, + "min_difficulty": min_difficulty, + "max_difficulty": max_difficulty, + }) func update_quest_window() -> void: if quest: %NameField.text = quest.name %DifficultyField.text = quest.difficulty_name() - %LocationField.text = quest.location_name() + %LocationField.text = quest.get_location_name() #for reward in quest.rewards.: func reset() -> void: @@ -45,3 +47,15 @@ func _on_post_back_button_pressed() -> void: func _on_generate_back_button_pressed() -> void: hide() reset() + + +func _on_location_options_pressed() -> void: + map.visible = true + + +func _on_map_location_selected(location: Quest.Locations) -> void: + + selected_location = location + %LocationOptions.text = Quest.location_name(location) + map.visible = false + #TODO: Make Location show up correctly diff --git a/scripts/map.gd b/scripts/map.gd new file mode 100644 index 0000000..2a8947d --- /dev/null +++ b/scripts/map.gd @@ -0,0 +1,12 @@ +class_name QuestMap extends Control + + +signal location_selected(location : Quest.Locations) + +func _ready() -> void: + for child in get_children(): + if child is MapPoint: + child.selected.connect(_on_location_pressed) + +func _on_location_pressed(location : Quest.Locations): + location_selected.emit(location) diff --git a/scripts/map.gd.uid b/scripts/map.gd.uid new file mode 100644 index 0000000..81fd086 --- /dev/null +++ b/scripts/map.gd.uid @@ -0,0 +1 @@ +uid://c2jtg58mno7fj diff --git a/scripts/map_point.gd b/scripts/map_point.gd index 1089d9a..74ca867 100644 --- a/scripts/map_point.gd +++ b/scripts/map_point.gd @@ -1,5 +1,5 @@ @tool -extends TextureButton +class_name MapPoint extends TextureButton @onready var panel : PanelContainer = %BriefPanel @@ -20,9 +20,12 @@ var thickness : float = 5 var max_circle_size : float = 200 @export var label : String = "" +@export var id : Quest.Locations @export var locked_brief : String = "" @export var unlocked_brief : String = "" +signal selected(location : Quest.Locations) + func _ready() -> void: #TODO: Add a nine-patch and resize the banner based on the label contents %Label.text = label @@ -61,6 +64,8 @@ func _on_mouse_entered() -> void: func _buttonn_pressed() -> void: if primed: unlock() + elif !locked: + selected.emit(id) func _on_mouse_exited() -> void: if panel_shown: diff --git a/scripts/quest_info_window.gd b/scripts/quest_info_window.gd index 4bf1636..ee52bd7 100644 --- a/scripts/quest_info_window.gd +++ b/scripts/quest_info_window.gd @@ -16,7 +16,7 @@ func setup(qst : Quest) -> void: func update() -> void: nameLabel.text = quest.name difficultyLabel.text = quest.difficulty_name() - locationLabel.text = quest.location_name() + locationLabel.text = quest.get_location_name() #TODO: Show the current status of the quest func close() -> void: diff --git a/templates/enemies/alley_slime.tscn b/templates/enemies/alley_slime.tscn new file mode 100644 index 0000000..dff86a4 --- /dev/null +++ b/templates/enemies/alley_slime.tscn @@ -0,0 +1,263 @@ +[gd_scene load_steps=19 format=3 uid="uid://bu5voitpttp7p"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_2ri6t"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_87jvf"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_8hyc4"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_vo4pp"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_u1ndo"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_87jvf"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_87jvf") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_vo4pp") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Alley Slime" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_2ri6t") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +visible = false +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_8hyc4") + +[node name="Sprite" type="Sprite2D" parent="."] +visible = false +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_u1ndo") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_87jvf") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Alley +Slime" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/amethyst_deceiver.tscn b/templates/enemies/amethyst_deceiver.tscn new file mode 100644 index 0000000..ec45b3b --- /dev/null +++ b/templates/enemies/amethyst_deceiver.tscn @@ -0,0 +1,263 @@ +[gd_scene load_steps=19 format=3 uid="uid://xveoe42s3cpy"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_30p0h"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_6opmj"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_mo0fh"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_bwjs8"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_4ymsi"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_6opmj"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_6opmj") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_bwjs8") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Amethyst Deceiver" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_30p0h") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +visible = false +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_mo0fh") + +[node name="Sprite" type="Sprite2D" parent="."] +visible = false +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_4ymsi") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_6opmj") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Amethyst +Deceiver" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/animated_flower.tscn b/templates/enemies/animated_flower.tscn new file mode 100644 index 0000000..07c76a5 --- /dev/null +++ b/templates/enemies/animated_flower.tscn @@ -0,0 +1,263 @@ +[gd_scene load_steps=19 format=3 uid="uid://cqusuc0ams6eh"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_up48k"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_rxxf6"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_2busj"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_gkykv"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_7b0ly"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_rxxf6"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_rxxf6") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_gkykv") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Animated Flower" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_up48k") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +visible = false +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_2busj") + +[node name="Sprite" type="Sprite2D" parent="."] +visible = false +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_7b0ly") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_rxxf6") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Animated +Flower" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/animated_staff.tscn b/templates/enemies/animated_staff.tscn new file mode 100644 index 0000000..07fb931 --- /dev/null +++ b/templates/enemies/animated_staff.tscn @@ -0,0 +1,261 @@ +[gd_scene load_steps=19 format=3 uid="uid://r3c0xgvul2jx"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_d7xna"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_1davx"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_4s5de"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_yio0x"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_502cf"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_1davx"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_1davx") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_yio0x") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Animated Staff" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_d7xna") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_4s5de") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_502cf") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_1davx") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Animated +Staff" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/bluecap.tscn b/templates/enemies/bluecap.tscn new file mode 100644 index 0000000..0b31646 --- /dev/null +++ b/templates/enemies/bluecap.tscn @@ -0,0 +1,260 @@ +[gd_scene load_steps=19 format=3 uid="uid://d166wy4tvfwe3"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_k0wc2"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_ionm2"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_dj700"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_ttqbh"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_nil6w"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_vqxas"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_ionm2") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_ttqbh") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Bluecap" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_k0wc2") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_dj700") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_nil6w") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_vqxas") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Bluecap" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/crystal_crab_swarm.tscn b/templates/enemies/crystal_crab_swarm.tscn new file mode 100644 index 0000000..1f86252 --- /dev/null +++ b/templates/enemies/crystal_crab_swarm.tscn @@ -0,0 +1,260 @@ +[gd_scene load_steps=19 format=3 uid="uid://c440svdousb6b"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_xmqw2"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_1yx6e"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_t6cpo"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_c2tce"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_1y115"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_1yx6e"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_1yx6e") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_c2tce") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Crystal Crab" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_xmqw2") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_t6cpo") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_1y115") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_1yx6e") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Crystal Crab" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/feral_pig.tscn b/templates/enemies/feral_pig.tscn new file mode 100644 index 0000000..221e063 --- /dev/null +++ b/templates/enemies/feral_pig.tscn @@ -0,0 +1,259 @@ +[gd_scene load_steps=19 format=3 uid="uid://br433u6yix3r7"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_narfe"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_d81qa"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_sqc2i"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_kf7hm"] +[ext_resource type="Texture2D" uid="uid://op4td4qm3tx5" path="res://external/boar.png" id="5_8p183"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_fmtu6"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_d81qa") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_kf7hm") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(), +"transitions": PackedFloat32Array(), +"update": 1, +"values": [] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(), +"transitions": PackedFloat32Array(), +"update": 1, +"values": [] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(), +"transitions": PackedFloat32Array(), +"update": 1, +"values": [] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Feral Pig" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_narfe") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(-3.9999998, -42) +scale = Vector2(1.7, 1) +texture = ExtResource("3_sqc2i") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_8p183") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +visible = false +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_fmtu6") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Feral Pig" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/giant_firefly.tscn b/templates/enemies/giant_firefly.tscn new file mode 100644 index 0000000..6eb9b1b --- /dev/null +++ b/templates/enemies/giant_firefly.tscn @@ -0,0 +1,260 @@ +[gd_scene load_steps=19 format=3 uid="uid://t8il7knb04d4"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_qtf88"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_xmucg"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_ukc8a"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_bi2hu"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_x4ac5"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_xmucg"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_xmucg") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_bi2hu") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Giant Firefly" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_qtf88") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_ukc8a") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_x4ac5") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_xmucg") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Giant Firefly" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/goo.tscn b/templates/enemies/goo.tscn index 959e7f6..fe12bfd 100644 --- a/templates/enemies/goo.tscn +++ b/templates/enemies/goo.tscn @@ -17,54 +17,6 @@ shader_parameter/flash = false shader_parameter/flash_strength = 0.4 shader_parameter/highlight = Color(1, 1, 1, 0) -[sub_resource type="Animation" id="Animation_fnqwt"] -resource_name = "idle" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [0] -} - -[sub_resource type="Animation" id="Animation_q2yeo"] -resource_name = "attack" -length = 0.80000335 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), -"update": 1, -"values": [8, 9, 10, 11, 12, 13] -} -tracks/1/type = "method" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0.33333334, 0.5), -"transitions": PackedFloat32Array(1, 1), -"values": [{ -"args": [], -"method": &"trigger_hit" -}, { -"args": [true, "idle"], -"method": &"complete_action" -}] -} - [sub_resource type="Animation" id="Animation_rfgh2"] length = 0.001 tracks/0/type = "value" @@ -104,10 +56,9 @@ tracks/2/keys = { "values": [Color(1, 1, 1, 0)] } -[sub_resource type="Animation" id="Animation_t5s0y"] -resource_name = "running" -length = 0.46667004 -loop_mode = 1 +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true @@ -115,10 +66,27 @@ tracks/0/path = NodePath("Sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), "update": 1, -"values": [2, 3, 4, 5, 6, 7, 1] +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] } [sub_resource type="Animation" id="Animation_in6p1"] @@ -178,6 +146,38 @@ tracks/3/keys = { }] } +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] _data = { &"RESET": SubResource("Animation_rfgh2"), diff --git a/templates/enemies/mugger.tscn b/templates/enemies/mugger.tscn new file mode 100644 index 0000000..9082fef --- /dev/null +++ b/templates/enemies/mugger.tscn @@ -0,0 +1,260 @@ +[gd_scene load_steps=19 format=3 uid="uid://cloxbd42ovk36"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_hh07h"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_812mx"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_qddks"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_b7gat"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_3k37n"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_812mx"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_812mx") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_b7gat") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Mugger" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_hh07h") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_qddks") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_3k37n") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_812mx") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Mugger" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/rock_lizard.tscn b/templates/enemies/rock_lizard.tscn new file mode 100644 index 0000000..d5bb3ce --- /dev/null +++ b/templates/enemies/rock_lizard.tscn @@ -0,0 +1,261 @@ +[gd_scene load_steps=19 format=3 uid="uid://otxmn0tg06wk"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_y4ik6"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_k3tw5"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_mp3h0"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_33i5w"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_xb3gv"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_k3tw5"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_k3tw5") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_33i5w") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Rock Lizard" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_y4ik6") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_mp3h0") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_xb3gv") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_k3tw5") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Rock +Lizard" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/rogue_bot.tscn b/templates/enemies/rogue_bot.tscn new file mode 100644 index 0000000..6b32fa0 --- /dev/null +++ b/templates/enemies/rogue_bot.tscn @@ -0,0 +1,261 @@ +[gd_scene load_steps=19 format=3 uid="uid://ca8iaja6scjir"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_6adff"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_dq8bk"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_r0mhx"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_pwiye"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_tpfws"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_dq8bk"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_dq8bk") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_pwiye") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Rogue Bot" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_6adff") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_r0mhx") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_tpfws") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_dq8bk") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Rogue +Bot" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/shadow_self.tscn b/templates/enemies/shadow_self.tscn new file mode 100644 index 0000000..9c5926c --- /dev/null +++ b/templates/enemies/shadow_self.tscn @@ -0,0 +1,261 @@ +[gd_scene load_steps=19 format=3 uid="uid://ca016a7sc0wsi"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_hyp08"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_8gw2y"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_u4o7h"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_r4aiw"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_330w5"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_8gw2y"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_8gw2y") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_r4aiw") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Shadow Self" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_hyp08") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_u4o7h") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_330w5") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_8gw2y") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Shadow +Self" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/enemies/silent_spectre.tscn b/templates/enemies/silent_spectre.tscn new file mode 100644 index 0000000..6ed3acc --- /dev/null +++ b/templates/enemies/silent_spectre.tscn @@ -0,0 +1,261 @@ +[gd_scene load_steps=19 format=3 uid="uid://d13ukmpyaa7r1"] + +[ext_resource type="Script" uid="uid://fxixa11vqdrn" path="res://scripts/enemy.gd" id="1_d1eqt"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="2_oxf3b"] +[ext_resource type="Texture2D" uid="uid://cf31h0xgcc2yi" path="res://graphics/questview/goo shadow.png" id="3_iy7yx"] +[ext_resource type="Shader" uid="uid://ctod7r3yre02d" path="res://shaders/nonvariant_sprite.gdshader" id="4_vchky"] +[ext_resource type="Texture2D" uid="uid://bmkpn7sex6buo" path="res://graphics/questview/goo-sheet.png" id="5_ln8c0"] +[ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="6_oxf3b"] + +[sub_resource type="Resource" id="Resource_bfuvr"] +script = ExtResource("2_oxf3b") +metadata/_custom_type_script = "uid://727tgvtmq4nb" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h6sl2"] +resource_local_to_scene = true +shader = ExtResource("4_vchky") +shader_parameter/flash = false +shader_parameter/flash_strength = 0.4 +shader_parameter/highlight = Color(1, 1, 1, 0) + +[sub_resource type="Animation" id="Animation_rfgh2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [9] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_q2yeo"] +resource_name = "attack" +length = 0.80000335 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.36666667, 0.43333334, 0.49999997), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [8, 9, 10, 11, 12, 13] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.33333334, 0.5), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"trigger_hit" +}, { +"args": [true, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_in6p1"] +resource_name = "hurt" +length = 0.23333667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.099999994, 0.13333333, 0.16666667, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [14, 15, 16, 17, 18] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.16666667, 0.23333335), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -48), Vector2(0, -60), Vector2(0, -48), Vector2(0, -48)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite:material:shader_parameter/highlight") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.16666667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "method" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath(".") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [0.2], +"method": &"knockback" +}, { +"args": [false, "idle"], +"method": &"complete_action" +}] +} + +[sub_resource type="Animation" id="Animation_fnqwt"] +resource_name = "idle" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_t5s0y"] +resource_name = "running" +length = 0.46667004 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.06666667, 0.13333333, 0.20000002, 0.26666668, 0.33333334, 0.40000004), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [2, 3, 4, 5, 6, 7, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_45clm"] +_data = { +&"RESET": SubResource("Animation_rfgh2"), +&"attack": SubResource("Animation_q2yeo"), +&"hurt": SubResource("Animation_in6p1"), +&"idle": SubResource("Animation_fnqwt"), +&"running": SubResource("Animation_t5s0y") +} + +[sub_resource type="Gradient" id="Gradient_nqdtq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fehp8"] +gradient = SubResource("Gradient_nqdtq") +width = 1 + +[sub_resource type="Gradient" id="Gradient_yy18h"] +offsets = PackedFloat32Array(1) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_bfuvr"] +gradient = SubResource("Gradient_yy18h") +width = 1 + +[node name="Silent Spectre" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_d1eqt") +life = 10 +max_life = 10 +stats = SubResource("Resource_bfuvr") + +[node name="Shadow" type="Sprite2D" parent="."] +modulate = Color(0, 0, 0, 0.57254905) +position = Vector2(0, -48) +texture = ExtResource("3_iy7yx") + +[node name="Sprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_h6sl2") +position = Vector2(0, -48) +texture = ExtResource("5_ln8c0") +hframes = 8 +vframes = 3 +frame = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_45clm") +} + +[node name="LifeBar" type="TextureProgressBar" parent="."] +layout_mode = 0 +offset_left = -37.0 +offset_top = 16.0 +offset_right = 38.0 +offset_bottom = 26.0 +nine_patch_stretch = true +texture_under = SubResource("GradientTexture1D_fehp8") +texture_progress = SubResource("GradientTexture1D_bfuvr") +tint_over = Color(1, 0, 0, 1) +tint_progress = Color(1, 0, 0, 1) + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -57) + +[node name="TestSprite" type="Sprite2D" parent="."] +self_modulate = Color(0, 0, 0, 1) +position = Vector2(0, -53) +texture = ExtResource("6_oxf3b") + +[node name="Label" type="Label" parent="TestSprite"] +offset_left = -39.0 +offset_top = -27.0 +offset_right = 37.0 +offset_bottom = 22.0 +text = "Silent +Spectre" +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/templates/top_menu.tscn b/templates/top_menu.tscn index a0fa23a..726f8f5 100644 --- a/templates/top_menu.tscn +++ b/templates/top_menu.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=3 uid="uid://c7jagw4y7w42l"] +[gd_scene load_steps=17 format=3 uid="uid://c7jagw4y7w42l"] [ext_resource type="Texture2D" uid="uid://c0e0iw8osv0qh" path="res://graphics/top-icon-members.png" id="1_krxmy"] [ext_resource type="Script" uid="uid://wyv0gt0ww6fp" path="res://scripts/game_menu.gd" id="1_o3fau"] @@ -15,6 +15,7 @@ [ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="10_3nqsh"] [ext_resource type="Texture2D" uid="uid://cnrqig3gojcls" path="res://graphics/options-mopt.png" id="10_acyux"] [ext_resource type="Texture2D" uid="uid://dupdvrthv3edd" path="res://graphics/options-mopt-hover.png" id="11_xu0sb"] +[ext_resource type="PackedScene" uid="uid://dlmodaf4nojin" path="res://scenes/map.tscn" id="16_s68b7"] [node name="GameMenu" type="Control"] layout_mode = 3 @@ -228,7 +229,7 @@ size_flags_vertical = 3 layout_mode = 2 text = "Location" -[node name="LocationOptions" type="OptionButton" parent="GenerateQuestDialog/Window/GenerateQuest"] +[node name="LocationOptions" type="Button" parent="GenerateQuestDialog/Window/GenerateQuest"] unique_name_in_owner = true custom_minimum_size = Vector2(480, 35) layout_mode = 2 @@ -442,11 +443,17 @@ custom_minimum_size = Vector2(248, 60) layout_mode = 2 text = "BACK" +[node name="Map" parent="GenerateQuestDialog" instance=ExtResource("16_s68b7")] +visible = false +layout_mode = 1 + [connection signal="pressed" from="Menu/GuildButton" to="." method="_on_guild_button_pressed"] [connection signal="pressed" from="Menu/MembersButton" to="." method="_on_members_button_pressed"] [connection signal="pressed" from="Menu/QuestsButton" to="." method="_on_quests_button_pressed"] [connection signal="pressed" from="Quests/Panel/VBoxContainer/Button" to="." method="_on_quest_generate_button_pressed"] +[connection signal="pressed" from="GenerateQuestDialog/Window/GenerateQuest/LocationOptions" to="GenerateQuestDialog" method="_on_location_options_pressed"] [connection signal="pressed" from="GenerateQuestDialog/Window/GenerateQuest/HBoxContainer/GenerateButton" to="GenerateQuestDialog" method="_on_generate_button_pressed"] [connection signal="pressed" from="GenerateQuestDialog/Window/GenerateQuest/HBoxContainer/GenerateBackButton" to="GenerateQuestDialog" method="_on_generate_back_button_pressed"] [connection signal="pressed" from="GenerateQuestDialog/Window/PostQuest/HBoxContainer/PostQuestButton" to="GenerateQuestDialog" method="_on_post_button_pressed"] [connection signal="pressed" from="GenerateQuestDialog/Window/PostQuest/HBoxContainer/ApprovalBackButton" to="GenerateQuestDialog" method="_on_post_back_button_pressed"] +[connection signal="location_selected" from="GenerateQuestDialog/Map" to="GenerateQuestDialog" method="_on_map_location_selected"]