diff --git a/addons/enhanced_gridmap/enhanced_gridmap.gd b/addons/enhanced_gridmap/enhanced_gridmap.gd index c90f1d1..b273821 100644 --- a/addons/enhanced_gridmap/enhanced_gridmap.gd +++ b/addons/enhanced_gridmap/enhanced_gridmap.gd @@ -600,6 +600,10 @@ func clear_path_visualization(unused_floor_idx: int = 0): for x in range(columns): for z in range(rows): var cell_item = get_cell_item(Vector3i(x, 2, z)) + # Protect Safe Zone (ID 2) from being cleared by path visualization + if cell_item == 2: + continue + if cell_item == hover_item or cell_item == start_item or cell_item == end_item: set_cell_item(Vector3i(x, 2, z), -1) diff --git a/addons/enhanced_gridmap/meshlibrary/default.tres b/addons/enhanced_gridmap/meshlibrary/default.tres index 0110c8f..1e0a22d 100644 --- a/addons/enhanced_gridmap/meshlibrary/default.tres +++ b/addons/enhanced_gridmap/meshlibrary/default.tres @@ -12,6 +12,7 @@ [ext_resource type="BoxMesh" uid="uid://dy5p77cjb3geo" path="res://addons/enhanced_gridmap/meshlibrary/tile_start.tres" id="9_pgnbl"] [ext_resource type="ArrayMesh" uid="uid://dtr46jmckif0p" path="res://assets/models/meshes/block.res" id="9_uwjsj"] [ext_resource type="Texture2D" uid="uid://dpkx1a780pvwv" path="res://assets/textures/tile_diamond.png" id="10_sx8rm"] +[ext_resource type="BoxMesh" uid="uid://fy4bhoeii40c" path="res://addons/enhanced_gridmap/meshlibrary/tile_safe_zone.tres" id="10_uwjsj"] [ext_resource type="BoxMesh" uid="uid://b5cc3prem52r6" path="res://addons/enhanced_gridmap/meshlibrary/tile_freeze.tres" id="11_pgnbl"] [ext_resource type="BoxMesh" uid="uid://dcjdwbffgtutt" path="res://addons/enhanced_gridmap/meshlibrary/tile_non_walkable.tres" id="11_uwjsj"] @@ -80,6 +81,7 @@ item/1/shapes = [] item/1/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) item/1/navigation_layers = 1 item/2/name = "safe_zone" +item/2/mesh = ExtResource("10_uwjsj") item/2/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) item/2/mesh_cast_shadow = 1 item/2/shapes = [] diff --git a/addons/enhanced_gridmap/meshlibrary/tile_safe_zone.tres b/addons/enhanced_gridmap/meshlibrary/tile_safe_zone.tres index 0c19e7b..da6a472 100644 --- a/addons/enhanced_gridmap/meshlibrary/tile_safe_zone.tres +++ b/addons/enhanced_gridmap/meshlibrary/tile_safe_zone.tres @@ -1,6 +1,7 @@ [gd_resource type="BoxMesh" format=3 uid="uid://fy4bhoeii40c"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ou2ex"] +transparency = 1 albedo_color = Color(0.38039216, 1, 0.33333334, 1) [resource] diff --git a/assets/graphics/vfx/effects/animation-head.tres b/assets/graphics/vfx/effects/animation-head.tres index 2d30c80..dd26823 100644 --- a/assets/graphics/vfx/effects/animation-head.tres +++ b/assets/graphics/vfx/effects/animation-head.tres @@ -4,6 +4,7 @@ [ext_resource type="Texture2D" uid="uid://d2t23a885h1i0" path="res://assets/graphics/vfx/effects/freeze.png" id="2_gsxsy"] [ext_resource type="Texture2D" uid="uid://lykg7d54qrof" path="res://assets/graphics/vfx/effects/ghost.png" id="3_hg3tj"] [ext_resource type="Texture2D" uid="uid://45twcoribm0b" path="res://assets/graphics/vfx/effects/speed.png" id="4_8bjou"] +[ext_resource type="Texture2D" uid="uid://c718e7y7qm03x" path="res://assets/graphics/vfx/effects/bullrun_ui.png" id="5_gsxsy"] [ext_resource type="Texture2D" uid="uid://dun5j8mrxpumo" path="res://assets/graphics/vfx/effects/stunned.png" id="5_jmlpd"] [ext_resource type="Texture2D" uid="uid://mnsqay5hs0jh" path="res://assets/graphics/vfx/effects/wall.png" id="6_q227o"] @@ -1967,6 +1968,198 @@ region = Rect2(1000, 1750, 125, 125) atlas = ExtResource("4_8bjou") region = Rect2(1125, 1750, 125, 125) +[sub_resource type="AtlasTexture" id="AtlasTexture_hg3tj"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 0, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8bjou"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 0, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jmlpd"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 0, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q227o"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 0, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_oaoac"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 0, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xpe87"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 0, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_adqj4"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 512, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5m36t"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 512, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ng11y"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 512, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d36hw"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 512, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_u4va7"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 512, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tvg0i"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 512, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xu137"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 1024, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0sktw"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 1024, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0k7wr"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 1024, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2g3nj"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 1024, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_e00q3"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 1024, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xefxw"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 1024, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7f71x"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 1536, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lcyov"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 1536, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iy2fp"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 1536, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2ahmr"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 1536, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1fdg2"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 1536, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8m0vd"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 1536, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y1kkk"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 2048, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k4uv6"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 2048, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_juism"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 2048, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1fe7s"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 2048, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qh3vq"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 2048, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_edbcw"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 2048, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tsdhc"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 2560, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pmelt"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 2560, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_s51m1"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 2560, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gxmnc"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 2560, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fp82g"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 2560, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nrflg"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 2560, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ed58s"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 3072, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vmbou"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 3072, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3tqxh"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 3072, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jgcx2"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 3072, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ydiin"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 3072, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3vg2t"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 3072, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_u84fk"] +atlas = ExtResource("5_gsxsy") +region = Rect2(0, 3584, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3qpd2"] +atlas = ExtResource("5_gsxsy") +region = Rect2(682, 3584, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ultdv"] +atlas = ExtResource("5_gsxsy") +region = Rect2(1364, 3584, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4nprg"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2046, 3584, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_piqxh"] +atlas = ExtResource("5_gsxsy") +region = Rect2(2728, 3584, 682, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qk02p"] +atlas = ExtResource("5_gsxsy") +region = Rect2(3410, 3584, 682, 512) + [sub_resource type="AtlasTexture" id="AtlasTexture_yi8v5"] atlas = ExtResource("5_jmlpd") region = Rect2(0, 0, 284, 284) @@ -4306,6 +4499,155 @@ animations = [{ }, { "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_hg3tj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8bjou") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jmlpd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q227o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_oaoac") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xpe87") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_adqj4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5m36t") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ng11y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d36hw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_u4va7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tvg0i") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xu137") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0sktw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0k7wr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2g3nj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_e00q3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xefxw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7f71x") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lcyov") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iy2fp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2ahmr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1fdg2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8m0vd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y1kkk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k4uv6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_juism") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1fe7s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qh3vq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_edbcw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tsdhc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pmelt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_s51m1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gxmnc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fp82g") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nrflg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ed58s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vmbou") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3tqxh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jgcx2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ydiin") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3vg2t") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_u84fk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3qpd2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ultdv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4nprg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_piqxh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qk02p") +}], +"loop": true, +"name": &"stop-phase", +"speed": 30.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_yi8v5") }, { "duration": 1.0, diff --git a/assets/graphics/vfx/effects/bullrun_ui.png.import b/assets/graphics/vfx/effects/bullrun_ui.png.import index a370fde..a6a658e 100644 --- a/assets/graphics/vfx/effects/bullrun_ui.png.import +++ b/assets/graphics/vfx/effects/bullrun_ui.png.import @@ -24,7 +24,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -38,4 +38,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 diff --git a/assets/graphics/vfx/stop_n_go/1.png b/assets/graphics/vfx/stop_n_go/1.png new file mode 100644 index 0000000..bf22187 Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/1.png differ diff --git a/assets/graphics/vfx/stop_n_go/1.png.import b/assets/graphics/vfx/stop_n_go/1.png.import new file mode 100644 index 0000000..ef1f807 --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://sthm2v27rgyt" +path="res://.godot/imported/1.png-de2857755dd5de354edd5522932d810d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/1.png" +dest_files=["res://.godot/imported/1.png-de2857755dd5de354edd5522932d810d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/2.png b/assets/graphics/vfx/stop_n_go/2.png new file mode 100644 index 0000000..b65aae2 Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/2.png differ diff --git a/assets/graphics/vfx/stop_n_go/2.png.import b/assets/graphics/vfx/stop_n_go/2.png.import new file mode 100644 index 0000000..1ffb7e7 --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://rptj4ywi1tms" +path="res://.godot/imported/2.png-9d3a83015cd201ee197011ceb6d42fb1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/2.png" +dest_files=["res://.godot/imported/2.png-9d3a83015cd201ee197011ceb6d42fb1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/3.png b/assets/graphics/vfx/stop_n_go/3.png new file mode 100644 index 0000000..5a3548a Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/3.png differ diff --git a/assets/graphics/vfx/stop_n_go/3.png.import b/assets/graphics/vfx/stop_n_go/3.png.import new file mode 100644 index 0000000..44140af --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxsy87v04oytl" +path="res://.godot/imported/3.png-011462d22e36460421c5ea9540562f82.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/3.png" +dest_files=["res://.godot/imported/3.png-011462d22e36460421c5ea9540562f82.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/bull_warning.png b/assets/graphics/vfx/stop_n_go/bull_warning.png new file mode 100644 index 0000000..1c86c18 Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/bull_warning.png differ diff --git a/assets/graphics/vfx/stop_n_go/bull_warning.png.import b/assets/graphics/vfx/stop_n_go/bull_warning.png.import new file mode 100644 index 0000000..04f4dd1 --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/bull_warning.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c63euesgl1gi5" +path="res://.godot/imported/bull_warning.png-94b94c984b16c0cd5fbc02d0e2cc731d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/bull_warning.png" +dest_files=["res://.godot/imported/bull_warning.png-94b94c984b16c0cd5fbc02d0e2cc731d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/go.png b/assets/graphics/vfx/stop_n_go/go.png new file mode 100644 index 0000000..a6a03e6 Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/go.png differ diff --git a/assets/graphics/vfx/stop_n_go/go.png.import b/assets/graphics/vfx/stop_n_go/go.png.import new file mode 100644 index 0000000..5f38b28 --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/go.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ciisxcnnh4b3b" +path="res://.godot/imported/go.png-135d17710334216e8e3a1701b67c3dfd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/go.png" +dest_files=["res://.godot/imported/go.png-135d17710334216e8e3a1701b67c3dfd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/safezone_appear.png b/assets/graphics/vfx/stop_n_go/safezone_appear.png new file mode 100644 index 0000000..8d8f94e Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/safezone_appear.png differ diff --git a/assets/graphics/vfx/stop_n_go/safezone_appear.png.import b/assets/graphics/vfx/stop_n_go/safezone_appear.png.import new file mode 100644 index 0000000..946bb8a --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/safezone_appear.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6kisheilvgfp" +path="res://.godot/imported/safezone_appear.png-b4d9c3bf6ea84a571d25c2f77c377a7e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/safezone_appear.png" +dest_files=["res://.godot/imported/safezone_appear.png-b4d9c3bf6ea84a571d25c2f77c377a7e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/times_up_muter.png b/assets/graphics/vfx/stop_n_go/times_up_muter.png new file mode 100644 index 0000000..dca5e54 Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/times_up_muter.png differ diff --git a/assets/graphics/vfx/stop_n_go/times_up_muter.png.import b/assets/graphics/vfx/stop_n_go/times_up_muter.png.import new file mode 100644 index 0000000..a5f1fbc --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/times_up_muter.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cat0vd2afn465" +path="res://.godot/imported/times_up_muter.png-2c113d01226305762c7f0419f4b82889.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/times_up_muter.png" +dest_files=["res://.godot/imported/times_up_muter.png-2c113d01226305762c7f0419f4b82889.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/timesup.png b/assets/graphics/vfx/stop_n_go/timesup.png new file mode 100644 index 0000000..0e26c5d Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/timesup.png differ diff --git a/assets/graphics/vfx/stop_n_go/timesup.png.import b/assets/graphics/vfx/stop_n_go/timesup.png.import new file mode 100644 index 0000000..0d82298 --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/timesup.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d2pgt0grjgfx3" +path="res://.godot/imported/timesup.png-7ec99c53c29ab2cd560a4c4c1015dd87.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/timesup.png" +dest_files=["res://.godot/imported/timesup.png-7ec99c53c29ab2cd560a4c4c1015dd87.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/vfx/stop_n_go/timesup_bg.png b/assets/graphics/vfx/stop_n_go/timesup_bg.png new file mode 100644 index 0000000..ca85acf Binary files /dev/null and b/assets/graphics/vfx/stop_n_go/timesup_bg.png differ diff --git a/assets/graphics/vfx/stop_n_go/timesup_bg.png.import b/assets/graphics/vfx/stop_n_go/timesup_bg.png.import new file mode 100644 index 0000000..029344e --- /dev/null +++ b/assets/graphics/vfx/stop_n_go/timesup_bg.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kvhu1exp34m1" +path="res://.godot/imported/timesup_bg.png-4a3fd9745629cd2ade5fa992b587e9b4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/vfx/stop_n_go/timesup_bg.png" +dest_files=["res://.godot/imported/timesup_bg.png-4a3fd9745629cd2ade5fa992b587e9b4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/main.tscn b/scenes/main.tscn index 06c1e08..185ef88 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -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 diff --git a/scenes/player.gd b/scenes/player.gd index c27174f..1284c07 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -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() diff --git a/scenes/player.tscn b/scenes/player.tscn index db93cca..9b63d96 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -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) diff --git a/scenes/stop_n_go_animation.tscn b/scenes/stop_n_go_animation.tscn new file mode 100644 index 0000000..ffa09a6 --- /dev/null +++ b/scenes/stop_n_go_animation.tscn @@ -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] diff --git a/scripts/managers/player_action_manager.gd b/scripts/managers/player_action_manager.gd index 6591561..5a1dd6c 100644 --- a/scripts/managers/player_action_manager.gd +++ b/scripts/managers/player_action_manager.gd @@ -181,10 +181,8 @@ func clear_highlights(): # Check Layer 2 (Overlay Highlight) var l2_pos = Vector3i(cell.x, 2, cell.y) var l2_item = enhanced_gridmap.get_cell_item(l2_pos) - # Only clear if it looks like a highlight (e.g. ID 1) - # or generally just clear layer 2 if we assume we own it for highlights? - # Safest is to check against hover_id or typical highlight IDs. - if l2_item != -1: + # Only clear if it is a highlight and NOT a Safe Zone (ID 2) + if l2_item != -1 and l2_item != 2: enhanced_gridmap.set_cell_item(l2_pos, -1) highlighted_cells.clear() diff --git a/scripts/managers/stop_n_go_manager.gd b/scripts/managers/stop_n_go_manager.gd index e9cc766..c897e36 100644 --- a/scripts/managers/stop_n_go_manager.gd +++ b/scripts/managers/stop_n_go_manager.gd @@ -99,18 +99,18 @@ func _process(delta): if multiplayer.is_server(): if current_phase == Phase.GO: - var int_timer = int(ceil(phase_timer)) - if int_timer == 3 and spawned_safe_zones == 0 and phase_timer <= 3.0: - _spawn_dynamic_safe_zone() - elif int_timer == 2 and spawned_safe_zones == 1 and phase_timer <= 2.0: - _spawn_dynamic_safe_zone() - elif int_timer == 1 and spawned_safe_zones == 2 and phase_timer <= 1.0: - _spawn_dynamic_safe_zone() + # Spawn all 3 safe zones at once, 3 seconds before STOP + if phase_timer <= 3.0 and spawned_safe_zones == 0: + print("[StopNGo] GO phase ending soon. Spawning 3 safe zones...") + for i in range(3): + _spawn_dynamic_safe_zone() if phase_timer <= 0: if current_phase == Phase.GO: + print("[StopNGo] GO Timer reached 0. Starting STOP Phase.") _start_phase(Phase.STOP) else: + print("[StopNGo] STOP Timer reached 0. Starting GO Phase.") _start_phase(Phase.GO) # Update HUD locally @@ -499,8 +499,9 @@ func _is_in_safe_zone(pos: Vector2i) -> bool: gridmap = get_node_or_null("/root/Main/EnhancedGridMap") if not gridmap: return false - var floor_tile = gridmap.get_cell_item(Vector3i(pos.x, 0, pos.y)) - return floor_tile == TILE_SAFE + # Check Layer 2 (Overlay layer) for Safe Zone tile + var overlay_tile = gridmap.get_cell_item(Vector3i(pos.x, 2, pos.y)) + return overlay_tile == TILE_SAFE func _spawn_dynamic_safe_zone(): if not multiplayer.is_server(): return @@ -523,15 +524,17 @@ func _spawn_dynamic_safe_zone(): var rect = possible_rects.pick_random() active_safe_zone_rects.append(rect) spawned_safe_zones += 1 + print("[StopNGo] Spawning Safe Zone %d at %s" % [spawned_safe_zones, rect]) - # Paint floor to TILE_SAFE + # Paint Floor 2 (Overlay layer) to TILE_SAFE + # This allows seeing items below on Floor 1 for rx in range(rect.size.x): for rz in range(rect.size.y): var px = rect.position.x + rx var pz = rect.position.y + rz - gridmap.set_cell_item(Vector3i(px, 0, pz), TILE_SAFE) + gridmap.set_cell_item(Vector3i(px, 2, pz), TILE_SAFE) if can_rpc() and main: - main.rpc("sync_grid_item", px, 0, pz, TILE_SAFE) + main.rpc("sync_grid_item", px, 2, pz, TILE_SAFE) func _is_valid_safe_zone_area(gridmap: Node, start_x: int, start_z: int, width: int, height: int) -> bool: # Avoid bounds or start/finish cols @@ -546,16 +549,12 @@ func _is_valid_safe_zone_area(gridmap: Node, start_x: int, start_z: int, width: for x in range(start_x, start_x + width): for z in range(start_z, start_z + height): var floor_0 = gridmap.get_cell_item(Vector3i(x, 0, z)) - var floor_1 = gridmap.get_cell_item(Vector3i(x, 1, z)) # Floor must be purely TILE_WALKABLE (0) + # We no longer check Floor 1 (items) so safe zones can spawn ON TOP of tiles if floor_0 != TILE_WALKABLE: return false - # Floor 1 must be empty (-1) - no items or obstacles - if floor_1 != -1: - return false - return true func _clear_dynamic_safe_zones(): @@ -564,17 +563,19 @@ func _clear_dynamic_safe_zones(): if not gridmap: return var main = get_node_or_null("/root/Main") + print("[StopNGo] Clearing %d active safe zones." % active_safe_zone_rects.size()) + for rect in active_safe_zone_rects: for rx in range(rect.size.x): for rz in range(rect.size.y): var px = rect.position.x + rx var pz = rect.position.y + rz - # Only clear if it is actually still a safe zone - if gridmap.get_cell_item(Vector3i(px, 0, pz)) == TILE_SAFE: - gridmap.set_cell_item(Vector3i(px, 0, pz), TILE_WALKABLE) + # Only clear layer 2 + if gridmap.get_cell_item(Vector3i(px, 2, pz)) == TILE_SAFE: + gridmap.set_cell_item(Vector3i(px, 2, pz), -1) if can_rpc() and main: - main.rpc("sync_grid_item", px, 0, pz, TILE_WALKABLE) + main.rpc("sync_grid_item", px, 2, pz, -1) active_safe_zone_rects.clear() spawned_safe_zones = 0 diff --git a/scripts/managers/touch_controls.gd b/scripts/managers/touch_controls.gd index f40dcad..5e90b8f 100644 --- a/scripts/managers/touch_controls.gd +++ b/scripts/managers/touch_controls.gd @@ -497,7 +497,7 @@ func _apply_settings(): """Apply current settings to UI elements.""" # Apply joystick visibility if virtual_joystick: - virtual_joystick.visible = joystick_enabled + virtual_joystick.visible = joystick_enabled and _is_touch_device() # Apply touch buttons visibility - FORCED ON per request to "just show them" # Apply touch buttons visibility