added support for obstacles to levels again

This commit is contained in:
2026-02-07 04:29:19 +11:00
parent 35a0ec30a5
commit f7e478357b
19 changed files with 49 additions and 43 deletions

View File

@@ -15,17 +15,7 @@ scene = ExtResource("3_otbdk")
death_sprite = ExtResource("1_yj87d") death_sprite = ExtResource("1_yj87d")
sprite = ExtResource("2_mkbm6") sprite = ExtResource("2_mkbm6")
spawn_power = 16 spawn_power = 16
health = 70 health = 15
penalty = 4 penalty = 4
movement_speed = 3.5 movement_speed = 3.5
spawn_cooldown = 0.6 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

View File

@@ -15,16 +15,7 @@ scene = ExtResource("3_m808b")
death_sprite = ExtResource("1_qveaa") death_sprite = ExtResource("1_qveaa")
sprite = ExtResource("2_7nc4x") sprite = ExtResource("2_7nc4x")
spawn_power = 14 spawn_power = 14
health = 350 health = 150
penalty = 15 penalty = 15
movement_speed = 1.1 movement_speed = 1.4
spawn_cooldown = 2.0 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

View File

@@ -20,6 +20,6 @@ icon = ExtResource("2_tyyee")
scene = ExtResource("3_mxg1o") scene = ExtResource("3_mxg1o")
death_sprite = ExtResource("1_r8gpy") death_sprite = ExtResource("1_r8gpy")
sprite = SubResource("AtlasTexture_n6kdu") sprite = SubResource("AtlasTexture_n6kdu")
health = 180 health = 60
movement_speed = 1.5 movement_speed = 1.6
spawn_cooldown = 1.2 spawn_cooldown = 1.2

View File

@@ -19,5 +19,4 @@ hero_class = ExtResource("3_ksxj8")
allowed_cards = Array[ExtResource("1_yuhm2")]([ExtResource("2_vvycy")]) 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"), ExtResource("7_ginir"), ExtResource("8_heo8u"), ExtResource("9_5mf8a"), ExtResource("10_skwnu"), ExtResource("11_rusuq")])
zone_scene = ExtResource("12_ksxj8") zone_scene = ExtResource("12_ksxj8")
data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json"
metadata/_custom_type_script = "uid://dalgif6huggwg" metadata/_custom_type_script = "uid://dalgif6huggwg"

View File

@@ -7,7 +7,7 @@
[resource] [resource]
script = ExtResource("2_tihwe") script = ExtResource("2_tihwe")
enemies = Dictionary[ExtResource("1_ijigs"), int]({ enemies = Dictionary[ExtResource("1_ijigs"), int]({
ExtResource("2_ywnes"): 4 ExtResource("2_ywnes"): 10
}) })
rewards_blank_cassette = true rewards_blank_cassette = true
metadata/_custom_type_script = "uid://bp6q371iypd06" metadata/_custom_type_script = "uid://bp6q371iypd06"

View File

@@ -7,6 +7,6 @@
[resource] [resource]
script = ExtResource("2_yby3c") script = ExtResource("2_yby3c")
enemies = Dictionary[ExtResource("1_ddbxs"), int]({ enemies = Dictionary[ExtResource("1_ddbxs"), int]({
ExtResource("2_mjqnu"): 7 ExtResource("2_mjqnu"): 25
}) })
metadata/_custom_type_script = "uid://bp6q371iypd06" metadata/_custom_type_script = "uid://bp6q371iypd06"

View File

@@ -8,8 +8,8 @@
[resource] [resource]
script = ExtResource("2_mvtl1") script = ExtResource("2_mvtl1")
enemies = Dictionary[ExtResource("1_8j1mh"), int]({ enemies = Dictionary[ExtResource("1_8j1mh"), int]({
ExtResource("2_cyr3d"): 5, ExtResource("2_cyr3d"): 15,
ExtResource("3_6mlj7"): 2 ExtResource("3_6mlj7"): 5
}) })
rewards_blank_cassette = true rewards_blank_cassette = true
metadata/_custom_type_script = "uid://bp6q371iypd06" metadata/_custom_type_script = "uid://bp6q371iypd06"

View File

