summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--resources/game_stats_config.tres32
-rw-r--r--scripts/base_defender.gd2
-rw-r--r--scripts/game_stats_config.gd21
-rw-r--r--scripts/tower_manager.gd2
-rw-r--r--scripts/ui.gd1
-rw-r--r--scripts/ui_panel.gd5
6 files changed, 50 insertions, 13 deletions
diff --git a/resources/game_stats_config.tres b/resources/game_stats_config.tres
index bf5571d..8495fab 100644
--- a/resources/game_stats_config.tres
+++ b/resources/game_stats_config.tres
@@ -4,7 +4,7 @@
[resource]
script = ExtResource("1_t0c0a")
-starting_life = 50
+starting_life = 20
starting_morale = 10
wave_data = [{
15: {
@@ -21,16 +21,26 @@ wave_data = [{
5: {
"fodder": 6
},
-15: {
-"soldier": 3
+10: {
+"soldier": 2
},
20: {
-"fodder": 10,
+"fodder": 5,
"soldier": 6
},
30: {
-"fodder": 5,
-"gnome": 1
+"fodder": 5
+}
+}, {
+7: {
+"gnome": 10
+},
+14: {
+"soldier": 4
+},
+30: {
+"gnome": 6,
+"soldier": 8
}
}]
defenders = Array[Dictionary]([{
@@ -39,6 +49,7 @@ defenders = Array[Dictionary]([{
"damage": 4.0,
"desc": "Warlock",
"fire_rate": 1.2,
+"is_valid": true,
"max_projectile_lifetime": 7.5,
"projectile_speed": 125,
"range": 75.0,
@@ -49,6 +60,7 @@ defenders = Array[Dictionary]([{
"cost": 9999,
"desc": "Phoenix (DMG)",
"effects": {},
+"is_valid": false,
"sprite_panel": Vector2i(32, 5)
}, {
"cost": 15,
@@ -60,11 +72,13 @@ defenders = Array[Dictionary]([{
"sprite_attacking": Vector2i(31, 2),
"sprite_idle": Vector2i(31, 1)
},
+"is_valid": true,
"sprite_panel": Vector2i(34, 4)
}, {
"cost": 9999,
"desc": "Sparrow (DUP)",
"effects": {},
+"is_valid": false,
"sprite_panel": Vector2i(35, 5)
}]
}, {
@@ -74,6 +88,7 @@ defenders = Array[Dictionary]([{
"damage_tick_rate": 0.25,
"desc": "Wyvern",
"fire_delay": 1.0,
+"is_valid": true,
"projectile_range": 45.0,
"range": 40.0,
"sprite_attacking": Vector2i(25, 10),
@@ -85,6 +100,7 @@ defenders = Array[Dictionary]([{
"effects": {
"fire_delay": 0.1
},
+"is_valid": true,
"sprite_panel": Vector2i(28, 12)
}, {
"cost": 30.0,
@@ -96,11 +112,13 @@ defenders = Array[Dictionary]([{
"projectile_range": 70.0,
"range": 55.0
},
+"is_valid": true,
"sprite_panel": Vector2i(31, 12)
}, {
"cost": 9999,
"desc": "Twizzlers (DUP)",
"effects": {},
+"is_valid": false,
"sprite_panel": Vector2i(27, 12)
}]
}, {
@@ -108,6 +126,7 @@ defenders = Array[Dictionary]([{
"damage": 1.0,
"desc": "Werewolf",
"fire_rate": 1.0,
+"is_valid": false,
"range": 1.0,
"sprite_attacking": Vector2i(26, 11),
"sprite_idle": Vector2i(26, 11),
@@ -118,6 +137,7 @@ defenders = Array[Dictionary]([{
"damage": 1.0,
"desc": "Wellspring",
"fire_rate": 1.0,
+"is_valid": false,
"range": 1.0,
"sprite_attacking": Vector2i(38, 11),
"sprite_idle": Vector2i(38, 11),
diff --git a/scripts/base_defender.gd b/scripts/base_defender.gd
index a10c4b6..0f1003b 100644
--- a/scripts/base_defender.gd
+++ b/scripts/base_defender.gd
@@ -15,7 +15,7 @@ var _attack_texture : Texture
func set_tower_stats(tower_index : int):
var collision_shape = $Tower/CollisionShape2D
collision_shape.shape = CircleShape2D.new()
- tower_data = game_stats_config.defenders[tower_index].duplicate()
+ tower_data = game_stats_config.defenders[tower_index].duplicate(true)
tower_key = tower_data["desc"]
reset_tower_range()
diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd
index 8b2e544..3b19b69 100644
--- a/scripts/game_stats_config.gd
+++ b/scripts/game_stats_config.gd
@@ -14,9 +14,14 @@ class_name GameStatsConfig
},
{
5: {"fodder": 6},
- 15: {"soldier": 3},
- 20: {"fodder": 10, "soldier": 6},
- 30: {"fodder": 5, "gnome": 1},
+ 10: {"soldier": 2},
+ 20: {"fodder": 5, "soldier": 6},
+ 30: {"fodder": 5},
+ },
+ {
+ 7: {"gnome": 10},
+ 14: {"soldier": 4},
+ 30: {"gnome": 6, "soldier": 8}
}
]
@@ -25,6 +30,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
@export var defenders : Array[Dictionary] = [
{
"desc": "Warlock",
+ "is_valid": true,
"damage" : 4.0,
"fire_rate" : 1.2,
"range": 75.0,
@@ -38,6 +44,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
"upgrades": [
{
"desc": "Phoenix (DMG)",
+ "is_valid": false,
"sprite_panel": Vector2i(32, 5),
"cost": 9999,
"effects": {
@@ -45,6 +52,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
},
{
"desc": "Falcon (RNGE)",
+ "is_valid": true,
"sprite_panel": Vector2i(34, 4),
"cost": 15,
"effects": {
@@ -57,6 +65,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
},
{
"desc": "Sparrow (DUP)",
+ "is_valid": false,
"sprite_panel": Vector2i(35, 5),
"cost": 9999,
"effects": {
@@ -66,6 +75,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
},
{
"desc": "Wyvern",
+ "is_valid": true,
"damage" : 1.0,
"fire_delay" : 1.0,
"range": 40.0,
@@ -80,6 +90,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
"upgrades": [
{
"desc": "Skittles (SPD)",
+ "is_valid": true,
"sprite_panel": Vector2i(28, 12),
"cost": 7,
"effects": {
@@ -88,6 +99,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
},
{
"desc": "Pop Rocks (RNGE)",
+ "is_valid": true,
"sprite_panel": Vector2i(31, 12),
"cost": 30.0,
"effects": {
@@ -100,6 +112,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
},
{
"desc": "Twizzlers (DUP)",
+ "is_valid": false,
"sprite_panel": Vector2i(27, 12),
"cost": 9999,
"effects": {
@@ -110,6 +123,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
# TODO
{
"desc": "Werewolf",
+ "is_valid": false,
"damage": 1.0,
"fire_rate": 1.0,
"range": 1.0,
@@ -121,6 +135,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING}
},
{
"desc": "Wellspring",
+ "is_valid": false,
"damage": 1.0,
"fire_rate": 1.0,
"range": 1.0,
diff --git a/scripts/tower_manager.gd b/scripts/tower_manager.gd
index 89f037d..808052e 100644
--- a/scripts/tower_manager.gd
+++ b/scripts/tower_manager.gd
@@ -31,7 +31,7 @@ func _handle_upgrade(upgrade_index : int, tower : StaticBody2D):
if GameData.get_life() >= upgrade_cost:
GameData.subtract_life(upgrade_cost)
tower.apply_upgrade(upgrades[upgrade_index]["effects"])
- upgrades.remove_at(upgrade_index)
+ upgrades[upgrade_index]["is_valid"] = false
func _handle_place_tower(tower_index : int, tile_position : Vector2i):
if _tower_data.size() > tower_index:
diff --git a/scripts/ui.gd b/scripts/ui.gd
index 031236b..e450581 100644
--- a/scripts/ui.gd
+++ b/scripts/ui.gd
@@ -30,5 +30,6 @@ func _update_options(data):
var option = ui_option.instantiate()
option.desc = i["desc"]
option.cost = i["cost"]
+ option.is_valid = i["is_valid"]
option.sprite_atlas = i["sprite_panel"]
options_container.add_child(option)
diff --git a/scripts/ui_panel.gd b/scripts/ui_panel.gd
index 3786410..e32115c 100644
--- a/scripts/ui_panel.gd
+++ b/scripts/ui_panel.gd
@@ -4,6 +4,7 @@ extends Panel
@export var desc: String
@export var cost: int
+@export var is_valid : bool
@export var sprite_atlas : Vector2i
func _ready():
@@ -11,7 +12,7 @@ func _ready():
$HBoxContainer/Texture.texture = texture
$HBoxContainer/Texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
$HBoxContainer/VBoxContainer/Label.text = desc
- $HBoxContainer/VBoxContainer/Label2.text = str(cost)
+ $HBoxContainer/VBoxContainer/Label2.text = str(cost) if is_valid else "-"
$ColorRect.color = get_theme_stylebox("panel").bg_color
$ColorRect.modulate.a = 0.0
@@ -19,7 +20,7 @@ func _ready():
_update_affordability()
func _update_affordability():
- if (GameData.get_life() >= cost):
+ if (GameData.get_life() >= cost && is_valid):
$ColorRect.modulate.a = 0.0
else:
$ColorRect.modulate.a = 0.75