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") gradient = SubResource("Gradient_w1hxv")
width = 1 width = 1
[node name="Control" type="Control"] [node name="Control" type="Control" groups=["scenes"]]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 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"] [ext_resource type="Script" uid="uid://dep7nr2nkdmga" path="res://scripts/multiplayer_setup.gd" id="1_lckj3"]
[node name="MultiplayerSetup" type="MultiplayerSpawner" groups=["level_spawner"]] [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(".") spawn_path = NodePath(".")
script = ExtResource("1_lckj3") script = ExtResource("1_lckj3")
@@ -160,6 +160,7 @@ text = "JOIN"
layout_mode = 2 layout_mode = 2
text = "Back" 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/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/JoinButton" to="." method="_on_join_game_button_pressed"]
[connection signal="pressed" from="Setup/Panel/Menu/BackButton" to="." method="_on_menu_back_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/chars = ExtResource("14_p07av")
shader_parameter/noise_tex = ExtResource("15_khjys") shader_parameter/noise_tex = ExtResource("15_khjys")
[node name="Control" type="Control"] [node name="Control" type="Control" groups=["scenes"]]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0

View File

@@ -1,15 +1,24 @@
extends Node extends Node
enum Modes{
STORY,
VS_COM,
VS_MAN
}
const blinder_template = preload("res://templates/blinder.tscn") const blinder_template = preload("res://templates/blinder.tscn")
const one_shot_template = preload("res://templates/one_shot.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 vs_man_level = preload("res://scenes/test_level.tscn")
const pawn_select_scene = preload("res://scenes/character_select.tscn") const pawn_select_scene = preload("res://scenes/character_select.tscn")
var player : PawnController var player : PawnController
var hud : HUD var hud : HUD
var level : Level var level : Level
var mode : Modes = Modes.STORY
var multiplayer_game : bool = false var multiplayer_game : bool = false
var num_players : int = 1 var num_players : int = 1
var pawns_selected : Dictionary[int, PawnBaseData] = {} var pawns_selected : Dictionary[int, PawnBaseData] = {}
@@ -47,6 +56,12 @@ func start_level(pawns : Dictionary[int, PawnBaseData]) -> void:
for i in Multiplayer.players.values(): for i in Multiplayer.players.values():
level_synced[i] = false level_synced[i] = false
level_synced[1] = true 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) switch_scene(vs_man_level)
func switch_scene(packed_scene : PackedScene, spawn : bool = true) -> void: func switch_scene(packed_scene : PackedScene, spawn : bool = true) -> void:
@@ -58,6 +73,10 @@ func switch_scene(packed_scene : PackedScene, spawn : bool = true) -> void:
if spawn: if spawn:
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner 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: else:
tween.tween_callback(get_tree().change_scene_to_packed.bind(packed_scene)) tween.tween_callback(get_tree().change_scene_to_packed.bind(packed_scene))
tween.tween_property(blinder, "self_modulate:a", 0, .15) 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 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 pawn_controller = preload("res://templates/pawn_controller.tscn")
const trap_template = preload("res://templates/trap.tscn") const trap_template = preload("res://templates/trap.tscn")
const camera_template = preload("res://templates/pawn_camera.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 pawns_node : Node3D = %Pawns
@onready var traps_node : Node3D = %Traps @onready var traps_node : Node3D = %Traps
@onready var cameras_node : Node3D = %Cameras @onready var cameras_node : Node3D = %Cameras
@onready var map_markers_node : Node3D = %MapMarkers
@export var difficulty : int = 1 @export var difficulty : int = 1
var traps : Dictionary[Vector3i, Trap] = {} var traps : Dictionary[Vector3i, Trap] = {}
var pawns : Dictionary[int, PawnController] = {} var pawns : Dictionary[int, PawnController] = {}
var cameras : Dictionary[int, PawnCamera] = {} var cameras : Dictionary[int, PawnCamera] = {}
var map_markers : Dictionary[Object, MapMarker] = {}
func _ready() -> void: func _ready() -> void:
Game.level = self 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: func setup() -> void:
if Multiplayer.is_host(): if Multiplayer.is_host():
@@ -79,10 +94,10 @@ func add_trap(trap : Trap, crd : Vector3i) -> void:
trap.square = crd trap.square = crd
traps[crd] = trap traps[crd] = trap
trap.position = Vector3(crd) + Vector3(.5, 0, .5) trap.position = Vector3(crd) + Vector3(.5, 0, .5)
add_child(trap) add_child(trap, true)
func add_projectile(shot : Projectile) -> void: func add_projectile(shot : Projectile) -> void:
add_child(shot) add_child(shot, true)
func remove_trap_square(crd : Vector3i) -> void: func remove_trap_square(crd : Vector3i) -> void:
traps.erase(crd) traps.erase(crd)
@@ -104,7 +119,7 @@ func is_valid_trap_square(crd : Vector3i) -> bool:
func add_vfx(vfx, crd : Vector3i) -> void: func add_vfx(vfx, crd : Vector3i) -> void:
vfx.position = Vector3(crd) #+ Vector3(0.5, 0, 0.5) vfx.position = Vector3(crd) #+ Vector3(0.5, 0, 0.5)
add_child(vfx) add_child(vfx, true)
func activate_trap(crd : Vector3i) -> void: func activate_trap(crd : Vector3i) -> void:
if traps.has(crd): if traps.has(crd):
@@ -120,3 +135,37 @@ func disarm_trap(crd : Vector3i) -> void:
var trap = traps[crd] var trap = traps[crd]
trap.disarm() trap.disarm()
traps.erase(crd) 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: 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] %ParticipantsText.text = "[color=FFFF00][b]*%s[/b][/color]\n[color=FFFFFF]*%s[/color]" % [handle, peer_handle]
%StartButton.disabled = false %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_ui : Sprite3D = %StruggleUI
@onready var struggle_bar : ProgressBar = %StruggleBar @onready var struggle_bar : ProgressBar = %StruggleBar
@rpc("call_local")
func play_animation(anim_name : String) -> void: func play_animation(anim_name : String) -> void:
anim_player.play(anim_name) anim_player.play(anim_name)
@rpc("call_local")
func show_struggle() -> void: func show_struggle() -> void:
struggle_ui.visible = true struggle_ui.visible = true

View File

@@ -9,12 +9,15 @@ enum State {
DEAD DEAD
} }
const trap_template = preload("res://templates/trap.tscn") const trap_template = preload("res://templates/trap.tscn")
const remove_trap_modal = preload("res://templates/remove_trap_modal.tscn") const remove_trap_modal = preload("res://templates/remove_trap_modal.tscn")
const disarm_trap_modal = preload("res://templates/disarm_trap_modal.tscn") const disarm_trap_modal = preload("res://templates/disarm_trap_modal.tscn")
@export var speed : float = 10 @export var speed : float = 10
@onready var body : PawnBody = $PawnBody @onready var body : PawnBody = $PawnBody
@onready var input : PawnInput = $PawnInput
@onready var data : PawnLevelData = $Data @onready var data : PawnLevelData = $Data
@onready var trap_sound : AudioStreamPlayer3D = $TrapSound @onready var trap_sound : AudioStreamPlayer3D = $TrapSound
@onready var detonate_sound : AudioStreamPlayer3D = $DetonateSound @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 id : int = 1
var state : State @export var state : State
var button_actions : Dictionary[int, String] var button_actions : Dictionary[int, String]
var current_square : Vector3i var current_square : Vector3i
var facing : Vector3 var facing : Vector3
var detecting : bool = false @export var detecting : bool = false
var detect_squares : Dictionary[Vector3i, bool] = {} var detect_squares : Dictionary[Vector3i, bool] = {}
var detect_tween : Tween = null var detect_tween : Tween = null
var fling_direction : Vector3 var fling_direction : Vector3
@@ -73,36 +76,25 @@ signal combat_target_changed(melee : bool)
signal ammo_changed(current : int, max : int) signal ammo_changed(current : int, max : int)
signal struggling(value : float) 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: func _physics_process(delta: float) -> void:
if attack_timer > 0: if attack_timer > 0:
attack_timer -= delta attack_timer -= delta
check_attack_target() 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") update_poison(delta)
dir = Vector3(dir.x, 0, dir.y)
if struggle_timer > 0: if !update_struggle(delta):
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:
return return
var dir = input.dir
if input_locked or modal != null: if input_locked or modal != null:
dir = Vector3.ZERO dir = Vector3.ZERO
@@ -163,12 +155,11 @@ func _physics_process(delta: float) -> void:
move_and_slide() move_and_slide()
if detecting: if detecting:
update_detecting() update_detect_region.rpc(true)
#Deal with the rest of the buttons #Deal with the rest of the buttons
if !input_locked: if !input_locked:
if modal: if modal:
var evt = InputEventAction.new()
var buttons = [ var buttons = [
"lay trap", "lay trap",
"detect", "detect",
@@ -176,31 +167,16 @@ func _physics_process(delta: float) -> void:
"detonate" "detonate"
] ]
for button in buttons: for button in buttons:
if Input.is_action_just_pressed(button): if input.is_action_just_pressed(button):
evt.action = button modal.button_pressed(button)
evt.pressed = true
modal.button_pressed(evt)
elif state == State.NORMAL: elif state == State.NORMAL:
if Input.is_action_just_pressed("left cycle trap"): update_actions()
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 attack() -> void: func attack() -> void:
if attack_timer > 0: if attack_timer > 0:
return return
if meleeing: if meleeing:
body.play_animation("melee") body.play_animation.rpc("melee")
attack_timer = melee_recovery_time attack_timer = melee_recovery_time
else: else:
if ammo <= 0: if ammo <= 0:
@@ -219,6 +195,50 @@ func attack() -> void:
v.y = 0 v.y = 0
body.look_at(body.global_position - v) 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: func fire_ranged() -> void:
var shot = body.projectile_template.instantiate() var shot = body.projectile_template.instantiate()
var tdir : Vector3 = Vector3.ZERO var tdir : Vector3 = Vector3.ZERO
@@ -308,52 +328,6 @@ func clear_action() -> void:
input_locked = false input_locked = false
action_tween = null 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: func detect_alert() -> void:
detect_sound.play() detect_sound.play()
@@ -392,26 +366,46 @@ func show_disarm_trap_modal() -> void:
func start_detecting() -> void: func start_detecting() -> void:
detecting = true detecting = true
current_square = (global_position - Vector3.ONE * .5).round() update_detect_region.rpc(false)
detect_squares = {}
@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 i in range(-2, 3):
for j in range(-2, 3): for j in range(-2, 3):
for k in range(-2, 2): for k in range(-2, 2):
if abs(i) + abs(j) < 3: if abs(i) + abs(j) < 3:
var sq = current_square + Vector3i(i, k, j) 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 remove_list = []
var trap_detected : bool = false 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): if !Game.level.detect_square(sq, true):
remove_list.append(sq) remove_list.append(sq)
else: else:
var trap = Game.level.get_square_trap(sq + Vector3i(0,1,0)) var trap = Game.level.get_square_trap(sq + Vector3i(0,1,0))
if trap and trap.is_just_revealed(): if trap and trap.is_just_revealed():
trap_detected = true trap_detected = true
if trap_detected: if trap_detected:
detect_alert() detect_alert()
detect_squares = new_squares
for key in remove_list: for key in remove_list:
detect_squares.erase(key) detect_squares.erase(key)
@@ -419,9 +413,18 @@ func start_detecting() -> void:
if trap != null: if trap != null:
if trap.trap_owner == Multiplayer.id: if trap.trap_owner == Multiplayer.id:
show_remove_trap_modal() show_remove_trap_modal()
else:
trap.disarming = true
show_disarm_trap_modal()
func stop_detecting() -> void: func stop_detecting() -> void:
detecting = false 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(): for sq in detect_squares.keys():
Game.level.detect_square(sq, false) Game.level.detect_square(sq, false)
detect_squares = {} detect_squares = {}
@@ -434,7 +437,7 @@ func setup(id : int, traps : Array, pos : Vector3) -> void:
for trap in traps: for trap in traps:
traplist.append(PawnLevelData.TrapData.new(trap.type, trap.qty, trap.qty)) traplist.append(PawnLevelData.TrapData.new(trap.type, trap.qty, trap.qty))
$Data.traps = traplist $Data.traps = traplist
set_multiplayer_authority(id) input.set_multiplayer_authority(id)
struggling.connect(body._on_struggle_changed) struggling.connect(body._on_struggle_changed)
Game.setup_player(self) 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 = [ @onready var menu_list : Array = [
{ {
"option": %STORY, "option": %STORY,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn") "scene" : preload("res://scenes/character_select.tscn")
}, },
{ {
"option": %"VS-COM", "option": %"VS-COM",
"mode" : Game.Modes.VS_COM,
"scene" : preload("res://scenes/character_select.tscn") "scene" : preload("res://scenes/character_select.tscn")
}, },
{ {
"option": %"VS-MAN", "option": %"VS-MAN",
"mode" : Game.Modes.VS_MAN,
"scene" : preload("res://scenes/multiplayer_setup.tscn") "scene" : preload("res://scenes/multiplayer_setup.tscn")
}, },
{ {
"option": %STORY, "option": %STORY,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn") "scene" : preload("res://scenes/character_select.tscn")
}, },
{ {
"option": %RECORD, "option": %RECORD,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn") "scene" : preload("res://scenes/character_select.tscn")
}, },
{ {
"option": %OPTION, "option": %OPTION,
"mode" : Game.Modes.STORY,
"scene" : preload("res://scenes/character_select.tscn") "scene" : preload("res://scenes/character_select.tscn")
} }
] ]
@@ -60,7 +66,6 @@ func _process(delta: float) -> void:
switch_menu(0) switch_menu(0)
if opened: if opened:
var menu_dir = 0 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_down") else 0
menu_dir -= 1 if Input.is_action_just_pressed("ui_up") 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_sound.play()
switch_menu(wrapi(menu_choice + menu_dir, 0, len(menu_list))) switch_menu(wrapi(menu_choice + menu_dir, 0, len(menu_list)))
if Input.is_action_just_pressed("ui_accept"): if Input.is_action_just_pressed("ui_accept"):
Game.mode = menu_list[menu_choice].mode
Game.switch_scene(menu_list[menu_choice].scene, false) 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 removed(type : Trap.Type)
signal disarmed(type : Trap.Type) signal disarmed(type : Trap.Type)
signal activated(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: func setup(type : Type, direction : Vector3, trap_owner : int) -> void:
self.type = type self.type = type
@@ -84,6 +91,7 @@ func reveal() -> void:
model.visible = true model.visible = true
reveal_timer.start(5) reveal_timer.start(5)
just_revealed = true just_revealed = true
revealed.emit(true)
func is_just_revealed() -> bool: func is_just_revealed() -> bool:
return just_revealed return just_revealed
@@ -96,6 +104,7 @@ func _on_reveal_timeout() -> void:
reveal_timer.start(5) reveal_timer.start(5)
else: else:
model.visible = false model.visible = false
revealed.emit(false)
func _ready() -> void: func _ready() -> void:
var owns_trap = trap_owner == Multiplayer.id var owns_trap = trap_owner == Multiplayer.id

View File

@@ -248,57 +248,63 @@ theme_override_font_sizes/font_size = 48
text = "9" text = "9"
horizontal_alignment = 1 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) custom_minimum_size = Vector2(150, 0)
layout_mode = 2 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 layout_mode = 2
[node name="SubViewport" type="SubViewport" parent="Control/PanelContainer/HBoxContainer/OppnentView/SubViewportContainer"] [node name="Label" type="Label" parent="Control/PanelContainer/HBoxContainer/HBoxContainer/PanelContainer/HBoxContainer"]
handle_input_locally = false layout_mode = 2
gui_disable_input = true theme_override_colors/font_color = Color(0, 0.6039216, 1, 1)
render_target_update_mode = 4 text = "TIME"
[node name="TextureRect" type="TextureRect" parent="Control/PanelContainer/HBoxContainer/OppnentView/SubViewportContainer/SubViewport"] [node name="Label2" type="Label" parent="Control/PanelContainer/HBoxContainer/HBoxContainer/PanelContainer/HBoxContainer"]
offset_right = 40.0 layout_mode = 2
offset_bottom = 40.0 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"] [node name="VBoxContainer3" type="VBoxContainer" parent="Control/PanelContainer/HBoxContainer"]
custom_minimum_size = Vector2(250, 0) custom_minimum_size = Vector2(250, 0)
layout_mode = 2 layout_mode = 2
[node name="PanelContainer3" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3"] [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 layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3"] [node name="SubViewportContainer" type="SubViewportContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/PanelContainer3"]
custom_minimum_size = Vector2(0, 70)
layout_mode = 2 layout_mode = 2
[node name="PanelContainer" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer"] [node name="SubViewport" type="SubViewport" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/PanelContainer3/SubViewportContainer"]
custom_minimum_size = Vector2(150, 0) handle_input_locally = false
layout_mode = 2 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"] [node name="Camera3D" type="Camera3D" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/PanelContainer3/SubViewportContainer/SubViewport"]
layout_mode = 2 transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 11000, 0)
keep_aspect = 0
[node name="Label" type="Label" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer/PanelContainer/HBoxContainer"] projection = 1
layout_mode = 2 size = 25.0
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="Control2" type="Control" parent="Control/PanelContainer/HBoxContainer"] [node name="Control2" type="Control" parent="Control/PanelContainer/HBoxContainer"]
custom_minimum_size = Vector2(165, 0) 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://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"] [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="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="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="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"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"]
next_pass = ExtResource("4_8twd3") next_pass = ExtResource("4_8twd3")
@@ -220,6 +221,26 @@ height = 1.0
properties/0/path = NodePath(".:position") properties/0/path = NodePath(".:position")
properties/0/spawn = true properties/0/spawn = true
properties/0/replication_mode = 1 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"]] [node name="Player" type="CharacterBody3D" groups=["combat"]]
physics_interpolation_mode = 1 physics_interpolation_mode = 1
@@ -356,3 +377,8 @@ max_db = -7.0
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] [node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_h27ep") 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