Skip to content

Commit 3796214

Browse files
committed
WIP: In-game push blocks
1 parent 5210b65 commit 3796214

5 files changed

Lines changed: 210 additions & 0 deletions

File tree

in_game_sokoban_test.tscn

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
[gd_scene format=4 uid="uid://dkydtkbd0k1nj"]
2+
3+
[ext_resource type="PackedScene" uid="uid://iu2q66clupc6" path="res://scenes/game_elements/characters/player/player.tscn" id="1_b58vp"]
4+
[ext_resource type="Texture2D" uid="uid://doc4qg7e3kgs" path="res://assets/third_party/tiny-swords/Terrain/Water/Water.png" id="1_u248t"]
5+
[ext_resource type="TileSet" uid="uid://b8qnr0owsbhhn" path="res://tiles/exterior_floors.tres" id="2_6jm70"]
6+
[ext_resource type="TileSet" uid="uid://b778cuoftt88r" path="res://tiles/elevation_2.tres" id="3_ko04g"]
7+
[ext_resource type="TileSet" uid="uid://bjx3gvah0ycl1" path="res://tiles/foam_2.tres" id="3_vlvpl"]
8+
[ext_resource type="SpriteFrames" uid="uid://dtoylirwywk0j" path="res://scenes/game_elements/characters/components/sprite_frames/storyweaver_blue.tres" id="4_ko04g"]
9+
[ext_resource type="Texture2D" uid="uid://c86ayucyybr2t" path="res://scenes/eternal_loom_sokoban/components/wall/walls.png" id="5_6jm70"]
10+
[ext_resource type="PackedScene" uid="uid://040geb1h683b" path="res://push_block.tscn" id="6_ko04g"]
11+
[ext_resource type="PackedScene" uid="uid://fuhl3l6gxq5k" path="res://scenes/game_elements/props/collectible_item/collectible_item.tscn" id="7_jh3jm"]
12+
[ext_resource type="Script" uid="uid://bgmwplmj3bfls" path="res://scenes/globals/game_state/inventory/inventory_item.gd" id="8_cqfek"]
13+
14+
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_o8ekb"]
15+
texture = ExtResource("1_u248t")
16+
texture_region_size = Vector2i(64, 64)
17+
0:0/next_alternative_id = 3
18+
0:0/0 = 0
19+
0:0/0/physics_layer_2/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32)
20+
0:0/2 = 2
21+
0:0/2/physics_layer_2/polygon_0/points = PackedVector2Array(-32, 3.85675, 32, 4.40771, 32, 32, -32, 32)
22+
0:0/1 = 1
23+
24+
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_csc7u"]
25+
texture = ExtResource("5_6jm70")
26+
texture_region_size = Vector2i(64, 64)
27+
0:0/0 = 0
28+
1:0/0 = 0
29+
30+
[sub_resource type="TileSet" id="TileSet_ix036"]
31+
tile_size = Vector2i(64, 64)
32+
occlusion_layer_0/light_mask = 1
33+
physics_layer_0/collision_layer = 16
34+
physics_layer_0/collision_mask = 0
35+
physics_layer_0/collision_priority = 100.0
36+
physics_layer_1/collision_layer = 8
37+
physics_layer_1/collision_mask = 0
38+
physics_layer_2/collision_layer = 512
39+
physics_layer_2/collision_mask = 0
40+
sources/0 = SubResource("TileSetAtlasSource_o8ekb")
41+
sources/2 = SubResource("TileSetAtlasSource_csc7u")
42+
43+
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u248t"]
44+
texture = ExtResource("5_6jm70")
45+
texture_region_size = Vector2i(64, 64)
46+
0:0/0 = 0
47+
1:0/0 = 0
48+
49+
[sub_resource type="TileSet" id="TileSet_vlvpl"]
50+
tile_size = Vector2i(64, 64)
51+
sources/0 = SubResource("TileSetAtlasSource_u248t")
52+
53+
[sub_resource type="Resource" id="Resource_ctuqu"]
54+
script = ExtResource("8_cqfek")
55+
metadata/_custom_type_script = "uid://bgmwplmj3bfls"
56+
57+
[node name="InGameSokobanTest" type="Node2D" unique_id=414935997]
58+
metadata/_edit_horizontal_guides_ = [1413.0, -146.0]
59+
60+
[node name="TileMapLayers" type="Node2D" parent="." unique_id=724875691]
61+
62+
[node name="Water" type="TileMapLayer" parent="TileMapLayers" unique_id=1525083400]
63+
tile_map_data = PackedByteArray("AAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAYAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAYAAAAAAAAAAAAHAAQAAAAAAAAAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAYAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAYAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAYAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAAOAAQAAAAAAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAAAAAAAAAAPAAQAAAAAAAAAAAAPAAUAAAAAAAAAAAAPAAYAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAASAAQAAAAAAAAAAAASAAUAAAAAAAAAAAASAAYAAAAAAAAAAAATAAQAAAAAAAAAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAAUAAQAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAYAAAAAAAAAAAAVAAQAAAAAAAAAAAAVAAUAAAAAAAAAAAAVAAYAAAAAAAAAAAAWAAQAAAAAAAAAAAAWAAUAAAAAAAAAAAAWAAYAAAAAAAAAAAAXAAQAAAAAAAAAAAAXAAUAAAAAAAAAAAAXAAYAAAAAAAAAAAAYAAQAAAAAAAAAAAAYAAUAAAAAAAAAAAAYAAYAAAAAAAAAAAAZAAQAAAAAAAAAAAAZAAUAAAAAAAAAAAAZAAYAAAAAAAAAAAAaAAQAAAAAAAAAAAAaAAUAAAAAAAAAAAAaAAYAAAAAAAAAAAAaAAcAAAAAAAAAAAAaAAgAAAAAAAAAAAAaAAkAAAAAAAAAAAAaAAoAAAAAAAAAAAAaAAsAAAAAAAAAAAAaAAwAAAAAAAAAAAAaAA0AAAAAAAAAAAAaAA4AAAAAAAAAAAAaAA8AAAAAAAAAAAAaABAAAAAAAAAAAAAaABEAAAAAAAAAAAAaABIAAAAAAAAAAAAaABMAAAAAAAAAAAAaABQAAAAAAAAAAAAaABUAAAAAAAAAAAAbAAUAAAAAAAAAAAAbAAYAAAAAAAAAAAAbAAcAAAAAAAAAAAAbAAgAAAAAAAAAAAAbAAkAAAAAAAAAAAAbAAoAAAAAAAAAAAAbAAsAAAAAAAAAAAAbAAwAAAAAAAAAAAAbAA0AAAAAAAAAAAAbAA4AAAAAAAAAAAAbAA8AAAAAAAAAAAAbABAAAAAAAAAAAAAbABEAAAAAAAAAAAAbABIAAAAAAAAAAAAbABMAAAAAAAAAAAAbABQAAAAAAAAAAAAbABUAAAAAAAAAAAADABUAAAAAAAAAAAADABYAAAAAAAAAAAAEABUAAAAAAAAAAAAEABYAAAAAAAAAAAAFABUAAAAAAAAAAAAFABYAAAAAAAAAAAAGABUAAAAAAAAAAAAGABYAAAAAAAAAAAAHABUAAAAAAAAAAAAHABYAAAAAAAAAAAAIABUAAAAAAAAAAAAIABYAAAAAAAAAAAAJABUAAAAAAAAAAAAJABYAAAAAAAAAAAAKABUAAAAAAAAAAAAKABYAAAAAAAAAAAALABUAAAAAAAAAAAALABYAAAAAAAAAAAAMABUAAAAAAAAAAAAMABYAAAAAAAAAAAANABUAAAAAAAAAAAANABYAAAAAAAAAAAAOABUAAAAAAAAAAAAOABYAAAAAAAAAAAAPABUAAAAAAAAAAAAPABYAAAAAAAAAAAAQABUAAAAAAAAAAAAQABYAAAAAAAAAAAARABUAAAAAAAAAAAARABYAAAAAAAAAAAASABUAAAAAAAAAAAASABYAAAAAAAAAAAATABUAAAAAAAAAAAATABYAAAAAAAAAAAAUABUAAAAAAAAAAAAUABYAAAAAAAAAAAAVABUAAAAAAAAAAAAVABYAAAAAAAAAAAAWABUAAAAAAAAAAAAWABYAAAAAAAAAAAAXABUAAAAAAAAAAAAXABYAAAAAAAAAAAAYABUAAAAAAAAAAAAYABYAAAAAAAAAAAAZABUAAAAAAAAAAAAZABYAAAAAAAAAAAAaABYAAAAAAAAAAAAbABYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAADAAkAAAAAAAAAAAADAAoAAAAAAAAAAAADAAsAAAAAAAAAAAADAAwAAAAAAAAAAAADAA0AAAAAAAAAAAADAA4AAAAAAAAAAAADAA8AAAAAAAAAAAADABAAAAAAAAAAAAADABEAAAAAAAAAAAADABIAAAAAAAAAAAADABMAAAAAAAAAAAADABQAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAgAAAAAAAAAAAAEAAkAAAAAAAAAAAAEAAoAAAAAAAAAAAAEAAsAAAAAAAAAAAAEAAwAAAAAAAAAAAAEAA0AAAAAAAAAAAAEAA4AAAAAAAAAAAAEAA8AAAAAAAAAAAAEABAAAAAAAAAAAAAEABEAAAAAAAAAAAAEABIAAAAAAAAAAAAEABMAAAAAAAAAAAAEABQAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAATAAwAAAAAAAAAAAATAA0AAAAAAAAAAAATAA4AAAAAAAAAAAATAA8AAAAAAAAAAAATABAAAAAAAAAAAAATABEAAAAAAAAAAAATABIAAAAAAAAAAAATABMAAAAAAAAAAAATABQAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAgAAAAAAAAAAAAUAAkAAAAAAAAAAAAUAAoAAAAAAAAAAAAUAAsAAAAAAAAAAAAUAAwAAAAAAAAAAAAUAA0AAAAAAAAAAAAUAA4AAAAAAAAAAAAUAA8AAAAAAAAAAAAUABAAAAAAAAAAAAAUABEAAAAAAAAAAAAUABIAAAAAAAAAAAAUABMAAAAAAAAAAAAUABQAAAAAAAAAAAA=")
64+
tile_set = SubResource("TileSet_ix036")
65+
66+
[node name="Foam" type="TileMapLayer" parent="TileMapLayers" unique_id=988001185]
67+
tile_map_data = PackedByteArray("AAAFAAcAAgAAAAAAAAAGAAcAAgAAAAAAAAAHAAcAAgAAAAAAAAAIAAcAAgAAAAAAAAAJAAcAAgAAAAAAAAAKAAcAAgAAAAAAAAALAAcAAgAAAAAAAAAMAAcAAgAAAAAAAAANAAcAAgAAAAAAAAAOAAcAAgAAAAAAAAAPAAcAAgAAAAAAAAAQAAcAAgAAAAAAAAARAAcAAgAAAAAAAAASAAcAAgAAAAAAAAASAAgAAgAAAAAAAAASAAkAAgAAAAAAAAASAAoAAgAAAAAAAAASAAsAAgAAAAAAAAASAAwAAgAAAAAAAAASAA0AAgAAAAAAAAASAA4AAgAAAAAAAAASAA8AAgAAAAAAAAASABAAAgAAAAAAAAASABEAAgAAAAAAAAASABIAAgAAAAAAAAASABMAAgAAAAAAAAASABQAAgAAAAAAAAAFABQAAgAAAAAAAAAGABQAAgAAAAAAAAAHABQAAgAAAAAAAAAIABQAAgAAAAAAAAAJABQAAgAAAAAAAAAKABQAAgAAAAAAAAALABQAAgAAAAAAAAAMABQAAgAAAAAAAAANABQAAgAAAAAAAAAOABQAAgAAAAAAAAAPABQAAgAAAAAAAAAQABQAAgAAAAAAAAARABQAAgAAAAAAAAAFAAgAAgAAAAAAAAAFAAkAAgAAAAAAAAAFAAoAAgAAAAAAAAAFAAsAAgAAAAAAAAAFAAwAAgAAAAAAAAAFAA0AAgAAAAAAAAAFAA4AAgAAAAAAAAAFAA8AAgAAAAAAAAAFABAAAgAAAAAAAAAFABEAAgAAAAAAAAAFABIAAgAAAAAAAAAFABMAAgAAAAAAAAAVAAcAAgAAAAAAAAAWAAcAAgAAAAAAAAAXAAcAAgAAAAAAAAAYAAcAAgAAAAAAAAAZAAcAAgAAAAAAAAAZAAgAAgAAAAAAAAAZAAkAAgAAAAAAAAAZAAoAAgAAAAAAAAAZAAsAAgAAAAAAAAAZAAwAAgAAAAAAAAAZAA0AAgAAAAAAAAAZAA4AAgAAAAAAAAAZAA8AAgAAAAAAAAAZABAAAgAAAAAAAAAZABEAAgAAAAAAAAAZABIAAgAAAAAAAAAZABMAAgAAAAAAAAAZABQAAgAAAAAAAAAVABQAAgAAAAAAAAAWABQAAgAAAAAAAAAXABQAAgAAAAAAAAAYABQAAgAAAAAAAAAVAAgAAgAAAAAAAAAVAAkAAgAAAAAAAAAVAAoAAgAAAAAAAAAVAAsAAgAAAAAAAAAVAAwAAgAAAAAAAAAVAA0AAgAAAAAAAAAVAA4AAgAAAAAAAAAVAA8AAgAAAAAAAAAVABAAAgAAAAAAAAAVABEAAgAAAAAAAAAVABIAAgAAAAAAAAAVABMAAgAAAAAAAAA=")
68+
tile_set = ExtResource("3_vlvpl")
69+
70+
[node name="SubmergedBlocks" type="TileMapLayer" parent="TileMapLayers" unique_id=441634037]
71+
tile_set = SubResource("TileSet_vlvpl")
72+
73+
[node name="Grass" type="TileMapLayer" parent="TileMapLayers" unique_id=1539200401]
74+
tile_map_data = PackedByteArray("AAAZABQAAQACAAIAAAAZABMAAQACAAEAAAAZABIAAQACAAEAAAAZABEAAQACAAEAAAAZABAAAQACAAEAAAAZAA8AAQACAAEAAAAZAA4AAQACAAEAAAAZAA0AAQACAAEAAAAZAAwAAQACAAEAAAAZAAsAAQACAAEAAAAZAAoAAQACAAEAAAAZAAkAAQACAAEAAAAZAAgAAQACAAEAAAAZAAcAAQACAAAAAAAYABQAAQABAAIAAAAYABMAAQABAAEAAAAYABIAAQABAAEAAAAYABEAAQABAAEAAAAYABAAAQABAAEAAAAYAA8AAQABAAEAAAAYAA4AAQABAAEAAAAYAA0AAQABAAEAAAAYAAwAAQABAAEAAAAYAAsAAQABAAEAAAAYAAoAAQABAAEAAAAYAAkAAQABAAEAAAAYAAgAAQABAAEAAAAYAAcAAQABAAAAAAAXABQAAQABAAIAAAAXABMAAQABAAEAAAAXABIAAQABAAEAAAAXABEAAQABAAEAAAAXABAAAQABAAEAAAAXAA8AAQABAAEAAAAXAA4AAQABAAEAAAAXAA0AAQABAAEAAAAXAAwAAQABAAEAAAAXAAsAAQABAAEAAAAXAAoAAQABAAEAAAAXAAkAAQABAAEAAAAXAAgAAQABAAEAAAAXAAcAAQABAAAAAAAWABQAAQABAAIAAAAWABMAAQABAAEAAAAWABIAAQABAAEAAAAWABEAAQABAAEAAAAWABAAAQABAAEAAAAWAA8AAQABAAEAAAAWAA4AAQABAAEAAAAWAA0AAQABAAEAAAAWAAwAAQABAAEAAAAWAAsAAQABAAEAAAAWAAoAAQABAAEAAAAWAAkAAQABAAEAAAAWAAgAAQABAAEAAAAWAAcAAQABAAAAAAAVABQAAQAAAAIAAAAVABMAAQAAAAEAAAAVABIAAQAAAAEAAAAVABEAAQAAAAEAAAAVABAAAQAAAAEAAAAVAA8AAQAAAAEAAAAVAA4AAQAAAAEAAAAVAA0AAQAAAAEAAAAVAAwAAQAAAAEAAAAVAAsAAQAAAAEAAAAVAAoAAQAAAAEAAAAVAAkAAQAAAAEAAAAVAAgAAQAAAAEAAAAVAAcAAQAAAAAAAAASABQAAQACAAIAAAASABMAAQACAAEAAAASABIAAQACAAEAAAASABEAAQACAAEAAAASABAAAQACAAEAAAASAA8AAQACAAEAAAASAA4AAQACAAEAAAASAA0AAQACAAEAAAASAAwAAQACAAEAAAASAAsAAQACAAEAAAASAAoAAQACAAEAAAASAAkAAQACAAEAAAASAAgAAQACAAEAAAASAAcAAQACAAAAAAARABQAAQABAAIAAAARABMAAQABAAEAAAARABIAAQABAAEAAAARABEAAQABAAEAAAARABAAAQABAAEAAAARAA8AAQABAAEAAAARAA4AAQABAAEAAAARAA0AAQABAAEAAAARAAwAAQABAAEAAAARAAsAAQABAAEAAAARAAoAAQABAAEAAAARAAkAAQABAAEAAAARAAgAAQABAAEAAAARAAcAAQABAAAAAAAQABQAAQABAAIAAAAQABMAAQABAAEAAAAQABIAAQABAAEAAAAQABEAAQABAAEAAAAQABAAAQABAAEAAAAQAA8AAQABAAEAAAAQAA4AAQABAAEAAAAQAA0AAQABAAEAAAAQAAwAAQABAAEAAAAQAAsAAQABAAEAAAAQAAoAAQABAAEAAAAQAAkAAQABAAEAAAAQAAgAAQABAAEAAAAQAAcAAQABAAAAAAAPABQAAQABAAIAAAAPABMAAQABAAEAAAAPABIAAQABAAEAAAAPABEAAQABAAEAAAAPABAAAQABAAEAAAAPAA8AAQABAAEAAAAPAA4AAQABAAEAAAAPAA0AAQABAAEAAAAPAAwAAQABAAEAAAAPAAsAAQABAAEAAAAPAAoAAQABAAEAAAAPAAkAAQABAAEAAAAPAAgAAQABAAEAAAAPAAcAAQABAAAAAAAOABQAAQABAAIAAAAOABMAAQABAAEAAAAOABIAAQABAAEAAAAOABEAAQABAAEAAAAOABAAAQABAAEAAAAOAA8AAQABAAEAAAAOAA4AAQABAAEAAAAOAA0AAQABAAEAAAAOAAwAAQABAAEAAAAOAAsAAQABAAEAAAAOAAoAAQABAAEAAAAOAAkAAQABAAEAAAAOAAgAAQABAAEAAAAOAAcAAQABAAAAAAANABQAAQABAAIAAAANABMAAQABAAEAAAANABIAAQABAAEAAAANABEAAQABAAEAAAANABAAAQABAAEAAAANAA8AAQABAAEAAAANAA4AAQABAAEAAAANAA0AAQABAAEAAAANAAwAAQABAAEAAAANAAsAAQABAAEAAAANAAoAAQABAAEAAAANAAkAAQABAAEAAAANAAgAAQABAAEAAAANAAcAAQABAAAAAAAMABQAAQABAAIAAAAMABMAAQABAAEAAAAMABIAAQABAAEAAAAMABEAAQABAAEAAAAMABAAAQABAAEAAAAMAA8AAQABAAEAAAAMAA4AAQABAAEAAAAMAA0AAQABAAEAAAAMAAwAAQABAAEAAAAMAAsAAQABAAEAAAAMAAoAAQABAAEAAAAMAAkAAQABAAEAAAAMAAgAAQABAAEAAAAMAAcAAQABAAAAAAALABQAAQABAAIAAAALABMAAQABAAEAAAALABIAAQABAAEAAAALABEAAQABAAEAAAALABAAAQABAAEAAAALAA8AAQABAAEAAAALAA4AAQABAAEAAAALAA0AAQABAAEAAAALAAwAAQABAAEAAAALAAsAAQABAAEAAAALAAoAAQABAAEAAAALAAkAAQABAAEAAAALAAgAAQABAAEAAAALAAcAAQABAAAAAAAKABQAAQABAAIAAAAKABMAAQABAAEAAAAKABIAAQABAAEAAAAKABEAAQABAAEAAAAKABAAAQABAAEAAAAKAA8AAQABAAEAAAAKAA4AAQABAAEAAAAKAA0AAQABAAEAAAAKAAwAAQABAAEAAAAKAAsAAQABAAEAAAAKAAoAAQABAAEAAAAKAAkAAQABAAEAAAAKAAgAAQABAAEAAAAKAAcAAQABAAAAAAAJABQAAQABAAIAAAAJABMAAQABAAEAAAAJABIAAQABAAEAAAAJABEAAQABAAEAAAAJABAAAQABAAEAAAAJAA8AAQABAAEAAAAJAA4AAQABAAEAAAAJAA0AAQABAAEAAAAJAAwAAQABAAEAAAAJAAsAAQABAAEAAAAJAAoAAQABAAEAAAAJAAkAAQABAAEAAAAJAAgAAQABAAEAAAAJAAcAAQABAAAAAAAIABQAAQABAAIAAAAIABMAAQABAAEAAAAIABIAAQABAAEAAAAIABEAAQABAAEAAAAIABAAAQABAAEAAAAIAA8AAQABAAEAAAAIAA4AAQABAAEAAAAIAA0AAQABAAEAAAAIAAwAAQABAAEAAAAIAAsAAQABAAEAAAAIAAoAAQABAAEAAAAIAAkAAQABAAEAAAAIAAgAAQABAAEAAAAIAAcAAQABAAAAAAAHABQAAQABAAIAAAAHABMAAQABAAEAAAAHABIAAQABAAEAAAAHABEAAQABAAEAAAAHABAAAQABAAEAAAAHAA8AAQABAAEAAAAHAA4AAQABAAEAAAAHAA0AAQABAAEAAAAHAAwAAQABAAEAAAAHAAsAAQABAAEAAAAHAAoAAQABAAEAAAAHAAkAAQABAAEAAAAHAAgAAQABAAEAAAAHAAcAAQABAAAAAAAGABQAAQABAAIAAAAGABMAAQABAAEAAAAGABIAAQABAAEAAAAGABEAAQABAAEAAAAGABAAAQABAAEAAAAGAA8AAQABAAEAAAAGAA4AAQABAAEAAAAGAA0AAQABAAEAAAAGAAwAAQABAAEAAAAGAAsAAQABAAEAAAAGAAoAAQABAAEAAAAGAAkAAQABAAEAAAAGAAgAAQABAAEAAAAGAAcAAQABAAAAAAAFABQAAQAAAAIAAAAFABMAAQAAAAEAAAAFABIAAQAAAAEAAAAFABEAAQAAAAEAAAAFABAAAQAAAAEAAAAFAA8AAQAAAAEAAAAFAA4AAQAAAAEAAAAFAA0AAQAAAAEAAAAFAAwAAQAAAAEAAAAFAAsAAQAAAAEAAAAFAAoAAQAAAAEAAAAFAAkAAQAAAAEAAAAFAAgAAQAAAAEAAAAFAAcAAQAAAAAAAAA=")
75+
tile_set = ExtResource("2_6jm70")
76+
77+
[node name="Cliffs" type="TileMapLayer" parent="TileMapLayers" unique_id=20831420]
78+
tile_map_data = PackedByteArray("AAARAA0ABAABAAIAAAARAAwABAACAAAAAAAQAA0ABAABAAIAAAAQAAwABAABAAAAAAAPAA0ABAAAAAIAAAAPAAwABAAAAAAAAAARABMABAABAAIAAAARABIABAABAAEAAAARABEABAABAAAAAAAQABMABAABAAIAAAAQABIABAABAAEAAAAQABEABAABAAAAAAAPABMABAAAAAIAAAAPABIABAAAAAEAAAAPABEABAABAAAAAAAOABEABAABAAQAAAANABEABAABAAQAAAAMABEABAAAAAQAAAASABMABAACAAIAAAASABIABAACAAEAAAASABEABAACAAAAAAASAA0ABAACAAQAAAA=")
79+
tile_set = ExtResource("3_ko04g")
80+
81+
[node name="OnTheGround" type="Node2D" parent="." unique_id=719461425]
82+
y_sort_enabled = true
83+
84+
[node name="Player" parent="OnTheGround" unique_id=296354958 instance=ExtResource("1_b58vp")]
85+
position = Vector2(715, 831)
86+
player_name = "StoryWeaver"
87+
sprite_frames = ExtResource("4_ko04g")
88+
89+
[node name="Camera2D" type="Camera2D" parent="OnTheGround/Player" unique_id=1941828126]
90+
limit_left = 262
91+
limit_top = 400
92+
limit_right = 1700
93+
limit_bottom = 1400
94+
editor_draw_limits = true
95+
96+
[node name="PushBlock" parent="OnTheGround" unique_id=1349233887 node_paths=PackedStringArray("foam", "submerged_blocks") instance=ExtResource("6_ko04g")]
97+
position = Vector2(882, 894)
98+
foam = NodePath("../../TileMapLayers/Foam")
99+
submerged_blocks = NodePath("../../TileMapLayers/SubmergedBlocks")
100+
101+
[node name="PushBlock2" parent="OnTheGround" unique_id=357032112 node_paths=PackedStringArray("foam", "submerged_blocks") instance=ExtResource("6_ko04g")]
102+
position = Vector2(720, 958)
103+
collision_mask = 275
104+
foam = NodePath("../../TileMapLayers/Foam")
105+
submerged_blocks = NodePath("../../TileMapLayers/SubmergedBlocks")
106+
107+
[node name="CollectibleItem" parent="OnTheGround" unique_id=327991066 instance=ExtResource("7_jh3jm")]
108+
position = Vector2(1499, 1008)
109+
item = SubResource("Resource_ctuqu")
110+
111+
[node name="ScreenOverlay" type="CanvasLayer" parent="." unique_id=1967906375]

