Compare commits

..

4 Commits

79 changed files with 7470 additions and 161 deletions

3044
experimental/map.tscn Normal file

File diff suppressed because it is too large Load Diff

1
external/floatbot.bbmodel vendored Normal file

File diff suppressed because one or more lines are too long

1
external/grills.crocotile vendored Normal file

File diff suppressed because one or more lines are too long

BIN
external/markers.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

40
external/markers.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://w7sq4ygr5svp"
path="res://.godot/imported/markers.png-a608ba5d6f67e2aa5aeb7f89ab7382f2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/markers.png"
dest_files=["res://.godot/imported/markers.png-a608ba5d6f67e2aa5aeb7f89ab7382f2.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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

109
minimap.tres Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c5xlpbuhliroc"
path="res://.godot/imported/floor.gltf-26c6a14b1801b29d809065be02f4b4ff.scn"
[deps]
source_file="res://models/manufactory/floor.gltf"
dest_files=["res://.godot/imported/floor.gltf-26c6a14b1801b29d809065be02f4b4ff.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: 82 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvp5nsky547ah"
path.s3tc="res://.godot/imported/floor_0.png-6fedca457514da3c314dc48b663e940d.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/floor_0.png"
dest_files=["res://.godot/imported/floor_0.png-6fedca457514da3c314dc48b663e940d.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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cdo5uwqfd67si"
path="res://.godot/imported/grill.gltf-65aaadf836993516eac93fa26b5edd3d.scn"
[deps]
source_file="res://models/manufactory/grill.gltf"
dest_files=["res://.godot/imported/grill.gltf-65aaadf836993516eac93fa26b5edd3d.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: 82 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bfmitswemgn53"
path="res://.godot/imported/grill_0.png-e0789cd6274ab7628c7cdac33f2713b4.ctex"
metadata={
"vram_texture": false
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/grill_0.png"
dest_files=["res://.godot/imported/grill_0.png-e0789cd6274ab7628c7cdac33f2713b4.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=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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bffpnhlx2c3ur"
path="res://.godot/imported/ramp.gltf-42cbf5e92a8e150e35a217af96880d72.scn"
[deps]
source_file="res://models/manufactory/ramp.gltf"
dest_files=["res://.godot/imported/ramp.gltf-42cbf5e92a8e150e35a217af96880d72.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: 82 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://uxr5wru0okt5"
path.s3tc="res://.godot/imported/ramp_0.png-b5b4dbad1abbc9ce15dd304da27c58d0.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/ramp_0.png"
dest_files=["res://.godot/imported/ramp_0.png-b5b4dbad1abbc9ce15dd304da27c58d0.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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dk834makfl20n"
path="res://.godot/imported/top_block.gltf-d29eb01df08f53c1a119253ab1a71a1b.scn"
[deps]
source_file="res://models/manufactory/top_block.gltf"
dest_files=["res://.godot/imported/top_block.gltf-d29eb01df08f53c1a119253ab1a71a1b.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: 82 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dymu3xuo18re3"
path.s3tc="res://.godot/imported/top_block_0.png-b550f555b571dfb7537fe8b4573b9bc7.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/top_block_0.png"
dest_files=["res://.godot/imported/top_block_0.png-b550f555b571dfb7537fe8b4573b9bc7.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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cc4hvaonuuop4"
path="res://.godot/imported/top_wall.gltf-35de8bf5c75dcd67e3f5036b800e0b87.scn"
[deps]
source_file="res://models/manufactory/top_wall.gltf"
dest_files=["res://.godot/imported/top_wall.gltf-35de8bf5c75dcd67e3f5036b800e0b87.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: 82 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cbdb2sweowl6o"
path.s3tc="res://.godot/imported/top_wall_0.png-82163672fffcf566061c28f51d6b650e.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/top_wall_0.png"
dest_files=["res://.godot/imported/top_wall_0.png-82163672fffcf566061c28f51d6b650e.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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dofnf8jhwb0ok"
path="res://.godot/imported/wall.gltf-c0c088275a1ece7582f426ab20364d2b.scn"
[deps]
source_file="res://models/manufactory/wall.gltf"
dest_files=["res://.godot/imported/wall.gltf-c0c088275a1ece7582f426ab20364d2b.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: 82 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://mmdpsc2yc6ok"
path.s3tc="res://.godot/imported/wall_0.png-cb295b23c89383a1f1e7a6ba87dda2cf.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/wall_0.png"
dest_files=["res://.godot/imported/wall_0.png-cb295b23c89383a1f1e7a6ba87dda2cf.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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bu153tj8hxto"
path="res://.godot/imported/wall_block.gltf-4f54285692d691dba5f0d9c67a96bdfe.scn"
[deps]
source_file="res://models/manufactory/wall_block.gltf"
dest_files=["res://.godot/imported/wall_block.gltf-4f54285692d691dba5f0d9c67a96bdfe.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: 82 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://7mar1ac3kj7p"
path.s3tc="res://.godot/imported/wall_block_0.png-163310e251c37ab0b14095324e62bf94.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "7c23d77235f690bcc4489c7fa65c4463"
}
[deps]
source_file="res://models/manufactory/wall_block_0.png"
dest_files=["res://.godot/imported/wall_block_0.png-163310e251c37ab0b14095324e62bf94.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

View File

@@ -0,0 +1,842 @@
[gd_scene load_steps=32 format=4 uid="uid://m8bmiba020j4"]
[ext_resource type="Texture2D" uid="uid://bfmitswemgn53" path="res://models/manufactory/grill_0.png" id="1_nrpl8"]
[ext_resource type="Texture2D" uid="uid://bvp5nsky547ah" path="res://models/manufactory/floor_0.png" id="2_23a7b"]
[ext_resource type="Texture2D" uid="uid://uxr5wru0okt5" path="res://models/manufactory/ramp_0.png" id="3_cls2x"]
[ext_resource type="Texture2D" uid="uid://dymu3xuo18re3" path="res://models/manufactory/top_block_0.png" id="4_8um5h"]
[ext_resource type="Texture2D" uid="uid://7mar1ac3kj7p" path="res://models/manufactory/wall_block_0.png" id="5_tg7jr"]
[ext_resource type="Texture2D" uid="uid://cbdb2sweowl6o" path="res://models/manufactory/top_wall_0.png" id="6_nkukn"]
[ext_resource type="Texture2D" uid="uid://mmdpsc2yc6ok" path="res://models/manufactory/wall_0.png" id="7_nl0od"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7efeg"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("1_nrpl8")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_fbucr"]
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAP//AAAAAAAAAAAAAP//AAAAAAAA//8AAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_cls2x"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"attribute_data": PackedByteArray("/w//D/8P/wf/B/8H/w//D/8H/wf/B/8P"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": SubResource("StandardMaterial3D_7efeg"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAP//AAAAAAAAAAAAAP//AAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD//wAA/3//v/9//7//f/+//3//v/9//7//f/+/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_fbucr")
[sub_resource type="BoxShape3D" id="BoxShape3D_37ayi"]
size = Vector3(1, 0.15, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kh5dh"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("2_23a7b")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_n5w1y"]
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAP//AAAAAAAAAAAAAP//AAAAAAAA//8AAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_23a7b"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"attribute_data": PackedByteArray("AAD/BwAA/w//B/8PAAD/B/8H/w//B/8H"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": SubResource("StandardMaterial3D_kh5dh"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAP///z8AAAAAAAD/P///AAAAAP8/AAAAAP///z///wAAAAD/P///AAD///8/////f////3////9/////f////3////9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_n5w1y")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3k33q"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("3_cls2x")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_d4jju"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"format": 34359742465,
"index_count": 30,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAABAAAAAwAAAAQABAAEAAEAAwAEAAUAAQAFAAQABQACAAMAAQACAAUABQAFAAIA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAvwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAC/")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_boclw"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("AAAAAAAAAD0AAAAAAAAAAAAAAD0AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAD0AAAA9AAAAAAAAgD0AAAAAAAAAPQAAAD0AAAA9AAAAAAAAgD0AAAA9AAAAPQAAAD0AAIA9AACAPQAAgD0AAIA9AAAAPQAAwD0AAAA9AACAPQAAgD0AAMA9AAAAPQAAwD0AAIA9AACAPQAAgD0AAIA9AAAAPQAAwD0AAAA9AACAPQAAgD0AAMA9AAAAPQAAwD0AAIA9AACAPQAAgD0AAIA9AAAAPQAAAD0AAAA9AACAPQAAgD0AAAA9AAAAPQAAAD0AAIA9"),
"format": 34359742487,
"index_count": 30,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0A"),
"material": SubResource("StandardMaterial3D_3k33q"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 30,
"vertex_data": PackedByteArray("AAAAvwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAA/AAAAPwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAPwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAvwAAAAAAAAA/AAAAvwAAAAAAAAC/AAAAvwAAAAAAAAA/AAAAPwAAAAAAAAA/AAAAvwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAC/////f/////////9//////////3//////////f/////////9//////////3///////7//v/+//5//v/+//7//n/+//7//v/+f/7//v/+//5//v/+//7//n/+//7//v/+f////f////7////9/////v////3////+//////wAA/7//////AAD/v/////8AAP+/////f////7////9/////v////3////+//////wAA/7//////AAD/v/////8AAP+//38AAAAA/z//fwAAAAD/P/9/AAAAAP8//38AAAAA/z//fwAAAAD/P/9/AAAAAP8/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_d4jju")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kaae4"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("4_8um5h")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_awriq"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"format": 34896613377,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAABAAMAAQACAAQAAQAEAAMAAAACAAUABQACAAQAAAADAAYABQAAAAYABgADAAQABQAEAAcABgAEAAcABQAGAAcA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 8,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAA////////AAD/////AAAAAAAAAAAAAAAA//8AAP//AAD//wAAAAAAAA==")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_e4fuu"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/D/8H/wcAAP8H/wf/DwAA/wcAAP8P/wf/F/8H/w8AAP8P/wf/FwAA/w8AAP8X"),
"format": 34896613399,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMA"),
"material": SubResource("StandardMaterial3D_kaae4"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 36,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAAAAAAAP//AAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAP////8AAAAAAAAAAAAAAAD/////AAAAAP//AAAAAAAAAAAAAP//AAAAAP////8AAP///////wAAAAAAAP//AAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAP////8AAAAA//8AAP//AAD/////AAAAAP//AAAAAAAAAAD/////AAAAAP//AAAAAP////8AAAAAAAD/////AAD/////AAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAAAAAAA/7//f/+//3//v/9//7//f/+//3//v/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//7//f/+//3//v/9//7//f/+//3//v/9//3//v/9//7//f/+//3//v/9//7//f/+//3//P/9//z//f/8//3//P/9//z//f/8/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_awriq")
[sub_resource type="BoxShape3D" id="BoxShape3D_8xl5w"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_okoem"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("5_tg7jr")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_fxpe1"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"format": 34896613377,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwABAAAAAAACAAQABQABAAMABQACAAEAAwAAAAYABgADAAUABgAAAAQABwACAAUABgAFAAcABwAEAAIABgAEAAcA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 8,
"vertex_data": PackedByteArray("AAD/////AAAAAP//AAAAAP////8AAAAAAAAAAAAAAAD///////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAA==")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_apsfj"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("/xf/D/8X/wf/H/8H/xf/D/8f/wf/H/8P/xf/D/8X/wf/H/8H/xf/D/8f/wf/H/8P/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H"),
"format": 34896613399,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMA"),
"material": SubResource("StandardMaterial3D_okoem"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 36,
"vertex_data": PackedByteArray("AAD//////78AAP//AAD/v/////8AAP+/AAD//////7//////AAD/v/////////+/AAAAAP///78AAAAAAAD/v///AAAAAP+/AAAAAP///7///wAAAAD/v///AAD///+/AAAAAAAA/78AAP//AAD/vwAA//////+/AAAAAAAA/78AAP//////vwAAAAD///+///8AAAAA////////AAD//wAA//8AAP////8AAAAA//8AAP//AAD//wAAAAAAAP//AAAAAP//AIAAAP////8AgP///////wCAAAAAAP//AID///////8AgP//AAD//wCA//8AAP///7//////////v/////8AAP+///8AAP///7//////AAD/v///AAAAAP+/////f////3////9/////f////3////9/////f////3////9/////f////3////9//3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////38AAP9/AAD/fwAA/38AAP9/AAD/fwAA")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_fxpe1")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hruht"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("6_nkukn")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_bepgm"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAAAAAAAAAP//AAAAAAAA/////wAAAAAAAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_tcr31"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"attribute_data": PackedByteArray("/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": SubResource("StandardMaterial3D_hruht"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAAAAAAAAAP//AAAAAAAA/////wAAAAAAAAAAAAAAAP////8AAAAAAAD//wAA/z//f/8//3//P/9//z//f/8//3//P/9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_bepgm")
[sub_resource type="BoxShape3D" id="BoxShape3D_3lfho"]
size = Vector3(0.4, 1, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3w15n"]
resource_name = "texture_1"
transparency = 2
alpha_scissor_threshold = 0.01
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_texture = ExtResource("7_nl0od")
texture_filter = 0
texture_repeat = false
[sub_resource type="ArrayMesh" id="ArrayMesh_7s06x"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAAAAAAAAAAAAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_wswoi"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"attribute_data": PackedByteArray("/w//B/8PAAD/BwAA/w//B/8HAAD/B/8H"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": SubResource("StandardMaterial3D_3w15n"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAAAAAAAP//AAAAAP//AAAAAAAAAAAAAAAA/7//f/+//3//v/9//7//f/+//3//v/9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_7s06x")
[node name="Node3D" type="Node3D"]
[node name="grill" type="MeshInstance3D" parent="."]
mesh = SubResource("ArrayMesh_cls2x")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "grill",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "F006DAE6-66B3-4AE5-9124-8E78858C8EC2"
}],
"name": "grill",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="grill"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.925, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="grill/StaticBody3D"]
shape = SubResource("BoxShape3D_37ayi")
[node name="floor" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
mesh = SubResource("ArrayMesh_23a7b")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [{
"angle": 0.0,
"enabled": true,
"max": 22.5,
"min": -22.5,
"suffix": "_S"
}, {
"angle": 45.0,
"enabled": true,
"max": 67.5,
"min": 22.5,
"suffix": "_SW"
}, {
"angle": 90.0,
"enabled": true,
"max": 112.5,
"min": 67.5,
"suffix": "_W"
}, {
"angle": 135.0,
"enabled": true,
"max": 157.5,
"min": 112.5,
"suffix": "_NW"
}, {
"angle": 180.0,
"enabled": true,
"max": 202.5,
"min": 157.5,
"suffix": "_N"
}, {
"angle": 225.0,
"enabled": true,
"max": 247.5,
"min": 202.5,
"suffix": "_NE"
}, {
"angle": 270.0,
"enabled": true,
"max": 292.5,
"min": 247.5,
"suffix": "_E"
}, {
"angle": 315.0,
"enabled": true,
"max": 337.5,
"min": 292.5,
"suffix": "_SE"
}],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "floor",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "576A778C-DE45-4366-BA5C-FA28E0974E00"
}],
"name": "floor",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="floor"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.925, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="floor/StaticBody3D"]
shape = SubResource("BoxShape3D_37ayi")
[node name="ramp" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0)
mesh = SubResource("ArrayMesh_boclw")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [{
"angle": 0.0,
"enabled": true,
"max": 22.5,
"min": -22.5,
"suffix": "_S"
}, {
"angle": 45.0,
"enabled": true,
"max": 67.5,
"min": 22.5,
"suffix": "_SW"
}, {
"angle": 90.0,
"enabled": true,
"max": 112.5,
"min": 67.5,
"suffix": "_W"
}, {
"angle": 135.0,
"enabled": true,
"max": 157.5,
"min": 112.5,
"suffix": "_NW"
}, {
"angle": 180.0,
"enabled": true,
"max": 202.5,
"min": 157.5,
"suffix": "_N"
}, {
"angle": 225.0,
"enabled": true,
"max": 247.5,
"min": 202.5,
"suffix": "_NE"
}, {
"angle": 270.0,
"enabled": true,
"max": 292.5,
"min": 247.5,
"suffix": "_E"
}, {
"angle": 315.0,
"enabled": true,
"max": 337.5,
"min": 292.5,
"suffix": "_SE"
}],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "ramp",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "0D90FE0F-A656-49AC-A19F-D4F204CC3FD8"
}],
"name": "ramp",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="top block" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0)
mesh = SubResource("ArrayMesh_e4fuu")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "top block",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "6FD2A8D3-00C2-4258-9AA8-514BA7267EA4"
}],
"name": "top block",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="top block"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="top block/StaticBody3D"]
shape = SubResource("BoxShape3D_8xl5w")
[node name="wall block" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 0, 0)
mesh = SubResource("ArrayMesh_apsfj")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "wall block",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "87491866-5CA9-4035-901D-E227C07C79B8"
}],
"name": "wall block",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="wall block"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="wall block/StaticBody3D"]
shape = SubResource("BoxShape3D_8xl5w")
[node name="top wall" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
mesh = SubResource("ArrayMesh_tcr31")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "top wall",
"parent": null,
"pos": {
"x": 2.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "A3B32E6E-CF14-4D93-9C37-A7FA71812720"
}],
"name": "top wall",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="top wall"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="top wall/StaticBody3D"]
shape = SubResource("BoxShape3D_3lfho")
[node name="wall" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 0, 0)
mesh = SubResource("ArrayMesh_wswoi")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [{
"angle": 0.0,
"enabled": true,
"max": 22.5,
"min": -22.5,
"suffix": "_S"
}, {
"angle": 45.0,
"enabled": true,
"max": 67.5,
"min": 22.5,
"suffix": "_SW"
}, {
"angle": 90.0,
"enabled": true,
"max": 112.5,
"min": 67.5,
"suffix": "_W"
}, {
"angle": 135.0,
"enabled": true,
"max": 157.5,
"min": 112.5,
"suffix": "_NW"
}, {
"angle": 180.0,
"enabled": true,
"max": 202.5,
"min": 157.5,
"suffix": "_N"
}, {
"angle": 225.0,
"enabled": true,
"max": 247.5,
"min": 202.5,
"suffix": "_NE"
}, {
"angle": 270.0,
"enabled": true,
"max": 292.5,
"min": 247.5,
"suffix": "_E"
}, {
"angle": 315.0,
"enabled": true,
"max": 337.5,
"min": 292.5,
"suffix": "_SE"
}],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "wall",
"parent": null,
"pos": {
"x": 2.0,
"y": 0.0,
"z": 2.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "656A441E-D93A-43FE-A53B-BBEAA8631C21"
}],
"name": "wall",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="wall"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="wall/StaticBody3D"]
shape = SubResource("BoxShape3D_3lfho")

View File

@@ -0,0 +1,784 @@
[gd_scene load_steps=24 format=4 uid="uid://cu8y47uvlvrio"]
[ext_resource type="Material" uid="uid://dljweksgxvqv6" path="res://visuals/materials/maptile.tres" id="1_f32hb"]
[ext_resource type="Shader" uid="uid://dtq021j73hhht" path="res://visuals/shaders/maptile.gdshader" id="1_yx2pi"]
[ext_resource type="Texture2D" uid="uid://bfmitswemgn53" path="res://models/manufactory/grill_0.png" id="2_1pju0"]
[sub_resource type="Gradient" id="Gradient_2ho3f"]
offsets = PackedFloat32Array(0, 0.245, 0.56, 0.8025, 1)
colors = PackedColorArray(0, 0, 0.003921569, 1, 1.6845763e-06, 0, 0.54036456, 1, 0.0007814509, 0.22053, 0.7667125, 1, 0.00022246034, 0.29345024, 0.68059045, 1, 0, 0.49560964, 0.86397636, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_lvjv7"]
gradient = SubResource("Gradient_2ho3f")
width = 1024
[sub_resource type="ShaderMaterial" id="ShaderMaterial_1pju0"]
render_priority = 0
shader = ExtResource("1_yx2pi")
shader_parameter/albedo_texture = ExtResource("2_1pju0")
shader_parameter/height_gradient = SubResource("GradientTexture1D_lvjv7")
shader_parameter/vertical_offset = 9999.0
shader_parameter/vertical_range = 6.0
[sub_resource type="ArrayMesh" id="ArrayMesh_fbucr"]
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAP//AAAAAAAAAAAAAP//AAAAAAAA//8AAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_cls2x"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"attribute_data": PackedByteArray("/w//D/8P/wf/B/8H/w//D/8H/wf/B/8P"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": SubResource("ShaderMaterial_1pju0"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAP//AAAAAAAAAAAAAP//AAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD//wAA/3//v/9//7//f/+//3//v/9//7//f/+/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_fbucr")
[sub_resource type="BoxShape3D" id="BoxShape3D_37ayi"]
size = Vector3(1, 0.15, 1)
[sub_resource type="ArrayMesh" id="ArrayMesh_n5w1y"]
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAP//AAAAAAAAAAAAAP//AAAAAAAA//8AAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_23a7b"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 1, -0.5, 1, 1e-05, 1),
"attribute_data": PackedByteArray("AAD/BwAA/w//B/8PAAD/B/8H/w//B/8H"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": ExtResource("1_f32hb"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAP///z8AAAAAAAD/P///AAAAAP8/AAAAAP///z///wAAAAD/P///AAD///8/////f////3////9/////f////3////9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_n5w1y")
[sub_resource type="ArrayMesh" id="ArrayMesh_d4jju"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"format": 34359742465,
"index_count": 30,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAABAAAAAwAAAAQABAAEAAEAAwAEAAUAAQAFAAQABQACAAMAAQACAAUABQAFAAIA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAvwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAC/")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_boclw"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("AAAAAAAAAD0AAAAAAAAAAAAAAD0AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAD0AAAA9AAAAAAAAgD0AAAAAAAAAPQAAAD0AAAA9AAAAAAAAgD0AAAA9AAAAPQAAAD0AAIA9AACAPQAAgD0AAIA9AAAAPQAAwD0AAAA9AACAPQAAgD0AAMA9AAAAPQAAwD0AAIA9AACAPQAAgD0AAIA9AAAAPQAAwD0AAAA9AACAPQAAgD0AAMA9AAAAPQAAwD0AAIA9AACAPQAAgD0AAIA9AAAAPQAAAD0AAAA9AACAPQAAgD0AAAA9AAAAPQAAAD0AAIA9"),
"format": 34359742487,
"index_count": 30,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0A"),
"material": ExtResource("1_f32hb"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 30,
"vertex_data": PackedByteArray("AAAAvwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAA/AAAAPwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAPwAAAAAAAAA/AAAAvwAAgD8AAAA/AAAAvwAAAAAAAAA/AAAAvwAAAAAAAAC/AAAAvwAAAAAAAAA/AAAAPwAAAAAAAAA/AAAAvwAAAAAAAAC/AAAAPwAAAAAAAAA/AAAAPwAAAAAAAAC/////f/////////9//////////3//////////f/////////9//////////3///////7//v/+//5//v/+//7//n/+//7//v/+f/7//v/+//5//v/+//7//n/+//7//v/+f////f////7////9/////v////3////+//////wAA/7//////AAD/v/////8AAP+/////f////7////9/////v////3////+//////wAA/7//////AAD/v/////8AAP+//38AAAAA/z//fwAAAAD/P/9/AAAAAP8//38AAAAA/z//fwAAAAD/P/9/AAAAAP8/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_d4jju")
[sub_resource type="ArrayMesh" id="ArrayMesh_awriq"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"format": 34896613377,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAABAAMAAQACAAQAAQAEAAMAAAACAAUABQACAAQAAAADAAYABQAAAAYABgADAAQABQAEAAcABgAEAAcABQAGAAcA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 8,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAA////////AAD/////AAAAAAAAAAAAAAAA//8AAP//AAD//wAAAAAAAA==")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_e4fuu"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H/wf/D/8H/wcAAP8H/wf/DwAA/wcAAP8P/wf/F/8H/w8AAP8P/wf/FwAA/w8AAP8X"),
"format": 34896613399,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMA"),
"material": ExtResource("1_f32hb"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 36,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAAAAAAAP//AAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAP////8AAAAAAAAAAAAAAAD/////AAAAAP//AAAAAAAAAAAAAP//AAAAAP////8AAP///////wAAAAAAAP//AAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAP////8AAAAA//8AAP//AAD/////AAAAAP//AAAAAAAAAAD/////AAAAAP//AAAAAP////8AAAAAAAD/////AAD/////AAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAAAAAAA/7//f/+//3//v/9//7//f/+//3//v/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//7//f/+//3//v/9//7//f/+//3//v/9//3//v/9//7//f/+//3//v/9//7//f/+//3//P/9//z//f/8//3//P/9//z//f/8/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_awriq")
[sub_resource type="BoxShape3D" id="BoxShape3D_8xl5w"]
[sub_resource type="ArrayMesh" id="ArrayMesh_fxpe1"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"format": 34896613377,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwABAAAAAAACAAQABQABAAMABQACAAEAAwAAAAYABgADAAUABgAAAAQABwACAAUABgAFAAcABwAEAAIABgAEAAcA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 8,
"vertex_data": PackedByteArray("AAD/////AAAAAP//AAAAAP////8AAAAAAAAAAAAAAAD///////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAA==")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_apsfj"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("/xf/D/8X/wf/H/8H/xf/D/8f/wf/H/8P/xf/D/8X/wf/H/8H/xf/D/8f/wf/H/8P/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H/wf/B/8HAAD/DwAA/wf/B/8PAAD/D/8H"),
"format": 34896613399,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMA"),
"material": ExtResource("1_f32hb"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 36,
"vertex_data": PackedByteArray("AAD//////78AAP//AAD/v/////8AAP+/AAD//////7//////AAD/v/////////+/AAAAAP///78AAAAAAAD/v///AAAAAP+/AAAAAP///7///wAAAAD/v///AAD///+/AAAAAAAA/78AAP//AAD/vwAA//////+/AAAAAAAA/78AAP//////vwAAAAD///+///8AAAAA////////AAD//wAA//8AAP////8AAAAA//8AAP//AAD//wAAAAAAAP//AAAAAP//AIAAAP////8AgP///////wCAAAAAAP//AID///////8AgP//AAD//wCA//8AAP///7//////////v/////8AAP+///8AAP///7//////AAD/v///AAAAAP+/////f////3////9/////f////3////9/////f////3////9/////f////3////9//3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////38AAP9/AAD/fwAA/38AAP9/AAD/fwAA")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_fxpe1")
[sub_resource type="ArrayMesh" id="ArrayMesh_bepgm"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAAAAAAAAAP//AAAAAAAA/////wAAAAAAAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_tcr31"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"attribute_data": PackedByteArray("/wf/B/8HAAAAAAAA/wf/BwAAAAAAAP8H"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": ExtResource("1_f32hb"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAAAAAAAAAP//AAAAAAAA/////wAAAAAAAAAAAAAAAP////8AAAAAAAD//wAA/z//f/8//3//P/9//z//f/8//3//P/9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_bepgm")
[sub_resource type="BoxShape3D" id="BoxShape3D_3lfho"]
size = Vector3(0.4, 1, 1)
[sub_resource type="ArrayMesh" id="ArrayMesh_7s06x"]
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"format": 34896613377,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAAACAAMA"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 4,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAAAAAAAAAAAAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_wswoi"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0, -0.5, 1e-05, 1, 1),
"attribute_data": PackedByteArray("/w//B/8PAAD/BwAA/w//B/8HAAD/B/8H"),
"format": 34896613399,
"index_count": 6,
"index_data": PackedByteArray("AAABAAIAAwAEAAUA"),
"material": ExtResource("1_f32hb"),
"name": "texture_1",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 6,
"vertex_data": PackedByteArray("AAAAAP//AAAAAP////8AAAAA//8AAAAAAAAAAP//AAAAAP//AAAAAAAAAAAAAAAA/7//f/+//3//v/9//7//f/+//3//v/9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_7s06x")
[node name="Node3D" type="Node3D"]
[node name="grill" type="MeshInstance3D" parent="."]
mesh = SubResource("ArrayMesh_cls2x")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "grill",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "F006DAE6-66B3-4AE5-9124-8E78858C8EC2"
}],
"name": "grill",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="grill"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.925, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="grill/StaticBody3D"]
shape = SubResource("BoxShape3D_37ayi")
[node name="floor" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
mesh = SubResource("ArrayMesh_23a7b")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [{
"angle": 0.0,
"enabled": true,
"max": 22.5,
"min": -22.5,
"suffix": "_S"
}, {
"angle": 45.0,
"enabled": true,
"max": 67.5,
"min": 22.5,
"suffix": "_SW"
}, {
"angle": 90.0,
"enabled": true,
"max": 112.5,
"min": 67.5,
"suffix": "_W"
}, {
"angle": 135.0,
"enabled": true,
"max": 157.5,
"min": 112.5,
"suffix": "_NW"
}, {
"angle": 180.0,
"enabled": true,
"max": 202.5,
"min": 157.5,
"suffix": "_N"
}, {
"angle": 225.0,
"enabled": true,
"max": 247.5,
"min": 202.5,
"suffix": "_NE"
}, {
"angle": 270.0,
"enabled": true,
"max": 292.5,
"min": 247.5,
"suffix": "_E"
}, {
"angle": 315.0,
"enabled": true,
"max": 337.5,
"min": 292.5,
"suffix": "_SE"
}],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "floor",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "576A778C-DE45-4366-BA5C-FA28E0974E00"
}],
"name": "floor",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="floor"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.925, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="floor/StaticBody3D"]
shape = SubResource("BoxShape3D_37ayi")
[node name="ramp" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0)
mesh = SubResource("ArrayMesh_boclw")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [{
"angle": 0.0,
"enabled": true,
"max": 22.5,
"min": -22.5,
"suffix": "_S"
}, {
"angle": 45.0,
"enabled": true,
"max": 67.5,
"min": 22.5,
"suffix": "_SW"
}, {
"angle": 90.0,
"enabled": true,
"max": 112.5,
"min": 67.5,
"suffix": "_W"
}, {
"angle": 135.0,
"enabled": true,
"max": 157.5,
"min": 112.5,
"suffix": "_NW"
}, {
"angle": 180.0,
"enabled": true,
"max": 202.5,
"min": 157.5,
"suffix": "_N"
}, {
"angle": 225.0,
"enabled": true,
"max": 247.5,
"min": 202.5,
"suffix": "_NE"
}, {
"angle": 270.0,
"enabled": true,
"max": 292.5,
"min": 247.5,
"suffix": "_E"
}, {
"angle": 315.0,
"enabled": true,
"max": 337.5,
"min": 292.5,
"suffix": "_SE"
}],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "ramp",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "0D90FE0F-A656-49AC-A19F-D4F204CC3FD8"
}],
"name": "ramp",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="top block" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0)
mesh = SubResource("ArrayMesh_e4fuu")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "top block",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "6FD2A8D3-00C2-4258-9AA8-514BA7267EA4"
}],
"name": "top block",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="top block"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="top block/StaticBody3D"]
shape = SubResource("BoxShape3D_8xl5w")
[node name="wall block" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 0, 0)
mesh = SubResource("ArrayMesh_apsfj")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "wall block",
"parent": null,
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "87491866-5CA9-4035-901D-E227C07C79B8"
}],
"name": "wall block",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="wall block"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="wall block/StaticBody3D"]
shape = SubResource("BoxShape3D_8xl5w")
[node name="top wall" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
mesh = SubResource("ArrayMesh_tcr31")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "top wall",
"parent": null,
"pos": {
"x": 2.0,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "A3B32E6E-CF14-4D93-9C37-A7FA71812720"
}],
"name": "top wall",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="top wall"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="top wall/StaticBody3D"]
shape = SubResource("BoxShape3D_3lfho")
[node name="wall" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 0, 0)
mesh = SubResource("ArrayMesh_wswoi")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [{
"angle": 0.0,
"enabled": true,
"max": 22.5,
"min": -22.5,
"suffix": "_S"
}, {
"angle": 45.0,
"enabled": true,
"max": 67.5,
"min": 22.5,
"suffix": "_SW"
}, {
"angle": 90.0,
"enabled": true,
"max": 112.5,
"min": 67.5,
"suffix": "_W"
}, {
"angle": 135.0,
"enabled": true,
"max": 157.5,
"min": 112.5,
"suffix": "_NW"
}, {
"angle": 180.0,
"enabled": true,
"max": 202.5,
"min": 157.5,
"suffix": "_N"
}, {
"angle": 225.0,
"enabled": true,
"max": 247.5,
"min": 202.5,
"suffix": "_NE"
}, {
"angle": 270.0,
"enabled": true,
"max": 292.5,
"min": 247.5,
"suffix": "_E"
}, {
"angle": 315.0,
"enabled": true,
"max": 337.5,
"min": 292.5,
"suffix": "_SE"
}],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "wall",
"parent": null,
"pos": {
"x": 2.0,
"y": 0.0,
"z": 2.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "656A441E-D93A-43FE-A53B-BBEAA8631C21"
}],
"name": "wall",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="StaticBody3D" type="StaticBody3D" parent="wall"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="wall/StaticBody3D"]
shape = SubResource("BoxShape3D_3lfho")