@@ -7,7 +7,7 @@
[resource] [resource]
script = ExtResource("2_6kjfn") script = ExtResource("2_6kjfn")
enemies = Dictionary[ExtResource("1_k10uy"), int]({ enemies = Dictionary[ExtResource("1_k10uy"), int]({
ExtResource("2_htd28"): 10 ExtResource("2_htd28"): 40
}) })
new_shop = true new_shop = true
bonus_cash = 20 bonus_cash = 20

View File

@@ -8,7 +8,7 @@
[resource] [resource]
script = ExtResource("2_gexw5") script = ExtResource("2_gexw5")
enemies = Dictionary[ExtResource("1_evs1i"), int]({ enemies = Dictionary[ExtResource("1_evs1i"), int]({
ExtResource("2_38p3i"): 10, ExtResource("2_38p3i"): 20,
ExtResource("3_8y41r"): 3 ExtResource("3_8y41r"): 15
}) })
metadata/_custom_type_script = "uid://bp6q371iypd06" metadata/_custom_type_script = "uid://bp6q371iypd06"

View File

@@ -7,6 +7,6 @@
[resource] [resource]
script = ExtResource("2_ltlqs") script = ExtResource("2_ltlqs")
enemies = Dictionary[ExtResource("1_asx4x"), int]({ enemies = Dictionary[ExtResource("1_asx4x"), int]({
ExtResource("2_u1tse"): 25 ExtResource("2_u1tse"): 40
}) })
metadata/_custom_type_script = "uid://bp6q371iypd06" metadata/_custom_type_script = "uid://bp6q371iypd06"

View File

@@ -21,7 +21,6 @@ script = ExtResource("2_y3kr2")
hero_class = ExtResource("4_ldc6i") hero_class = ExtResource("4_ldc6i")
allowed_cards = Array[ExtResource("1_rchhl")]([ExtResource("2_geygk"), ExtResource("3_xdjpy")]) 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"), 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") zone_scene = ExtResource("15_xdjpy")
data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json"
metadata/_custom_type_script = "uid://dalgif6huggwg" metadata/_custom_type_script = "uid://dalgif6huggwg"

View File

@@ -342,3 +342,8 @@ func select_in_grid(grid: int) -> void:
for node: FlowNode in flow_field.nodes: for node: FlowNode in flow_field.nodes:
if node.grid_id == grid: if node.grid_id == grid:
selected.append(node) selected.append(node)
func _on_print_ids_pressed() -> void:
for node: FlowNode in selected:
print(node.node_id)

View File

@@ -126,6 +126,10 @@ layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Load" 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] [node name="Position" type="HBoxContainer" parent="." unique_id=1194117729]
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.4 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/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/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/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/Button" to="." method="set_position"]
[connection signal="pressed" from="Position/Button2" to="." method="offset_position"] [connection signal="pressed" from="Position/Button2" to="." method="offset_position"]
[connection signal="pressed" from="VBoxContainer2/Button" to="." method="load_zone"] [connection signal="pressed" from="VBoxContainer2/Button" to="." method="load_zone"]

View File

@@ -5,4 +5,3 @@ class_name LevelSpecs extends Resource
@export var waves: Array[WaveConfig] @export var waves: Array[WaveConfig]
@export var points_blocked: Array[int] @export var points_blocked: Array[int]
@export var zone_scene: PackedScene @export var zone_scene: PackedScene
@export var data_path: String

View File