push_block.gd

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
extends CharacterBody2D
2+
3+
@export var foam: TileMapLayer
4+
@export var submerged_blocks: TileMapLayer
5+
6+
7+
func _on_area_2d_body_shape_entered(
8+
_body_rid: RID,
9+
body: Node2D,
10+
_body_shape_index: int,
11+
_local_shape_index: int,
12+
) -> void:
13+
var tile_map := body as TileMapLayer
14+
if not tile_map:
15+
return
16+
17+
# For this to work, the water layer's physics quadrant size has to be set to
18+
# 1, i.e. no chunking of water physics - probably bad for performance!
19+
# var coords := tile_map.get_coords_for_body_rid(_body_rid)
20+
# TODO: is there a way to do this "properly" using physics? If not:
21+
var coords := tile_map.local_to_map(tile_map.to_local(global_position))
22+
# Erase the water
23+
tile_map.set_cell(coords, -1)
24+
# Add foam
25+
foam.set_cell(coords, 2, Vector2i(0, 0))
26+
# Put a static copy of this block into the water
27+
submerged_blocks.set_cell(coords, 0, Vector2i(1, 0))
28+
# Free the physical block
29+
queue_free()
30+
# TODO: sound-effect
31+
# TODO: do this more convincingly!

push_block.gd.uid

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://bxulfsreyu63i

