diff --git a/Assets/External/kenney_prototype-textures/License.txt b/Assets/External/kenney_prototype-textures/License.txt
new file mode 100644
index 0000000..bda3f93
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/License.txt
@@ -0,0 +1,23 @@
+
+
+ Prototype Textures 1.0
+
+ Created/distributed by Kenney (www.kenney.nl)
+ Creation date: 08-04-2020
+
+ ------------------------------
+
+ License: (Creative Commons Zero, CC0)
+ http://creativecommons.org/publicdomain/zero/1.0/
+
+ This content is free to use in personal, educational and commercial projects.
+ Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
+
+ ------------------------------
+
+ Donate: http://support.kenney.nl
+ Request: http://request.kenney.nl
+ Patreon: http://patreon.com/kenney/
+
+ Follow on Twitter for updates:
+ http://twitter.com/KenneyNL
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_01.svg b/Assets/External/kenney_prototype-textures/texture_01.svg
new file mode 100644
index 0000000..fc16bc7
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_01.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_01.svg.import b/Assets/External/kenney_prototype-textures/texture_01.svg.import
new file mode 100644
index 0000000..08d449b
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_01.svg.import
@@ -0,0 +1,44 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bopr4lxuspyh0"
+path.s3tc="res://.godot/imported/texture_01.svg-82f8acd72d5ac6a6b19e294058f5bd0f.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_01.svg"
+dest_files=["res://.godot/imported/texture_01.svg-82f8acd72d5ac6a6b19e294058f5bd0f.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_01.swf b/Assets/External/kenney_prototype-textures/texture_01.swf
new file mode 100644
index 0000000..4e60277
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_01.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_02.svg b/Assets/External/kenney_prototype-textures/texture_02.svg
new file mode 100644
index 0000000..6af7715
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_02.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_02.svg.import b/Assets/External/kenney_prototype-textures/texture_02.svg.import
new file mode 100644
index 0000000..218b890
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_02.svg.import
@@ -0,0 +1,44 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dk7mp72p1gflw"
+path.s3tc="res://.godot/imported/texture_02.svg-f2a2187af9daaac79681ea580f30b44c.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_02.svg"
+dest_files=["res://.godot/imported/texture_02.svg-f2a2187af9daaac79681ea580f30b44c.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_02.swf b/Assets/External/kenney_prototype-textures/texture_02.swf
new file mode 100644
index 0000000..070236f
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_02.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_03.svg b/Assets/External/kenney_prototype-textures/texture_03.svg
new file mode 100644
index 0000000..1a23062
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_03.svg
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_03.svg.import b/Assets/External/kenney_prototype-textures/texture_03.svg.import
new file mode 100644
index 0000000..b93a356
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_03.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3xbjquwhykth"
+path="res://.godot/imported/texture_03.svg-5fb870a9554efc5ac436065c2db7fc28.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_03.svg"
+dest_files=["res://.godot/imported/texture_03.svg-5fb870a9554efc5ac436065c2db7fc28.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_03.swf b/Assets/External/kenney_prototype-textures/texture_03.swf
new file mode 100644
index 0000000..6c00924
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_03.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_04.svg b/Assets/External/kenney_prototype-textures/texture_04.svg
new file mode 100644
index 0000000..b8891ad
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_04.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_04.svg.import b/Assets/External/kenney_prototype-textures/texture_04.svg.import
new file mode 100644
index 0000000..a738c26
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_04.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blpldt5wbxhhh"
+path="res://.godot/imported/texture_04.svg-feff0e50174c470cf858820b23281225.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_04.svg"
+dest_files=["res://.godot/imported/texture_04.svg-feff0e50174c470cf858820b23281225.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_04.swf b/Assets/External/kenney_prototype-textures/texture_04.swf
new file mode 100644
index 0000000..1c1efe2
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_04.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_05.svg b/Assets/External/kenney_prototype-textures/texture_05.svg
new file mode 100644
index 0000000..fa737e9
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_05.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_05.svg.import b/Assets/External/kenney_prototype-textures/texture_05.svg.import
new file mode 100644
index 0000000..59d0ac0
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_05.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkcn4kju6afrf"
+path="res://.godot/imported/texture_05.svg-9548d4c4f1a5d0685a74bda2190d148d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_05.svg"
+dest_files=["res://.godot/imported/texture_05.svg-9548d4c4f1a5d0685a74bda2190d148d.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_05.swf b/Assets/External/kenney_prototype-textures/texture_05.swf
new file mode 100644
index 0000000..19b7101
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_05.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_06.svg b/Assets/External/kenney_prototype-textures/texture_06.svg
new file mode 100644
index 0000000..2d7fa36
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_06.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_06.svg.import b/Assets/External/kenney_prototype-textures/texture_06.svg.import
new file mode 100644
index 0000000..d35e060
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_06.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://hmgnkqmwqfs4"
+path="res://.godot/imported/texture_06.svg-987cfc5574896e2e4d8f222c790e5b9f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_06.svg"
+dest_files=["res://.godot/imported/texture_06.svg-987cfc5574896e2e4d8f222c790e5b9f.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_06.swf b/Assets/External/kenney_prototype-textures/texture_06.swf
new file mode 100644
index 0000000..a44aae2
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_06.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_07.svg b/Assets/External/kenney_prototype-textures/texture_07.svg
new file mode 100644
index 0000000..2f76dcd
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_07.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_07.svg.import b/Assets/External/kenney_prototype-textures/texture_07.svg.import
new file mode 100644
index 0000000..dab4fa3
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_07.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnp6ra12itu7o"
+path="res://.godot/imported/texture_07.svg-125894f3d4ab2ab69e87caa204d0ed86.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_07.svg"
+dest_files=["res://.godot/imported/texture_07.svg-125894f3d4ab2ab69e87caa204d0ed86.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_07.swf b/Assets/External/kenney_prototype-textures/texture_07.swf
new file mode 100644
index 0000000..f106e21
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_07.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_08.svg b/Assets/External/kenney_prototype-textures/texture_08.svg
new file mode 100644
index 0000000..cb098b8
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_08.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_08.svg.import b/Assets/External/kenney_prototype-textures/texture_08.svg.import
new file mode 100644
index 0000000..58d4d2a
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_08.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://domgof2sjx7qt"
+path="res://.godot/imported/texture_08.svg-da494b7849979c6cd92e284fbb95bb9d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_08.svg"
+dest_files=["res://.godot/imported/texture_08.svg-da494b7849979c6cd92e284fbb95bb9d.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_08.swf b/Assets/External/kenney_prototype-textures/texture_08.swf
new file mode 100644
index 0000000..d4ccf19
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_08.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_09.svg b/Assets/External/kenney_prototype-textures/texture_09.svg
new file mode 100644
index 0000000..d21be51
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_09.svg
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_09.svg.import b/Assets/External/kenney_prototype-textures/texture_09.svg.import
new file mode 100644
index 0000000..85aa01b
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_09.svg.import
@@ -0,0 +1,44 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cqtfi6pafpjk8"
+path.s3tc="res://.godot/imported/texture_09.svg-64820833ebfe850b4ee61637e422d922.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_09.svg"
+dest_files=["res://.godot/imported/texture_09.svg-64820833ebfe850b4ee61637e422d922.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_09.swf b/Assets/External/kenney_prototype-textures/texture_09.swf
new file mode 100644
index 0000000..f8bb7ec
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_09.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_10.svg b/Assets/External/kenney_prototype-textures/texture_10.svg
new file mode 100644
index 0000000..5e998e8
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_10.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_10.svg.import b/Assets/External/kenney_prototype-textures/texture_10.svg.import
new file mode 100644
index 0000000..ed207e7
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_10.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dmtaveq2q3r1t"
+path="res://.godot/imported/texture_10.svg-1ff94ec81e89f67ee4e8d6bceb4e50eb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_10.svg"
+dest_files=["res://.godot/imported/texture_10.svg-1ff94ec81e89f67ee4e8d6bceb4e50eb.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_10.swf b/Assets/External/kenney_prototype-textures/texture_10.swf
new file mode 100644
index 0000000..9ffd88a
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_10.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_11.svg b/Assets/External/kenney_prototype-textures/texture_11.svg
new file mode 100644
index 0000000..fea61c5
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_11.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_11.svg.import b/Assets/External/kenney_prototype-textures/texture_11.svg.import
new file mode 100644
index 0000000..f834978
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_11.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxeiukkana1b6"
+path="res://.godot/imported/texture_11.svg-9901710de004ace53953773657830b39.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_11.svg"
+dest_files=["res://.godot/imported/texture_11.svg-9901710de004ace53953773657830b39.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_11.swf b/Assets/External/kenney_prototype-textures/texture_11.swf
new file mode 100644
index 0000000..b2c46ed
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_11.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_12.svg b/Assets/External/kenney_prototype-textures/texture_12.svg
new file mode 100644
index 0000000..c0bba91
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_12.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_12.svg.import b/Assets/External/kenney_prototype-textures/texture_12.svg.import
new file mode 100644
index 0000000..fe75da1
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_12.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://h7s3wkl867qd"
+path="res://.godot/imported/texture_12.svg-17063bd6c7a5a34ca93e640a1a266b82.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_12.svg"
+dest_files=["res://.godot/imported/texture_12.svg-17063bd6c7a5a34ca93e640a1a266b82.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_12.swf b/Assets/External/kenney_prototype-textures/texture_12.swf
new file mode 100644
index 0000000..a4f9d18
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_12.swf differ
diff --git a/Assets/External/kenney_prototype-textures/texture_13.svg b/Assets/External/kenney_prototype-textures/texture_13.svg
new file mode 100644
index 0000000..1d821bf
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_13.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/Assets/External/kenney_prototype-textures/texture_13.svg.import b/Assets/External/kenney_prototype-textures/texture_13.svg.import
new file mode 100644
index 0000000..1edc8b0
--- /dev/null
+++ b/Assets/External/kenney_prototype-textures/texture_13.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://qlfu7fwg5f2o"
+path="res://.godot/imported/texture_13.svg-4706e0b28991c6beec73dc57cf230b24.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/External/kenney_prototype-textures/texture_13.svg"
+dest_files=["res://.godot/imported/texture_13.svg-4706e0b28991c6beec73dc57cf230b24.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Assets/External/kenney_prototype-textures/texture_13.swf b/Assets/External/kenney_prototype-textures/texture_13.swf
new file mode 100644
index 0000000..69ddeb9
Binary files /dev/null and b/Assets/External/kenney_prototype-textures/texture_13.swf differ
diff --git a/Player/player_controller.gd b/Player/player_controller.gd
new file mode 100644
index 0000000..dff0746
--- /dev/null
+++ b/Player/player_controller.gd
@@ -0,0 +1,77 @@
+extends CharacterBody3D
+
+const JUMP_SPEED: float = 5
+const MOUSE_SENSITIVITY: float = 0.002
+const CROUCH_MOVE_SPEED: float = 3
+const BASE_MOVE_SPEED: float = 5
+const SPRINT_MOVE_SPEED: float = 8
+const BASE_HEIGHT: float = 2.0
+const CROUCH_HEIGHT: float = 1.0
+
+enum MovementMode {
+ Crouching,
+ Sprinting,
+ Walking,
+}
+
+var current_movement := MovementMode.Walking
+var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
+var move_speed: float = BASE_MOVE_SPEED
+
+@onready var body_collision_shape: CollisionShape3D = $BodyCollisionShape
+@onready var fps_camera: Camera3D = $FPSCamera
+@onready var head_collision_shape: CollisionShape3D \
+ = $HeadCollider/HeadCollisionShape
+@onready var head_collider: Area3D = $HeadCollider
+
+func _ready() -> void:
+ Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
+ head_collision_shape.set_deferred("disabled", true)
+
+func _process(delta: float) -> void:
+ if Input.is_action_just_pressed("pause"):
+ if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
+ Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
+ else:
+ Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
+
+func _physics_process(delta: float) -> void:
+ velocity.y += -gravity * delta
+
+ var input = Input.get_vector("strafe_left", "strafe_right",
+ "move_forward", "move_backward")
+
+ if Input.is_action_pressed("sprint") \
+ and current_movement != MovementMode.Crouching:
+ move_speed = SPRINT_MOVE_SPEED
+ current_movement = MovementMode.Sprinting
+ elif Input.is_action_pressed("crouch") \
+ and current_movement != MovementMode.Sprinting:
+ move_speed = CROUCH_MOVE_SPEED
+ current_movement = MovementMode.Crouching
+ else:
+ move_speed = BASE_MOVE_SPEED
+ current_movement = MovementMode.Walking
+
+ if current_movement == MovementMode.Crouching:
+ body_collision_shape.shape.height = CROUCH_HEIGHT
+ head_collision_shape.set_deferred("disabled", false)
+ elif not head_collider.has_overlapping_bodies():
+ body_collision_shape.shape.height = BASE_HEIGHT
+ head_collision_shape.set_deferred("disabled", true)
+
+ var movement_dir := transform.basis * Vector3(input.x, 0, input.y)
+ velocity.x = movement_dir.x * move_speed
+ velocity.z = movement_dir.z * move_speed
+
+ move_and_slide()
+ if is_on_floor() and Input.is_action_just_pressed("jump"):
+ velocity.y = JUMP_SPEED
+
+func _input(event: InputEvent) -> void:
+ if event is InputEventMouseMotion \
+ and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
+ rotate_y(-event.relative.x * MOUSE_SENSITIVITY)
+ fps_camera.rotate_x(-event.relative.y * MOUSE_SENSITIVITY)
+ fps_camera.rotation.x = clampf(fps_camera.rotation.x,
+ -deg_to_rad(70), deg_to_rad(70))
diff --git a/Player/player_controller.gd.uid b/Player/player_controller.gd.uid
new file mode 100644
index 0000000..831dafc
--- /dev/null
+++ b/Player/player_controller.gd.uid
@@ -0,0 +1 @@
+uid://bhplq3tsshgsb
diff --git a/Player/player_controller.tscn b/Player/player_controller.tscn
new file mode 100644
index 0000000..eb6faa9
--- /dev/null
+++ b/Player/player_controller.tscn
@@ -0,0 +1,24 @@
+[gd_scene format=3 uid="uid://diipi3w18rk4v"]
+
+[ext_resource type="Script" uid="uid://bhplq3tsshgsb" path="res://Player/player_controller.gd" id="1_biqn8"]
+
+[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_biqn8"]
+height = 1.0
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_biqn8"]
+
+[node name="PlayerController" type="CharacterBody3D" unique_id=1462541278]
+script = ExtResource("1_biqn8")
+
+[node name="BodyCollisionShape" type="CollisionShape3D" parent="." unique_id=1091416129]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
+shape = SubResource("CapsuleShape3D_biqn8")
+
+[node name="FPSCamera" type="Camera3D" parent="." unique_id=872643079]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
+
+[node name="HeadCollider" type="Area3D" parent="." unique_id=2069486354]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0033772, 0)
+
+[node name="HeadCollisionShape" type="CollisionShape3D" parent="HeadCollider" unique_id=64452340]
+shape = SubResource("BoxShape3D_biqn8")
diff --git a/README.md b/README.md
index 1bf1cdb..764a614 100644
--- a/README.md
+++ b/README.md
@@ -66,3 +66,24 @@ Bad:
```gdscript
const S: 300.0
```
+
+Keep single code line length up to 80 characters long. (Notice the first vertical line
+in the text editor.)
+
+This keeps code easier to read because it isn't stretching all the way across the screen.
+
+Good:
+
+```gdscript
+@onready var head_collision_shape: CollisionShape3D \
+ = $HeadCollider/HeadCollisionShape
+```
+
+Bad:
+
+```gdscript
+@onready var head_collision_shape: CollisionShape3D = $HeadCollider/HeadCollisionShape
+```
+
+Notice the `\` in the above "good" example. That tells Godot to continue the expression
+on the next line.
diff --git a/Testing/debug_scene.tscn b/Testing/debug_scene.tscn
new file mode 100644
index 0000000..d04013a
--- /dev/null
+++ b/Testing/debug_scene.tscn
@@ -0,0 +1,42 @@
+[gd_scene format=3 uid="uid://df5nweglm1ak2"]
+
+[ext_resource type="PackedScene" uid="uid://diipi3w18rk4v" path="res://Player/player_controller.tscn" id="1_2rmyx"]
+[ext_resource type="Texture2D" uid="uid://cqtfi6pafpjk8" path="res://Assets/External/kenney_prototype-textures/texture_09.svg" id="1_nrln2"]
+
+[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_2rmyx"]
+sky_horizon_color = Color(0.66224277, 0.6717428, 0.6867428, 1)
+ground_horizon_color = Color(0.66224277, 0.6717428, 0.6867428, 1)
+
+[sub_resource type="Sky" id="Sky_nrln2"]
+sky_material = SubResource("ProceduralSkyMaterial_2rmyx")
+
+[sub_resource type="Environment" id="Environment_10oj7"]
+background_mode = 2
+sky = SubResource("Sky_nrln2")
+tonemap_mode = 2
+glow_enabled = true
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_10oj7"]
+albedo_texture = ExtResource("1_nrln2")
+
+[node name="DebugScene" type="Node" unique_id=548551898]
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=82211647]
+environment = SubResource("Environment_10oj7")
+
+[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=605528475]
+transform = Transform3D(-0.8660254, -0.43301278, 0.25, 0, 0.49999997, 0.86602545, -0.50000006, 0.75, -0.43301266, 0, 0, 0)
+shadow_enabled = true
+
+[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=1927330093]
+transform = Transform3D(23.24995, 0, 0, 0, 0.12418556, 0, 0, 0, 12.13962, 0, 0, 2.206223)
+material_override = SubResource("StandardMaterial3D_10oj7")
+use_collision = true
+size = Vector3(1, 1, 2.2382813)
+
+[node name="PlayerController" parent="." unique_id=1462541278 instance=ExtResource("1_2rmyx")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.06209278, 0)
+
+[node name="CSGBox3D2" type="CSGBox3D" parent="." unique_id=1350209690]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7963257, -2.6601963)
+use_collision = true
diff --git a/project.godot b/project.godot
index 4ae7294..75a565d 100644
--- a/project.godot
+++ b/project.godot
@@ -21,6 +21,54 @@ config/version="0.1.0"
config/features=PackedStringArray("4.6", "Forward Plus")
config/icon="res://icon.svg"
+[display]
+
+window/size/viewport_width=1920
+window/size/viewport_height=1080
+
+[input]
+
+move_forward={
+"deadzone": 0.2,
+"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
+]
+}
+move_backward={
+"deadzone": 0.2,
+"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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
+]
+}
+strafe_left={
+"deadzone": 0.2,
+"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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
+]
+}
+strafe_right={
+"deadzone": 0.2,
+"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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
+]
+}
+jump={
+"deadzone": 0.2,
+"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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
+]
+}
+sprint={
+"deadzone": 0.2,
+"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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+crouch={
+"deadzone": 0.2,
+"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":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+pause={
+"deadzone": 0.2,
+"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":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+
[physics]
3d/physics_engine="Jolt Physics"