From e8fc3f86c59a81f4d16aeda1651e5b0d7251fb90 Mon Sep 17 00:00:00 2001 From: Yogi Wiguna Date: Tue, 3 Feb 2026 10:16:03 +0800 Subject: [PATCH] feat: Implement special tile power-up system with manager, levels, cooldowns, inventory, and associated assets. --- addons/enhanced_gridmap/enhanced_gridmap.gd | 21 ++++++--- .../enhanced_gridmap/meshlibrary/default.tres | 6 +-- ...iamond_holo.tres => tile_area_freeze.tres} | 8 ++-- .../{tile_star_holo.tres => tile_ghost.tres} | 0 .../{tile_coin_holo.tres => tile_speed.tres} | 8 ++-- .../{tile_heart_holo.tres => tile_wall.tres} | 6 +-- .../freeze_area_tile.png | Bin .../power_tile/freeze_area_tile.png.import | 41 ++++++++++++++++++ .../speed_tile.png | Bin .../textures/power_tile/speed_tile.png.import | 41 ++++++++++++++++++ .../wall_tile.png | Bin .../textures/power_tile/wall_tile.png.import | 41 ++++++++++++++++++ scenes/main.tscn | 11 +++-- scripts/managers/special_tiles_manager.gd | 2 - 14 files changed, 157 insertions(+), 28 deletions(-) rename assets/models/tiles/{tile_diamond_holo.tres => tile_area_freeze.tres} (85%) rename assets/models/tiles/{tile_star_holo.tres => tile_ghost.tres} (100%) rename assets/models/tiles/{tile_coin_holo.tres => tile_speed.tres} (84%) rename assets/models/tiles/{tile_heart_holo.tres => tile_wall.tres} (88%) rename assets/textures/{power tile_tile => power_tile}/freeze_area_tile.png (100%) create mode 100644 assets/textures/power_tile/freeze_area_tile.png.import rename assets/textures/{power tile_tile => power_tile}/speed_tile.png (100%) create mode 100644 assets/textures/power_tile/speed_tile.png.import rename assets/textures/{power tile_tile => power_tile}/wall_tile.png (100%) create mode 100644 assets/textures/power_tile/wall_tile.png.import diff --git a/addons/enhanced_gridmap/enhanced_gridmap.gd b/addons/enhanced_gridmap/enhanced_gridmap.gd index 5829a0d..22c22a4 100644 --- a/addons/enhanced_gridmap/enhanced_gridmap.gd +++ b/addons/enhanced_gridmap/enhanced_gridmap.gd @@ -230,6 +230,7 @@ func randomize_floor(floor_index: int, custom_rng_callable: Callable = Callable( print("Error: No MeshLibrary assigned to GridMap") return + validate_item_indices() var rng = RandomNumberGenerator.new() @@ -245,19 +246,27 @@ func randomize_floor(floor_index: int, custom_rng_callable: Callable = Callable( set_cell_item(Vector3i(x, floor_index, z), -1) # Clear item if no ground continue - # Use custom callable if provided + # Use custom callable if provided, otherwise default to ScarcityController or internal logic + var item_index = -1 + if custom_rng_callable.is_valid(): - var item_index = custom_rng_callable.call() - set_cell_item(Vector3i(x, floor_index, z), item_index) + item_index = custom_rng_callable.call() + elif ResourceLoader.exists("res://scripts/controllers/scarcity_controller.gd"): + # Use ScarcityController by default if available (Project Specific) + # We use call() to avoid direct dependency if class_name isn't fully loaded in tool mode sometimes, + # but ScarcityController is a class_name so we can try valid access. + # To be safe in a tool script, we can check dynamic usage or just use the static method directly if known. + # Since this is "tekton-enet" specific codebase, we can directly use it. + item_index = ScarcityController.get_random_tile_id() else: - # Default behavior + # Fallback default behavior var random_value = rng.randi() % 100 - var item_index if random_value < 80: item_index = normal_items[rng.randi() % normal_items.size()] else: item_index = non_walkable_items[rng.randi() % non_walkable_items.size()] - set_cell_item(Vector3i(x, floor_index, z), item_index) + + set_cell_item(Vector3i(x, floor_index, z), item_index) func randomize_grid_custom(randomize_states: Array, floor_index: int = -1): if not mesh_library: diff --git a/addons/enhanced_gridmap/meshlibrary/default.tres b/addons/enhanced_gridmap/meshlibrary/default.tres index 58e181c..8d6adbe 100644 --- a/addons/enhanced_gridmap/meshlibrary/default.tres +++ b/addons/enhanced_gridmap/meshlibrary/default.tres @@ -3,12 +3,12 @@ [ext_resource type="ArrayMesh" uid="uid://cr70nmk8djc1i" path="res://assets/models/meshes/tiles_armagedon_a3.res" id="1_ptqbt"] [ext_resource type="ArrayMesh" uid="uid://dspusnbkr74hg" path="res://assets/models/meshes/hover.res" id="2_p5epg"] [ext_resource type="ArrayMesh" uid="uid://dqguomxd16u0i" path="res://assets/models/meshes/start.res" id="3_8v5xv"] -[ext_resource type="ArrayMesh" uid="uid://brevl3ab0tdqe" path="res://assets/models/tiles/tile_heart_holo.tres" id="4_8v5xv"] +[ext_resource type="ArrayMesh" uid="uid://brevl3ab0tdqe" path="res://assets/models/tiles/tile_wall.tres" id="4_8v5xv"] [ext_resource type="ArrayMesh" uid="uid://b5ta7tcw0iscd" path="res://assets/models/tiles/tile_coin.tres" id="4_76xkl"] [ext_resource type="ArrayMesh" uid="uid://d4himvyb81in8" path="res://assets/models/meshes/non-walkable.res" id="4_sx8rm"] [ext_resource type="ArrayMesh" uid="uid://dr80txgr61irt" path="res://assets/models/tiles/tile_diamond.tres" id="5_j2mx0"] -[ext_resource type="ArrayMesh" uid="uid://hwj23u2j561a" path="res://assets/models/tiles/tile_diamond_holo.tres" id="5_sx8rm"] -[ext_resource type="ArrayMesh" uid="uid://bqvqj3fhf5x51" path="res://assets/models/tiles/tile_star_holo.tres" id="6_r32il"] +[ext_resource type="ArrayMesh" uid="uid://dr80txgr61irt" path="res://assets/models/tiles/tile_area_freeze.tres" id="5_sx8rm"] +[ext_resource type="ArrayMesh" uid="uid://bqvqj3fhf5x51" path="res://assets/models/tiles/tile_ghost.tres" id="6_r32il"] [ext_resource type="ArrayMesh" uid="uid://cv4bedhida00g" path="res://assets/models/tiles/tile_star.tres" id="7_p5epg"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_ghs0t"] diff --git a/assets/models/tiles/tile_diamond_holo.tres b/assets/models/tiles/tile_area_freeze.tres similarity index 85% rename from assets/models/tiles/tile_diamond_holo.tres rename to assets/models/tiles/tile_area_freeze.tres index 45933bf..7fc9794 100644 --- a/assets/models/tiles/tile_diamond_holo.tres +++ b/assets/models/tiles/tile_area_freeze.tres @@ -1,14 +1,12 @@ -[gd_resource type="ArrayMesh" format=4 uid="uid://hwj23u2j561a"] +[gd_resource type="ArrayMesh" format=4 uid="uid://dr80txgr61irt"] -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_mwj80"] -load_path = "res://.godot/imported/tile_diamond_holo.png-e0c28a726d94831c5180dcc0376d012c.s3tc.ctex" +[ext_resource type="Texture2D" uid="uid://cp7jtg77hc078" path="res://assets/textures/power_tile/freeze_area_tile.png" id="1_3pijd"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2kxvc"] resource_name = "boost" -transparency = 1 cull_mode = 2 albedo_color = Color(0.905882, 0.905882, 0.905882, 0.45098) -albedo_texture = SubResource("CompressedTexture2D_mwj80") +albedo_texture = ExtResource("1_3pijd") [sub_resource type="ArrayMesh" id="ArrayMesh_ggb2g"] _surfaces = [{ diff --git a/assets/models/tiles/tile_star_holo.tres b/assets/models/tiles/tile_ghost.tres similarity index 100% rename from assets/models/tiles/tile_star_holo.tres rename to assets/models/tiles/tile_ghost.tres diff --git a/assets/models/tiles/tile_coin_holo.tres b/assets/models/tiles/tile_speed.tres similarity index 84% rename from assets/models/tiles/tile_coin_holo.tres rename to assets/models/tiles/tile_speed.tres index 1bf6bda..d6a1bd7 100644 --- a/assets/models/tiles/tile_coin_holo.tres +++ b/assets/models/tiles/tile_speed.tres @@ -1,14 +1,12 @@ -[gd_resource type="ArrayMesh" load_steps=4 format=4 uid="uid://gpnl4cjrivor"] +[gd_resource type="ArrayMesh" format=4 uid="uid://gpnl4cjrivor"] -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_ghs0t"] -load_path = "res://.godot/imported/tile_coin_holo.png-6a443a1d36bcd3bf79f0210c252c3d26.s3tc.ctex" +[ext_resource type="Texture2D" uid="uid://c1nvesys81nh7" path="res://assets/textures/power_tile/speed_tile.png" id="1_xysjv"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5pajh"] resource_name = "boost" -transparency = 1 cull_mode = 2 albedo_color = Color(0.91, 0.91, 0.91, 0.45098) -albedo_texture = SubResource("CompressedTexture2D_ghs0t") +albedo_texture = ExtResource("1_xysjv") [sub_resource type="ArrayMesh" id="ArrayMesh_ghs0t"] _surfaces = [{ diff --git a/assets/models/tiles/tile_heart_holo.tres b/assets/models/tiles/tile_wall.tres similarity index 88% rename from assets/models/tiles/tile_heart_holo.tres rename to assets/models/tiles/tile_wall.tres index 769be72..483f43b 100644 --- a/assets/models/tiles/tile_heart_holo.tres +++ b/assets/models/tiles/tile_wall.tres @@ -1,14 +1,12 @@ [gd_resource type="ArrayMesh" format=4 uid="uid://brevl3ab0tdqe"] -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_txrgg"] -load_path = "res://.godot/imported/tile_heart_holo.png-5c92e04305de5aaa054336f0ec160274.s3tc.ctex" +[ext_resource type="Texture2D" uid="uid://btc2lpme1xemm" path="res://assets/textures/power_tile/wall_tile.png" id="1_74df1"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ld565"] resource_name = "boost" -transparency = 1 cull_mode = 2 albedo_color = Color(0.905882, 0.905882, 0.905882, 0.45098) -albedo_texture = SubResource("CompressedTexture2D_txrgg") +albedo_texture = ExtResource("1_74df1") [sub_resource type="ArrayMesh" id="ArrayMesh_1sox1"] _surfaces = [{ diff --git a/assets/textures/power tile_tile/freeze_area_tile.png b/assets/textures/power_tile/freeze_area_tile.png similarity index 100% rename from assets/textures/power tile_tile/freeze_area_tile.png rename to assets/textures/power_tile/freeze_area_tile.png diff --git a/assets/textures/power_tile/freeze_area_tile.png.import b/assets/textures/power_tile/freeze_area_tile.png.import new file mode 100644 index 0000000..bd71d72 --- /dev/null +++ b/assets/textures/power_tile/freeze_area_tile.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cp7jtg77hc078" +path.s3tc="res://.godot/imported/freeze_area_tile.png-f6f6003021e9f9f6767f63158bd11561.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/textures/power_tile/freeze_area_tile.png" +dest_files=["res://.godot/imported/freeze_area_tile.png-f6f6003021e9f9f6767f63158bd11561.s3tc.ctex"] + +[params] + +compress/mode=2 +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=true +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=0 diff --git a/assets/textures/power tile_tile/speed_tile.png b/assets/textures/power_tile/speed_tile.png similarity index 100% rename from assets/textures/power tile_tile/speed_tile.png rename to assets/textures/power_tile/speed_tile.png diff --git a/assets/textures/power_tile/speed_tile.png.import b/assets/textures/power_tile/speed_tile.png.import new file mode 100644 index 0000000..94c680b --- /dev/null +++ b/assets/textures/power_tile/speed_tile.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1nvesys81nh7" +path.s3tc="res://.godot/imported/speed_tile.png-fc7f1ddb55829636e1f770d63c11e5e5.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/textures/power_tile/speed_tile.png" +dest_files=["res://.godot/imported/speed_tile.png-fc7f1ddb55829636e1f770d63c11e5e5.s3tc.ctex"] + +[params] + +compress/mode=2 +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=true +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=0 diff --git a/assets/textures/power tile_tile/wall_tile.png b/assets/textures/power_tile/wall_tile.png similarity index 100% rename from assets/textures/power tile_tile/wall_tile.png rename to assets/textures/power_tile/wall_tile.png diff --git a/assets/textures/power_tile/wall_tile.png.import b/assets/textures/power_tile/wall_tile.png.import new file mode 100644 index 0000000..92e9ad1 --- /dev/null +++ b/assets/textures/power_tile/wall_tile.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btc2lpme1xemm" +path.s3tc="res://.godot/imported/wall_tile.png-b9a5e6b7e946282950424d6198750cac.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/textures/power_tile/wall_tile.png" +dest_files=["res://.godot/imported/wall_tile.png-b9a5e6b7e946282950424d6198750cac.s3tc.ctex"] + +[params] + +compress/mode=2 +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=true +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=0 diff --git a/scenes/main.tscn b/scenes/main.tscn index 7ec8ed8..a89d0d8 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -22,6 +22,9 @@ [ext_resource type="StyleBox" uid="uid://d3ruc8gytoovx" path="res://assets/styles/ribbon_selected_gui.tres" id="18_u5x6e"] [ext_resource type="StyleBox" uid="uid://cdhnwvcklbyl8" path="res://assets/styles/ribbon_hovered_gui.tres" id="19_w1rqq"] [ext_resource type="StyleBox" uid="uid://3yog1weaqhxb" path="res://assets/styles/ribbon_unselected_gui.tres" id="20_q6bc1"] +[ext_resource type="Texture2D" uid="uid://bsgqrjx2ity4c" path="res://assets/graphics/touch_control/speed.png" id="26_2f3dj"] +[ext_resource type="Texture2D" uid="uid://cupfmb5m15kmf" path="res://assets/graphics/touch_control/wall.png" id="27_yq6so"] +[ext_resource type="Texture2D" uid="uid://3up2su2e0lfa" path="res://assets/graphics/touch_control/freeze_area.png" id="28_fv21b"] [ext_resource type="Script" uid="uid://86ikh0wuqk7v" path="res://scripts/ui/powerup_inventory_ui.gd" id="powerup_ui_script"] [ext_resource type="Script" uid="uid://b54tfa0n6kogi" path="res://scripts/managers/touch_controls.gd" id="touch_manager"] [ext_resource type="Script" uid="uid://djiml4sh61dc1" path="res://scripts/ui/virtual_joystick.gd" id="virtual_joystick"] @@ -9828,10 +9831,11 @@ offset_right = 212.0 offset_bottom = 50.0 grow_horizontal = 2 grow_vertical = 2 +theme_override_constants/separation = 15 [node name="CoinIcon" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer" unique_id=341904386] layout_mode = 2 -texture = ExtResource("10_my1qp") +texture = ExtResource("26_2f3dj") expand_mode = 2 [node name="SelectRect" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer/CoinIcon" unique_id=961231613] @@ -9846,7 +9850,7 @@ texture = ExtResource("8_8meci") [node name="HeartIcon" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer" unique_id=61328923] layout_mode = 2 -texture = ExtResource("7_xwcc1") +texture = ExtResource("27_yq6so") expand_mode = 2 [node name="SelectRect" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer/HeartIcon" unique_id=772732397] @@ -9861,7 +9865,7 @@ texture = ExtResource("8_8meci") [node name="DiamondIcon" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer" unique_id=1830849071] layout_mode = 2 -texture = ExtResource("8_quhbu") +texture = ExtResource("28_fv21b") expand_mode = 2 [node name="SelectRect" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer/DiamondIcon" unique_id=439518389] @@ -9875,6 +9879,7 @@ grow_vertical = 2 texture = ExtResource("8_8meci") [node name="StarIcon" type="TextureRect" parent="PowerUpInventoryUI/HBoxContainer" unique_id=1468665065] +visible = false layout_mode = 2 texture = ExtResource("9_i0gbs") expand_mode = 2 diff --git a/scripts/managers/special_tiles_manager.gd b/scripts/managers/special_tiles_manager.gd index f664328..5ebc54e 100644 --- a/scripts/managers/special_tiles_manager.gd +++ b/scripts/managers/special_tiles_manager.gd @@ -178,8 +178,6 @@ func activate_effect(effect: int, target_player: Node3D = null): func is_holo_tile(item_id: int) -> bool: return item_id in HOLO_TILES - - # ============================================================================= # Effect Implementations (New) # =============================================================================