push_block.tscn

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
[gd_scene format=3 uid="uid://040geb1h683b"]
2+
3+
[ext_resource type="Script" uid="uid://bxulfsreyu63i" path="res://push_block.gd" id="1_jmvaw"]
4+
[ext_resource type="Texture2D" uid="uid://c86ayucyybr2t" path="res://scenes/eternal_loom_sokoban/components/wall/walls.png" id="2_byqtm"]
5+
6+
[sub_resource type="AtlasTexture" id="AtlasTexture_ko04g"]
7+
atlas = ExtResource("2_byqtm")
8+
region = Rect2(64, 0, 64, 64)
9+
10+
[sub_resource type="RectangleShape2D" id="RectangleShape2D_6jm70"]
11+
size = Vector2(64, 64)
12+
13+
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cqfek"]
14+
size = Vector2(1, 1)
15+
16+
[node name="PushBlock" type="CharacterBody2D" unique_id=1349233887]
17+
collision_mask = 274
18+
motion_mode = 1
19+
script = ExtResource("1_jmvaw")
20+
21+
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=448744553]
22+
texture = SubResource("AtlasTexture_ko04g")
23+
metadata/_edit_lock_ = true
24+
25+
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1387816029]
26+
shape = SubResource("RectangleShape2D_6jm70")
27+
metadata/_edit_lock_ = true
28+
29+
[node name="WaterDetector" type="Area2D" parent="." unique_id=222932605]
30+
collision_layer = 0
31+
collision_mask = 512
32+
33+
[node name="CollisionShape2D" type="CollisionShape2D" parent="WaterDetector" unique_id=1457035837]
34+
shape = SubResource("RectangleShape2D_cqfek")
35+
36+
[connection signal="body_shape_entered" from="WaterDetector" to="." method="_on_area_2d_body_shape_entered"]