View File

@@ -0,0 +1,140 @@
[gd_scene load_steps=5 format=4 uid="uid://bkps6dwdynirj"]
[ext_resource type="Material" uid="uid://dljweksgxvqv6" path="res://visuals/materials/maptile.tres" id="1_68tke"]
[ext_resource type="ArrayMesh" uid="uid://dpltfkrswbxnf" path="res://models/default_mesh.res" id="1_0823e"]
[sub_resource type="ArrayMesh" id="ArrayMesh_5s8vg"]
_surfaces = [{
"aabb": AABB(-0.5, 0.0023012161, -0.5, 1, 1, 1),
"format": 34896613377,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwACAAEAAAACAAQAAwABAAUABQABAAAABgACAAMABQAGAAMABgAEAAIABQAAAAcABQAHAAYABwAAAAQABwAEAAYA"),
"name": "texture_0",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 8,
"vertex_data": PackedByteArray("AAD/////AAAAAP//AAAAAP////8AAAAA//8AAAAAAAD///////8AAAAAAAAAAAAA//8AAP//AAAAAAAA//8AAA==")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_6o4ed"]
resource_name = "default_mesh"
_surfaces = [{
"aabb": AABB(-0.5, 0.0023012161, -0.5, 1, 1, 1),
"attribute_data": PackedByteArray("AAD/DwAAAAD/DwAAAAD/D/8PAAD/D/8PAAD/DwAAAAD/DwAAAAD/D/8PAAD/D/8PAAD/DwAAAAD/DwAAAAD/D/8PAAD/D/8PAAD/DwAAAAD/DwAAAAD/D/8PAAD/D/8PAAD/DwAAAAD/DwAAAAD/D/8PAAD/D/8PAAD/DwAAAAD/DwAAAAD/D/8PAAD/D/8P"),
"format": 34896613399,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMA"),
"material": ExtResource("1_68tke"),
"name": "texture_0",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 36,
"vertex_data": PackedByteArray("AAD//////78AAP//AAD/v/////8AAP+/AAD//////7//////AAD/v/////////+/AAAAAAAA/78AAP//AAD/vwAA//////+/AAAAAAAA/78AAP//////vwAAAAD///+/AAAAAP//AIAAAP////8AgP///////wCAAAAAAP//AID///////8AgP//AAD//wCA//8AAP///7//////////v/////8AAP+///8AAP///7//////AAD/v///AAAAAP+///8AAAAA////////AAD//wAA//8AAP////8AAAAA//8AAP//AAD//wAAAAAAAP//AAAAAAAA/78AAAAA////v///AAD///+/AAAAAAAA/7///wAA////v///AAAAAP+/////f////3////9/////f////3////9//3////9/////f////3////9/////f////3////9/////f////3////9/////f////38AAP9/AAD/fwAA/38AAP9/AAD/fwAA/3////9/////f////3////9/////f///AAD/fwAA/38AAP9/AAD/fwAA/38AAP9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_5s8vg")
[node name="Node3D" type="Node3D"]
[node name="Ramp" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7804582, 0)
cast_shadow = 0
mesh = ExtResource("1_0823e")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "Ramp",
"parent": null,
"pos": {
"x": 0.5,
"y": 0.0,
"z": 0.0
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "E237E1EF-6E12-406F-A5A8-F16232ED7E31"
}],
"name": "Ramp",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}
[node name="Cube" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
cast_shadow = 0
mesh = SubResource("ArrayMesh_6o4ed")
skeleton = NodePath("")
metadata/extras = {
"data": {
"billboard": {
"enabled": false,
"y": false
},
"custom": [],
"directional": {
"angles": [],
"enabled": false,
"mode": "cameraAngle"
},
"instances": [{
"custom": [],
"name": "Cube",
"parent": null,
"pos": {
"x": 2.0,
"y": 1.0,
"z": 0.5
},
"rot": {
"order": "XYZ",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"sca": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"uuid": "7D3B65D3-B14B-4022-AEF3-7E23133D62C6"
}],
"name": "Cube",
"points": [{
"name": "Origin",
"pos": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}]
}
}

View File

@@ -68,7 +68,7 @@ colors = PackedColorArray(1, 1, 1, 1)
gradient = SubResource("Gradient_w1hxv")
width = 1
[node name="Control" type="Control"]
[node name="Control" type="Control" groups=["scenes"]]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0

252
scenes/manufactory.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@@ -3,7 +3,7 @@
[ext_resource type="Script" uid="uid://dep7nr2nkdmga" path="res://scripts/multiplayer_setup.gd" id="1_lckj3"]
[node name="MultiplayerSetup" type="MultiplayerSpawner" groups=["level_spawner"]]
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs", "uid://ck4x56txf676a")
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs", "uid://ck4x56txf676a", "uid://by6suwmds7xq2")
spawn_path = NodePath(".")
script = ExtResource("1_lckj3")
@@ -160,6 +160,7 @@ text = "JOIN"
layout_mode = 2
text = "Back"
[connection signal="spawned" from="." to="." method="_on_level_spawned"]
[connection signal="pressed" from="Setup/Panel/Menu/HostButton" to="." method="_on_host_game_button_pressed"]
[connection signal="pressed" from="Setup/Panel/Menu/JoinButton" to="." method="_on_join_game_button_pressed"]
[connection signal="pressed" from="Setup/Panel/Menu/BackButton" to="." method="_on_menu_back_button_pressed"]

View File

@@ -0,0 +1,9 @@
[gd_scene load_steps=3 format=3 uid="uid://dr200o3iarrkk"]
[ext_resource type="Script" uid="uid://6qk4ejmk8nch" path="res://scripts/test/input_test.gd" id="1_0ii2u"]
[ext_resource type="PackedScene" uid="uid://by6suwmds7xq2" path="res://scenes/test_level.tscn" id="2_yja7f"]
[node name="InputTest" type="Node3D"]
script = ExtResource("1_0ii2u")
[node name="Level" parent="." instance=ExtResource("2_yja7f")]

File diff suppressed because one or more lines are too long

View File

@@ -90,7 +90,7 @@ shader = ExtResource("13_4qe4i")
shader_parameter/chars = ExtResource("14_p07av")
shader_parameter/noise_tex = ExtResource("15_khjys")
[node name="Control" type="Control"]
[node name="Control" type="Control" groups=["scenes"]]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0

View File

@@ -1,15 +1,24 @@
extends Node
enum Modes{
STORY,
VS_COM,
VS_MAN
}
const blinder_template = preload("res://templates/blinder.tscn")
const one_shot_template = preload("res://templates/one_shot.tscn")
const story_level = preload("res://scenes/test_level.tscn")
const vs_com_level = preload("res://scenes/test_level.tscn")
const vs_man_level = preload("res://scenes/test_level.tscn")
const pawn_select_scene = preload("res://scenes/character_select.tscn")
var player : PawnController
var hud : HUD
var level : Level
var mode : Modes = Modes.STORY
var multiplayer_game : bool = false
var num_players : int = 1
var pawns_selected : Dictionary[int, PawnBaseData] = {}
@@ -47,6 +56,12 @@ func start_level(pawns : Dictionary[int, PawnBaseData]) -> void:
for i in Multiplayer.players.values():
level_synced[i] = false
level_synced[1] = true
match(mode):
Modes.STORY:
switch_scene(story_level, false)
Modes.VS_COM:
switch_scene(vs_com_level, false)
Modes.VS_MAN:
switch_scene(vs_man_level)
func switch_scene(packed_scene : PackedScene, spawn : bool = true) -> void:
@@ -57,7 +72,11 @@ func switch_scene(packed_scene : PackedScene, spawn : bool = true) -> void:
tween.tween_property(blinder, "self_modulate:a", 1, .15)
if spawn:
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
tween.tween_callback(spawner.add_child.bind(packed_scene.instantiate(),true))
tween.tween_callback(spawner.add_child.bind(packed_scene.instantiate(), true))
var current_scene = get_tree().get_first_node_in_group("scenes")
if current_scene:
tween.tween_callback(current_scene.queue_free)
current_scene.process_mode=Node.PROCESS_MODE_DISABLED
else:
tween.tween_callback(get_tree().change_scene_to_packed.bind(packed_scene))
tween.tween_property(blinder, "self_modulate:a", 0, .15)

1
scripts/item.gd Normal file
View File

@@ -0,0 +1 @@
class_name Item extends Area3D

1
scripts/item.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://bjgeppx4pmk66

View File

@@ -1,5 +1,14 @@
class_name Level extends Node3D
const map_marker_templates : Dictionary[String, PackedScene] = {
"pawn" : preload("res://templates/markers/pawn_marker.tscn"),
"friendly_trap":preload("res://templates/markers/friendly_trap_marker.tscn"),
"enemy_trap": preload("res://templates/markers/enemy_trap_marker.tscn"),
"item": preload("res://templates/markers/item_marker.tscn")
}
const pawn_controller = preload("res://templates/pawn_controller.tscn")
const trap_template = preload("res://templates/trap.tscn")
const camera_template = preload("res://templates/pawn_camera.tscn")
@@ -13,13 +22,19 @@ const camera_offset = Vector3(0, 10, 5.25)
@onready var pawns_node : Node3D = %Pawns
@onready var traps_node : Node3D = %Traps
@onready var cameras_node : Node3D = %Cameras
@onready var map_markers_node : Node3D = %MapMarkers
@export var difficulty : int = 1
var traps : Dictionary[Vector3i, Trap] = {}
var pawns : Dictionary[int, PawnController] = {}
var cameras : Dictionary[int, PawnCamera] = {}
var map_markers : Dictionary[Object, MapMarker] = {}
func _ready() -> void:
Game.level = self
if Game.mode == Game.Modes.STORY:
setup()
add_level_trap.call_deferred(Trap.Type.MINE, Vector3.ZERO, Vector3i(5,0,3))
func setup() -> void:
if Multiplayer.is_host():
@@ -79,10 +94,10 @@ func add_trap(trap : Trap, crd : Vector3i) -> void:
trap.square = crd
traps[crd] = trap
trap.position = Vector3(crd) + Vector3(.5, 0, .5)
add_child(trap)
add_child(trap, true)
func add_projectile(shot : Projectile) -> void:
add_child(shot)
add_child(shot, true)
func remove_trap_square(crd : Vector3i) -> void:
traps.erase(crd)
@@ -104,7 +119,7 @@ func is_valid_trap_square(crd : Vector3i) -> bool:
func add_vfx(vfx, crd : Vector3i) -> void:
vfx.position = Vector3(crd) #+ Vector3(0.5, 0, 0.5)
add_child(vfx)
add_child(vfx, true)
func activate_trap(crd : Vector3i) -> void:
if traps.has(crd):
@@ -120,3 +135,37 @@ func disarm_trap(crd : Vector3i) -> void:
var trap = traps[crd]
trap.disarm()
traps.erase(crd)
func remove_map_marker(target) -> void:
if !map_markers.has(target):
printerr("Tried to remove a map marker for %s but marker does not exist!" % target.name)
else:
map_markers[target].queue_free()
map_markers[target] = null
func add_map_marker(target) -> void:
var marker : MapMarker
var height : float
if target is PawnController:
marker = map_marker_templates.pawn.instantiate()
height += 40
elif target is Trap:
if target.trap_owner == Multiplayer.id:
marker = map_marker_templates.friendly_trap.instantiate()
else:
marker = map_marker_templates.enemy_trap.instantiate()
marker.visible = false
target.revealed.connect(marker._on_trap_revealed)
height += 30
elif target is Item:
marker = map_marker_templates.item.instantiate()
height += 10
marker.register_target(target)
map_markers[target] = marker
map_markers_node.add_child(marker)
marker.position += Vector3(0, height,0)
func add_level_trap(type : Trap.Type, facing : Vector3, crd : Vector3i) -> void:
var trap = trap_template.instantiate()
trap.setup(type, facing, -1)
add_trap(trap, crd)

18
scripts/map_marker.gd Normal file
View File

@@ -0,0 +1,18 @@
class_name MapMarker extends Node3D
var target : Node3D
func register_target(target : Node3D) -> void:
self.target = target
reposition()
func reposition() -> void:
var loc = target.position
position = Vector3(loc.x, position.y, loc.z)
func _process(delta: float) -> void:
if target:
reposition()
func _on_trap_revealed(is_visible : bool) -> void:
visible = is_visible

View File

@@ -0,0 +1 @@
uid://cnrxwj03j5rw3

View File

@@ -73,3 +73,7 @@ func _on_joining_back_button_pressed() -> void:
func _on_client_added(peer_handle : String, peer_id : int) -> void:
%ParticipantsText.text = "[color=FFFF00][b]*%s[/b][/color]\n[color=FFFFFF]*%s[/color]" % [handle, peer_handle]
%StartButton.disabled = false
func _on_level_spawned(node: Node) -> void:
if node is Level:
Game.level_spawned.rpc_id(1, Multiplayer.id)

View File

@@ -8,9 +8,11 @@ class_name PawnBody extends Node3D
@onready var struggle_ui : Sprite3D = %StruggleUI
@onready var struggle_bar : ProgressBar = %StruggleBar
@rpc("call_local")
func play_animation(anim_name : String) -> void:
anim_player.play(anim_name)
@rpc("call_local")
func show_struggle() -> void:
struggle_ui.visible = true

View File

@@ -9,12 +9,15 @@ enum State {
DEAD
}
const trap_template = preload("res://templates/trap.tscn")
const remove_trap_modal = preload("res://templates/remove_trap_modal.tscn")
const disarm_trap_modal = preload("res://templates/disarm_trap_modal.tscn")
@export var speed : float = 10
@onready var body : PawnBody = $PawnBody
@onready var input : PawnInput = $PawnInput
@onready var data : PawnLevelData = $Data
@onready var trap_sound : AudioStreamPlayer3D = $TrapSound
@onready var detonate_sound : AudioStreamPlayer3D = $DetonateSound
@@ -26,11 +29,11 @@ const disarm_trap_modal = preload("res://templates/disarm_trap_modal.tscn")
var id : int = 1
var state : State
@export var state : State
var button_actions : Dictionary[int, String]
var current_square : Vector3i
var facing : Vector3
var detecting : bool = false
@export var detecting : bool = false
var detect_squares : Dictionary[Vector3i, bool] = {}
var detect_tween : Tween = null
var fling_direction : Vector3
@@ -73,36 +76,25 @@ signal combat_target_changed(melee : bool)
signal ammo_changed(current : int, max : int)
signal struggling(value : float)
func _enter_tree() -> void:
Game.level.add_map_marker(self)
func _exit_tree() -> void:
Game.level.remove_map_marker(self)
func _physics_process(delta: float) -> void:
if attack_timer > 0:
attack_timer -= delta
check_attack_target()
if is_poisoned():
poison_time_remaining -= delta
poison_pulse_timer += delta
if poison_pulse_timer >= 1.0:
poison_pulse_timer -= 1.0
hurt(poison_strength)
if poison_time_remaining <= 0:
var pshader : ShaderMaterial = body.material.next_pass
pshader.set_shader_parameter("strength", 0)
poison_status_changed.emit(false)
var dir = Input.get_vector("west", "east", "north", "south")
dir = Vector3(dir.x, 0, dir.y)
if struggle_timer > 0:
struggle_timer -= delta
var snapped_angle = round(dir.angle_to(Vector3(1,0,0)) * 4 / PI) * PI * .25
if abs(snapped_angle - struggle_angle) >= PI * .25:
struggle_angle = snapped_angle
struggle_timer -= 2 * delta
struggling.emit(struggle_timer)
if struggle_timer <= 0:
hurt(1)
knockdown(facing)
else:
update_poison(delta)
if !update_struggle(delta):
return
var dir = input.dir
if input_locked or modal != null:
dir = Vector3.ZERO
@@ -163,12 +155,11 @@ func _physics_process(delta: float) -> void:
move_and_slide()
if detecting:
update_detecting()
update_detect_region.rpc(true)
#Deal with the rest of the buttons
if !input_locked:
if modal:
var evt = InputEventAction.new()
var buttons = [
"lay trap",
"detect",
@@ -176,31 +167,16 @@ func _physics_process(delta: float) -> void:
"detonate"
]
for button in buttons:
if Input.is_action_just_pressed(button):
evt.action = button
evt.pressed = true
modal.button_pressed(evt)
if input.is_action_just_pressed(button):
modal.button_pressed(button)
elif state == State.NORMAL:
if Input.is_action_just_pressed("left cycle trap"):
cycle_active_trap(-1)
if Input.is_action_just_pressed("right cycle trap"):
cycle_active_trap(1)
if Input.is_action_just_pressed("detonate"):
detonate()
elif Input.is_action_just_pressed("detect"):
start_detecting()
elif Input.is_action_just_released("detect"):
stop_detecting()
elif !detecting and Input.is_action_just_pressed("lay trap"):
try_lay_trap()
elif Input.is_action_pressed("attack"):
attack()
update_actions()
func attack() -> void:
if attack_timer > 0:
return
if meleeing:
body.play_animation("melee")
body.play_animation.rpc("melee")
attack_timer = melee_recovery_time
else:
if ammo <= 0:
@@ -219,6 +195,50 @@ func attack() -> void:
v.y = 0
body.look_at(body.global_position - v)
func update_actions() -> void:
if input.is_action_just_pressed("left cycle trap"):
cycle_active_trap(-1)
if input.is_action_just_pressed("right cycle trap"):
cycle_active_trap(1)
if input.is_action_just_pressed("detonate"):
detonate()
elif input.is_action_just_pressed("detect"):
start_detecting()
elif input.is_action_just_released("detect"):
stop_detecting()
elif !detecting and input.is_action_just_pressed("lay trap"):
try_lay_trap()
elif input.is_action_pressed("attack"):
attack()
func update_struggle(delta : float) -> bool:
if struggle_timer > 0:
struggle_timer -= delta
var snapped_angle = round(input.dir.angle_to(Vector3(1,0,0)) * 4 / PI) * PI * .25
if abs(snapped_angle - struggle_angle) >= PI * .25:
struggle_angle = snapped_angle
struggle_timer -= 2 * delta
struggling.emit(struggle_timer)
if struggle_timer <= 0:
hurt(1)
knockdown(facing)
else:
return false
return true
func update_poison(delta : float) -> void:
if is_poisoned():
poison_time_remaining -= delta
poison_pulse_timer += delta
if poison_pulse_timer >= 1.0:
poison_pulse_timer -= 1.0
hurt(poison_strength)
if poison_time_remaining <= 0:
var pshader : ShaderMaterial = body.material.next_pass
pshader.set_shader_parameter("strength", 0)
poison_status_changed.emit(false)
func fire_ranged() -> void:
var shot = body.projectile_template.instantiate()
var tdir : Vector3 = Vector3.ZERO
@@ -308,52 +328,6 @@ func clear_action() -> void:
input_locked = false
action_tween = null
func update_detecting() -> void:
var new_square : Vector3i = (global_position - Vector3.ONE * .5).round()
if new_square == current_square:
return
current_square = new_square
var new_squares : Dictionary[Vector3i, bool] = {}
for i in range(-2, 3):
for j in range(-2, 3):
for k in range(-2, 2):
if abs(i) + abs(j) < 3:
var sq = current_square + Vector3i(i, k, j)
new_squares[sq] = true
for sq in detect_squares.keys():
if !new_squares.has(sq):
Game.level.detect_square(sq, false)
var remove_list = []
var trap_detected : bool = false
for sq in new_squares.keys():
if detect_squares.has(sq):
continue
if !Game.level.detect_square(sq, true):
remove_list.append(sq)
else:
var trap = Game.level.get_square_trap(sq + Vector3i(0,1,0))
if trap and trap.is_just_revealed():
trap_detected = true
if trap_detected:
detect_alert()
detect_squares = new_squares
for key in remove_list:
detect_squares.erase(key)
var trap : Trap = Game.level.get_square_trap(current_square)
if trap != null:
if trap.trap_owner == Multiplayer.id:
show_remove_trap_modal()
else:
trap.disarming = true
show_disarm_trap_modal()
func detect_alert() -> void:
detect_sound.play()
@@ -392,26 +366,46 @@ func show_disarm_trap_modal() -> void:
func start_detecting() -> void:
detecting = true
current_square = (global_position - Vector3.ONE * .5).round()
detect_squares = {}
update_detect_region.rpc(false)
@rpc("authority", "call_local")
func update_detect_region(update : bool) -> void:
if id != Multiplayer.id:
return
var new_square : Vector3i = (global_position - Vector3.ONE * .5).round()
if update and new_square == current_square:
return
current_square = new_square
var new_squares : Dictionary[Vector3i, bool] = {}
for i in range(-2, 3):
for j in range(-2, 3):
for k in range(-2, 2):
if abs(i) + abs(j) < 3:
var sq = current_square + Vector3i(i, k, j)
detect_squares[sq] = true
new_squares[sq] = true
if update:
for sq in detect_squares.keys():
if !new_squares.has(sq):
Game.level.detect_square(sq, false)
var remove_list = []
var trap_detected : bool = false
for sq in detect_squares.keys():
for sq in new_squares.keys():
if update and detect_squares.has(sq):
continue
if !Game.level.detect_square(sq, true):
remove_list.append(sq)
else:
var trap = Game.level.get_square_trap(sq + Vector3i(0,1,0))
if trap and trap.is_just_revealed():
trap_detected = true
if trap_detected:
detect_alert()
detect_squares = new_squares
for key in remove_list:
detect_squares.erase(key)
@@ -419,9 +413,18 @@ func start_detecting() -> void:
if trap != null:
if trap.trap_owner == Multiplayer.id:
show_remove_trap_modal()
else:
trap.disarming = true
show_disarm_trap_modal()
func stop_detecting() -> void:
detecting = false
clear_detect_region.rpc()
@rpc("authority", "call_local")
func clear_detect_region() -> void:
if id != Multiplayer.id:
return
for sq in detect_squares.keys():
Game.level.detect_square(sq, false)
detect_squares = {}
@@ -434,7 +437,7 @@ func setup(id : int, traps : Array, pos : Vector3) -> void:
for trap in traps:
traplist.append(PawnLevelData.TrapData.new(trap.type, trap.qty, trap.qty))
$Data.traps = traplist
set_multiplayer_authority(id)
input.set_multiplayer_authority(id)
struggling.connect(body._on_struggle_changed)
Game.setup_player(self)

55
scripts/pawn_input.gd Normal file
View File

@@ -0,0 +1,55 @@
class_name PawnInput extends Node
@export var dir : Vector3
@export var pressed : Dictionary[String, bool]
@export var just_pressed : Dictionary[String, bool]
@export var just_released : Dictionary[String, bool]
func _ready() -> void:
pressed = {
"left cycle trap":false,
"right cycle trap":false,
"detonate":false,
"detect":false,
"lay trap":false,
"attack":false
}
just_pressed = {
"left cycle trap":false,
"right cycle trap":false,
"detonate":false,
"detect":false,
"lay trap":false,
"attack":false
}
just_released = {
"left cycle trap":false,
"right cycle trap":false,
"detonate":false,
"detect":false,
"lay trap":false,
"attack":false
}
func _physics_process(delta: float) -> void:
var d = Input.get_vector("west", "east", "north", "south")
dir = Vector3(d.x, 0, d.y)
for key : String in pressed:
if Input.is_action_pressed(key):
just_pressed[key] = !pressed[key]
just_released[key] = false
pressed[key] = true
else:
just_released[key] = pressed[key]
just_pressed[key] = false
pressed[key] = false
func is_action_pressed(action : String) -> bool:
return pressed.has(action) && pressed[action]
func is_action_just_pressed(action : String) -> bool:
return just_pressed.has(action) && just_pressed[action]
func is_action_just_released(action : String) -> bool:
return just_released.has(action) && just_released[action]

View File

@@ -0,0 +1 @@
uid://cvuoq81ipid2o

View File

@@ -0,0 +1,8 @@
extends Node3D
@onready var level : Level = $Level
func _ready() -> void:
Game.pawns_selected[1] = load("res://data/pawns/van_reily.tres")
level.setup()

View File

@@ -0,0 +1 @@
uid://6qk4ejmk8nch

View File

@@ -3,26 +3,32 @@ extends Control
@onready var menu_list : Array = [
{
"option": %STORY,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn")
},
{
"option": %"VS-COM",
"mode" : Game.Modes.VS_COM,
"scene" : preload("res://scenes/character_select.tscn")
},
{
"option": %"VS-MAN",
"mode" : Game.Modes.VS_MAN,
"scene" : preload("res://scenes/multiplayer_setup.tscn")
},
{
"option": %STORY,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn")
},
{
"option": %RECORD,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn")
},
{
"option": %OPTION,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn")
}
]
@@ -60,7 +66,6 @@ func _process(delta: float) -> void:
switch_menu(0)
if opened:
var menu_dir = 0
menu_dir += 1 if Input.is_action_just_pressed("ui_down") else 0
menu_dir -= 1 if Input.is_action_just_pressed("ui_up") else 0
@@ -68,6 +73,7 @@ func _process(delta: float) -> void:
switch_sound.play()
switch_menu(wrapi(menu_choice + menu_dir, 0, len(menu_list)))
if Input.is_action_just_pressed("ui_accept"):
Game.mode = menu_list[menu_choice].mode
Game.switch_scene(menu_list[menu_choice].scene, false)

View File

@@ -61,6 +61,13 @@ var just_revealed : bool = false
signal removed(type : Trap.Type)
signal disarmed(type : Trap.Type)
signal activated(type : Trap.Type)
signal revealed(is_visible : bool)
func _enter_tree() -> void:
Game.level.add_map_marker(self)
func _exit_tree() -> void:
Game.level.remove_map_marker(self)
func setup(type : Type, direction : Vector3, trap_owner : int) -> void:
self.type = type
@@ -84,6 +91,7 @@ func reveal() -> void:
model.visible = true
reveal_timer.start(5)
just_revealed = true
revealed.emit(true)
func is_just_revealed() -> bool:
return just_revealed
@@ -96,6 +104,7 @@ func _on_reveal_timeout() -> void:
reveal_timer.start(5)
else:
model.visible = false
revealed.emit(false)
func _ready() -> void:
var owns_trap = trap_owner == Multiplayer.id

View File

@@ -248,57 +248,63 @@ theme_override_font_sizes/font_size = 48
text = "9"
horizontal_alignment = 1
[node name="OppnentView" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer"]
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/HBoxContainer"]
custom_minimum_size = Vector2(0, 70)
layout_mode = 2
[node name="PanelContainer" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
[node name="SubViewportContainer" type="SubViewportContainer" parent="Control/PanelContainer/HBoxContainer/OppnentView"]
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/HBoxContainer/HBoxContainer/PanelContainer"]
layout_mode = 2
[node name="SubViewport" type="SubViewport" parent="Control/PanelContainer/HBoxContainer/OppnentView/SubViewportContainer"]
handle_input_locally = false
gui_disable_input = true
render_target_update_mode = 4
[node name="Label" type="Label" parent="Control/PanelContainer/HBoxContainer/HBoxContainer/PanelContainer/HBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 0.6039216, 1, 1)
text = "TIME"
[node name="TextureRect" type="TextureRect" parent="Control/PanelContainer/HBoxContainer/OppnentView/SubViewportContainer/SubViewport"]
offset_right = 40.0
offset_bottom = 40.0
[node name="Label2" type="Label" parent="Control/PanelContainer/HBoxContainer/HBoxContainer/PanelContainer/HBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 1, 0, 1)
theme_override_font_sizes/font_size = 32
text = "00:00:00"
[node name="TextureRect" type="TextureRect" parent="Control/PanelContainer/HBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(95, 0)
layout_mode = 2
texture = ExtResource("1_k5de2")
expand_mode = 1
[node name="OppnentView" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
[node name="VBoxContainer3" type="VBoxContainer" parent="Control/PanelContainer/HBoxContainer"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
[node name="PanelContainer3" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3"]
custom_minimum_size = Vector2(250, 130)
custom_minimum_size = Vector2(392, 204)
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3"]
custom_minimum_size = Vector2(0, 70)
[node name="SubViewportContainer" type="SubViewportContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/PanelContainer3"]
layout_mode = 2
[node name="PanelContainer" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
[node name="SubViewport" type="SubViewport" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/PanelContainer3/SubViewportContainer"]
handle_input_locally = false
scaling_3d_mode = 1
fsr_sharpness = 2.0
canvas_item_default_texture_filter = 0
gui_disable_input = true
size = Vector2i(392, 204)
render_target_update_mode = 4
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer/PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer/PanelContainer/HBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 0.6039216, 1, 1)
text = "TIME"
[node name="Label2" type="Label" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer/PanelContainer/HBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 1, 0, 1)
theme_override_font_sizes/font_size = 32
text = "00:00:00"
[node name="TextureRect" type="TextureRect" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer"]
custom_minimum_size = Vector2(95, 0)
layout_mode = 2
texture = ExtResource("1_k5de2")
expand_mode = 1
[node name="Camera3D" type="Camera3D" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/PanelContainer3/SubViewportContainer/SubViewport"]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 11000, 0)
keep_aspect = 0
projection = 1
size = 25.0
[node name="Control2" type="Control" parent="Control/PanelContainer/HBoxContainer"]
custom_minimum_size = Vector2(165, 0)

View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://bn1dl7sexxcog"]
[ext_resource type="Script" uid="uid://cnrxwj03j5rw3" path="res://scripts/map_marker.gd" id="1_1gvyj"]
[ext_resource type="Texture2D" uid="uid://bdo6instl47uf" path="res://visuals/images/icons/enemy_trap_marker.png" id="2_43sjg"]
[node name="EnemyTrapMarker" type="Node3D"]
script = ExtResource("1_1gvyj")
[node name="Sprite3D" type="Sprite3D" parent="."]
axis = 1
texture = ExtResource("2_43sjg")

View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://gchb44afbosa"]
[ext_resource type="Script" uid="uid://cnrxwj03j5rw3" path="res://scripts/map_marker.gd" id="1_kw26n"]
[ext_resource type="Texture2D" uid="uid://c6wke2vs8rfyd" path="res://visuals/images/icons/friendly_trap_marker.png" id="2_rgmxc"]
[node name="FriendlyTrapMarker" type="Node3D"]
script = ExtResource("1_kw26n")
[node name="Sprite3D" type="Sprite3D" parent="."]
axis = 1
texture = ExtResource("2_rgmxc")

View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://c7eca16u6brh"]
[ext_resource type="Script" uid="uid://cnrxwj03j5rw3" path="res://scripts/map_marker.gd" id="1_3oank"]
[ext_resource type="Texture2D" uid="uid://cwcbb81pte2jc" path="res://visuals/images/icons/item_marker.png" id="2_pnwq7"]
[node name="ItemMarker" type="Node3D"]
script = ExtResource("1_3oank")
[node name="Sprite3D" type="Sprite3D" parent="."]
axis = 1
texture = ExtResource("2_pnwq7")

View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://2fulq4e0q1n2"]
[ext_resource type="Script" uid="uid://cnrxwj03j5rw3" path="res://scripts/map_marker.gd" id="1_7mb27"]
[ext_resource type="Texture2D" uid="uid://co81os2o2bn28" path="res://visuals/images/icons/pawn_marker.png" id="2_cp67f"]
[node name="PawnMarker" type="Node3D"]
script = ExtResource("1_7mb27")
[node name="Sprite3D" type="Sprite3D" parent="."]
axis = 1
texture = ExtResource("2_cp67f")

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=35 format=3 uid="uid://c8xf3qawk5c6u"]
[gd_scene load_steps=37 format=3 uid="uid://c8xf3qawk5c6u"]
[ext_resource type="Script" uid="uid://bcs7ygh6s3l35" path="res://scripts/pawn_controller.gd" id="1_h27ep"]
[ext_resource type="Script" uid="uid://wye3mat5y5yg" path="res://scripts/pawn_body.gd" id="2_dn5ph"]
@@ -21,6 +21,7 @@
[ext_resource type="Texture2D" uid="uid://dmnwtwu5v4voh" path="res://visuals/images/icons/detect mark.png" id="19_5822g"]
[ext_resource type="AudioStream" uid="uid://cmnibhyxpag0a" path="res://audio/sounds/BeepBeep_high.wav" id="20_v7o58"]
[ext_resource type="PackedScene" uid="uid://bqwpra5d1faxw" path="res://models/pawns/van_reily.gltf" id="21_dn5ph"]
[ext_resource type="Script" uid="uid://cvuoq81ipid2o" path="res://scripts/pawn_input.gd" id="22_pnc3q"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"]
next_pass = ExtResource("4_8twd3")
@@ -220,6 +221,26 @@ height = 1.0
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
properties/1/path = NodePath(".:detecting")
properties/1/spawn = true
properties/1/replication_mode = 1
properties/2/path = NodePath(".:state")
properties/2/spawn = true
properties/2/replication_mode = 1
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_pnc3q"]
properties/0/path = NodePath("PawnInput:dir")
properties/0/spawn = true
properties/0/replication_mode = 1
properties/1/path = NodePath("PawnInput:pressed")
properties/1/spawn = true
properties/1/replication_mode = 1
properties/2/path = NodePath("PawnInput:just_pressed")
properties/2/spawn = true
properties/2/replication_mode = 1
properties/3/path = NodePath("PawnInput:just_released")
properties/3/spawn = true
properties/3/replication_mode = 1
[node name="Player" type="CharacterBody3D" groups=["combat"]]
physics_interpolation_mode = 1
@@ -356,3 +377,8 @@ max_db = -7.0
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_h27ep")
[node name="PawnInput" type="MultiplayerSynchronizer" parent="."]
unique_name_in_owner = true
replication_config = SubResource("SceneReplicationConfig_pnc3q")
script = ExtResource("22_pnc3q")

114
test minimap.tres Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bdo6instl47uf"
path.s3tc="res://.godot/imported/enemy_trap_marker.png-1c5b7ca7cafa418b711651f11cd5afcf.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://visuals/images/icons/enemy_trap_marker.png"
dest_files=["res://.godot/imported/enemy_trap_marker.png-1c5b7ca7cafa418b711651f11cd5afcf.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.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c6wke2vs8rfyd"
path.s3tc="res://.godot/imported/friendly_trap_marker.png-620ca5c48decec71f2637c2f41c9f3ba.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://visuals/images/icons/friendly_trap_marker.png"
dest_files=["res://.godot/imported/friendly_trap_marker.png-620ca5c48decec71f2637c2f41c9f3ba.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.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cwcbb81pte2jc"
path.s3tc="res://.godot/imported/item_marker.png-753303dddb4bc5ecbad519650475a1a6.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://visuals/images/icons/item_marker.png"
dest_files=["res://.godot/imported/item_marker.png-753303dddb4bc5ecbad519650475a1a6.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.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://co81os2o2bn28"
path.s3tc="res://.godot/imported/pawn_marker.png-317a3f6c0d3d6deb510efaddbd7ef0d2.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://visuals/images/icons/pawn_marker.png"
dest_files=["res://.godot/imported/pawn_marker.png-317a3f6c0d3d6deb510efaddbd7ef0d2.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

View File

@@ -0,0 +1,27 @@
[gd_resource type="ShaderMaterial" load_steps=6 format=3 uid="uid://dljweksgxvqv6"]
[ext_resource type="Shader" uid="uid://dtq021j73hhht" path="res://visuals/shaders/maptile.gdshader" id="1_o0obt"]
[sub_resource type="Gradient" id="Gradient_o0obt"]
offsets = PackedFloat32Array(0)
colors = PackedColorArray(0, 0, 0, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_2ho3f"]
gradient = SubResource("Gradient_o0obt")
width = 1
[sub_resource type="Gradient" id="Gradient_2ho3f"]
offsets = PackedFloat32Array(0, 0.245, 0.56, 0.8025, 1)
colors = PackedColorArray(0, 0, 0.003921569, 1, 1.6845763e-06, 0, 0.54036456, 1, 0.0007814509, 0.22053, 0.7667125, 1, 0.00022246034, 0.29345024, 0.68059045, 1, 0, 0.49560964, 0.86397636, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_lvjv7"]
gradient = SubResource("Gradient_2ho3f")
width = 1024
[resource]
render_priority = 0
shader = ExtResource("1_o0obt")
shader_parameter/albedo_texture = SubResource("GradientTexture1D_2ho3f")
shader_parameter/height_gradient = SubResource("GradientTexture1D_lvjv7")
shader_parameter/vertical_offset = 9999.0
shader_parameter/vertical_range = 6.0

View File

@@ -0,0 +1,28 @@
shader_type spatial;
render_mode blend_mix, depth_prepass_alpha, cull_disabled;
uniform sampler2D albedo_texture : filter_nearest;
uniform sampler2D height_gradient;
uniform float vertical_offset;
uniform float vertical_range : hint_range(1.0, 12.0, 1.0);
varying vec3 world_position;
void vertex() {
// Called for every vertex the material is visible on.
world_position = (MODEL_MATRIX * vec4(VERTEX, 1)).xyz;
}
void fragment() {
float h = (world_position.y - vertical_offset)/vertical_range;
vec2 uv = vec2(clamp(h, 0.001, 1.0),0.5);
vec4 color = texture(height_gradient, uv);
float alpha = texture(albedo_texture, UV).a;
ALBEDO = color.rgb;
ALPHA = alpha;
// Called for every pixel the material is visible on.
}
//void light() {
// // Called for every pixel for every light affecting the material.
// // Uncomment to replace the default light processing function with this one.
//}

View File

@@ -0,0 +1 @@
uid://dtq021j73hhht