@@ -89,12 +89,12 @@ func networked_set_wave(wave_number: int) -> void:
set_upcoming_wave() set_upcoming_wave()
func spawn_level(scene: PackedScene, path: String) -> void: func spawn_level(scene: PackedScene) -> void:
level = scene.instantiate() as Level level = scene.instantiate() as Level
var flow_field: FlowField = FlowField.new() var flow_field: FlowField = FlowField.new()
level.flow_field = flow_field level.flow_field = flow_field
level.add_child(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.load_flow_field()
level.game_manager = self level.game_manager = self
for x: EnemySpawner in level.enemy_spawns: for x: EnemySpawner in level.enemy_spawns:
@@ -106,6 +106,7 @@ func spawn_level(scene: PackedScene, path: String) -> void:
root_scene.add_child(level) root_scene.add_child(level)
for spawner: EnemySpawner in level.enemy_spawns: for spawner: EnemySpawner in level.enemy_spawns:
spawner.create_path() spawner.create_path()
level.generate_obstacle(level_specs.points_blocked)
func spawn_players() -> void: func spawn_players() -> void:
@@ -298,7 +299,8 @@ func end_wave() -> void:
#else: #else:
#shop_chance += 0.09 #shop_chance += 0.09
wave_finished.emit() wave_finished.emit()
set_upcoming_wave() if wave < wave_limit:
set_upcoming_wave()
@rpc("reliable", "call_local") @rpc("reliable", "call_local")
@@ -322,7 +324,7 @@ func setup() -> void:
connected_players_nodes.clear() connected_players_nodes.clear()
#Spawn new stuff #Spawn new stuff
spawn_level(level_specs.zone_scene, level_specs.data_path) spawn_level(level_specs.zone_scene)
#Set starting parameters #Set starting parameters
game_active = false game_active = false

View File

@@ -12,6 +12,7 @@ extends Node3D
@export var shop: ShopStand @export var shop: ShopStand
@export var obstacle_scenes: Array[PackedScene] @export var obstacle_scenes: Array[PackedScene]
@export var obstacles: Array[PackedScene] @export var obstacles: Array[PackedScene]
@export var data_path: String
var walls: Dictionary[FlowNode, TowerBase] = {} var walls: Dictionary[FlowNode, TowerBase] = {}
var wall_id: int = 0 var wall_id: int = 0
var tower_base_scene: PackedScene = load("res://Scenes/TowerBase/tower_base.tscn") 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() 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: func generate_obstacles() -> void:
pass pass
#print(str(multiplayer.get_unique_id()) + " spawning obstacles with seed: " + str(Game.rng.seed)) #print(str(multiplayer.get_unique_id()) + " spawning obstacles with seed: " + str(Game.rng.seed))

View File

@@ -8,9 +8,9 @@
script = ExtResource("2_k26ta") script = ExtResource("2_k26ta")
energy_type = 2 energy_type = 2
attributes = Dictionary[String, float]({ attributes = Dictionary[String, float]({
"Damage": 3.0, "Damage": 6.0,
"Energy": 20.0, "Energy": 20.0,
"Fire Delay": 0.2, "Fire Delay": 0.468,
"Range": 15.0 "Range": 15.0
}) })
features = Array[ExtResource("1_vqq5l")]([ExtResource("2_prves")]) features = Array[ExtResource("1_vqq5l")]([ExtResource("2_prves")])

View File

@@ -258,6 +258,7 @@ cinematic_cam = NodePath("CinemaCam")
printer = NodePath("CardPrinter") printer = NodePath("CardPrinter")
shop = NodePath("ShopStand") shop = NodePath("ShopStand")
obstacles = Array[PackedScene]([ExtResource("7_6tcu8")]) obstacles = Array[PackedScene]([ExtResource("7_6tcu8")])
data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json"
metadata/_custom_type_script = "uid://cvejbo3srx8py" metadata/_custom_type_script = "uid://cvejbo3srx8py"
metadata/_editor_floor_ = Vector3(4, -10, 8) 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")] path_follows = [NodePath("Path3D/PathFollow3D"), NodePath("Path3D2/PathFollow3D2"), NodePath("Path3D3/PathFollow3D2")]
cameras = [NodePath("Path3D/PathFollow3D/Camera3D"), NodePath("Path3D2/PathFollow3D2/Camera3D2"), NodePath("Path3D3/PathFollow3D2/Camera3D2")] cameras = [NodePath("Path3D/PathFollow3D/Camera3D"), NodePath("Path3D2/PathFollow3D2/Camera3D2"), NodePath("Path3D3/PathFollow3D2/Camera3D2")]
pan_speed = 0.1 pan_speed = 0.1
does_its_thing = false
[node name="Path3D" type="Path3D" parent="CinemaCam" unique_id=869538998] [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) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.63136, 4.35346, 7.28324)

View File

@@ -216,6 +216,7 @@ corpses = NodePath("Parents/Corpses")
cinematic_cam = NodePath("CinematicCamManager") cinematic_cam = NodePath("CinematicCamManager")
printer = NodePath("CardPrinter") printer = NodePath("CardPrinter")
shop = NodePath("ShopStand") shop = NodePath("ShopStand")
data_path = "res://Worlds/GreenPlanet/Levels/Cave/level3.json"
metadata/_custom_type_script = "uid://cvejbo3srx8py" metadata/_custom_type_script = "uid://cvejbo3srx8py"
[node name="Parents" type="Node3D" parent="." unique_id=447416055] [node name="Parents" type="Node3D" parent="." unique_id=447416055]