scenes/game_elements/characters/player/components/player.gd

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ const DEFAULT_SPRITE_FRAME: SpriteFrames = preload("uid://vwf8e1v8brdp")
7474

7575
var input_vector: Vector2
7676

77+
# Storing this is cribbed from top_down_push_ship_player_2d.gd in GDQuest's Node
78+
# Essentials course. TODO: I don't understand why this is necessary, and in my
79+
# implementation the player "sticks" to the block for 1 frame when they walk
80+
# away, dragging the block with them.
81+
var _pushing_block: CharacterBody2D
82+
var _pushing_direction: Vector2
83+
var _detach_distance: float
84+
7785
@onready var player_interaction: PlayerInteraction = %PlayerInteraction
7886
@onready var player_fighting: Node2D = %PlayerFighting
7987
@onready var player_hook: PlayerHook = %PlayerHook
@@ -201,8 +209,31 @@ func _physics_process(delta: float) -> void:
201209
)
202210
velocity = velocity.move_toward(input_vector, step * delta)
203211

212+
if is_instance_valid(_pushing_block):
213+
_pushing_block.velocity = velocity
214+
_pushing_block.move_and_slide()
215+
204216
move_and_slide()
205217

218+
_push_block()
219+
220+
221+
func _push_block() -> void:
222+
for i: int in get_slide_collision_count():
223+
var collision := get_slide_collision(i)
224+
var collider := collision.get_collider() as CharacterBody2D
225+
if collider:
226+
_pushing_block = collider
227+
# TODO: quantize to cardinal direction?
228+
_pushing_direction = input_vector
229+
_detach_distance = global_position.distance_to(collider.global_position) + 1.0
230+
break
231+
232+
if _pushing_block:
233+
var distance := global_position.distance_to(_pushing_block.global_position)
234+
if input_vector != _pushing_direction or distance > _detach_distance:
235+
_pushing_block = null
236+
206237

207238
func teleport_to(
208239
tele_position: Vector2,

0 commit comments

Comments
 (0)