diff --git a/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.ctex b/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.ctex new file mode 100644 index 0000000..2770cf5 Binary files /dev/null and b/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.ctex differ diff --git a/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.md5 b/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.md5 new file mode 100644 index 0000000..3d2b7c6 --- /dev/null +++ b/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.md5 @@ -0,0 +1,3 @@ +source_md5="8830dde094a19d459e4ecace0f77b457" +dest_md5="26e10bb895acae69a32304a1094efe56" + diff --git a/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.s3tc.ctex b/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.s3tc.ctex new file mode 100644 index 0000000..86713b5 Binary files /dev/null and b/.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.s3tc.ctex differ diff --git a/.kanban.json b/.kanban.json index 30bdf9d..20882b0 100644 --- a/.kanban.json +++ b/.kanban.json @@ -21,7 +21,8 @@ "uuid": "1362622c-1ff4-486f-8259-ad74fa64fa9d", "title": "Todo", "tasks": [ - "9472b337-dcb7-4b3e-91f5-6fff4665e7fa" + "9472b337-dcb7-4b3e-91f5-6fff4665e7fa", + "d7871f7c-485d-4597-94d0-cfe97e67bd72" ] }, { @@ -202,6 +203,13 @@ "description": "", "category": "33d2a8e1-cea6-4280-b71a-a2aa44f6472a", "steps": [] + }, + { + "uuid": "d7871f7c-485d-4597-94d0-cfe97e67bd72", + "title": "Add sounds for dialogue", + "description": "", + "category": "98e1b7c7-58dd-46db-b5c2-0c8b29108c79", + "steps": [] } ], "layout": { @@ -218,4 +226,4 @@ ] ] } -} +} \ No newline at end of file diff --git a/.reuse/dep5 b/.reuse/dep5 index ff2903b..e85dd3d 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -113,6 +113,10 @@ Copyright: 2014 rubberduck License: CC0-1.0 Source: https://opengameart.org/node/27532 +Files: assets/textures/red_bricks.jpg +Copyright: 2017 Brain Nectar +License: CC-BY-4.0 +Source: https://opengameart.org/content/red-brick-texture # Fonts diff --git a/CREDITS.md b/CREDITS.md index 05297ed..2a068ef 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -4,7 +4,6 @@ - "[addons/gd-plug/*](https://github.com/imjp94/gd-plug)" by **Tan Jian Ping** licensed under [MIT](./LICENSES/MIT.txt) - "[addons/proton_scatter/*](https://github.com/HungryProton/scatter)" by **HungryProton** licensed under [MIT](./LICENSES/MIT.txt) - "[addons/debug_menu/*](https://github.com/godot-extended-libraries/godot-debug-menu)" by **Hugo Locurcio and contributors** licensed under [MIT](./LICENSES/MIT.txt) -- "[addons/gpsx/*](https://github.com/GithubPrankster/gpsx)" by **Uneven Prankster** licensed under [MIT](./LICENSES/MIT.txt) - "[addons/goat/*](https://github.com/miskatonicstudio/goat)" by **Miskatonic Studio** licensed under [MIT](./LICENSES/MIT.txt) - "[addons/dialogue_label/*](https://github.com/night-glider/Dialogue-Label)" by **night-glider** licensed under [MIT](./LICENSES/MIT.txt) - "[addons/UniversalFade/*](https://github.com/KoBeWi/Godot-Universal-Fade)" by **Tomek** licensed under [MIT](./LICENSES/MIT.txt) @@ -15,17 +14,26 @@ - "[assets/models/flashligh/*](https://opengameart.org/content/torch)" by **jpsweber** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[assets/models/hedge/*](https://elegantcrow.itch.io/retro-modular-hedge-maze)" by **Elegant Crow** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[assets/models/house/*](https://elegantcrow.itch.io/retro-house-pack)" by **Elegant Crow** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) -- "[assets/models/lamp-post-bench-trashcan/*](https://opengameart.org/content/lamp-post-bench-trashcan)" by **loafbrr** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) -- "[assets/models/unfinished-buildings/*](https://opengameart.org/content/unfinished-buildings)" by **loafbrr** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/models/lamp_post_bench_trashcan/*](https://opengameart.org/content/lamp-post-bench-trashcan)" by **loafbrr** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/models/unfinished_buildings/*](https://opengameart.org/content/unfinished-buildings)" by **loafbrr** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[assets/models/foliage/*](https://opengameart.org/content/foliage1)" by **loafbrr** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) ## Textures - "[assets/textures/ground.jpg](https://ambientcg.com/view?id=Ground037)" by **Lennart Demes** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[assets/textures/paving_stones.jpg](https://ambientcg.com/view?id=PavingStones131)" by **Lennart Demes** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[assets/textures/grass.jpg](https://ambientcg.com/view?id=Grass001)" by **Lennart Demes** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/textures/wood.jpg](https://opengameart.org/node/27564)" by **rubberduck** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/textures/metal.jpg](https://opengameart.org/node/27532)" by **rubberduck** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/textures/red_bricks.jpg](https://opengameart.org/content/red-brick-texture)" by **Brain Nectar** licensed under [CC-BY-4.0](./LICENSES/CC-BY-4.0.txt) ## Fonts -- "[assets/fonts/*](https://fontesk.com/disket-mono-typeface/)" by **Mariano Diez** licensed under [OFL-1.0](./LICENSES/OFL-1.0.txt) +- "[assets/fonts/disket-mono-typeface/*](https://fontesk.com/disket-mono-typeface/)" by **Mariano Diez** licensed under [OFL-1.0](./LICENSES/OFL-1.0.txt) ## Music -- "[assets/musics/main_menu.ogg](https://opengameart.org/content/main-menu-title)" by **Fato Shadow Music** licensed under [CC-BY-3.0](./LICENSES/CC-BY-3.0.txt) +- "[assets/music/main_menu.ogg](https://opengameart.org/content/main-menu-title)" by **Fato Shadow Music** licensed under [CC-BY-3.0](./LICENSES/CC-BY-3.0.txt) +## Sfx +- "[assets/sfx/pickup.wav](https://opengameart.org/content/3-item-sounds)" by **Michel Baradari** licensed under [CC-BY-3.0](./LICENSES/CC-BY-3.0.txt) +- "[assets/sfx/metal_slide.wav](https://opengameart.org/content/rockmetal-slide)" by **Varkalandar** licensed under [CC-BY-3.0](./LICENSES/CC-BY-3.0.txt) +- "[assets/sfx/car.ogg](https://opengameart.org/content/car-sound-effects-pack-low-quality)" by **GGBot** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/sfx/door_open.ogg](https://opengameart.org/content/door-open-door-close-set)" by **qubodup** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) ## Shaders +- "[shaders/panoramic_textured_sky_with_clouds.gdshader](https://godotshaders.com/shader/panoramic-textured-sky-with-clouds/)" by **Gyrth** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[shaders/psx_model.gdshader](https://godotshaders.com/shader/ps1-psx-model/)" by **Grau** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) - "[shaders/psx_postprocessing.gdshader](https://godotshaders.com/shader/ps1-psx-postprocessing/)" by **Grau** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) diff --git a/Justfile b/Justfile index 308ea65..6468778 100644 --- a/Justfile +++ b/Justfile @@ -141,6 +141,10 @@ fmt: just venv pip install pre-commit==3.* just venv pre-commit run -a +# Generate the CREDTIS.md file +credits: + just venv python ./generate_credits.py + # === Godot === # # Recipes around the Godot binary. @@ -247,4 +251,4 @@ ci-publish: gh release create "{{ game_version }}" --title="v{{ game_version }}" --generate-notes {{ dist_dir }}/* just butler push {{ dist_dir }}/{{ game_name }}-windows-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:windows --userversion {{ game_version }} just butler push {{ dist_dir }}/{{ game_name }}-mac-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:mac --userversion {{ game_version }} - just butler push {{ dist_dir }}/{{ game_name }}-linux-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:linux --userversion {{ game_version }} \ No newline at end of file + just butler push {{ dist_dir }}/{{ game_name }}-linux-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:linux --userversion {{ game_version }} diff --git a/assets/textures/red_bricks.jpg b/assets/textures/red_bricks.jpg new file mode 100644 index 0000000..917298b Binary files /dev/null and b/assets/textures/red_bricks.jpg differ diff --git a/assets/textures/red_bricks.jpg.import b/assets/textures/red_bricks.jpg.import new file mode 100644 index 0000000..9128ffa --- /dev/null +++ b/assets/textures/red_bricks.jpg.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mcprxpflavgh" +path.s3tc="res://.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/textures/red_bricks.jpg" +dest_files=["res://.godot/imported/red_bricks.jpg-5dd86cd25e4957e121cc79f9fd814415.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/generate_credits.py b/generate_credits.py new file mode 100755 index 0000000..8173bfd --- /dev/null +++ b/generate_credits.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import os +from string import Template + + +def main(): + template = Template(( + '- "[$files]($source)" by **$author** licensed' + ' under [$license](./LICENSES/$license.txt)\n' + )) + + deps = {} + section = None + + with open(".reuse/dep5", "r") as file: + for line in file: + if line.startswith('# '): + section = line[len("# "): -1].lower() + + if section is None: + continue + + if line.startswith("Files: "): + if section not in deps: + deps[section] = [] + + deps[section].append({"files": line[len("Files: "):-1]}) + + elif line.startswith("Copyright: "): + if section not in deps: + deps[section] = [] + + date_author = line[len("Copyright: "):-1].split(" ") + date_author.pop(0) + deps[section][-1]["author"] = " ".join(date_author) + + elif line.startswith("License: "): + if section not in deps: + deps[section] = [] + + deps[section][-1]["license"] = line[len("License: "):-1] + + elif line.startswith("Source: "): + if section not in deps: + deps[section] = [] + + deps[section][-1]["source"] = line[len("Source: "):-1] + + if deps: + with open("CREDITS.md", "w") as file: + file.writelines("# Credits\n\n") + + for key, value in deps.items(): + file.writelines(f"## {key.title()}\n") + for dep in value: + file.writelines(template.substitute(**dep)) + else: + if os.path.exists("CREDITS.md"): + os.remove("CREDITS.md") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scenes/terrain/cube.tscn b/scenes/terrain/cube.tscn index b2df676..0f908bc 100644 --- a/scenes/terrain/cube.tscn +++ b/scenes/terrain/cube.tscn @@ -1,21 +1,11 @@ -[gd_scene load_steps=5 format=3 uid="uid://csi0appw0lt1t"] +[gd_scene load_steps=9 format=3 uid="uid://csi0appw0lt1t"] [ext_resource type="Material" uid="uid://b37vueiav2gg8" path="res://assets/models/unfinished_buildings/unfinished_atlas.material" id="1_6j67m"] +[ext_resource type="Texture2D" uid="uid://c6my81aan3jxb" path="res://assets/models/unfinished_buildings/unfinished_atlas.png" id="2_c1fwb"] +[ext_resource type="Texture2D" uid="uid://mcprxpflavgh" path="res://assets/textures/red_bricks.jpg" id="3_q6fvl"] -[sub_resource type="ArrayMesh" id="ArrayMesh_h42gh"] -resource_name = "Test_Cube004" -_surfaces = [{ -"aabb": AABB(-0.5, 0, -0.5, 1, 3, 1.00001), -"attribute_data": PackedByteArray(0, 32, 85, 62, 0, 0, 128, 63, 0, 32, 85, 62, 0, 0, 0, 63, 0, 32, 85, 62, 0, 0, 0, 63, 0, 32, 85, 62, 0, 0, 128, 63, 0, 64, 21, 62, 0, 0, 128, 63, 0, 64, 21, 62, 0, 0, 128, 63, 0, 64, 21, 62, 0, 0, 0, 63, 0, 64, 21, 62, 0, 0, 0, 63, 0, 64, 21, 62, 0, 0, 0, 63, 0, 64, 21, 62, 0, 0, 128, 63, 0, 64, 21, 62, 0, 0, 128, 63, 0, 64, 21, 62, 0, 0, 0, 63, 0, 32, 85, 62, 0, 0, 128, 63, 0, 32, 85, 62, 0, 0, 128, 63, 0, 32, 85, 62, 0, 0, 0, 63, 0, 32, 85, 62, 0, 0, 0, 63), -"format": 34359742487, -"index_count": 24, -"index_data": PackedByteArray(0, 0, 6, 0, 2, 0, 0, 0, 4, 0, 6, 0, 5, 0, 14, 0, 7, 0, 5, 0, 12, 0, 14, 0, 13, 0, 11, 0, 15, 0, 13, 0, 9, 0, 11, 0, 8, 0, 3, 0, 10, 0, 8, 0, 1, 0, 3, 0), -"material": ExtResource("1_6j67m"), -"primitive": 3, -"uv_scale": Vector4(0, 0, 0, 0), -"vertex_count": 16, -"vertex_data": PackedByteArray(0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 191, 0, 0, 64, 64, 0, 0, 0, 63, 0, 0, 0, 191, 0, 0, 64, 64, 0, 0, 0, 63, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 191, 0, 0, 64, 64, 0, 0, 0, 191, 0, 0, 0, 191, 0, 0, 64, 64, 0, 0, 0, 191, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 64, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 64, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 63, 0, 0, 64, 64, 0, 0, 0, 191, 0, 0, 0, 63, 0, 0, 64, 64, 0, 0, 0, 191, 1, 128, 0, 0, 255, 127, 126, 191, 0, 0, 0, 0, 0, 0, 126, 191, 1, 128, 0, 0, 255, 127, 126, 191, 0, 0, 0, 0, 0, 0, 126, 191, 1, 128, 0, 0, 255, 127, 126, 191, 255, 127, 255, 127, 255, 255, 128, 64, 1, 128, 0, 0, 255, 127, 126, 191, 255, 127, 255, 127, 255, 255, 128, 64, 0, 0, 0, 0, 0, 0, 126, 191, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 126, 191, 255, 127, 0, 0, 255, 255, 255, 255, 255, 127, 255, 127, 255, 255, 128, 64, 255, 127, 0, 0, 255, 255, 255, 255, 255, 127, 255, 127, 255, 255, 128, 64, 255, 127, 0, 0, 255, 255, 255, 255) -}] +[sub_resource type="BoxShape3D" id="BoxShape3D_mpfkj"] +size = Vector3(1, 3, 1) [sub_resource type="ArrayMesh" id="ArrayMesh_hsacj"] resource_name = "unfinishedbuildings_Plane_055" @@ -35,20 +25,28 @@ _surfaces = [{ }] blend_shape_mode = 0 -[sub_resource type="BoxShape3D" id="BoxShape3D_mpfkj"] -size = Vector3(1, 3, 1) +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fcu7l"] +vertex_color_use_as_albedo = true +albedo_texture = ExtResource("2_c1fwb") -[node name="Cube003" type="MeshInstance3D"] -transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -19, 0, -10) -mesh = SubResource("ArrayMesh_h42gh") +[sub_resource type="BoxMesh" id="BoxMesh_devsw"] -[node name="RebarPost_3" type="MeshInstance3D" parent="."] -transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1.8312, 0) -mesh = SubResource("ArrayMesh_hsacj") -skeleton = NodePath("") +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_34dxq"] +albedo_texture = ExtResource("3_q6fvl") +uv1_scale = Vector3(1, 3, 1) -[node name="StaticBody3D" type="StaticBody3D" parent="."] +[node name="Column" type="StaticBody3D"] -[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0) shape = SubResource("BoxShape3D_mpfkj") + +[node name="RebarPost" type="MeshInstance3D" parent="."] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0) +mesh = SubResource("ArrayMesh_hsacj") +surface_material_override/0 = SubResource("StandardMaterial3D_fcu7l") + +[node name="Cube" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 1.5, 0) +mesh = SubResource("BoxMesh_devsw") +surface_material_override/0 = SubResource("StandardMaterial3D_34dxq") diff --git a/scenes/terrain/generator.tscn b/scenes/terrain/generator.tscn index 09dbd38..b1e0d5a 100644 --- a/scenes/terrain/generator.tscn +++ b/scenes/terrain/generator.tscn @@ -180,64 +180,49 @@ transform = Transform3D(-8.74228e-08, 0, 2, 0, 2, 0, -2, 0, -8.74228e-08, 23, 0, [node name="Columns" type="Node3D" parent="."] [node name="Cube003" parent="Columns" instance=ExtResource("6_uu1ga")] -skeleton = NodePath("../..") +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -19, 0, -10) [node name="Cube005" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -13, 0, -10) -skeleton = NodePath("../..") [node name="Cube006" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -13, 0, -16) -skeleton = NodePath("../..") [node name="Cube007" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 23, 0, -16) -skeleton = NodePath("../..") [node name="Cube008" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 23, 0, 14) -skeleton = NodePath("../..") [node name="Cube009" parent="Columns" instance=ExtResource("6_uu1ga")] -transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 13, 0, 7.5) -skeleton = NodePath("../..") +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 13, 0, 8.5) [node name="Cube010" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 13, 0, 2.5) -skeleton = NodePath("../..") [node name="Cube011" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -5, 0, 2.5) -skeleton = NodePath("../..") [node name="Cube015" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -5, 0, -9.5) -skeleton = NodePath("../..") [node name="Cube016" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -5, 0, -3.5) -skeleton = NodePath("../..") [node name="Cube017" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 13, 0, -3.5) -skeleton = NodePath("../..") [node name="Cube018" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 13, 0, -9.5) -skeleton = NodePath("../..") [node name="Cube012" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -5, 0, 8.5) -skeleton = NodePath("../..") [node name="Cube013" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -13, 0, 8) -skeleton = NodePath("../..") [node name="Cube014" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -13, 0, 14) -skeleton = NodePath("../..") [node name="Cube004" parent="Columns" instance=ExtResource("6_uu1ga")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -19, 0, 8) -skeleton = NodePath("../..")