Milestone 5: Private Testing Release 1

Lot's of changes.
This commit is contained in:
patrick_pluto 2024-08-05 22:35:50 +02:00
parent 0bd1414af0
commit 40100e8fee
90 changed files with 5741 additions and 156 deletions

118
assets/models/corner.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dusht7my32287"
path="res://.godot/imported/corner.gltf-d27aae84dacf6337afe0f777beb3d2f1.scn"
[deps]
source_file="res://assets/models/corner.gltf"
dest_files=["res://.godot/imported/corner.gltf-d27aae84dacf6337afe0f777beb3d2f1.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
assets/models/corner_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dl0yk41tji05p"
path.s3tc="res://.godot/imported/corner_0.png-057892c9bcbb54125ddaeb4d8fa5ca07.s3tc.ctex"
path.etc2="res://.godot/imported/corner_0.png-057892c9bcbb54125ddaeb4d8fa5ca07.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "f5beb625a2df03deb55afc45e57800a6"
}
[deps]
source_file="res://assets/models/corner_0.png"
dest_files=["res://.godot/imported/corner_0.png-057892c9bcbb54125ddaeb4d8fa5ca07.s3tc.ctex", "res://.godot/imported/corner_0.png-057892c9bcbb54125ddaeb4d8fa5ca07.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/crouch.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dtgj67tfeuoaj"
path="res://.godot/imported/crouch.gltf-ace5d02cb4e9e58f95c55709db549ec7.scn"
[deps]
source_file="res://assets/models/crouch.gltf"
dest_files=["res://.godot/imported/crouch.gltf-ace5d02cb4e9e58f95c55709db549ec7.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
assets/models/crouch_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cg766o75gnvui"
path.s3tc="res://.godot/imported/crouch_0.png-2e783eb07e55b50be1eb5da8a5261871.s3tc.ctex"
path.etc2="res://.godot/imported/crouch_0.png-2e783eb07e55b50be1eb5da8a5261871.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "8ff71a591b302b50a1f969b62599d976"
}
[deps]
source_file="res://assets/models/crouch_0.png"
dest_files=["res://.godot/imported/crouch_0.png-2e783eb07e55b50be1eb5da8a5261871.s3tc.ctex", "res://.godot/imported/crouch_0.png-2e783eb07e55b50be1eb5da8a5261871.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/floor.gltf Normal file
View file

@ -0,0 +1,118 @@
{
"accessors": [
{
"bufferView": 1,
"componentType": 5126,
"type": "VEC3",
"count": 52,
"min": [-16, -16, 0],
"max": [16, 16, 4]
},
{
"bufferView": 1,
"componentType": 5126,
"type": "VEC3",
"byteOffset": 12,
"count": 52
},
{
"bufferView": 1,
"componentType": 5126,
"type": "VEC2",
"byteOffset": 24,
"count": 52
},
{
"bufferView": 2,
"componentType": 5125,
"type": "SCALAR",
"count": 120
}
],
"asset": {
"generator": "goxel",
"version": "2.0"
},
"bufferViews": [
{
"buffer": 0,
"byteLength": 205
},
{
"buffer": 1,
"byteLength": 2080,
"byteStride": 40
},
{
"buffer": 2,
"byteLength": 480
}
],
"buffers": [
{
"uri": "data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAlElEQVR4XmO8uSCNAQYatr2Bs5evWscwFAATwxAHox5gGAWjITAaAqMhMBoCoyEwGgKjITAaAqMhMBoCoyEwGgKjITAaAqMhMBoCoyEwGgKjITAaAqMhMBoCoyEwGgKjITAaAqMhMBoCoyEwGgKjITAaAqMhMBoCoyEwGgKjITAaAqMhMBoCoyEwGgKjITAaAjQPAQC0cgYIa74bEQAAAABJRU5ErkJggg==",
"byteLength": 205
},
{
"uri": "data:application/octet-stream;base64,AABwwQAAgEEAAAAAAAAAAP//fz8AAAAAAAAAPQAAAD0AAAAAAAAAAAAAgMEAAIBBAAAAAAAAAAD//38/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAIDBAACAQQAAgD8AAAAA//9/PwAAAAAAAAA9AAAAPQAAAAAAAAAAAACAwQAAAAAAAAAAAAAAAAAAAAD//3+/AAAAPQAAAD0AAAAAAAAAAAAAgMEAAIBBAAAAAAAAAAAAAAAA//9/vwAAAD0AAAA9AAAAAAAAAAAAAHDBAACAQQAAAAAAAAAAAAAAAP//f78AAAA9AAAAPQAAAAAAAAAAAACAwQAAgEEAAIA///9/vwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAAAAgMEAAIBBAAAAAP//f78AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAAAAAIDBAAAAAAAAAAD//3+/AAAAAAAAAAAAAAA9AAAAPQAAAAAAAAAAAACAwQAAgEEAAIBAAAAAAP//fz8AAAAAAAAAPQAAAD0AAAAAAAAAAAAAcMEAAIBBAACAQAAAAAD//38/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAIBBAABwwQAAgEAAAAAAAAAAAP//fz8AAAA9AAAAPQAAAAAAAAAAAABwwQAAgEEAAIBAAAAAAAAAAAD//38/AAAAPQAAAD0AAAAAAAAAAAAAgMEAAIBBAACAQAAAAAAAAAAA//9/PwAAAD0AAAA9AAAAAAAAAAAAAIDBAACAPwAAgEAAAAAAAAAAAP//fz8AAAA9AAAAPQAAAAAAAAAAAACAwQAAgD8AAIBA//9/vwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAAAAgMEAAIBBAACAQP//f78AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAAAAAIDBAACAwQAAAAAAAAAAAAAAAP//f78AAAA9AAAAPQAAAAAAAAAAAACAwQAAcMEAAAAAAAAAAAAAAAD//3+/AAAAPQAAAD0AAAAAAAAAAAAAcMEAAIDBAAAAAAAAAAAAAAAA//9/vwAAAD0AAAA9AAAAAAAAAAAAAIDBAACAwQAAAAD//3+/AAAAAAAAAAAAAAA9AAAAPQAAAAAAAAAAAACAwQAAgMEAAIA///9/vwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAAAAgMEAAHDBAAAAAP//f78AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAAAAAIDBAABwwQAAgED//3+/AAAAAAAAAAAAAAA9AAAAPQAAAAAAAAAAAACAwQAAgMEAAIA/AAAAAP//f78AAAAAAAAAPQAAAD0AAAAAAAAAAAAAgMEAAIDBAAAAAAAAAAD//3+/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAHDBAACAwQAAgEAAAAAA//9/vwAAAAAAAAA9AAAAPQAAAAAAAAAAAABwwQAAgMEAAAAAAAAAAP//f78AAAAAAAAAPQAAAD0AAAAAAAAAAAAAgMEAAIDBAACAQAAAAAD//3+/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAIDBAABwwQAAgEAAAAAAAAAAAP//fz8AAAA9AAAAPQAAAAAAAAAAAACAwQAAgMEAAIBAAAAAAAAAAAD//38/AAAAPQAAAD0AAAAAAAAAAAAAcMEAAIDBAACAQAAAAAAAAAAA//9/PwAAAD0AAAA9AAAAAAAAAAAAAIDBAACAwQAAgED//3+/AAAAAAAAAAAAAAA9AAAAPQAAAAAAAAAAAACAQQAAgMEAAAAAAAAAAP//f78AAAAAAAAAPQAAAD0AAAAAAAAAAAAAgEEAAIDBAACAPwAAAAD//3+/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAIBBAABwwQAAAAAAAAAAAAAAAP//f78AAAA9AAAAPQAAAAAAAAAAAACAQQAAgMEAAAAAAAAAAAAAAAD//3+/AAAAPQAAAD0AAAAAAAAAAAAAgEEAAIDBAACAP///fz8AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAAAAAIBBAACAwQAAAAD//38/AAAAAAAAAAAAAAA9AAAAPQAAAAAAAAAAAACAQQAAcMEAAAAA//9/PwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAAAAgEEAAIDBAACAQAAAAAD//3+/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAIBBAACAwQAAgEAAAAAAAAAAAP//fz8AAAA9AAAAPQAAAAAAAAAAAACAQQAAcMEAAIBA//9/PwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAAAAgEEAAIDBAACAQP//fz8AAAAAAAAAAAAAAD0AAAA9AAAAAAAAAAAAAIBBAACAQQAAgD8AAAAA//9/PwAAAAAAAAA9AAAAPQAAAAAAAAAAAACAQQAAgEEAAAAAAAAAAP//fz8AAAAAAAAAPQAAAD0AAAAAAAAAAAAAgEEAAIBBAAAAAAAAAAAAAAAA//9/vwAAAD0AAAA9AAAAAAAAAAAAAIBBAACAQQAAAAD//38/AAAAAAAAAAAAAAA9AAAAPQAAAAAAAAAAAACAQQAAgEEAAIA///9/PwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAAAAgEEAAIBBAACAQAAAAAD//38/AAAAAAAAAD0AAAA9AAAAAAAAAAAAAIBBAACAQQAAgEAAAAAAAAAAAP//fz8AAAA9AAAAPQAAAAAAAAAAAACAQQAAgEEAAIBA//9/PwAAAAAAAAAAAAAAPQAAAD0AAAAAAAAAAA==",
"byteLength": 2080
},
{
"uri": "data:application/octet-stream;base64,AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAACAAAACwAAAAwAAAANAAAADQAAAA4AAAALAAAACAAAAA8AAAAQAAAAEAAAAAYAAAAIAAAAAAAAAAIAAAAKAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAEgAAAAMAAAAFAAAAFwAAAAgAAAAWAAAAGAAAABkAAAAaAAAAGgAAABkAAAAbAAAAFwAAABYAAAAVAAAACAAAABcAAAAPAAAAGgAAABwAAAAYAAAAHQAAAB4AAAAfAAAAFQAAACAAAAAXAAAADgAAAB0AAAALAAAAGwAAACEAAAAiAAAAIwAAACQAAAATAAAAJQAAACYAAAAnAAAAEgAAAAUAAAATAAAAGwAAACIAAAAaAAAAKAAAABoAAAAiAAAACwAAAB8AAAApAAAAKgAAACsAAAAlAAAAHQAAAB8AAAALAAAAEwAAAAUAAAAjAAAAAAAAACwAAAAtAAAALgAAACMAAAAFAAAAJwAAAC8AAAAwAAAAJwAAADAAAAAlAAAACgAAACwAAAAAAAAAJQAAADAAAAAqAAAACgAAADEAAAAsAAAACwAAADIAAAAMAAAAMwAAACoAAAAwAAAA",
"byteLength": 480
}
],
"images": [
{
"bufferView": 0,
"mimeType": "image/png"
}
],
"meshes": [
{
"primitives": [
{
"indices": 3,
"material": 0,
"attributes": {
"POSITION": 0,
"NORMAL": 1,
"TEXCOORD_0": 2
}
}
]
}
],
"materials": [
{
"name": "Material.1",
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 0
},
"metallicFactor": 0.200000003,
"roughnessFactor": 0.5
}
}
],
"nodes": [
{
"children": [ 1 ],
"matrix": [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]
},
{
"mesh": 0,
"name": "Layer.1"
}
],
"scenes": [
{
"nodes": [ 0 ]
}
],
"textures": [
{
"source": 0
}
]
}

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bafgttdnmvqmo"
path="res://.godot/imported/floor.gltf-f41589b4f800248085aa506db510082f.scn"
[deps]
source_file="res://assets/models/floor.gltf"
dest_files=["res://.godot/imported/floor.gltf-f41589b4f800248085aa506db510082f.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
assets/models/floor_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://hdon3hwbdhsn"
path.s3tc="res://.godot/imported/floor_0.png-15391f34e3d0066d3432720e1b561416.s3tc.ctex"
path.etc2="res://.godot/imported/floor_0.png-15391f34e3d0066d3432720e1b561416.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7389aa8c9ea583ea593e2624616c9e69"
}
[deps]
source_file="res://assets/models/floor_0.png"
dest_files=["res://.godot/imported/floor_0.png-15391f34e3d0066d3432720e1b561416.s3tc.ctex", "res://.godot/imported/floor_0.png-15391f34e3d0066d3432720e1b561416.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/frame.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://k2l7xvnk66iu"
path="res://.godot/imported/frame.gltf-0e20b27650c04f11c1dfb68fc46aec12.scn"
[deps]
source_file="res://assets/models/frame.gltf"
dest_files=["res://.godot/imported/frame.gltf-0e20b27650c04f11c1dfb68fc46aec12.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
assets/models/frame_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4s16yrbjxxa7"
path.s3tc="res://.godot/imported/frame_0.png-8082aedae4ce26ad246014fa06d86f4d.s3tc.ctex"
path.etc2="res://.godot/imported/frame_0.png-8082aedae4ce26ad246014fa06d86f4d.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "8ff71a591b302b50a1f969b62599d976"
}
[deps]
source_file="res://assets/models/frame_0.png"
dest_files=["res://.godot/imported/frame_0.png-8082aedae4ce26ad246014fa06d86f4d.s3tc.ctex", "res://.godot/imported/frame_0.png-8082aedae4ce26ad246014fa06d86f4d.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c8lwr6h3lyvhv"
path="res://.godot/imported/inverted_corner.gltf-4b1ca22cbccec7314454316fb6b10365.scn"
[deps]
source_file="res://assets/models/inverted_corner.gltf"
dest_files=["res://.godot/imported/inverted_corner.gltf-4b1ca22cbccec7314454316fb6b10365.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dh7y3wg1bnlqh"
path.s3tc="res://.godot/imported/inverted_corner_0.png-8d9e7f1e592406a090b044c3c656050a.s3tc.ctex"
path.etc2="res://.godot/imported/inverted_corner_0.png-8d9e7f1e592406a090b044c3c656050a.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "d08589cb8386987e1b6d906aa2a0dc13"
}
[deps]
source_file="res://assets/models/inverted_corner_0.png"
dest_files=["res://.godot/imported/inverted_corner_0.png-8d9e7f1e592406a090b044c3c656050a.s3tc.ctex", "res://.godot/imported/inverted_corner_0.png-8d9e7f1e592406a090b044c3c656050a.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/jump.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cq3dw1i3651wb"
path="res://.godot/imported/jump.gltf-7b6f835bd8b0695f3d758d786ce34d46.scn"
[deps]
source_file="res://assets/models/jump.gltf"
dest_files=["res://.godot/imported/jump.gltf-7b6f835bd8b0695f3d758d786ce34d46.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
assets/models/jump_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c2e3li8x5ks3x"
path.s3tc="res://.godot/imported/jump_0.png-90d353e78a9dc356cb2af30b51e29589.s3tc.ctex"
path.etc2="res://.godot/imported/jump_0.png-90d353e78a9dc356cb2af30b51e29589.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "849227e505975627f18c78884f0b89d5"
}
[deps]
source_file="res://assets/models/jump_0.png"
dest_files=["res://.godot/imported/jump_0.png-90d353e78a9dc356cb2af30b51e29589.s3tc.ctex", "res://.godot/imported/jump_0.png-90d353e78a9dc356cb2af30b51e29589.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://1n6c08khkg2r"
path="res://.godot/imported/jump_corner.gltf-48aab81343564dd20cd29f0bff343ab2.scn"
[deps]
source_file="res://assets/models/jump_corner.gltf"
dest_files=["res://.godot/imported/jump_corner.gltf-48aab81343564dd20cd29f0bff343ab2.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bd5wx8fip2u0y"
path="res://.godot/imported/jump_corner2.gltf-1a7d50337cb83e920dddd62bf381cba2.scn"
[deps]
source_file="res://assets/models/jump_corner2.gltf"
dest_files=["res://.godot/imported/jump_corner2.gltf-1a7d50337cb83e920dddd62bf381cba2.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d8a3w6npa4h"
path.s3tc="res://.godot/imported/jump_corner2_0.png-522c426e004bae657d5a964bd6c0d360.s3tc.ctex"
path.etc2="res://.godot/imported/jump_corner2_0.png-522c426e004bae657d5a964bd6c0d360.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "849227e505975627f18c78884f0b89d5"
}
[deps]
source_file="res://assets/models/jump_corner2_0.png"
dest_files=["res://.godot/imported/jump_corner2_0.png-522c426e004bae657d5a964bd6c0d360.s3tc.ctex", "res://.godot/imported/jump_corner2_0.png-522c426e004bae657d5a964bd6c0d360.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvcsjbi4fql5d"
path.s3tc="res://.godot/imported/jump_corner_0.png-4b0d083c6e854000dfafb49c62dea93b.s3tc.ctex"
path.etc2="res://.godot/imported/jump_corner_0.png-4b0d083c6e854000dfafb49c62dea93b.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "1bfbc36721f81dcfb4afe3d6e00e9e6e"
}
[deps]
source_file="res://assets/models/jump_corner_0.png"
dest_files=["res://.godot/imported/jump_corner_0.png-4b0d083c6e854000dfafb49c62dea93b.s3tc.ctex", "res://.godot/imported/jump_corner_0.png-4b0d083c6e854000dfafb49c62dea93b.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

128
assets/models/stairs_1.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://do3f8ge4p18tt"
path="res://.godot/imported/stairs_1.gltf-b3faa75abaaa7744f04f516ad6700ffc.scn"
[deps]
source_file="res://assets/models/stairs_1.gltf"
dest_files=["res://.godot/imported/stairs_1.gltf-b3faa75abaaa7744f04f516ad6700ffc.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bi1opotnvqp73"
path.s3tc="res://.godot/imported/stairs_1_0.png-207f1ec30d182db217d1129af9f312ed.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_1_0.png-207f1ec30d182db217d1129af9f312ed.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7389aa8c9ea583ea593e2624616c9e69"
}
[deps]
source_file="res://assets/models/stairs_1_0.png"
dest_files=["res://.godot/imported/stairs_1_0.png-207f1ec30d182db217d1129af9f312ed.s3tc.ctex", "res://.godot/imported/stairs_1_0.png-207f1ec30d182db217d1129af9f312ed.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/stairs_2.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bcaub427bqf63"
path="res://.godot/imported/stairs_2.gltf-53572c3c4bb5f3c8f79adfd45fe4bc2c.scn"
[deps]
source_file="res://assets/models/stairs_2.gltf"
dest_files=["res://.godot/imported/stairs_2.gltf-53572c3c4bb5f3c8f79adfd45fe4bc2c.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://fmb4osfkfb3x"
path.s3tc="res://.godot/imported/stairs_2_0.png-223cff9cd2a6a771422554f5b52194e2.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_2_0.png-223cff9cd2a6a771422554f5b52194e2.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7418cb23ee8f763cdedeb0032cc6afeb"
}
[deps]
source_file="res://assets/models/stairs_2_0.png"
dest_files=["res://.godot/imported/stairs_2_0.png-223cff9cd2a6a771422554f5b52194e2.s3tc.ctex", "res://.godot/imported/stairs_2_0.png-223cff9cd2a6a771422554f5b52194e2.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/stairs_3.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bqfsyoi0wikmn"
path="res://.godot/imported/stairs_3.gltf-22172a41fb8ad833b8941bfa6111f36b.scn"
[deps]
source_file="res://assets/models/stairs_3.gltf"
dest_files=["res://.godot/imported/stairs_3.gltf-22172a41fb8ad833b8941bfa6111f36b.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgchy1183yc1"
path.s3tc="res://.godot/imported/stairs_3_0.png-163861373163b2f777e26f261b9a82eb.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_3_0.png-163861373163b2f777e26f261b9a82eb.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7418cb23ee8f763cdedeb0032cc6afeb"
}
[deps]
source_file="res://assets/models/stairs_3_0.png"
dest_files=["res://.godot/imported/stairs_3_0.png-163861373163b2f777e26f261b9a82eb.s3tc.ctex", "res://.godot/imported/stairs_3_0.png-163861373163b2f777e26f261b9a82eb.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/stairs_4.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bn04ptotmcfye"
path="res://.godot/imported/stairs_4.gltf-ab34f22899c6169c343831413f326e6b.scn"
[deps]
source_file="res://assets/models/stairs_4.gltf"
dest_files=["res://.godot/imported/stairs_4.gltf-ab34f22899c6169c343831413f326e6b.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cabntnj5aiht2"
path.s3tc="res://.godot/imported/stairs_4_0.png-c8c415d4c00d5eac2a226cd6a74f440d.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_4_0.png-c8c415d4c00d5eac2a226cd6a74f440d.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7418cb23ee8f763cdedeb0032cc6afeb"
}
[deps]
source_file="res://assets/models/stairs_4_0.png"
dest_files=["res://.godot/imported/stairs_4_0.png-c8c415d4c00d5eac2a226cd6a74f440d.s3tc.ctex", "res://.godot/imported/stairs_4_0.png-c8c415d4c00d5eac2a226cd6a74f440d.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/stairs_5.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://rc3tqrfnfnnw"
path="res://.godot/imported/stairs_5.gltf-152ac59889e35702f24b64bc9de60628.scn"
[deps]
source_file="res://assets/models/stairs_5.gltf"
dest_files=["res://.godot/imported/stairs_5.gltf-152ac59889e35702f24b64bc9de60628.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://gnndsj0d7sau"
path.s3tc="res://.godot/imported/stairs_5_0.png-e46fa7491e374a7efee5612f03223acf.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_5_0.png-e46fa7491e374a7efee5612f03223acf.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7418cb23ee8f763cdedeb0032cc6afeb"
}
[deps]
source_file="res://assets/models/stairs_5_0.png"
dest_files=["res://.godot/imported/stairs_5_0.png-e46fa7491e374a7efee5612f03223acf.s3tc.ctex", "res://.godot/imported/stairs_5_0.png-e46fa7491e374a7efee5612f03223acf.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/stairs_6.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cr4cm6luf5f5f"
path="res://.godot/imported/stairs_6.gltf-59e685ed83ebcebad32d89c3ed47a837.scn"
[deps]
source_file="res://assets/models/stairs_6.gltf"
dest_files=["res://.godot/imported/stairs_6.gltf-59e685ed83ebcebad32d89c3ed47a837.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cicrcipuln2gv"
path.s3tc="res://.godot/imported/stairs_6_0.png-96ea449eb54b4357f78ca164e32d61b9.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_6_0.png-96ea449eb54b4357f78ca164e32d61b9.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7418cb23ee8f763cdedeb0032cc6afeb"
}
[deps]
source_file="res://assets/models/stairs_6_0.png"
dest_files=["res://.godot/imported/stairs_6_0.png-96ea449eb54b4357f78ca164e32d61b9.s3tc.ctex", "res://.godot/imported/stairs_6_0.png-96ea449eb54b4357f78ca164e32d61b9.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/stairs_7.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://mq11862hmn33"
path="res://.godot/imported/stairs_7.gltf-a512293401a4d8fe9ae86955a71ea78f.scn"
[deps]
source_file="res://assets/models/stairs_7.gltf"
dest_files=["res://.godot/imported/stairs_7.gltf-a512293401a4d8fe9ae86955a71ea78f.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dttad1bw1rjdt"
path.s3tc="res://.godot/imported/stairs_7_0.png-966e6f6cd49ac77eda83fadc4c0a71bb.s3tc.ctex"
path.etc2="res://.godot/imported/stairs_7_0.png-966e6f6cd49ac77eda83fadc4c0a71bb.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "7418cb23ee8f763cdedeb0032cc6afeb"
}
[deps]
source_file="res://assets/models/stairs_7_0.png"
dest_files=["res://.godot/imported/stairs_7_0.png-966e6f6cd49ac77eda83fadc4c0a71bb.s3tc.ctex", "res://.godot/imported/stairs_7_0.png-966e6f6cd49ac77eda83fadc4c0a71bb.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

118
assets/models/wall.gltf Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://db6qhijqwh6wk"
path="res://.godot/imported/wall.gltf-5a937a3e90517c0241c6d52793662436.scn"
[deps]
source_file="res://assets/models/wall.gltf"
dest_files=["res://.godot/imported/wall.gltf-5a937a3e90517c0241c6d52793662436.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
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
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
assets/models/wall_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://03iqumnid78v"
path.s3tc="res://.godot/imported/wall_0.png-ed83d674e980ab8183b93637d039e3b9.s3tc.ctex"
path.etc2="res://.godot/imported/wall_0.png-ed83d674e980ab8183b93637d039e3b9.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "2b3b8eca830f0de85ca87da2d1a2589f"
}
[deps]
source_file="res://assets/models/wall_0.png"
dest_files=["res://.godot/imported/wall_0.png-ed83d674e980ab8183b93637d039e3b9.s3tc.ctex", "res://.godot/imported/wall_0.png-ed83d674e980ab8183b93637d039e3b9.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

BIN
assets/stairs_1.gox Normal file

Binary file not shown.

View file

@ -8,13 +8,14 @@ size = Vector3(50, 1, 50)
[sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_ttw18"] [sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_ttw18"]
[sub_resource type="Sky" id="Sky_xg1t7"] [sub_resource type="Sky" id="Sky_05rcq"]
sky_material = SubResource("PhysicalSkyMaterial_ttw18") sky_material = SubResource("PhysicalSkyMaterial_ttw18")
[sub_resource type="Environment" id="Environment_3mjgt"] [sub_resource type="Environment" id="Environment_3mjgt"]
background_mode = 2 background_mode = 2
sky = SubResource("Sky_xg1t7") sky = SubResource("Sky_05rcq")
ambient_light_color = Color(1, 1, 1, 1) ambient_light_color = Color(1, 1, 1, 1)
ambient_light_energy = 16.0
[node name="map" type="Node3D"] [node name="map" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0)

343
maps/mansion.tscn Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
maps/wall_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

39
maps/wall_0.png.import Normal file
View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crmf2akrsdg6j"
path.s3tc="res://.godot/imported/wall_0.png-b3942b8907f71ed4ca2d3519dc07766b.s3tc.ctex"
path.etc2="res://.godot/imported/wall_0.png-b3942b8907f71ed4ca2d3519dc07766b.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "2b3b8eca830f0de85ca87da2d1a2589f"
}
[deps]
source_file="res://maps/wall_0.png"
dest_files=["res://.godot/imported/wall_0.png-b3942b8907f71ed4ca2d3519dc07766b.s3tc.ctex", "res://.godot/imported/wall_0.png-b3942b8907f71ed4ca2d3519dc07766b.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View file

@ -44,7 +44,7 @@ placeholder_text = "Name"
custom_minimum_size = Vector2(256, 64) custom_minimum_size = Vector2(256, 64)
layout_mode = 2 layout_mode = 2
theme_override_font_sizes/font_size = 32 theme_override_font_sizes/font_size = 32
placeholder_text = "IP Address" placeholder_text = "Game Name"
[node name="join" type="Button" parent="player_customization"] [node name="join" type="Button" parent="player_customization"]
layout_mode = 2 layout_mode = 2

View file

@ -31,11 +31,14 @@ size_flags_vertical = 4
layout_mode = 2 layout_mode = 2
theme_override_font_sizes/font_size = 96 theme_override_font_sizes/font_size = 96
text = "FreeFTF" text = "FreeFTF"
horizontal_alignment = 1
[node name="create" type="Button" parent="main_content"] [node name="create" type="Button" parent="main_content"]
visible = false
layout_mode = 2 layout_mode = 2
size_flags_vertical = 0 size_flags_vertical = 0
theme_override_font_sizes/font_size = 32 theme_override_font_sizes/font_size = 32
disabled = true
text = "Create Lobby" text = "Create Lobby"
[node name="join" type="Button" parent="main_content"] [node name="join" type="Button" parent="main_content"]
@ -44,6 +47,18 @@ size_flags_vertical = 8
theme_override_font_sizes/font_size = 32 theme_override_font_sizes/font_size = 32
text = "Join Lobby" text = "Join Lobby"
[node name="settings" type="Button" parent="main_content"]
layout_mode = 2
size_flags_vertical = 8
theme_override_font_sizes/font_size = 32
text = "Settings"
[node name="matchmaking" type="Button" parent="main_content"]
layout_mode = 2
size_flags_vertical = 8
theme_override_font_sizes/font_size = 32
text = "Matchmaking Server (DEBUG)"
[node name="ver_string" type="VBoxContainer" parent="."] [node name="ver_string" type="VBoxContainer" parent="."]
layout_mode = 1 layout_mode = 1
anchors_preset = 3 anchors_preset = 3
@ -59,7 +74,11 @@ grow_vertical = 0
[node name="Label" type="Label" parent="ver_string"] [node name="Label" type="Label" parent="ver_string"]
layout_mode = 2 layout_mode = 2
theme_override_font_sizes/font_size = 32 theme_override_font_sizes/font_size = 32
text = "Milestone 3" text = "Milestone 5
Private Testing Release 1"
horizontal_alignment = 2
[connection signal="pressed" from="main_content/create" to="." method="_on_create_pressed"] [connection signal="pressed" from="main_content/create" to="." method="_on_create_pressed"]
[connection signal="pressed" from="main_content/join" to="." method="_on_join_pressed"] [connection signal="pressed" from="main_content/join" to="." method="_on_join_pressed"]
[connection signal="pressed" from="main_content/settings" to="." method="_on_settings_pressed"]
[connection signal="pressed" from="main_content/matchmaking" to="." method="_on_matchmaking_pressed"]

47
menus/settings.tscn Normal file
View file

@ -0,0 +1,47 @@
[gd_scene load_steps=3 format=3 uid="uid://buvl1aa0733mn"]
[ext_resource type="Script" path="res://scripts/settings.gd" id="1_kmx8a"]
[ext_resource type="Script" path="res://scripts/main_settings.gd" id="1_vdm7d"]
[node name="Settings" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_vdm7d")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="fps_counter" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="Label" type="Label" parent="VBoxContainer/fps_counter"]
layout_mode = 2
theme_override_font_sizes/font_size = 32
text = "FPS Counter"
[node name="OptionButton" type="OptionButton" parent="VBoxContainer/fps_counter"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_font_sizes/font_size = 32
alignment = 1
item_count = 2
selected = 1
popup/item_0/text = "Off"
popup/item_0/id = 0
popup/item_1/text = "On"
popup/item_1/id = 1
script = ExtResource("1_kmx8a")
[connection signal="item_selected" from="VBoxContainer/fps_counter/OptionButton" to="VBoxContainer/fps_counter/OptionButton" method="_on_item_selected"]

View file

@ -3,29 +3,28 @@
[ext_resource type="Script" path="res://scripts/freezer.gd" id="1_nmqkg"] [ext_resource type="Script" path="res://scripts/freezer.gd" id="1_nmqkg"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_pkxhd"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_pkxhd"]
height = 6.0 height = 2.5
radius = 2.0 radius = 2.0
[sub_resource type="BoxShape3D" id="BoxShape3D_uvwqt"] [sub_resource type="BoxShape3D" id="BoxShape3D_uvwqt"]
size = Vector3(5, 5, 5) size = Vector3(5, 3, 5)
[node name="freezer" type="StaticBody3D"] [node name="freezer" type="StaticBody3D"]
script = ExtResource("1_nmqkg") script = ExtResource("1_nmqkg")
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="."] [node name="CSGCylinder3D" type="CSGCylinder3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.125, 0)
radius = 2.0 radius = 2.0
height = 1.0 height = 0.25
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="."] [node name="CSGCylinder3D2" type="CSGCylinder3D" parent="."]
transparency = 0.25 transparency = 0.25
radius = 1.5 radius = 1.5
height = 4.0
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="."] [node name="CSGCylinder3D3" type="CSGCylinder3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.125, 0)
radius = 2.0 radius = 2.0
height = 1.0 height = 0.25
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CylinderShape3D_pkxhd") shape = SubResource("CylinderShape3D_pkxhd")

View file

@ -3,8 +3,12 @@
[ext_resource type="Script" path="res://scripts/movement.gd" id="1_uru11"] [ext_resource type="Script" path="res://scripts/movement.gd" id="1_uru11"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_2l8cp"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_2l8cp"]
radius = 0.375
height = 1.75
[sub_resource type="CapsuleMesh" id="CapsuleMesh_fhldf"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_fhldf"]
radius = 0.375
height = 1.75
[sub_resource type="BoxShape3D" id="BoxShape3D_e4age"] [sub_resource type="BoxShape3D" id="BoxShape3D_e4age"]
size = Vector3(0.5, 1, 0.75) size = Vector3(0.5, 1, 0.75)
@ -24,24 +28,24 @@ color = Color(0, 0, 0, 1)
[node name="collision" type="CollisionShape3D" parent="."] [node name="collision" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_2l8cp") shape = SubResource("CapsuleShape3D_2l8cp")
[node name="bean" type="MeshInstance3D" parent="."] [node name="bean" type="MeshInstance3D" parent="collision"]
mesh = SubResource("CapsuleMesh_fhldf") mesh = SubResource("CapsuleMesh_fhldf")
skeleton = NodePath("../..")
[node name="cam_y" type="Node3D" parent="."] [node name="cam_y" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="Camera3D" type="Camera3D" parent="cam_y"] [node name="Camera3D" type="Camera3D" parent="cam_y"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8)
[node name="detect_hit" type="Area3D" parent="."] [node name="detect_hit" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.25, -1.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.25, -1.25)
[node name="CollisionShape3D" type="CollisionShape3D" parent="detect_hit"] [node name="CollisionShape3D" type="CollisionShape3D" parent="detect_hit"]
shape = SubResource("BoxShape3D_e4age") shape = SubResource("BoxShape3D_e4age")
disabled = true disabled = true
[node name="hammer_bag" type="CSGBox3D" parent="."] [node name="hammer_bag" type="CSGBox3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.25, -0.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.25, -0.5)
visible = false visible = false
size = Vector3(0.25, 0.25, 1) size = Vector3(0.25, 0.25, 1)
@ -50,7 +54,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.75)
size = Vector3(0.5, 1, 0.75) size = Vector3(0.5, 1, 0.75)
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="hammer_bag"] [node name="CSGCylinder3D" type="CSGCylinder3D" parent="hammer_bag"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -0.25, 1.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -0.25, 1.375)
height = 1.0 height = 1.0
[node name="CSGSphere3D" type="CSGSphere3D" parent="hammer_bag/CSGCylinder3D"] [node name="CSGSphere3D" type="CSGSphere3D" parent="hammer_bag/CSGCylinder3D"]
@ -63,13 +67,39 @@ wait_time = 30.0
one_shot = true one_shot = true
[node name="show_fps" type="Timer" parent="."] [node name="show_fps" type="Timer" parent="."]
wait_time = 10.0
autostart = true autostart = true
[node name="jump_timeout" type="Timer" parent="."] [node name="jump_timeout" type="Timer" parent="."]
wait_time = 2.0 wait_time = 2.0
one_shot = true one_shot = true
[node name="nametag" type="Label3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
billboard = 1
text = "Test"
[node name="fps_counter" type="Label" parent="."]
visible = false
offset_right = 40.0
offset_bottom = 23.0
size_flags_horizontal = 0
size_flags_vertical = 0
theme_override_font_sizes/font_size = 64
text = "FPS: "
[node name="health" type="Label" parent="."]
visible = false
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_top = -45.0
offset_right = 182.0
grow_vertical = 0
size_flags_horizontal = 0
size_flags_vertical = 0
theme_override_font_sizes/font_size = 64
text = "HP: 100 "
[connection signal="body_entered" from="detect_hit" to="." method="_on_detect_hit_body_entered"] [connection signal="body_entered" from="detect_hit" to="." method="_on_detect_hit_body_entered"]
[connection signal="timeout" from="time_in_bag" to="." method="_on_time_in_bag_timeout"] [connection signal="timeout" from="time_in_bag" to="." method="_on_time_in_bag_timeout"]
[connection signal="timeout" from="show_fps" to="." method="_on_show_fps_timeout"] [connection signal="timeout" from="show_fps" to="." method="_on_show_fps_timeout"]

BIN
objects/stairs_1.gox Normal file

Binary file not shown.

View file

@ -18,6 +18,8 @@ config/features=PackedStringArray("4.2", "Forward Plus")
Game="*res://scripts/game.gd" Game="*res://scripts/game.gd"
Server="*res://scripts/server.gd" Server="*res://scripts/server.gd"
Save="*res://scripts/save.gd"
Load="*res://scripts/load.gd"
[input] [input]
@ -71,6 +73,11 @@ mouse_lock={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"echo":false,"script":null)
] ]
} }
crouch={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
[layer_names] [layer_names]
@ -81,4 +88,5 @@ mouse_lock={
[rendering] [rendering]
textures/vram_compression/import_etc2_astc=true textures/vram_compression/import_etc2_astc=true
environment/defaults/default_clear_color=Color(0.207803, 0.240581, 0.3157, 1)
occlusion_culling/use_occlusion_culling=true occlusion_culling/use_occlusion_culling=true

View file

@ -1,10 +1,11 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends StaticBody3D extends StaticBody3D
@ -32,36 +33,36 @@ func _on_computer_tick_timeout():
func _on_pc_1_area_body_entered(body): func _on_pc_1_area_body_entered(body):
if pc_occupied[0] == 0 and !body.beast: if pc_occupied[0] == 0 and body is CharacterBody3D and !body.beast:
pc_occupied[0] = 1 pc_occupied[0] = 1
pc_body[0] = body pc_body[0] = body
func _on_pc_2_area_body_entered(body): func _on_pc_2_area_body_entered(body):
if pc_occupied[1] == 0 and !body.beast: if pc_occupied[1] == 0 and body is CharacterBody3D and !body.beast:
pc_occupied[1] = 1 pc_occupied[1] = 1
pc_body[1] = body pc_body[1] = body
func _on_pc_3_area_body_entered(body): func _on_pc_3_area_body_entered(body):
if pc_occupied[2] == 0 and !body.beast: if pc_occupied[2] == 0 and body is CharacterBody3D and !body.beast:
pc_occupied[2] = 1 pc_occupied[2] = 1
pc_body[2] = body pc_body[2] = body
func _on_pc_1_area_body_exited(body): func _on_pc_1_area_body_exited(body):
if pc_occupied[0] == 1 and body == pc_body[0]: if pc_occupied[0] == 1 and body is CharacterBody3D and body == pc_body[0]:
pc_occupied[0] = 0 pc_occupied[0] = 0
pc_body[0] = 0 pc_body[0] = 0
func _on_pc_2_area_body_exited(body): func _on_pc_2_area_body_exited(body):
if pc_occupied[1] == 1 and body == pc_body[1]: if pc_occupied[1] == 1 and body is CharacterBody3D and body == pc_body[1]:
pc_occupied[1] = 0 pc_occupied[1] = 0
pc_body[1] = 0 pc_body[1] = 0
func _on_pc_3_area_body_exited(body): func _on_pc_3_area_body_exited(body):
if pc_occupied[2] == 1 and body == pc_body[2]: if pc_occupied[2] == 1 and body is CharacterBody3D and body == pc_body[2]:
pc_occupied[2] = 0 pc_occupied[2] = 0
pc_body[2] = 0 pc_body[2] = 0

View file

@ -1,13 +1,16 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Control extends Control
var elevated = false
func _ready(): func _ready():
if Server.is_server: if Server.is_server:
$player_customization/ip.hide() $player_customization/ip.hide()
@ -19,7 +22,11 @@ func _ready():
func _process(delta): func _process(delta):
if Server.is_server: if Server.is_server:
Server.sync_playerlist.rpc($player_list/list.text) Server.sync_playerlist.rpc($player_list/list.text, multiplayer.get_unique_id())
if Server.is_server and !elevated:
_ready()
Server.send_playerinfo($player_customization/name.text, multiplayer.get_unique_id())
elevated = true
func _on_start_pressed(): func _on_start_pressed():
Server.start_game.rpc(Server.players) Server.start_game.rpc(Server.players)
@ -37,7 +44,6 @@ func _on_join_pressed():
$player_customization/join.disabled = true $player_customization/join.disabled = true
$player_customization/name.editable = false $player_customization/name.editable = false
$player_customization/ip.editable = false $player_customization/ip.editable = false
while $player_list/list.text == "": await get_tree().create_timer(1).timeout
await get_tree().create_timer(0.001).timeout
Server.send_playerinfo.rpc($player_customization/name.text, multiplayer.get_unique_id()) Server.send_playerinfo.rpc($player_customization/name.text, multiplayer.get_unique_id())

View file

@ -1,10 +1,11 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends StaticBody3D extends StaticBody3D
@ -19,19 +20,18 @@ func _process(delta):
living = false living = false
func _on_area_3d_body_entered(body): func _on_area_3d_body_entered(body):
if body is StaticBody3D: if body is CharacterBody3D:
pass if body.beast and body.got_person and !occupied:
elif body.beast and body.got_person and !occupied: trapped_body = body.caught_body
trapped_body = body.caught_body occupied = true
occupied = true living = true
living = true body.lost_one()
body.lost_one() trapped_body.frozen()
trapped_body.frozen() elif !body.beast and occupied and living and body != trapped_body:
elif !body.beast and occupied and living and body != trapped_body: trapped_body.unfreeze()
trapped_body.unfreeze() trapped_body._on_time_in_bag_timeout()
trapped_body._on_time_in_bag_timeout() occupied = false
occupied = false trapped_body = null
trapped_body = null
func _on_timer_timeout(): func _on_timer_timeout():
if occupied and living: if occupied and living:

View file

@ -1,15 +1,29 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Node extends Node
var settings = {"save_version" = 2, "fps_counter" = 1}
var computers = 0 var computers = 0
var players = 0 var players = 0
var is_creating = false
var map_name = "mansion"
func _ready():
if FileAccess.file_exists("user://settings.json"):
var temp = Load.loadJSON("user://settings.json")
if !(temp is Dictionary) or settings["save_version"] != temp["save_version"]:
Save.saveJSON("user://settings.json", settings)
else:
settings = temp
else:
Save.saveJSON("user://settings.json", settings)
func _process(delta): func _process(delta):
pass pass
@ -18,4 +32,10 @@ func reset():
computers = 0 computers = 0
players = 0 players = 0
func save_setting(setting_name, value):
settings[setting_name] = value
Save.saveJSON("user://settings.json", settings)
func apply_settings():
pass

29
scripts/load.gd Normal file
View file

@ -0,0 +1,29 @@
## freeftf
## Copyright (C) 2024 Patrick_Pluto
##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Node
func loadJSON(savePath):
if not FileAccess.file_exists(savePath):
return 1
var fileAccess = FileAccess.open(savePath, FileAccess.READ)
var jsonString = fileAccess.get_line()
fileAccess.close()
var json = JSON.new()
var error = json.parse(jsonString)
if error:
return 1
return json.data

View file

@ -1,30 +1,35 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Control extends Control
func matchmaking():
get_tree().root.get_node("./main_menu").hide()
# Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
pass # Replace with function body. if !OS.is_debug_build():
$main_content/matchmaking.hide()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
func _on_create_pressed(): func _on_create_pressed():
Server.create_game()
Server.is_server = true
get_tree().change_scene_to_file("res://menus/create.tscn") get_tree().change_scene_to_file("res://menus/create.tscn")
func _on_join_pressed(): func _on_join_pressed():
get_tree().change_scene_to_file("res://menus/create.tscn") get_tree().change_scene_to_file("res://menus/create.tscn")
func _on_settings_pressed():
get_tree().change_scene_to_file("res://menus/settings.tscn")
func _on_matchmaking_pressed():
Server.create_game()
matchmaking()

15
scripts/main_settings.gd Normal file
View file

@ -0,0 +1,15 @@
## freeftf
## Copyright (C) 2024 Patrick_Pluto
##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Control
func _process(delta):
if Input.is_action_just_pressed("escape"):
get_tree().change_scene_to_file("res://menus/main_menu.tscn")

View file

@ -1,16 +1,17 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends CharacterBody3D extends CharacterBody3D
var jump_velocity = 6 var jump_velocity = 6
var speed = 10.0 var speed = 7
var zoom = 0 var zoom = 0
var player_no var player_no
var npc = false var npc = false
@ -30,10 +31,15 @@ var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _ready(): func _ready():
player_no = Game.players player_no = Game.players
$nametag.text = Server.players[Server.players_numbered[player_no]]
Game.players += 1 Game.players += 1
if Server.players_numbered[player_no] == multiplayer.get_unique_id(): if Server.players_numbered[player_no] == multiplayer.get_unique_id():
if Game.settings["fps_counter"] == 1:
$fps_counter.show()
$health.show()
enabled = true enabled = true
$cam_y/Camera3D.current = true $cam_y/Camera3D.current = true
$nametag.hide()
else: else:
npc = true npc = true
@ -43,14 +49,24 @@ func _physics_process(delta):
if not is_on_floor(): if not is_on_floor():
velocity.y -= gravity * delta velocity.y -= gravity * delta
if Input.is_action_just_pressed("jump") and is_on_floor() and $jump_timeout.is_stopped():
if Input.is_action_just_pressed("jump") and is_on_floor():
if beast: if beast:
speed -= 6 speed -= 5
$jump_timeout.start() $jump_timeout.start()
velocity.y = jump_velocity velocity.y = jump_velocity
if Input.is_action_just_pressed("crouch") and !beast:
if $collision.rotation.x == 0:
$collision.rotation.x = deg_to_rad(-90)
speed -= 3
$cam_y.position.y = 0
else :
$collision.rotation.x = 0
speed += 3
$cam_y.position.y = 0.5
position.y += 1
var input_dir = Input.get_vector("left", "right", "forwards", "backwards") var input_dir = Input.get_vector("left", "right", "forwards", "backwards")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction: if direction:
@ -63,17 +79,11 @@ func _physics_process(delta):
move_and_slide() move_and_slide()
if !npc: if !npc:
print(hp)
Server.sync_player.rpc(name, position, rotation) Server.sync_player.rpc(name, position, rotation)
if $cam_y/Camera3D.position.z == 0: if mouse_locked:
$cam_y.position.y = 1 Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
if mouse_locked:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
else:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
else: else:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
$cam_y.position.y = 0
if Input.is_action_just_pressed("escape"): if Input.is_action_just_pressed("escape"):
get_tree().change_scene_to_file("res://menus/main_menu.tscn") get_tree().change_scene_to_file("res://menus/main_menu.tscn")
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
@ -98,22 +108,11 @@ func _input(event):
$cam_y.rotation.x = -1.6 $cam_y.rotation.x = -1.6
rotate(Vector3.DOWN, camera_rotation.x) rotate(Vector3.DOWN, camera_rotation.x)
func _unhandled_input(event):
if !npc and !beast:
if event.is_action_pressed("zoom_in") && $cam_y/Camera3D.position.z > 0:
zoom = -1
$cam_y/Camera3D.position.z += zoom
elif event.is_action_pressed("zoom_out") && $cam_y/Camera3D.position.z <= 20:
zoom = 1
$cam_y/Camera3D.position.z += zoom
else:
zoom = 0
func beast_init(): func beast_init():
beast = true beast = true
speed += 1 speed += 2
position.y += 10 position.y += 10
$cam_y/Camera3D.position.z = 0
$detect_hit.monitoring = true $detect_hit.monitoring = true
$detect_hit.monitorable = true $detect_hit.monitorable = true
$detect_hit/CollisionShape3D.disabled = false $detect_hit/CollisionShape3D.disabled = false
@ -123,14 +122,14 @@ func _on_detect_hit_body_entered(body):
if enabled and body is CharacterBody3D and !got_person: if enabled and body is CharacterBody3D and !got_person:
Server.player_hit.rpc(body.name, name) Server.player_hit.rpc(body.name, name)
func captured(beast): func captured(beast2):
if !npc: if !npc:
$in_bag.visible = true $in_bag.visible = true
$time_in_bag.start() $time_in_bag.start()
visible = false visible = false
enabled = false enabled = false
caught = true caught = true
captured_by = beast captured_by = beast2
position_pre = position position_pre = position
position = Vector3(10000, 10000, 10000) position = Vector3(10000, 10000, 10000)
@ -163,8 +162,9 @@ func _on_time_in_bag_timeout():
func _on_show_fps_timeout(): func _on_show_fps_timeout():
print("FPS: "+str(Engine.get_frames_per_second())) $fps_counter.text = "FPS: "+str(Engine.get_frames_per_second())
$health.text = "HP: "+str(hp)
func _on_jump_timeout_timeout(): func _on_jump_timeout_timeout():
speed += 6 speed += 5

23
scripts/save.gd Normal file
View file

@ -0,0 +1,23 @@
## freeftf
## Copyright (C) 2024 Patrick_Pluto
##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Node
func saveJSON(savePath, saveData):
var jsonString = JSON.stringify(saveData)
var fileAccess = FileAccess.open(savePath, FileAccess.WRITE)
if not fileAccess:
print("An error happened while saving data: ", FileAccess.get_open_error())
return 1
fileAccess.store_line(jsonString)
fileAccess.close()

View file

@ -1,10 +1,11 @@
## Copyright (C) 2024 Patrick_Pluto ## freeftf
## Copyright (C) 2024 Patrick_Pluto
## ##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
## ##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. ## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Node extends Node
@ -18,6 +19,10 @@ var label
var map var map
var character = preload("res://objects/player.tscn") var character = preload("res://objects/player.tscn")
var is_server = false var is_server = false
var first_joined = true
var game_master = "debug"
var host_announced = false
var map_name = "mansion"
func reset(): func reset():
players = {} players = {}
@ -44,67 +49,94 @@ func create_game():
return error return error
multiplayer.multiplayer_peer = peer multiplayer.multiplayer_peer = peer
@rpc("authority", "call_remote", "reliable") func _process(delta):
func sync_playerlist(text): if multiplayer.is_server():
get_tree().root.get_node("create/player_list/list").text = text make_host.rpc(game_master)
@rpc("authority","call_remote","reliable")
func make_host(id):
first_joined = false
game_master = id
if str(multiplayer.get_unique_id()) == str(game_master):
is_server = true
else:
is_server = false
@rpc("any_peer", "call_remote", "reliable")
func sync_playerlist(text, host):
if !multiplayer.is_server() and (multiplayer.get_remote_sender_id() == game_master or multiplayer.get_remote_sender_id() == 0):
get_tree().root.get_node("create/player_list/list").text = text
@rpc("any_peer", "call_local", "reliable") @rpc("any_peer", "call_local", "reliable")
func send_playerinfo(name, id): func send_playerinfo(player_name, id):
if Server.is_server: if !multiplayer.is_server():
var done = 0 if is_server:
players[id] = name var done = 0
label = get_tree().root.get_node("create/player_list/list") players[id] = player_name
label.text = "" label = get_tree().root.get_node("create/player_list/list")
for w in players: label.text = ""
if done == 1: for w in players:
label.text = str(label.text +"\n" + players[w]) if done == 1:
else: label.text = str(label.text +"\n" + players[w])
label.text = players[w] else:
done = 1 label.text = players[w]
done = 1
else:
if first_joined:
first_joined = false
game_master = id
is_server = true
@rpc("authority", "call_local", "reliable") @rpc("any_peer", "call_local", "reliable")
func start_game(server_players): func start_game(server_players):
players = server_players if !multiplayer.is_server() and (multiplayer.get_remote_sender_id() == game_master or multiplayer.get_remote_sender_id() == 0):
players_numbered = players.keys() players = server_players
var success = get_tree().change_scene_to_file("res://maps/base_map.tscn") players_numbered = players.keys()
while !get_tree().root.has_node("./map/"): var success = get_tree().change_scene_to_file("res://maps/"+map_name+".tscn")
await get_tree().create_timer(0.001).timeout while !get_tree().root.has_node("./"+map_name+"/"):
map = get_tree().root.get_node("./map/") await get_tree().create_timer(0.001).timeout
var i = 0 map = get_tree().root.get_node("./"+map_name+"/")
for w in players: var i = 0
var player = character.instantiate() for w in players:
player.name = "player" + str(i) var player = character.instantiate()
i += 1 player.name = "player" + str(i)
player.position.z = -i*2.5 i += 1
map.add_child(player) player.position.z = -i*2.5
if Server.is_server: player.position.y = 1
var random = randi() % Server.players.size() map.add_child(player)
sync_beast.rpc(random) if Server.is_server:
var random = randi() % Server.players.size()
sync_beast.rpc(random)
Game.apply_settings()
@rpc("any_peer", "call_remote", "unreliable") @rpc("any_peer", "call_remote", "unreliable")
func sync_player(node_name, position, rotation): func sync_player(node_name, position, rotation):
var current_character = get_tree().root.get_node("./map/"+node_name) if !multiplayer.is_server():
current_character.position = position var current_character = get_tree().root.get_node("./"+map_name+"/"+node_name)
current_character.rotation = rotation current_character.position = position
current_character.rotation = rotation
@rpc("authority", "call_local", "reliable") @rpc("any_peer", "call_local", "reliable")
func sync_computers(node_name, current): func sync_computers(node_name, current):
var current_character = get_tree().root.get_node("./map/"+node_name) if !multiplayer.is_server() and (multiplayer.get_remote_sender_id() == game_master or multiplayer.get_remote_sender_id() == 0):
current_character.current = current var current_character = get_tree().root.get_node("./"+map_name+"/computers/"+node_name)
current_character.current = current
@rpc("authority", "call_local", "reliable") @rpc("any_peer", "call_local", "reliable")
func sync_beast(player): func sync_beast(player):
while !get_tree().root.has_node("./map/player"+str(player)): if !multiplayer.is_server() and (multiplayer.get_remote_sender_id() == game_master or multiplayer.get_remote_sender_id() == 0):
await get_tree().create_timer(0.001).timeout while !get_tree().root.has_node("./"+map_name+"/player"+str(player)):
var current_character = get_tree().root.get_node("./map/player"+str(player)) await get_tree().create_timer(0.001).timeout
current_character.beast_init() var current_character = get_tree().root.get_node("./"+map_name+"/player"+str(player))
current_character.beast_init()
@rpc("any_peer", "call_local", "reliable") @rpc("any_peer", "call_local", "reliable")
func player_hit(target, beast): func player_hit(target, beast):
target = get_tree().root.get_node("./map/"+target) if !multiplayer.is_server():
beast = get_tree().root.get_node("./map/"+beast) target = get_tree().root.get_node("./"+map_name+"/"+target)
if !target.is_frozen: beast = get_tree().root.get_node("./"+map_name+"/"+beast)
target.captured(beast) if !target.is_frozen:
beast.got_one(target) target.captured(beast)
beast.got_one(target)

16
scripts/settings.gd Normal file
View file

@ -0,0 +1,16 @@
## freeftf
## Copyright (C) 2024 Patrick_Pluto
##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends OptionButton
func _ready():
selected = Game.settings[get_parent().name]
func _on_item_selected(index):
Game.save_setting(get_parent().name, selected)

21
scripts/win.gd Normal file
View file

@ -0,0 +1,21 @@
## freeftf
## Copyright (C) 2024 Patrick_Pluto
##
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
extends Area3D
func _on_body_entered(body):
if body is CharacterBody3D and !body.beast and Game.computers == 0:
body.free()
$mapcam.active
func _process(delta):
if Game.computers == 0:
$CSGBox3D.show()
else:
$CSGBox3D.hide()