feat: implement the new "Stop N Go" game mode, including phase management, dynamic safe zones, player missions, and dedicated UI with visual effects.

This commit is contained in:
Yogi Wiguna
2026-03-24 15:16:30 +08:00
parent da9ba9361d
commit 4946f1daa6
30 changed files with 759 additions and 48 deletions
+3 -3
View File
@@ -92,6 +92,9 @@ current = true
fov = 21.0
size = 15.0
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=12971344]
environment = ExtResource("4_ky38j")
[node name="PlayerboardPanel" type="PanelContainer" parent="." unique_id=1098203639]
material = SubResource("ShaderMaterial_j8jky")
anchors_preset = 4
@@ -1140,9 +1143,6 @@ theme_override_styles/focus = SubResource("StyleBoxFlat_1cewu")
placeholder_text = "Chat"
alignment = 1
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=12971344]
environment = ExtResource("4_ky38j")
[node name="MessageBar" type="PanelContainer" parent="." unique_id=142729129]
visible = false
anchors_preset = 2
+7 -4
View File
@@ -621,10 +621,13 @@ func receive_spawn_positions_update(occupied_positions: Array):
highlighted_spawn_points.erase(pos)
if enhanced_gridmap:
# Clear the highlight from Layer 2 (Overlay) instead of overwriting Floor 0
enhanced_gridmap.set_cell_item(
Vector3i(pos.x, 2, pos.y),
-1
)
# PROTECTION: Never clear if it's a Safe Zone (ID 2)
var current_l2 = enhanced_gridmap.get_cell_item(Vector3i(pos.x, 2, pos.y))
if current_l2 != 2:
enhanced_gridmap.set_cell_item(
Vector3i(pos.x, 2, pos.y),
-1
)
# Now highlight available positions
highlight_available_spawn_points()
+2 -13
View File
@@ -31,17 +31,8 @@ spacing_glyph = 5
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0)
collision_layer = 2
script = ExtResource("1_qecr4")
is_bot = null
enhanced_gridmap_path = null
current_position = null
cell_size = Vector3(1, 1, 1)
cell_offset = null
goals = null
playerboard = null
movement_range = null
use_diagonal_movement = true
is_my_turn = null
has_moved_this_turn = null
[node name="Masbro" parent="." unique_id=1585899496 instance=ExtResource("2_mjsl8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
@@ -151,9 +142,7 @@ transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 1
visible = false
billboard = 1
sprite_frames = ExtResource("10_y4r1p")
animation = &"wall-initiator"
frame = 149
frame_progress = 1.0
animation = &"stop-phase"
[node name="receiver_skill_stunned" type="AnimatedSprite3D" parent="." unique_id=56953581]
transform = Transform3D(0.5, 0, 0, 0, -2.1855694e-08, -0.5, 0, 0.5, -2.1855694e-08, 0, 1.5653763, 0)
@@ -168,7 +157,7 @@ frame_progress = 1.0
transform = Transform3D(0.5, 0, 0, 0, -2.1855694e-08, -0.5, 0, 0.5, -2.1855694e-08, 0, 1.5653763, 0)
visible = false
sprite_frames = ExtResource("10_y4r1p")
animation = &"freeze-initiator"
animation = &"attack-mode-receiver-top"
[node name="attack_mode_bot" type="AnimatedSprite3D" parent="." unique_id=1320274503]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, -0.6701627, 0)
+11
View File
@@ -0,0 +1,11 @@
[gd_scene format=3 uid="uid://dbqj67js76fa5"]
[node name="StopNGoAnimation" type="Control" unique_id=257399947]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1614214519]