feat: Add grid-based player movement manager, new 'stop_n_go' arena, and core game scene setup.

This commit is contained in:
Yogi Wiguna
2026-03-13 14:37:13 +08:00
parent 898f867cee
commit 6e43cb5337
10 changed files with 117 additions and 4 deletions
@@ -2,7 +2,7 @@
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_n7oje"]
transparency = 1
albedo_color = Color(0.30980393, 0.30980393, 0.30980393, 0)
albedo_color = Color(0.30980393, 0.30980393, 0.30980393, 1)
[resource]
material = SubResource("StandardMaterial3D_n7oje")
Binary file not shown.
@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cb1atdpit37w"
path="res://.godot/imported/Grass only.glb-cc0d20fc21bd6e30d38e530c4cdf5b79.scn"
[deps]
source_file="res://assets/models/arena/stop_n_go/Grass only.glb"
dest_files=["res://.godot/imported/Grass only.glb-cc0d20fc21bd6e30d38e530c4cdf5b79.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dc6yu7a3q3wn6"
path.s3tc="res://.godot/imported/Grass only_Terrain ground tex.png-933ffd38863604b075d0bfd5951724d1.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "a184576b3eca9e728a947f07525a1557"
}
[deps]
source_file="res://assets/models/arena/stop_n_go/Grass only_Terrain ground tex.png"
dest_files=["res://.godot/imported/Grass only_Terrain ground tex.png-933ffd38863604b075d0bfd5951724d1.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
Binary file not shown.
+13
View File
@@ -108,6 +108,19 @@ func _apply_arena_background():
"Stop N Go Arena":
texture_path = "res://assets/graphics/level_bg/placeholder_stop_n_go.jpg"
_instantiate_3d_arena("res://scenes/arena/stop_n_go.scn")
# Make normal, non-walkable, and Tekton floors invisible
# by shrinking their scale to 0. This hides them visually while
# avoiding "Parameter 'mesh' is null" or material override errors.
var em = $EnhancedGridMap
if em and em.mesh_library:
var ml = em.mesh_library.duplicate()
for id in [0, 4, 6]:
# Scale to 0 to hide it without triggering invalid mesh errors
ml.set_item_mesh_transform(id, Transform3D().scaled(Vector3.ZERO))
em.mesh_library = ml
print("[Main] Hide tiles 0, 4, 6 via zero-scale transform.")
"Tekton Doors Arena":
texture_path = "res://assets/graphics/level_bg/placeholder_tekton_doors.jpg"
"Classic", _:
+3 -3
View File
File diff suppressed because one or more lines are too long
@@ -90,6 +90,20 @@ func simple_move_to(grid_position: Vector2i) -> bool:
# Allow passing through Walls (Item 4 or 16) if Invisible
var is_wall_passable = player.get("is_invisible") and (cell_floor == 4 or cell_item == 16 or cell_item == 4)
# NEW: Impenetrable wall check (User request) - Certain coordinates are "Hard" walls even for Ghost
# These generally correspond to the arena borders and environmental static obstacles.
if is_wall_passable:
var impenetrable_coords = [
Vector2i(0,0), Vector2i(1,0), Vector2i(2,0), Vector2i(3,0), Vector2i(4,0), Vector2i(5,0), Vector2i(6,0), Vector2i(7,0), Vector2i(8,0), Vector2i(9,0), Vector2i(10,0), Vector2i(13,0), Vector2i(19,0), Vector2i(20,0), Vector2i(21,0), Vector2i(22,0),
Vector2i(0,1), Vector2i(1,1), Vector2i(2,1), Vector2i(3,1), Vector2i(6,1),
Vector2i(0,2), Vector2i(1,2), Vector2i(2,2), Vector2i(3,2),
Vector2i(17,9), Vector2i(18,9), Vector2i(19,9), Vector2i(20,9), Vector2i(21,9), Vector2i(22,9),
Vector2i(11,10), Vector2i(12,10), Vector2i(13,10), Vector2i(15,10), Vector2i(16,10), Vector2i(17,10), Vector2i(18,10), Vector2i(19,10), Vector2i(20,10), Vector2i(21,10), Vector2i(22,10),
Vector2i(0,11), Vector2i(4,11), Vector2i(5,11), Vector2i(6,11), Vector2i(10,11), Vector2i(12,11), Vector2i(13,11), Vector2i(14,11), Vector2i(15,11), Vector2i(16,11), Vector2i(17,11), Vector2i(18,11), Vector2i(19,11), Vector2i(20,11), Vector2i(21,11), Vector2i(22,11)
]
if grid_position in impenetrable_coords:
is_wall_passable = false
# Check Floor 0 (Basic Walkability/Void)
if (cell_floor == -1 or cell_floor in enhanced_gridmap.non_walkable_items) and not is_wall_passable:
print("[Move] Failed: Floor Item %d is non-walkable" % cell_floor)