diff --git a/Levels/Level1/specs.tres b/Levels/Level1/specs.tres index 5e05fcb..aebb429 100644 --- a/Levels/Level1/specs.tres +++ b/Levels/Level1/specs.tres @@ -1,22 +1,17 @@ -[gd_resource type="Resource" script_class="LevelSpecs" format=3 uid="uid://b67b70x1uf2el"] +[gd_resource type="Resource" script_class="LevelConfig" format=3 uid="uid://b67b70x1uf2el"] [ext_resource type="Script" uid="uid://d40isem6w5d8" path="res://Scripts/Resources/card.gd" id="1_yuhm2"] -[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_specs.gd" id="2_52rgn"] +[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_config.gd" id="2_52rgn"] [ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://Cards/assault.tres" id="2_vvycy"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="3_5cjqa"] [ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="3_ksxj8"] [ext_resource type="Resource" uid="uid://cygfdfqhk2vhw" path="res://Levels/Level1/wave1.tres" id="6_xm2iu"] -[ext_resource type="Resource" uid="uid://bdqng70bpcvp8" path="res://Levels/Level1/wave2.tres" id="7_ginir"] -[ext_resource type="Resource" uid="uid://dasqxcoenje00" path="res://Levels/Level1/wave3.tres" id="8_heo8u"] -[ext_resource type="Resource" uid="uid://c0ln1sfxmvhaf" path="res://Levels/Level1/wave4.tres" id="9_5mf8a"] -[ext_resource type="Resource" uid="uid://b8e1xvwr2f4pf" path="res://Levels/Level1/wave5.tres" id="10_skwnu"] -[ext_resource type="Resource" uid="uid://bsmpkojn7bmqq" path="res://Levels/Level1/wave6.tres" id="11_rusuq"] [ext_resource type="Resource" uid="uid://cqm54pu03l510" path="res://Zones/Moat/zc_moat.tres" id="12_qh4uj"] [resource] script = ExtResource("2_52rgn") hero_class = ExtResource("3_ksxj8") allowed_cards = Array[ExtResource("1_yuhm2")]([ExtResource("2_vvycy")]) -waves = Array[ExtResource("3_5cjqa")]([ExtResource("6_xm2iu"), ExtResource("7_ginir"), ExtResource("8_heo8u"), ExtResource("9_5mf8a"), ExtResource("10_skwnu"), ExtResource("11_rusuq")]) +waves = Array[ExtResource("3_5cjqa")]([ExtResource("6_xm2iu")]) zone = ExtResource("12_qh4uj") metadata/_custom_type_script = "uid://dalgif6huggwg" diff --git a/Levels/Level1/wave1.tres b/Levels/Level1/wave1.tres index 5cece4d..8b04aa7 100644 --- a/Levels/Level1/wave1.tres +++ b/Levels/Level1/wave1.tres @@ -1,13 +1,33 @@ [gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://cygfdfqhk2vhw"] -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_ijigs"] +[ext_resource type="Script" uid="uid://3grc2j4bjrnw" path="res://enemy_group.gd" id="1_wj13r"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_tihwe"] [ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_ywnes"] +[sub_resource type="Resource" id="Resource_wug4u"] +script = ExtResource("1_wj13r") +enemy = ExtResource("2_ywnes") +count = 4 +metadata/_custom_type_script = "uid://3grc2j4bjrnw" + +[sub_resource type="Resource" id="Resource_1qdvn"] +script = ExtResource("1_wj13r") +enemy = ExtResource("2_ywnes") +count = 4 +metadata/_custom_type_script = "uid://3grc2j4bjrnw" + +[sub_resource type="Resource" id="Resource_pwamm"] +script = ExtResource("1_wj13r") +enemy = ExtResource("2_ywnes") +count = 2 +metadata/_custom_type_script = "uid://3grc2j4bjrnw" + [resource] script = ExtResource("2_tihwe") -enemies = Dictionary[ExtResource("1_ijigs"), int]({ -ExtResource("2_ywnes"): 10 +enemy_groups = Dictionary[ExtResource("1_wj13r"), int]({ +SubResource("Resource_wug4u"): 0, +SubResource("Resource_1qdvn"): 1, +SubResource("Resource_pwamm"): 4 }) rewards_blank_cassette = true metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level1/wave2.tres b/Levels/Level1/wave2.tres deleted file mode 100644 index 5eed88e..0000000 --- a/Levels/Level1/wave2.tres +++ /dev/null @@ -1,12 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://bdqng70bpcvp8"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_ddbxs"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_mjqnu"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_yby3c"] - -[resource] -script = ExtResource("2_yby3c") -enemies = Dictionary[ExtResource("1_ddbxs"), int]({ -ExtResource("2_mjqnu"): 25 -}) -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level1/wave3.tres b/Levels/Level1/wave3.tres deleted file mode 100644 index 2e95be1..0000000 --- a/Levels/Level1/wave3.tres +++ /dev/null @@ -1,15 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://dasqxcoenje00"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_8j1mh"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_cyr3d"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_mvtl1"] -[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="3_6mlj7"] - -[resource] -script = ExtResource("2_mvtl1") -enemies = Dictionary[ExtResource("1_8j1mh"), int]({ -ExtResource("2_cyr3d"): 15, -ExtResource("3_6mlj7"): 5 -}) -rewards_blank_cassette = true -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level1/wave4.tres b/Levels/Level1/wave4.tres deleted file mode 100644 index dc6eb14..0000000 --- a/Levels/Level1/wave4.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://c0ln1sfxmvhaf"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_k10uy"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_6kjfn"] -[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Enemies/BabyEyeDog/baby_eye_dog.tres" id="2_htd28"] - -[resource] -script = ExtResource("2_6kjfn") -enemies = Dictionary[ExtResource("1_k10uy"), int]({ -ExtResource("2_htd28"): 40 -}) -new_shop = true -bonus_cash = 20 -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level1/wave5.tres b/Levels/Level1/wave5.tres deleted file mode 100644 index 847d838..0000000 --- a/Levels/Level1/wave5.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://b8e1xvwr2f4pf"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_evs1i"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_38p3i"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_gexw5"] -[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="3_8y41r"] - -[resource] -script = ExtResource("2_gexw5") -enemies = Dictionary[ExtResource("1_evs1i"), int]({ -ExtResource("2_38p3i"): 20, -ExtResource("3_8y41r"): 15 -}) -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level1/wave6.tres b/Levels/Level1/wave6.tres deleted file mode 100644 index b4deadc..0000000 --- a/Levels/Level1/wave6.tres +++ /dev/null @@ -1,12 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://bsmpkojn7bmqq"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_asx4x"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_ltlqs"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_u1tse"] - -[resource] -script = ExtResource("2_ltlqs") -enemies = Dictionary[ExtResource("1_asx4x"), int]({ -ExtResource("2_u1tse"): 40 -}) -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/specs.tres b/Levels/Level2/specs.tres index bd92999..6b32491 100644 --- a/Levels/Level2/specs.tres +++ b/Levels/Level2/specs.tres @@ -1,26 +1,19 @@ -[gd_resource type="Resource" script_class="LevelSpecs" format=3 uid="uid://dffoufw4bnfn7"] +[gd_resource type="Resource" script_class="LevelConfig" format=3 uid="uid://dffoufw4bnfn7"] [ext_resource type="Script" uid="uid://d40isem6w5d8" path="res://Scripts/Resources/card.gd" id="1_rchhl"] [ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://Cards/assault.tres" id="2_geygk"] -[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_specs.gd" id="2_y3kr2"] +[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_config.gd" id="2_y3kr2"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="3_05rhi"] [ext_resource type="Resource" uid="uid://b37r54q84vqoi" path="res://Cards/rocket_launcher.tres" id="3_xdjpy"] [ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="4_ldc6i"] [ext_resource type="Resource" uid="uid://7dqtd1owl7g3" path="res://Levels/Level2/wave1.tres" id="7_siv73"] -[ext_resource type="Resource" uid="uid://dafixx8vfmr3h" path="res://Levels/Level2/wave2.tres" id="8_kee6w"] -[ext_resource type="Resource" uid="uid://cricfym5wcf3w" path="res://Levels/Level2/wave3.tres" id="9_k6fmx"] -[ext_resource type="Resource" uid="uid://cky3wcbc3kob0" path="res://Levels/Level2/wave4.tres" id="10_dd7gv"] -[ext_resource type="Resource" uid="uid://b5wbmohc1ryla" path="res://Levels/Level2/wave5.tres" id="11_nmbqu"] -[ext_resource type="Resource" uid="uid://11e6ak5jg2pn" path="res://Levels/Level2/wave6.tres" id="12_p0fmg"] -[ext_resource type="Resource" uid="uid://cvtuui3grpslm" path="res://Levels/Level2/wave7.tres" id="13_alfsy"] -[ext_resource type="Resource" uid="uid://7t61us4e01bb" path="res://Levels/Level2/wave8.tres" id="14_jyonc"] [ext_resource type="Resource" uid="uid://cqm54pu03l510" path="res://Zones/Moat/zc_moat.tres" id="15_movdo"] [resource] script = ExtResource("2_y3kr2") hero_class = ExtResource("4_ldc6i") allowed_cards = Array[ExtResource("1_rchhl")]([ExtResource("2_geygk"), ExtResource("3_xdjpy")]) -waves = Array[ExtResource("3_05rhi")]([ExtResource("7_siv73"), ExtResource("8_kee6w"), ExtResource("9_k6fmx"), ExtResource("10_dd7gv"), ExtResource("11_nmbqu"), ExtResource("12_p0fmg"), ExtResource("13_alfsy"), ExtResource("14_jyonc")]) +waves = Array[ExtResource("3_05rhi")]([ExtResource("7_siv73")]) points_blocked = Array[int]([34, 33, 41, 40, 39, 47, 79, 86, 85, 78, 91, 84]) zone = ExtResource("15_movdo") metadata/_custom_type_script = "uid://dalgif6huggwg" diff --git a/Levels/Level2/wave1.tres b/Levels/Level2/wave1.tres index 6366925..1dc8dae 100644 --- a/Levels/Level2/wave1.tres +++ b/Levels/Level2/wave1.tres @@ -1,13 +1,19 @@ [gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://7dqtd1owl7g3"] -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_dhlut"] +[ext_resource type="Script" uid="uid://3grc2j4bjrnw" path="res://enemy_group.gd" id="1_t312x"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_50dab"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_iaotk"] +[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Enemies/BabyEyeDog/baby_eye_dog.tres" id="2_juva6"] + +[sub_resource type="Resource" id="Resource_76qlp"] +script = ExtResource("1_t312x") +enemy = ExtResource("2_juva6") +count = 15 +metadata/_custom_type_script = "uid://3grc2j4bjrnw" [resource] script = ExtResource("2_50dab") -enemies = Dictionary[ExtResource("1_dhlut"), int]({ -ExtResource("2_iaotk"): 5 +enemy_groups = Dictionary[ExtResource("1_t312x"), int]({ +SubResource("Resource_76qlp"): 2 }) rewards_blank_cassette = true metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave2.tres b/Levels/Level2/wave2.tres deleted file mode 100644 index 24e82af..0000000 --- a/Levels/Level2/wave2.tres +++ /dev/null @@ -1,13 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://dafixx8vfmr3h"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_rhace"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_l5n6q"] -[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="2_n5glm"] - -[resource] -script = ExtResource("2_l5n6q") -enemies = Dictionary[ExtResource("1_rhace"), int]({ -ExtResource("2_n5glm"): 6 -}) -new_shop = true -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave3.tres b/Levels/Level2/wave3.tres deleted file mode 100644 index b5aa80c..0000000 --- a/Levels/Level2/wave3.tres +++ /dev/null @@ -1,13 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://cricfym5wcf3w"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_a61ug"] -[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Enemies/BabyEyeDog/baby_eye_dog.tres" id="2_3ov7j"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_47xps"] - -[resource] -script = ExtResource("2_47xps") -enemies = Dictionary[ExtResource("1_a61ug"), int]({ -ExtResource("2_3ov7j"): 10 -}) -rewards_blank_cassette = true -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave4.tres b/Levels/Level2/wave4.tres deleted file mode 100644 index cf684f5..0000000 --- a/Levels/Level2/wave4.tres +++ /dev/null @@ -1,16 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://cky3wcbc3kob0"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_7c1qm"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_6m45b"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_n286l"] -[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="3_qjnea"] -[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="4_8uy8t"] - -[resource] -script = ExtResource("2_n286l") -enemies = Dictionary[ExtResource("1_7c1qm"), int]({ -ExtResource("2_6m45b"): 6, -ExtResource("3_qjnea"): 2, -ExtResource("4_8uy8t"): 8 -}) -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave5.tres b/Levels/Level2/wave5.tres deleted file mode 100644 index 34c8106..0000000 --- a/Levels/Level2/wave5.tres +++ /dev/null @@ -1,15 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://b5wbmohc1ryla"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_yfa3k"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_84e3q"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_ugnlg"] -[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="3_3e1qp"] - -[resource] -script = ExtResource("2_84e3q") -enemies = Dictionary[ExtResource("1_yfa3k"), int]({ -ExtResource("2_ugnlg"): 10, -ExtResource("3_3e1qp"): 10 -}) -rewards_blank_cassette = true -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave6.tres b/Levels/Level2/wave6.tres deleted file mode 100644 index 4f5bb23..0000000 --- a/Levels/Level2/wave6.tres +++ /dev/null @@ -1,18 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://11e6ak5jg2pn"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_n1yiu"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_f752f"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="3_uomax"] -[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="4_mu3r3"] -[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="4_wrrsl"] - -[resource] -script = ExtResource("2_f752f") -enemies = Dictionary[ExtResource("1_n1yiu"), int]({ -ExtResource("3_uomax"): 6, -ExtResource("4_mu3r3"): 3, -ExtResource("4_wrrsl"): 8 -}) -new_shop = true -bonus_cash = 3 -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave7.tres b/Levels/Level2/wave7.tres deleted file mode 100644 index 9bb23fd..0000000 --- a/Levels/Level2/wave7.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://cvtuui3grpslm"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_j1606"] -[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="2_6r48e"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_uttqy"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="3_ptl2k"] - -[resource] -script = ExtResource("2_uttqy") -enemies = Dictionary[ExtResource("1_j1606"), int]({ -ExtResource("2_6r48e"): 35, -ExtResource("3_ptl2k"): 5 -}) -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level2/wave8.tres b/Levels/Level2/wave8.tres deleted file mode 100644 index 9501e8e..0000000 --- a/Levels/Level2/wave8.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://7t61us4e01bb"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_f4qev"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="2_3trsl"] -[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Enemies/BabyEyeDog/baby_eye_dog.tres" id="2_r8dsv"] -[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="3_o75u5"] - -[resource] -script = ExtResource("2_3trsl") -enemies = Dictionary[ExtResource("1_f4qev"), int]({ -ExtResource("2_r8dsv"): 25, -ExtResource("3_o75u5"): 5 -}) -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Levels/Level3/specs.tres b/Levels/Level3/specs.tres index c16b5f2..0d2a403 100644 --- a/Levels/Level3/specs.tres +++ b/Levels/Level3/specs.tres @@ -1,19 +1,18 @@ -[gd_resource type="Resource" script_class="LevelSpecs" format=3 uid="uid://dgrcneuv4fut"] +[gd_resource type="Resource" script_class="LevelConfig" format=3 uid="uid://dgrcneuv4fut"] [ext_resource type="Script" uid="uid://d40isem6w5d8" path="res://Scripts/Resources/card.gd" id="1_ldkvi"] [ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://Cards/assault.tres" id="2_0atj5"] [ext_resource type="Resource" uid="uid://cvto66tp7rrst" path="res://Cards/gatling.tres" id="3_sbxeq"] [ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="4_5rrxx"] -[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_specs.gd" id="5_kje1i"] +[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_config.gd" id="5_kje1i"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="6_gmv8c"] [ext_resource type="Resource" uid="uid://cwy6wxuujgqbq" path="res://Levels/Level3/wave1.tres" id="7_43tyk"] -[ext_resource type="Resource" uid="uid://c0jg2k4igwt7y" path="res://Levels/Level3/wave2.tres" id="8_mblpn"] [ext_resource type="Resource" uid="uid://dicfpbrig37m8" path="res://Zones/Cave/zc_cave.tres" id="9_sbxeq"] [resource] script = ExtResource("5_kje1i") hero_class = ExtResource("4_5rrxx") allowed_cards = Array[ExtResource("1_ldkvi")]([ExtResource("2_0atj5"), ExtResource("3_sbxeq")]) -waves = Array[ExtResource("6_gmv8c")]([ExtResource("7_43tyk"), ExtResource("8_mblpn")]) +waves = Array[ExtResource("6_gmv8c")]([ExtResource("7_43tyk")]) zone = ExtResource("9_sbxeq") metadata/_custom_type_script = "uid://dalgif6huggwg" diff --git a/Levels/Level3/wave1.tres b/Levels/Level3/wave1.tres index cb8f216..b6115d1 100644 --- a/Levels/Level3/wave1.tres +++ b/Levels/Level3/wave1.tres @@ -1,13 +1,19 @@ [gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://cwy6wxuujgqbq"] -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_b6olw"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="2_b51i4"] +[ext_resource type="Script" uid="uid://3grc2j4bjrnw" path="res://enemy_group.gd" id="1_6ssfe"] +[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="2_lvtoc"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="3_frc10"] +[sub_resource type="Resource" id="Resource_hrsx4"] +script = ExtResource("1_6ssfe") +enemy = ExtResource("2_lvtoc") +count = 4 +metadata/_custom_type_script = "uid://3grc2j4bjrnw" + [resource] script = ExtResource("3_frc10") -enemies = Dictionary[ExtResource("1_b6olw"), int]({ -ExtResource("2_b51i4"): 10 +enemy_groups = Dictionary[ExtResource("1_6ssfe"), int]({ +SubResource("Resource_hrsx4"): 0 }) rewards_blank_cassette = true bonus_cash = 3 diff --git a/Levels/Level3/wave2.tres b/Levels/Level3/wave2.tres deleted file mode 100644 index 4994c5e..0000000 --- a/Levels/Level3/wave2.tres +++ /dev/null @@ -1,17 +0,0 @@ -[gd_resource type="Resource" script_class="WaveConfig" format=3 uid="uid://c0jg2k4igwt7y"] - -[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_8x0w6"] -[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="2_0iv0c"] -[ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="3_pap4a"] -[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="3_t4518"] - -[resource] -script = ExtResource("3_pap4a") -enemies = Dictionary[ExtResource("1_8x0w6"), int]({ -ExtResource("2_0iv0c"): 3, -ExtResource("3_t4518"): 10 -}) -new_shop = true -rewards_blank_cassette = true -bonus_cash = 19 -metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/PCs/hud.gd b/PCs/hud.gd index 6d156cf..676c801 100644 --- a/PCs/hud.gd +++ b/PCs/hud.gd @@ -36,7 +36,6 @@ extends CanvasLayer var last_lives_count: int = Data.starting_lives var enemy_names: Array[String] var map_anchor: Node3D -var cards: Array[EnemyCardUI] = [] var feature_preview_tween: Tween var enemy_count: int = 0 @@ -90,38 +89,6 @@ func set_blank_cassette_count(value: int) -> void: blank_cassette_label.text = str(value) -func show_wave_generation_anim(wave: Wave) -> void: - for card: EnemyCardUI in cards: - card.queue_free() - cards = [] - var x: int = 0 - var final_x_coords: Array[int] = [-550, -275, 0, 275, 550] - for card: EnemyCard in wave.enemy_groups: - var card_ui: EnemyCardUI = enemy_card_scene.instantiate() - card_ui.set_enemy(card) - add_child(card_ui) - cards.append(card_ui) - #$Control.add_child(card_ui) - card_ui.position = $Control2.position - var i: int = 0 - var j: int = 0 - for card: EnemyCardUI in cards: - var anchor: Vector2 = $Control3.position - anchor -= Vector2(int(card.get_child(0).size.x / 2.0), int(card.get_child(0).size.y / 2.0)) - anchor.x += final_x_coords[i] - var tween: Tween = create_tween() - tween.tween_interval((0.3 * j) + (1.4 * int(j / 5.0))) - tween.tween_property(card, "position", anchor, 0.3) - tween.tween_interval(3.0) - tween.tween_property(card, "position", anchor + Vector2.UP * 700, 0.5) - tween.set_ease(Tween.EASE_OUT) - tween.set_trans(Tween.TRANS_QUINT) - i += 1 - if i >= final_x_coords.size(): - i = 0 - j += 1 - - func set_energy_visible(value: bool) -> void: energy_pips.visible = value @@ -222,7 +189,8 @@ func enemy_count_down(enemy: Enemy) -> void: enemy_count_label.text = str(enemy_count) -func set_upcoming_wave(value: Dictionary) -> void: +#the value dictionary should be enemy titles matched to how many of that enemy +func set_upcoming_wave(value: Dictionary[String, int]) -> void: enemy_count = 0 var frame_count: int = 0 enemy_names = [] diff --git a/Scenes/CardPrinter/card_printer.gd b/Scenes/CardPrinter/card_printer.gd index 98e4974..fd147c5 100644 --- a/Scenes/CardPrinter/card_printer.gd +++ b/Scenes/CardPrinter/card_printer.gd @@ -128,9 +128,9 @@ func _on_static_body_3d_button_interacted(_value: int, reply: Hero) -> void: button_collider.disabled = true $StaticBody3D/AudioStreamPlayer3D.play() #print("button pressed") - #print(reply.game_manager.level_specs.waves) - #print(reply.game_manager.level_specs.waves[0].station) - #print(reply.game_manager.level_specs.waves[1].station) - #for spec: WaveConfig in reply.game_manager.level_specs.waves: + #print(reply.game_manager.level_config.waves) + #print(reply.game_manager.level_config.waves[0].station) + #print(reply.game_manager.level_config.waves[1].station) + #for spec: WaveConfig in reply.game_manager.level_config.waves: # print(Data.Rarity.keys()[spec.station]) - find_cards(reply.hero_class.faction, reply.game_manager.level_specs.waves[reply.game_manager.wave - 1].station, reply.game_manager.level_specs.allowed_cards) + find_cards(reply.hero_class.faction, reply.game_manager.level_config.waves[reply.game_manager.wave - 1].station, reply.game_manager.level_config.allowed_cards) diff --git a/Scripts/Resources/level_specs.gd b/Scripts/Resources/level_config.gd similarity index 81% rename from Scripts/Resources/level_specs.gd rename to Scripts/Resources/level_config.gd index 8774dfd..4091c4a 100644 --- a/Scripts/Resources/level_specs.gd +++ b/Scripts/Resources/level_config.gd @@ -1,4 +1,5 @@ -class_name LevelSpecs extends Resource +class_name LevelConfig +extends Resource @export var hero_class: HeroClass @export var allowed_cards: Array[Card] diff --git a/Scripts/Resources/level_specs.gd.uid b/Scripts/Resources/level_config.gd.uid similarity index 100% rename from Scripts/Resources/level_specs.gd.uid rename to Scripts/Resources/level_config.gd.uid diff --git a/Scripts/enemy_card.gd b/Scripts/enemy_card.gd deleted file mode 100644 index 204ac1a..0000000 --- a/Scripts/enemy_card.gd +++ /dev/null @@ -1,6 +0,0 @@ -class_name EnemyCard -extends RefCounted - - -var enemy: Enemy = null -var count: int diff --git a/Scripts/enemy_card.gd.uid b/Scripts/enemy_card.gd.uid deleted file mode 100644 index 1faad26..0000000 --- a/Scripts/enemy_card.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://brf6kradnuce8 diff --git a/Scripts/enemy_spawner.gd b/Scripts/enemy_spawner.gd index 5b39067..bdb562e 100644 --- a/Scripts/enemy_spawner.gd +++ b/Scripts/enemy_spawner.gd @@ -14,7 +14,7 @@ signal enemy_spawned() var enemy_died_callback: Callable var enemy_reached_goal_callback: Callable -var current_wave: Array[EnemyCard] +var current_wave: Array[EnemyGroup] var enemy_types_to_spawn: Dictionary = {} var enemy_spawn_timers: Dictionary = {} var enemies_spawned: Dictionary = {} @@ -125,7 +125,7 @@ func networked_spawn_air_enemy(enemy_num: int, pos: Vector3, id1: int, id2: int) func spawn_wave() -> void: enemies_to_spawn = 0 enemy_spawn_timers = {} - for card: EnemyCard in current_wave: + for card: EnemyGroup in current_wave: enemy_types_to_spawn[card.enemy] += card.count enemies_to_spawn += card.count #print(card.enemy.title + ": " + str(card.count)) @@ -135,6 +135,6 @@ func spawn_wave() -> void: done_spawning = false -func add_card(new_card: EnemyCard) -> void: +func add_card(new_card: EnemyGroup) -> void: current_wave.append(new_card) enemy_types_to_spawn[new_card.enemy] = 0 diff --git a/Scripts/game.gd b/Scripts/game.gd index ab3538a..5b15e3e 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -31,7 +31,7 @@ var shop_chance: float = 0.0 var stats: RoundStats var card_gameplay: bool = false var level_layout: FlowFieldData -var level_specs: LevelSpecs +var level_config: LevelConfig #TODO: Create a reference to some generic Lobby object that wraps the multiplayer players list stuff @@ -92,23 +92,14 @@ func networked_set_wave(wave_number: int) -> void: ##wave_count is number of upcoming waves this function should return -func get_upcoming_waves(wave_count: int) -> Array[Wave]: - var waves: Array[Wave] = [] - var i: int = -1 - for wave_config: WaveConfig in level_specs.waves.slice(wave - 1): - i += 1 - var new_wave: Wave = Wave.new() - for enemy: Enemy in level_specs.waves[wave - 1 + i].enemies.keys(): - var enemy_card: EnemyCard = EnemyCard.new() - enemy_card.enemy = enemy - enemy_card.count = level_specs.waves[wave - 1 + i].enemies[enemy] - new_wave.enemy_groups.append(enemy_card) - waves.append(new_wave) +func get_upcoming_waves(wave_count: int) -> Array[WaveConfig]: + var waves: Array[WaveConfig] = [] + waves.append_array(level_config.waves.slice(wave - 1)) if waves.size() < wave_count: var starting_wave: int = wave for x: int in wave_count - waves.size(): var spawn_power: int = WaveManager.calculate_spawn_power(starting_wave + x, connected_players_nodes.size()) - var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool) + var new_wave: WaveConfig = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns.size()) waves.append(new_wave) return waves @@ -118,7 +109,7 @@ func spawn_level(scene: PackedScene) -> void: var flow_field: FlowField = FlowField.new() level.flow_field = flow_field level.add_child(flow_field) - flow_field.load_from_data(FlowFieldTool.load_flow_field_from_disc(level_specs.zone.flow_field_data_path)) + flow_field.load_from_data(FlowFieldTool.load_flow_field_from_disc(level_config.zone.flow_field_data_path)) level.load_flow_field() level.game_manager = self for x: EnemySpawner in level.enemy_spawns: @@ -130,7 +121,7 @@ func spawn_level(scene: PackedScene) -> void: root_scene.add_child(level) for spawner: EnemySpawner in level.enemy_spawns: spawner.create_path() - level.generate_obstacle(level_specs.points_blocked) + level.generate_obstacle(level_config.points_blocked) func spawn_players() -> void: @@ -186,16 +177,7 @@ func spawn_enemy_wave() -> void: wave_started.emit() -func pre_generate_waves() -> Array[Wave]: - var wave_list: Array[Wave] = [] - for i: int in range(wave, wave_limit + 1): - var spawn_power: int = WaveManager.calculate_spawn_power(i, connected_players_nodes.size()) - var generated_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool) - wave_list.append(generated_wave) - return wave_list - - -func set_wave_to_spawners(wave_thing: Wave, wave_number: int) -> void: +func set_wave_to_spawners(wave_thing: WaveConfig, wave_number: int) -> void: var spawners: Array[EnemySpawner] = level.enemy_spawns var ground_spawners: Array[EnemySpawner] = [] var air_spawners: Array[EnemySpawner] = [] @@ -205,37 +187,35 @@ func set_wave_to_spawners(wave_thing: Wave, wave_number: int) -> void: else: air_spawners.append(spawner) var assignment_salt: int = 0 - for card: EnemyCard in wave_thing.enemy_groups: + for enemy_group: EnemyGroup in wave_thing.enemy_groups.keys(): assignment_salt += 1 - if card.enemy.target_type == Data.EnemyType.LAND: - ground_spawners[NoiseRandom.randi_in_range((wave_number * assignment_salt) - assignment_salt, 0, ground_spawners.size() - 1)].add_card(card) + if enemy_group.enemy.target_type == Data.EnemyType.LAND: + ground_spawners[NoiseRandom.randi_in_range((wave_number * assignment_salt) - assignment_salt, 0, ground_spawners.size() - 1)].add_card(enemy_group) else: - air_spawners[NoiseRandom.randi_in_range((wave_number * assignment_salt) + assignment_salt, 0, air_spawners.size() - 1)].add_card(card) + air_spawners[NoiseRandom.randi_in_range((wave_number * assignment_salt) + assignment_salt, 0, air_spawners.size() - 1)].add_card(enemy_group) func set_upcoming_wave() -> void: if is_multiplayer_authority(): - if level_specs.waves.size() == 0: + if level_config.waves.size() == 0: var spawn_power: int = WaveManager.calculate_spawn_power(wave, connected_players_nodes.size()) #var new_wave: Dictionary = WaveManager.generate_wave(spawn_power, level.enemy_pool) - var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool) + var new_wave: WaveConfig = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns.size()) set_wave_to_spawners(new_wave, wave) temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size())) #networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 70.0)) else: - var new_wave: Wave = Wave.new() - for enemy: Enemy in level_specs.waves[wave - 1].enemies.keys(): - var enemy_card: EnemyCard = EnemyCard.new() - enemy_card.enemy = enemy - enemy_card.count = level_specs.waves[wave - 1].enemies[enemy] - new_wave.enemy_groups.append(enemy_card) + var new_wave: WaveConfig = get_upcoming_waves(1)[0] set_wave_to_spawners(new_wave, wave) temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size())) -func temp_set_upcoming_wave(new_wave: Wave, coins: int) -> void: +func temp_set_upcoming_wave(new_wave: WaveConfig, coins: int) -> void: pot = coins - connected_players_nodes[multiplayer.get_unique_id()].hud.set_upcoming_wave(new_wave.to_dict()) + var dict: Dictionary[String, int] = {} + for enemy_group: EnemyGroup in new_wave.enemy_groups.keys(): + dict[enemy_group.enemy.title] = enemy_group.count + connected_players_nodes[multiplayer.get_unique_id()].hud.set_upcoming_wave(dict) @rpc("reliable", "call_local") @@ -285,9 +265,9 @@ func end_wave() -> void: var player: Hero = connected_players_nodes[peer_id] as Hero player.hud.set_wave_count(wave) player.currency += ceili(pot / connected_players_nodes.size()) - player.currency += level_specs.waves[wave - 2].bonus_cash + player.currency += level_config.waves[wave - 2].bonus_cash player.energy = Data.player_energy - player.blank_cassettes += 1 if level_specs.waves[wave - 2].rewards_blank_cassette else 0 + player.blank_cassettes += 1 if level_config.waves[wave - 2].rewards_blank_cassette else 0 #if wave % 2 == 0: # player.blank_cassettes += 1 if card_gameplay: @@ -301,7 +281,7 @@ func end_wave() -> void: #tower_base.enable_duration_sprites() tower_base.iterate_duration() if is_multiplayer_authority(): - if level_specs.waves[wave - 2].new_shop: + if level_config.waves[wave - 2].new_shop: networked_spawn_shop.rpc() #if NoiseRandom.randf_in_range(23 * wave, 0.0, 1.0) <= shop_chance: #networked_spawn_shop.rpc() @@ -334,7 +314,7 @@ func setup() -> void: connected_players_nodes.clear() #Spawn new stuff - spawn_level(level_specs.zone.scene) + spawn_level(level_config.zone.scene) #Set starting parameters game_active = false @@ -342,7 +322,7 @@ func setup() -> void: objective_health = Data.starting_lives wave = 1 stats = RoundStats.new() - wave_limit = level_specs.waves.size() + wave_limit = level_config.waves.size() game_setup.emit() @@ -407,8 +387,10 @@ func continue_with_game() -> void: gamemode.endless = true Input.mouse_mode = Input.MOUSE_MODE_CAPTURED connected_players_nodes[multiplayer.get_unique_id()].unpause() - #TODO: This shouldn't happen. instead, the wave generator should generate level_specs waves - level_specs.waves = [] + #TODO: This shouldn't happen. instead, the wave generator should generate level_config waves + #FIXME: this really needs to be changed because otherwise endless mode cant have shit like + #stations and shop respawns. it all needs to be part of the one system u know + level_config.waves = [] set_upcoming_wave() diff --git a/Scripts/wave.gd b/Scripts/wave.gd deleted file mode 100644 index 4cc5be4..0000000 --- a/Scripts/wave.gd +++ /dev/null @@ -1,16 +0,0 @@ -class_name Wave -extends RefCounted - - -var enemy_groups: Array[EnemyCard] - - -func to_dict() -> Dictionary: - var dict: Dictionary = {} - for group: EnemyCard in enemy_groups: - var enemy_count: int = 0 - enemy_count = group.count - if !dict.has(group.enemy.title): - dict[group.enemy.title] = 0 - dict[group.enemy.title] += enemy_count - return dict diff --git a/Scripts/wave.gd.uid b/Scripts/wave.gd.uid deleted file mode 100644 index f4fdab3..0000000 --- a/Scripts/wave.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://demkh5cq1f2bo diff --git a/Scripts/wave_config.gd b/Scripts/wave_config.gd index f72c370..7c4490f 100644 --- a/Scripts/wave_config.gd +++ b/Scripts/wave_config.gd @@ -1,6 +1,7 @@ -class_name WaveConfig extends Resource +class_name WaveConfig +extends Resource -@export var enemies: Dictionary[Enemy, int] +@export var enemy_groups: Dictionary[EnemyGroup, int] @export var station: Data.Rarity @export var new_shop: bool @export var rewards_blank_cassette: bool diff --git a/Scripts/wave_manager.gd b/Scripts/wave_manager.gd index 65940b8..d038055 100644 --- a/Scripts/wave_manager.gd +++ b/Scripts/wave_manager.gd @@ -23,28 +23,26 @@ static func calculate_pot(wave_number: int, number_of_players: int) -> int: return ceili((3.0 * number_of_players) + (2.5 * wave_number)) -static func get_test_wave(spawn_pool: Array[Enemy]) -> Wave: - var wave: Wave = Wave.new() +static func get_test_wave(spawn_pool: Array[Enemy]) -> WaveConfig: + var wave: WaveConfig = WaveConfig.new() for x: int in 3: - var new_card: EnemyCard = EnemyCard.new() - new_card.enemy = spawn_pool[0] - new_card.rarity = Data.Rarity.COMMON - wave.enemy_groups.append(new_card) + wave.enemies[spawn_pool[0]] = 1 return wave ## Uses a spawn power budget to "buy" cards of enemies at random selection from ## the given spawn pool, returns the resulting wave but also assigns the cards ## among the given set of enemy spawners -static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave: - var wave: Wave = Wave.new() +static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: int) -> WaveConfig: + var wave: WaveConfig = WaveConfig.new() #print("Generating wave with " + str(points) + " points to spend") while spawn_power > 0: - var new_card: EnemyCard = EnemyCard.new() #First, choose an enemy at random - new_card.enemy = spawn_pool[NoiseRandom.randi_in_range(spawn_power, 0, spawn_pool.size() - 1)] + var enemy: Enemy = spawn_pool[NoiseRandom.randi_in_range(spawn_power, 0, spawn_pool.size() - 1)] + var enemy_group: EnemyGroup = EnemyGroup.new() + enemy_group.enemy = enemy #Next, we have to figure out if we can actually buy that enemy #and, if not, then we have to pick a different enemy, repeat until @@ -54,29 +52,29 @@ static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave: var first_enemy_id: int = -1 while !enemy_chosen: #Next, determine what is the most groups we can afford - most_enemies_afforded = int(spawn_power / new_card.enemy.spawn_power) + most_enemies_afforded = int(spawn_power / enemy.spawn_power) if most_enemies_afforded > 0: enemy_chosen = true else: #Even 1 group was too expensive, so we have to choose #a different enemy and try this process again - var enemy_id: int = spawn_pool.find(new_card.enemy) + var enemy_id: int = spawn_pool.find(enemy) enemy_id -= 1 if first_enemy_id == -1: first_enemy_id = enemy_id if enemy_id < 0: - new_card.enemy = spawn_pool[spawn_pool.size() - 1] + enemy = spawn_pool[spawn_pool.size() - 1] else: - new_card.enemy = spawn_pool[enemy_id] + enemy = spawn_pool[enemy_id] most_enemies_afforded = 0 if enemy_id == first_enemy_id: return wave #Now that we know how many we could afford, lets just choose a #random number of groups var chosen_groups: int = NoiseRandom.randi_in_range(spawn_power, 1, most_enemies_afforded) - new_card.count = chosen_groups * new_card.enemy.group_size #Add that new enemy to the wave and spend the points! - wave.enemy_groups.append(new_card) - spawn_power -= chosen_groups * new_card.enemy.spawn_power + enemy_group.count = chosen_groups * enemy.group_size + wave.enemy_groups[enemy_group] = NoiseRandom.randi_in_range(spawn_power, 0, spawners - 1) + spawn_power -= chosen_groups * enemy.spawn_power return wave diff --git a/UI/EnemyCard/enemy_card_ui.gd b/UI/EnemyCard/enemy_card_ui.gd deleted file mode 100644 index 8beb27b..0000000 --- a/UI/EnemyCard/enemy_card_ui.gd +++ /dev/null @@ -1,23 +0,0 @@ -class_name EnemyCardUI -extends Control - -@export var enemy_name: Label -@export var enemy_rarity: TextureRect -@export var enemy_tex: TextureRect -@export var enemy_count: Label - - -func set_enemy(enemy: EnemyCard) -> void: - enemy_name.text = tr(enemy.enemy.title) - enemy_rarity.texture.region = Rect2(0.0, 92.0 - (23.0 * int(enemy.rarity)), 124.0, 23.0) - enemy_tex.texture = enemy.enemy.icon - if enemy.rarity == Data.Rarity.COMMON: - enemy_count.text = str(enemy.enemy.common_group) - elif enemy.rarity == Data.Rarity.UNCOMMON: - enemy_count.text = str(enemy.enemy.uncommon_group) - elif enemy.rarity == Data.Rarity.RARE: - enemy_count.text = str(enemy.enemy.rare_group) - elif enemy.rarity == Data.Rarity.EPIC: - enemy_count.text = str(enemy.enemy.epic_group) - elif enemy.rarity == Data.Rarity.LEGENDARY: - enemy_count.text = str(enemy.enemy.legendary_group) diff --git a/UI/EnemyCard/enemy_card_ui.gd.uid b/UI/EnemyCard/enemy_card_ui.gd.uid deleted file mode 100644 index ddf2201..0000000 --- a/UI/EnemyCard/enemy_card_ui.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b8j7mw1xwisi diff --git a/UI/EnemyCard/enemy_card_ui.tscn b/UI/EnemyCard/enemy_card_ui.tscn deleted file mode 100644 index 9972538..0000000 --- a/UI/EnemyCard/enemy_card_ui.tscn +++ /dev/null @@ -1,76 +0,0 @@ -[gd_scene format=3 uid="uid://d17c77pqsi8oy"] - -[ext_resource type="Script" uid="uid://b8j7mw1xwisi" path="res://UI/EnemyCard/enemy_card_ui.gd" id="1_i1ei4"] -[ext_resource type="Texture2D" uid="uid://g00wwrlxxdc5" path="res://Assets/Textures/icon_eye_dog.png" id="2_3r04h"] -[ext_resource type="Texture2D" uid="uid://c7tnda7he8u5l" path="res://Assets/Textures/stars_legendary-Sheet.png" id="3_uu1bb"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_uu1bb"] -bg_color = Color(0.691357, 0.691357, 0.691357, 1) -corner_radius_top_left = 15 -corner_radius_top_right = 15 -corner_radius_bottom_right = 15 -corner_radius_bottom_left = 15 -expand_margin_left = 5.0 -expand_margin_top = 5.0 -expand_margin_right = 5.0 -expand_margin_bottom = 5.0 - -[sub_resource type="AtlasTexture" id="AtlasTexture_4b8gd"] -resource_local_to_scene = true -atlas = ExtResource("3_uu1bb") -region = Rect2(0, 0, 124, 23) - -[node name="EnemyCardUI" type="Control" unique_id=478697806 node_paths=PackedStringArray("enemy_name", "enemy_rarity", "enemy_tex", "enemy_count")] -layout_mode = 3 -anchors_preset = 0 -mouse_filter = 2 -script = ExtResource("1_i1ei4") -enemy_name = NodePath("PanelContainer/HBoxContainer/EnemyName") -enemy_rarity = NodePath("PanelContainer/HBoxContainer/HBoxContainer/TextureRect") -enemy_tex = NodePath("PanelContainer/HBoxContainer/TextureRect") -enemy_count = NodePath("PanelContainer/HBoxContainer/HBoxContainer/Amount") - -[node name="PanelContainer" type="PanelContainer" parent="." unique_id=1907664316] -custom_minimum_size = Vector2(0, 300) -layout_mode = 0 -offset_right = 241.0 -offset_bottom = 138.0 -mouse_filter = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_uu1bb") - -[node name="HBoxContainer" type="VBoxContainer" parent="PanelContainer" unique_id=1742421495] -layout_mode = 2 -mouse_filter = 2 - -[node name="EnemyName" type="Label" parent="PanelContainer/HBoxContainer" unique_id=1041834460] -layout_mode = 2 -size_flags_vertical = 0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "enemy name" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="TextureRect" type="TextureRect" parent="PanelContainer/HBoxContainer" unique_id=799830247] -layout_mode = 2 -size_flags_vertical = 3 -mouse_filter = 2 -texture = ExtResource("2_3r04h") -expand_mode = 1 -stretch_mode = 5 - -[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/HBoxContainer" unique_id=763649452] -layout_mode = 2 -size_flags_vertical = 8 - -[node name="Amount" type="Label" parent="PanelContainer/HBoxContainer/HBoxContainer" unique_id=987748659] -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "15" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="TextureRect" type="TextureRect" parent="PanelContainer/HBoxContainer/HBoxContainer" unique_id=1523958658] -layout_mode = 2 -texture = SubResource("AtlasTexture_4b8gd") -stretch_mode = 5 diff --git a/UI/Menus/MainMenu/level_selecter_main_menu.gd b/UI/Menus/MainMenu/level_selecter_main_menu.gd index c0e274c..c147b1a 100644 --- a/UI/Menus/MainMenu/level_selecter_main_menu.gd +++ b/UI/Menus/MainMenu/level_selecter_main_menu.gd @@ -1,10 +1,10 @@ class_name MainMenuLevelSelector extends PanelContainer -signal level_selected(specs: LevelSpecs, side_chosen: int) +signal level_selected(specs: LevelConfig, side_chosen: int) var side: int = 0 -@export var levels: Array[LevelSpecs] = [] +@export var levels: Array[LevelConfig] = [] func _on_button_pressed() -> void: side = 0 @@ -18,7 +18,7 @@ func _on_button_2_pressed() -> void: func _ready() -> void: var i: int = 0 - for level: LevelSpecs in levels: + for level: LevelConfig in levels: i += 1 var button: Button = Button.new() button.text = "Level " + str(i) diff --git a/UI/Menus/MainMenu/main_menu.gd b/UI/Menus/MainMenu/main_menu.gd index 71435c2..a1b0e71 100644 --- a/UI/Menus/MainMenu/main_menu.gd +++ b/UI/Menus/MainMenu/main_menu.gd @@ -118,11 +118,11 @@ func generate_seed() -> void: gamemode.rng_seed = randi() -func level_selected(level: LevelSpecs, side: int) -> void: +func level_selected(level: LevelConfig, side: int) -> void: generate_seed() gamemode.endless = true if side == 1 else false gamemode.daily = false - game.level_specs = level + game.level_config = level start_game() diff --git a/UI/Menus/MainMenu/main_menu.tscn b/UI/Menus/MainMenu/main_menu.tscn index 8e44747..8cd48f8 100644 --- a/UI/Menus/MainMenu/main_menu.tscn +++ b/UI/Menus/MainMenu/main_menu.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" uid="uid://ci8vq73u23viy" path="res://UI/Menus/MainMenu/main_menu.gd" id="2_ivytu"] [ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://UI/drop_003.ogg" id="5_cwn2i"] [ext_resource type="Script" uid="uid://bwsw4oq150v3p" path="res://UI/Menus/MainMenu/level_selecter_main_menu.gd" id="8_qshe4"] -[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_specs.gd" id="9_nt3t4"] +[ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_config.gd" id="9_nt3t4"] [ext_resource type="Resource" uid="uid://b67b70x1uf2el" path="res://Levels/Level1/specs.tres" id="10_kjkav"] [ext_resource type="Resource" uid="uid://dffoufw4bnfn7" path="res://Levels/Level2/specs.tres" id="11_kjkav"] [ext_resource type="Resource" uid="uid://dgrcneuv4fut" path="res://Levels/Level3/specs.tres" id="12_eonxx"] diff --git a/enemy_group.gd b/enemy_group.gd new file mode 100644 index 0000000..306dbca --- /dev/null +++ b/enemy_group.gd @@ -0,0 +1,5 @@ +class_name EnemyGroup +extends Resource + +@export var enemy: Enemy +@export var count: int diff --git a/enemy_group.gd.uid b/enemy_group.gd.uid new file mode 100644 index 0000000..6088b92 --- /dev/null +++ b/enemy_group.gd.uid @@ -0,0 +1 @@ +uid://3grc2j4bjrnw diff --git a/project.godot b/project.godot index 3675272..cec792e 100644 --- a/project.godot +++ b/project.godot @@ -39,7 +39,7 @@ export/convert_text_resources_to_binary=false [editor_plugins] -enabled=PackedStringArray("res://addons/proton_scatter/plugin.cfg") +enabled=PackedStringArray() [file_customization] diff --git a/wave_viewer.gd b/wave_viewer.gd index fbba883..9104165 100644 --- a/wave_viewer.gd +++ b/wave_viewer.gd @@ -10,9 +10,9 @@ signal closed() @export var enemy_desc_label: RichTextLabel -func set_waves(waves: Array[Wave], starting_wave_number: int) -> void: +func set_waves(waves: Array[WaveConfig], starting_wave_number: int) -> void: var i: int = starting_wave_number - for wave: Wave in waves: + for wave: WaveConfig in waves: var enemy_row: EnemyRow = enemy_row_scene.instantiate() as EnemyRow enemy_row.enemy_clicked.connect(set_enemy_desc) wave_vbox.add_child(enemy_row) @@ -21,21 +21,14 @@ func set_waves(waves: Array[Wave], starting_wave_number: int) -> void: var enemy_dict: Dictionary[Enemy, int] = {} - for group: EnemyCard in wave.enemy_groups: - if enemy_dict.has(group.enemy): - enemy_dict[group.enemy] += group_to_count(group) - else: - enemy_dict[group.enemy] = group_to_count(group) + for enemy_group: EnemyGroup in wave.enemy_groups: + if !enemy_dict.has(enemy_group.enemy): + enemy_dict[enemy_group.enemy] = 0 + enemy_dict[enemy_group.enemy] += enemy_group.count for enemy: Enemy in enemy_dict.keys(): enemy_row.add_enemy_tag(enemy, enemy_dict[enemy]) - set_enemy_desc(waves[0].enemy_groups[0].enemy) - - -func group_to_count(group: EnemyCard) -> int: - var count: int = 0 - count = group.count - return count + set_enemy_desc(waves[0].enemy_groups.keys()[0].enemy) func set_enemy_desc(enemy: Enemy) -> void: