From f7e478357b7f38828cb4c13bae70f9b8ed32dfb3 Mon Sep 17 00:00:00 2001 From: Lexi Quinn Date: Sat, 7 Feb 2026 04:29:19 +1100 Subject: [PATCH] added support for obstacles to levels again --- Enemies/BabyEyeDog/baby_eye_dog.tres | 12 +----------- Enemies/ElderEyeDog/elder_eye_dog.tres | 13 ++----------- Enemies/EyeDog/eye_dog.tres | 4 ++-- Level1/specs.tres | 1 - Level1/wave1.tres | 2 +- Level1/wave2.tres | 2 +- Level1/wave3.tres | 4 ++-- Level1/wave4.tres | 2 +- Level1/wave5.tres | 4 ++-- Level1/wave6.tres | 2 +- Level2/specs.tres | 3 +-- Scenes/FlowField/flow_field_tool.gd | 5 +++++ Scenes/FlowField/flow_field_tool.tscn | 5 +++++ Scripts/Resources/level_specs.gd | 1 - Scripts/game.gd | 10 ++++++---- Scripts/level.gd | 15 +++++++++++++++ Weapons/Assault/weapon_stats.tres | 4 ++-- Worlds/GreenPlanet/Levels/Bridge/bridge.tscn | 2 +- Worlds/GreenPlanet/Levels/Cave/cave.tscn | 1 + 19 files changed, 49 insertions(+), 43 deletions(-) diff --git a/Enemies/BabyEyeDog/baby_eye_dog.tres b/Enemies/BabyEyeDog/baby_eye_dog.tres index 3025a18..c059771 100644 --- a/Enemies/BabyEyeDog/baby_eye_dog.tres +++ b/Enemies/BabyEyeDog/baby_eye_dog.tres @@ -15,17 +15,7 @@ scene = ExtResource("3_otbdk") death_sprite = ExtResource("1_yj87d") sprite = ExtResource("2_mkbm6") spawn_power = 16 -health = 70 +health = 15 penalty = 4 movement_speed = 3.5 spawn_cooldown = 0.6 -common_group = 5 -common_cost = 2 -uncommon_group = 11 -uncommon_cost = 2 -rare_group = 16 -rare_cost = 4 -epic_group = 23 -epic_cost = 6 -legendary_group = 30 -legendary_cost = 10 diff --git a/Enemies/ElderEyeDog/elder_eye_dog.tres b/Enemies/ElderEyeDog/elder_eye_dog.tres index 89f6e2c..94dc8f0 100644 --- a/Enemies/ElderEyeDog/elder_eye_dog.tres +++ b/Enemies/ElderEyeDog/elder_eye_dog.tres @@ -15,16 +15,7 @@ scene = ExtResource("3_m808b") death_sprite = ExtResource("1_qveaa") sprite = ExtResource("2_7nc4x") spawn_power = 14 -health = 350 +health = 150 penalty = 15 -movement_speed = 1.1 +movement_speed = 1.4 spawn_cooldown = 2.0 -common_group = 2 -uncommon_group = 5 -uncommon_cost = 2 -rare_group = 8 -rare_cost = 3 -epic_group = 14 -epic_cost = 4 -legendary_group = 18 -legendary_cost = 5 diff --git a/Enemies/EyeDog/eye_dog.tres b/Enemies/EyeDog/eye_dog.tres index 1d11180..a595adc 100644 --- a/Enemies/EyeDog/eye_dog.tres +++ b/Enemies/EyeDog/eye_dog.tres @@ -20,6 +20,6 @@ icon = ExtResource("2_tyyee") scene = ExtResource("3_mxg1o") death_sprite = ExtResource("1_r8gpy") sprite = SubResource("AtlasTexture_n6kdu") -health = 180 -movement_speed = 1.5 +health = 60 +movement_speed = 1.6 spawn_cooldown = 1.2 diff --git a/Level1/specs.tres b/Level1/specs.tres index e76172d..7729486 100644 --- a/Level1/specs.tres +++ b/Level1/specs.tres @@ -19,5 +19,4 @@ 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")]) zone_scene = ExtResource("12_ksxj8") -data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json" metadata/_custom_type_script = "uid://dalgif6huggwg" diff --git a/Level1/wave1.tres b/Level1/wave1.tres index ce9674f..5cece4d 100644 --- a/Level1/wave1.tres +++ b/Level1/wave1.tres @@ -7,7 +7,7 @@ [resource] script = ExtResource("2_tihwe") enemies = Dictionary[ExtResource("1_ijigs"), int]({ -ExtResource("2_ywnes"): 4 +ExtResource("2_ywnes"): 10 }) rewards_blank_cassette = true metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Level1/wave2.tres b/Level1/wave2.tres index 7ec6d37..5eed88e 100644 --- a/Level1/wave2.tres +++ b/Level1/wave2.tres @@ -7,6 +7,6 @@ [resource] script = ExtResource("2_yby3c") enemies = Dictionary[ExtResource("1_ddbxs"), int]({ -ExtResource("2_mjqnu"): 7 +ExtResource("2_mjqnu"): 25 }) metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Level1/wave3.tres b/Level1/wave3.tres index 96101cf..2e95be1 100644 --- a/Level1/wave3.tres +++ b/Level1/wave3.tres @@ -8,8 +8,8 @@ [resource] script = ExtResource("2_mvtl1") enemies = Dictionary[ExtResource("1_8j1mh"), int]({ -ExtResource("2_cyr3d"): 5, -ExtResource("3_6mlj7"): 2 +ExtResource("2_cyr3d"): 15, +ExtResource("3_6mlj7"): 5 }) rewards_blank_cassette = true metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Level1/wave4.tres b/Level1/wave4.tres index 7f04684..dc6eb14 100644 --- a/Level1/wave4.tres +++ b/Level1/wave4.tres @@ -7,7 +7,7 @@ [resource] script = ExtResource("2_6kjfn") enemies = Dictionary[ExtResource("1_k10uy"), int]({ -ExtResource("2_htd28"): 10 +ExtResource("2_htd28"): 40 }) new_shop = true bonus_cash = 20 diff --git a/Level1/wave5.tres b/Level1/wave5.tres index 7368916..847d838 100644 --- a/Level1/wave5.tres +++ b/Level1/wave5.tres @@ -8,7 +8,7 @@ [resource] script = ExtResource("2_gexw5") enemies = Dictionary[ExtResource("1_evs1i"), int]({ -ExtResource("2_38p3i"): 10, -ExtResource("3_8y41r"): 3 +ExtResource("2_38p3i"): 20, +ExtResource("3_8y41r"): 15 }) metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Level1/wave6.tres b/Level1/wave6.tres index 68330c7..b4deadc 100644 --- a/Level1/wave6.tres +++ b/Level1/wave6.tres @@ -7,6 +7,6 @@ [resource] script = ExtResource("2_ltlqs") enemies = Dictionary[ExtResource("1_asx4x"), int]({ -ExtResource("2_u1tse"): 25 +ExtResource("2_u1tse"): 40 }) metadata/_custom_type_script = "uid://bp6q371iypd06" diff --git a/Level2/specs.tres b/Level2/specs.tres index 0d7ac9e..8c64841 100644 --- a/Level2/specs.tres +++ b/Level2/specs.tres @@ -21,7 +21,6 @@ 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")]) -points_blocked = Array[int]([40, 41, 42]) +points_blocked = Array[int]([34, 33, 41, 40, 39, 47, 79, 86, 85, 78, 91, 84]) zone_scene = ExtResource("15_xdjpy") -data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json" metadata/_custom_type_script = "uid://dalgif6huggwg" diff --git a/Scenes/FlowField/flow_field_tool.gd b/Scenes/FlowField/flow_field_tool.gd index 08fcbd3..1fe61f2 100644 --- a/Scenes/FlowField/flow_field_tool.gd +++ b/Scenes/FlowField/flow_field_tool.gd @@ -342,3 +342,8 @@ func select_in_grid(grid: int) -> void: for node: FlowNode in flow_field.nodes: if node.grid_id == grid: selected.append(node) + + +func _on_print_ids_pressed() -> void: + for node: FlowNode in selected: + print(node.node_id) diff --git a/Scenes/FlowField/flow_field_tool.tscn b/Scenes/FlowField/flow_field_tool.tscn index a44e9ec..7046e97 100644 --- a/Scenes/FlowField/flow_field_tool.tscn +++ b/Scenes/FlowField/flow_field_tool.tscn @@ -126,6 +126,10 @@ layout_mode = 2 size_flags_horizontal = 3 text = "Load" +[node name="Button2" type="Button" parent="VBoxContainer" unique_id=1458001763] +layout_mode = 2 +text = "Print Node_IDS" + [node name="Position" type="HBoxContainer" parent="." unique_id=1194117729] anchors_preset = -1 anchor_left = 0.4 @@ -201,6 +205,7 @@ grow_vertical = 0 [connection signal="pressed" from="VBoxContainer/Calculate" to="." method="_on_calculate_button_pressed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer2/Save" to="." method="_on_save_button_pressed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer2/Load" to="." method="_on_load_button_pressed"] +[connection signal="pressed" from="VBoxContainer/Button2" to="." method="_on_print_ids_pressed"] [connection signal="pressed" from="Position/Button" to="." method="set_position"] [connection signal="pressed" from="Position/Button2" to="." method="offset_position"] [connection signal="pressed" from="VBoxContainer2/Button" to="." method="load_zone"] diff --git a/Scripts/Resources/level_specs.gd b/Scripts/Resources/level_specs.gd index c2eb996..321ffc8 100644 --- a/Scripts/Resources/level_specs.gd +++ b/Scripts/Resources/level_specs.gd @@ -5,4 +5,3 @@ class_name LevelSpecs extends Resource @export var waves: Array[WaveConfig] @export var points_blocked: Array[int] @export var zone_scene: PackedScene -@export var data_path: String diff --git a/Scripts/game.gd b/Scripts/game.gd index e6c431b..4059fc5 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -89,12 +89,12 @@ func networked_set_wave(wave_number: int) -> void: set_upcoming_wave() -func spawn_level(scene: PackedScene, path: String) -> void: +func spawn_level(scene: PackedScene) -> void: level = scene.instantiate() as Level 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(path)) + flow_field.load_from_data(FlowFieldTool.load_flow_field_from_disc(level.data_path)) level.load_flow_field() level.game_manager = self for x: EnemySpawner in level.enemy_spawns: @@ -106,6 +106,7 @@ func spawn_level(scene: PackedScene, path: String) -> void: root_scene.add_child(level) for spawner: EnemySpawner in level.enemy_spawns: spawner.create_path() + level.generate_obstacle(level_specs.points_blocked) func spawn_players() -> void: @@ -298,7 +299,8 @@ func end_wave() -> void: #else: #shop_chance += 0.09 wave_finished.emit() - set_upcoming_wave() + if wave < wave_limit: + set_upcoming_wave() @rpc("reliable", "call_local") @@ -322,7 +324,7 @@ func setup() -> void: connected_players_nodes.clear() #Spawn new stuff - spawn_level(level_specs.zone_scene, level_specs.data_path) + spawn_level(level_specs.zone_scene) #Set starting parameters game_active = false diff --git a/Scripts/level.gd b/Scripts/level.gd index acb8038..b1753ac 100644 --- a/Scripts/level.gd +++ b/Scripts/level.gd @@ -12,6 +12,7 @@ extends Node3D @export var shop: ShopStand @export var obstacle_scenes: Array[PackedScene] @export var obstacles: Array[PackedScene] +@export var data_path: String var walls: Dictionary[FlowNode, TowerBase] = {} var wall_id: int = 0 var tower_base_scene: PackedScene = load("res://Scenes/TowerBase/tower_base.tscn") @@ -84,6 +85,20 @@ func spawn_wall(point: FlowNode, name_id: int, caller_id: int) -> void: disable_path_tower_frames() +func generate_obstacle(ids: Array[int]) -> void: + var points: Array[FlowNode] = [] + for node: FlowNode in flow_field.nodes: + if ids.has(node.node_id): + points.append(node) + for node: FlowNode in points: + var obstacle: Node3D = obstacles[0].instantiate() + obstacle.position = node.position + flow_field.toggle_buildable(node) + if node.traversable: + flow_field.toggle_traversable(node) + add_child(obstacle) + + func generate_obstacles() -> void: pass #print(str(multiplayer.get_unique_id()) + " spawning obstacles with seed: " + str(Game.rng.seed)) diff --git a/Weapons/Assault/weapon_stats.tres b/Weapons/Assault/weapon_stats.tres index 108f36f..e0ce25d 100644 --- a/Weapons/Assault/weapon_stats.tres +++ b/Weapons/Assault/weapon_stats.tres @@ -8,9 +8,9 @@ script = ExtResource("2_k26ta") energy_type = 2 attributes = Dictionary[String, float]({ -"Damage": 3.0, +"Damage": 6.0, "Energy": 20.0, -"Fire Delay": 0.2, +"Fire Delay": 0.468, "Range": 15.0 }) features = Array[ExtResource("1_vqq5l")]([ExtResource("2_prves")]) diff --git a/Worlds/GreenPlanet/Levels/Bridge/bridge.tscn b/Worlds/GreenPlanet/Levels/Bridge/bridge.tscn index ae8afbd..3f246f8 100644 --- a/Worlds/GreenPlanet/Levels/Bridge/bridge.tscn +++ b/Worlds/GreenPlanet/Levels/Bridge/bridge.tscn @@ -258,6 +258,7 @@ cinematic_cam = NodePath("CinemaCam") printer = NodePath("CardPrinter") shop = NodePath("ShopStand") obstacles = Array[PackedScene]([ExtResource("7_6tcu8")]) +data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json" metadata/_custom_type_script = "uid://cvejbo3srx8py" metadata/_editor_floor_ = Vector3(4, -10, 8) @@ -266,7 +267,6 @@ script = ExtResource("9_xuyhn") path_follows = [NodePath("Path3D/PathFollow3D"), NodePath("Path3D2/PathFollow3D2"), NodePath("Path3D3/PathFollow3D2")] cameras = [NodePath("Path3D/PathFollow3D/Camera3D"), NodePath("Path3D2/PathFollow3D2/Camera3D2"), NodePath("Path3D3/PathFollow3D2/Camera3D2")] pan_speed = 0.1 -does_its_thing = false [node name="Path3D" type="Path3D" parent="CinemaCam" unique_id=869538998] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.63136, 4.35346, 7.28324) diff --git a/Worlds/GreenPlanet/Levels/Cave/cave.tscn b/Worlds/GreenPlanet/Levels/Cave/cave.tscn index bedd0bd..c38da4c 100644 --- a/Worlds/GreenPlanet/Levels/Cave/cave.tscn +++ b/Worlds/GreenPlanet/Levels/Cave/cave.tscn @@ -216,6 +216,7 @@ corpses = NodePath("Parents/Corpses") cinematic_cam = NodePath("CinematicCamManager") printer = NodePath("CardPrinter") shop = NodePath("ShopStand") +data_path = "res://Worlds/GreenPlanet/Levels/Cave/level3.json" metadata/_custom_type_script = "uid://cvejbo3srx8py" [node name="Parents" type="Node3D" parent="." unique_id=447416055]